From 89e0763d3d511d2da878db43c89300c51850b0f3 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 28 Feb 2014 13:37:41 +0100 Subject: [PATCH 01/94] Update PHPDoc for I10N, OC_Config, OC\Template\Base and OCP\IL10N --- lib/private/l10n.php | 31 +++++++++++++++---------------- lib/private/legacy/config.php | 6 +++--- lib/private/template/base.php | 4 ++-- lib/public/il10n.php | 12 ++++++------ 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/lib/private/l10n.php b/lib/private/l10n.php index ad979a9287..b98ccc9d58 100644 --- a/lib/private/l10n.php +++ b/lib/private/l10n.php @@ -73,9 +73,9 @@ class OC_L10N implements \OCP\IL10N { /** * get an L10N instance - * @param $app string - * @param $lang string|null - * @return OC_L10N + * @param string $app + * @param string|null $lang + * @return \OC_L10N */ public static function get($app, $lang=null) { if (is_null($lang)) { @@ -87,9 +87,8 @@ class OC_L10N implements \OCP\IL10N { /** * @brief The constructor - * @param $app string app requesting l10n - * @param $lang string default: null Language - * @returns OC_L10N-Object + * @param string $app app requesting l10n + * @param string $lang default: null Language * * If language is not set, the constructor tries to find the right * language. @@ -237,7 +236,7 @@ class OC_L10N implements \OCP\IL10N { /** * @brief Translating - * @param $text String The text we need a translation for + * @param string $text The text we need a translation for * @param array $parameters default:array() Parameters for sprintf * @return \OC_L10N_String Translation or the same text * @@ -250,9 +249,9 @@ class OC_L10N implements \OCP\IL10N { /** * @brief Translating - * @param $text_singular String the string to translate for exactly one object - * @param $text_plural String the string to translate for n objects - * @param $count Integer Number of objects + * @param string $text_singular the string to translate for exactly one object + * @param string $text_plural the string to translate for n objects + * @param integer $count Number of objects * @param array $parameters default:array() Parameters for sprintf * @return \OC_L10N_String Translation or the same text * @@ -351,8 +350,8 @@ class OC_L10N implements \OCP\IL10N { /** * @brief Localization - * @param $type Type of localization - * @param $params parameters for this localization + * @param string $type Type of localization + * @param array $params parameters for this localization * @returns String or false * * Returns the localized data. @@ -406,7 +405,7 @@ class OC_L10N implements \OCP\IL10N { /** * @brief Choose a language - * @param $texts Associative Array with possible strings + * @param array $texts Associative Array with possible strings * @returns String * * $text is an array 'de' => 'hallo welt', 'en' => 'hello world', ... @@ -421,7 +420,7 @@ class OC_L10N implements \OCP\IL10N { /** * @brief find the best language - * @param $app Array or string, details below + * @param array|string $app Array or string, details below * @returns string language * * If $app is an array, ownCloud assumes that these are the available @@ -494,7 +493,7 @@ class OC_L10N implements \OCP\IL10N { /** * @brief find the l10n directory - * @param $app App that needs to be translated + * @param string $app App that needs to be translated * @returns directory */ protected static function findI18nDir($app) { @@ -514,7 +513,7 @@ class OC_L10N implements \OCP\IL10N { /** * @brief find all available languages for an app - * @param $app App that needs to be translated + * @param string $app App that needs to be translated * @returns array an array of available languages */ public static function findAvailableLanguages($app=null) { diff --git a/lib/private/legacy/config.php b/lib/private/legacy/config.php index ab67c8d302..6c2103179a 100644 --- a/lib/private/legacy/config.php +++ b/lib/private/legacy/config.php @@ -63,8 +63,8 @@ class OC_Config { /** * @brief Gets a value from config.php * @param string $key key - * @param string $default = null default value - * @return string the value or $default + * @param mixed $default = null default value + * @return mixed the value or $default * * This function gets the value from config.php. If it does not exist, * $default will be returned. @@ -76,7 +76,7 @@ class OC_Config { /** * @brief Sets a value * @param string $key key - * @param string $value value + * @param mixed $value value * * This function sets the value and writes the config.php. * diff --git a/lib/private/template/base.php b/lib/private/template/base.php index 232a29939c..8af2fce773 100644 --- a/lib/private/template/base.php +++ b/lib/private/template/base.php @@ -61,7 +61,7 @@ class Base { /** * @brief Assign variables * @param string $key key - * @param string $value value + * @param mixed $value value * @return bool * * This function assigns a variable. It can be accessed via $_[$key] in @@ -77,7 +77,7 @@ class Base { /** * @brief Appends a variable * @param string $key key - * @param string $value value + * @param mixed $value value * @return boolean|null * * This function assigns a variable in an array context. If the key already diff --git a/lib/public/il10n.php b/lib/public/il10n.php index 1c025e7824..bba52b4c4b 100644 --- a/lib/public/il10n.php +++ b/lib/public/il10n.php @@ -23,7 +23,7 @@ namespace OCP; interface IL10N { /** * Translating - * @param $text String The text we need a translation for + * @param string $text The text we need a translation for * @param array $parameters default:array() Parameters for sprintf * @return \OC_L10N_String Translation or the same text * @@ -34,9 +34,9 @@ interface IL10N { /** * Translating - * @param $text_singular String the string to translate for exactly one object - * @param $text_plural String the string to translate for n objects - * @param $count Integer Number of objects + * @param string $text_singular the string to translate for exactly one object + * @param string $text_plural the string to translate for n objects + * @param Integer $count Number of objects * @param array $parameters default:array() Parameters for sprintf * @return \OC_L10N_String Translation or the same text * @@ -51,8 +51,8 @@ interface IL10N { /** * Localization - * @param $type Type of localization - * @param $params parameters for this localization + * @param string $type Type of localization + * @param array $params parameters for this localization * @return String or false * * Returns the localized data. From 35a8dfb2fa7970098e6677f7b93b7d782d5df7f0 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 28 Feb 2014 13:53:41 +0100 Subject: [PATCH 02/94] More PHPDoc fixes, using scrutinizer patches as hints --- lib/private/appconfig.php | 4 ++-- lib/private/cache.php | 2 +- lib/private/contactsmanager.php | 4 ++-- lib/private/db.php | 5 ++--- lib/private/image.php | 2 +- lib/private/legacy/appconfig.php | 2 -- lib/private/request.php | 2 +- lib/private/share/mailnotifications.php | 3 +-- lib/public/contacts/imanager.php | 4 ++-- lib/public/iappconfig.php | 5 ++--- tests/lib/appframework/routing/RoutingTest.php | 6 +++--- tests/lib/dbschema.php | 3 +++ 12 files changed, 20 insertions(+), 22 deletions(-) diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index cdaaebb87e..cfb84309c6 100644 --- a/lib/private/appconfig.php +++ b/lib/private/appconfig.php @@ -218,8 +218,8 @@ class AppConfig implements \OCP\IAppConfig { /** * get multiply values, either the app or key can be used as wildcard by setting it to false * - * @param boolean $app - * @param string $key + * @param string|false $app + * @param string|false $key * @return array */ public function getValues($app, $key) { diff --git a/lib/private/cache.php b/lib/private/cache.php index a311f10a00..961270c334 100644 --- a/lib/private/cache.php +++ b/lib/private/cache.php @@ -97,7 +97,7 @@ class Cache { /** * creates cache key based on the files given - * @param $files + * @param string[] $files * @return string */ static public function generateCacheKeyFromFiles($files) { diff --git a/lib/private/contactsmanager.php b/lib/private/contactsmanager.php index fc6745b450..1cb3da7098 100644 --- a/lib/private/contactsmanager.php +++ b/lib/private/contactsmanager.php @@ -47,7 +47,7 @@ namespace OC { * This function can be used to delete the contact identified by the given id * * @param object $id the unique identifier to a contact - * @param $address_book_key + * @param string $address_book_key identifier of the address book in which the contact shall be deleted * @return bool successful or not */ public function delete($id, $address_book_key) { @@ -66,7 +66,7 @@ namespace OC { * Otherwise the contact will be updated by replacing the entire data set. * * @param array $properties this array if key-value-pairs defines a contact - * @param $address_book_key string to identify the address book in which the contact shall be created or updated + * @param string $address_book_key identifier of the address book in which the contact shall be created or updated * @return array representing the contact just created or updated */ public function createOrUpdate($properties, $address_book_key) { diff --git a/lib/private/db.php b/lib/private/db.php index cfdac766bf..322a13642a 100644 --- a/lib/private/db.php +++ b/lib/private/db.php @@ -313,9 +313,8 @@ class OC_DB { /** * @brief Insert a row if a matching row doesn't exists. - * @param string $table. The table to insert into in the form '*PREFIX*tableName' - * @param array $input. An array of fieldname/value pairs - * @param string $table + * @param string $table The table to insert into in the form '*PREFIX*tableName' + * @param array $input An array of fieldname/value pairs * @return boolean number of updated rows */ public static function insertIfNotExist($table, $input) { diff --git a/lib/private/image.php b/lib/private/image.php index 17caaa012f..e0397ec8a0 100644 --- a/lib/private/image.php +++ b/lib/private/image.php @@ -34,7 +34,7 @@ class OC_Image { /** * @brief Get mime type for an image file. - * @param string|null $filepath The path to a local image file. + * @param string|null $filePath The path to a local image file. * @returns string The mime type if the it could be determined, otherwise an empty string. */ static public function getMimeTypeForFile($filePath) { diff --git a/lib/private/legacy/appconfig.php b/lib/private/legacy/appconfig.php index b6c3542a67..cb5cef7e35 100644 --- a/lib/private/legacy/appconfig.php +++ b/lib/private/legacy/appconfig.php @@ -116,8 +116,6 @@ class OC_Appconfig { /** * get multiply values, either the app or key can be used as wildcard by setting it to false * - * @param app - * @param key * @param string|false $app * @param string|false $key * @return array diff --git a/lib/private/request.php b/lib/private/request.php index afd3fda4f2..59a9e395e8 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -26,7 +26,7 @@ class OC_Request { /** * @brief Checks whether a domain is considered as trusted. This is used to prevent Host Header Poisoning. - * @param string $host + * @param string $domain * @return bool */ public static function isTrustedDomain($domain) { diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php index 360376294c..afbf35aa39 100644 --- a/lib/private/share/mailnotifications.php +++ b/lib/private/share/mailnotifications.php @@ -30,7 +30,6 @@ class MailNotifications { /** * - * @param string $recipient user id * @param string $sender user id (if nothing is set we use the currently logged-in user) */ public function __construct($sender = null) { @@ -113,7 +112,7 @@ class MailNotifications { * @param string $filename the shared file * @param string $link the public link * @param int $expiration expiration date (timestamp) - * @return mixed $result true or error message + * @return string|boolean $result true or error message */ public function sendLinkShareMail($recipient, $filename, $link, $expiration) { $subject = (string)$this->l->t('%s shared »%s« with you', array($this->senderDisplayName, $filename)); diff --git a/lib/public/contacts/imanager.php b/lib/public/contacts/imanager.php index 5b9d64ecc4..005b71f298 100644 --- a/lib/public/contacts/imanager.php +++ b/lib/public/contacts/imanager.php @@ -96,7 +96,7 @@ namespace OCP\Contacts { * This function can be used to delete the contact identified by the given id * * @param object $id the unique identifier to a contact - * @param $address_book_key + * @param string $address_book_key identifier of the address book in which the contact shall be deleted * @return bool successful or not */ function delete($id, $address_book_key); @@ -106,7 +106,7 @@ namespace OCP\Contacts { * Otherwise the contact will be updated by replacing the entire data set. * * @param array $properties this array if key-value-pairs defines a contact - * @param $address_book_key string to identify the address book in which the contact shall be created or updated + * @param string $address_book_key identifier of the address book in which the contact shall be created or updated * @return array representing the contact just created or updated */ function createOrUpdate($properties, $address_book_key); diff --git a/lib/public/iappconfig.php b/lib/public/iappconfig.php index 1f31898bf2..2b014df2e4 100644 --- a/lib/public/iappconfig.php +++ b/lib/public/iappconfig.php @@ -55,9 +55,8 @@ interface IAppConfig { /** * get multiply values, either the app or key can be used as wildcard by setting it to false * - * @param app - * @param key - * @param string $key + * @param string|false $key + * @param string|false $app * @return array */ public function getValues($app, $key); diff --git a/tests/lib/appframework/routing/RoutingTest.php b/tests/lib/appframework/routing/RoutingTest.php index d0244cf251..56e625fd16 100644 --- a/tests/lib/appframework/routing/RoutingTest.php +++ b/tests/lib/appframework/routing/RoutingTest.php @@ -166,9 +166,9 @@ class RouteConfigTest extends \PHPUnit_Framework_TestCase } /** - * @param $verb - * @param $controllerName - * @param $actionName + * @param string $verb + * @param string $controllerName + * @param string $actionName * @return \PHPUnit_Framework_MockObject_MockObject */ private function mockRoute($verb, $controllerName, $actionName) diff --git a/tests/lib/dbschema.php b/tests/lib/dbschema.php index 11e9fcdf4f..cfa2d6fd9a 100644 --- a/tests/lib/dbschema.php +++ b/tests/lib/dbschema.php @@ -71,6 +71,9 @@ class Test_DBSchema extends PHPUnit_Framework_TestCase { $this->assertTableNotExist($this->table2); } + /** + * @param string $table + */ public function tableExist($table) { switch (OC_Config::getValue( 'dbtype', 'sqlite' )) { From e2286c659860b107e0d2791a231eb7b4ab3dca98 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 28 Feb 2014 14:37:20 +0100 Subject: [PATCH 03/94] Type is with a small letter --- lib/public/il10n.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/public/il10n.php b/lib/public/il10n.php index bba52b4c4b..276e5d6a55 100644 --- a/lib/public/il10n.php +++ b/lib/public/il10n.php @@ -36,7 +36,7 @@ interface IL10N { * Translating * @param string $text_singular the string to translate for exactly one object * @param string $text_plural the string to translate for n objects - * @param Integer $count Number of objects + * @param integer $count Number of objects * @param array $parameters default:array() Parameters for sprintf * @return \OC_L10N_String Translation or the same text * From 8951328a87c16e5ebfe4d3e5c392347db1e54f92 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 28 Feb 2014 21:03:43 +0100 Subject: [PATCH 04/94] More PHPDoc updates --- lib/private/l10n.php | 9 +++++---- lib/private/server.php | 2 +- lib/public/il10n.php | 2 +- lib/public/iservercontainer.php | 2 +- settings/admin/controller.php | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/private/l10n.php b/lib/private/l10n.php index b98ccc9d58..f0b4f9a70f 100644 --- a/lib/private/l10n.php +++ b/lib/private/l10n.php @@ -351,7 +351,7 @@ class OC_L10N implements \OCP\IL10N { /** * @brief Localization * @param string $type Type of localization - * @param array $params parameters for this localization + * @param array $data parameters for this localization * @returns String or false * * Returns the localized data. @@ -413,9 +413,9 @@ class OC_L10N implements \OCP\IL10N { * This function is useful to avoid loading thousands of files if only one * simple string is needed, for example in appinfo.php */ - public static function selectLanguage($text) { - $lang = self::findLanguage(array_keys($text)); - return $text[$lang]; + public static function selectLanguage($texts) { + $lang = self::findLanguage(array_keys($texts)); + return $texts[$lang]; } /** @@ -533,6 +533,7 @@ class OC_L10N implements \OCP\IL10N { /** * @param string $lang + * @param string $app */ public static function languageExists($app, $lang) { if ($lang == 'en') {//english is always available diff --git a/lib/private/server.php b/lib/private/server.php index 7696fc207f..3255713e12 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -290,7 +290,7 @@ class Server extends SimpleContainer implements IServerContainer { /** * get an L10N instance - * @param $app string appid + * @param string $app appid * @return \OC_L10N */ function getL10N($app) { diff --git a/lib/public/il10n.php b/lib/public/il10n.php index 276e5d6a55..1388274c21 100644 --- a/lib/public/il10n.php +++ b/lib/public/il10n.php @@ -52,7 +52,7 @@ interface IL10N { /** * Localization * @param string $type Type of localization - * @param array $params parameters for this localization + * @param array $data parameters for this localization * @return String or false * * Returns the localized data. diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php index 5fb51f9ecd..0eb358816d 100644 --- a/lib/public/iservercontainer.php +++ b/lib/public/iservercontainer.php @@ -122,7 +122,7 @@ interface IServerContainer { /** * get an L10N instance - * @param $app string appid + * @param string $app appid * @return \OCP\IL10N */ function getL10N($app); diff --git a/settings/admin/controller.php b/settings/admin/controller.php index a075d77436..1a73c8fad3 100644 --- a/settings/admin/controller.php +++ b/settings/admin/controller.php @@ -76,8 +76,8 @@ class Controller { /** * Get the field name to use it in error messages * - * @param $setting string - * @param $l \OC_L10N + * @param string $setting + * @param \OC_L10N $l * @return string */ public static function getFieldname($setting, $l) { From a135f1ebbbf444f7c210720c3061a4c2ff8f5b51 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 6 Dec 2013 15:46:00 +0100 Subject: [PATCH 05/94] add getAllGroups() that uses a paged search if available this circumvents server side search limits (active directory has a limit of 1000 by default) --- apps/user_ldap/group_ldap.php | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index cef9ca3c4c..f455a68a34 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -334,6 +334,40 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { return $ldap_groups; } + /** + * @brief get a list of all groups using a paged search + * @returns array with group names + * + * Returns a list with all groups + * Uses a paged search if available to override a + * server side search limit. + * (active directory has a limit of 1000 by default) + */ + public function getAllGroups($search = '', $max_groups= 100000, $chunksize=900) { + if(!$this->enabled) { + return array(); + } + if (! $this->access->connection->hasPagedResultSupport) { + return $this->getGroups($search); + } + $offset = 0; + $all_groups = array(); + while ($offset < $max_groups) { + $limit = min($chunksize, $max_groups - $offset); + $ldap_groups = $this->getGroups('', $limit, $offset); + $nread = count($ldap_groups); + \OCP\Util::writeLog('user_ldap', 'getAllGroups('.$search.'): read '.$nread.' at offset '.$offset.' (limit: '.$limit.')', \OCP\Util::DEBUG); + if ($nread) { + $all_groups = array_merge($all_groups, $ldap_groups); + $offset += $nread; + } + if ($nread < $limit) { + break; + } + } + return $all_groups; + } + public function groupMatchesFilter($group) { return (strripos($group, $this->groupSearch) !== false); } From bacda81bf7bc20654954c3befa9cc3a95206ba0b Mon Sep 17 00:00:00 2001 From: root Date: Fri, 6 Dec 2013 15:51:19 +0100 Subject: [PATCH 06/94] use getAllGroup() in the updateGroups background job needed in active directory deployments with > 1000 groups --- apps/user_ldap/lib/jobs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php index 9b108da633..2e5c440fd6 100644 --- a/apps/user_ldap/lib/jobs.php +++ b/apps/user_ldap/lib/jobs.php @@ -41,7 +41,7 @@ class Jobs extends \OC\BackgroundJob\TimedJob { \OCP\Util::writeLog('user_ldap', 'Run background job "updateGroups"', \OCP\Util::DEBUG); $knownGroups = array_keys(self::getKnownGroups()); - $actualGroups = self::getGroupBE()->getGroups(); + $actualGroups = self::getGroupBE()->getAllGroups(); if(empty($actualGroups) && empty($knownGroups)) { \OCP\Util::writeLog('user_ldap', From a5813acb64c7679615a570d10933158ec054cec5 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Mar 2014 17:23:04 +0100 Subject: [PATCH 07/94] add ldap_paging_size config option --- apps/user_ldap/lib/configuration.php | 5 ++++- apps/user_ldap/templates/settings.php | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php index 612a623e91..cc68a41d73 100644 --- a/apps/user_ldap/lib/configuration.php +++ b/apps/user_ldap/lib/configuration.php @@ -77,6 +77,7 @@ class Configuration { 'ldapExpertUUIDGroupAttr' => null, 'lastJpegPhotoLookup' => null, 'ldapNestedGroups' => false, + 'ldapPagingSize' => null, ); /** @@ -344,6 +345,7 @@ class Configuration { 'has_memberof_filter_support' => 0, 'last_jpegPhoto_lookup' => 0, 'ldap_nested_groups' => 0, + 'ldap_paging_size' => 0, ); } @@ -395,7 +397,8 @@ class Configuration { 'ldap_expert_uuid_group_attr' => 'ldapExpertUUIDGroupAttr', 'has_memberof_filter_support' => 'hasMemberOfFilterSupport', 'last_jpegPhoto_lookup' => 'lastJpegPhotoLookup', - 'ldap_nested_groups' => 'ldapNestedGroups', + 'ldap_nested_groups' => 'ldapNestedGroups', + 'ldap_paging_size' => 'ldapPagingSize', ); return $array; } diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 79c4ae224c..a61d00bc15 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -37,6 +37,7 @@

+

t('Special Attributes'));?>

From 039f7b054a0ffb8ceda5feeb2c522adb737e6a7c Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Mar 2014 18:02:27 +0100 Subject: [PATCH 08/94] merge functionality of getAllGroups into getGroups --- apps/user_ldap/group_ldap.php | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index f455a68a34..c1008a5ded 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -299,9 +299,9 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { * @brief get a list of all groups * @returns array with group names * - * Returns a list with all groups + * Returns a list with all groups (used by getGroups) */ - public function getGroups($search = '', $limit = -1, $offset = 0) { + private function getGroupsChunk($search = '', $limit = -1, $offset = 0) { if(!$this->enabled) { return array(); } @@ -339,29 +339,32 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { * @returns array with group names * * Returns a list with all groups - * Uses a paged search if available to override a - * server side search limit. - * (active directory has a limit of 1000 by default) + * Uses a paged search if available to override a + * server side search limit. + * (active directory has a limit of 1000 by default) */ - public function getAllGroups($search = '', $max_groups= 100000, $chunksize=900) { + public function getGroups($search = '', $limit = -1, $offset = 0) { + $max_groups = 100000; // limit max results (just for safety reasons) if(!$this->enabled) { return array(); } - if (! $this->access->connection->hasPagedResultSupport) { - return $this->getGroups($search); + $pagingsize = $this->access->connection->ldapPagingSize; + if ((! $this->access->connection->hasPagedResultSupport) + || empty($pagingsize)) { + return $this->getGroupsChunk($search, $limit, $offset); } - $offset = 0; + $chunk_offset = $offset; $all_groups = array(); - while ($offset < $max_groups) { - $limit = min($chunksize, $max_groups - $offset); - $ldap_groups = $this->getGroups('', $limit, $offset); + while ($chunk_offset < $max_groups) { + $chunk_limit = min($pagingsize, $max_groups - $chunk_offset); + $ldap_groups = $this->getGroupsChunk('', $chunk_limit, $chunk_offset); $nread = count($ldap_groups); - \OCP\Util::writeLog('user_ldap', 'getAllGroups('.$search.'): read '.$nread.' at offset '.$offset.' (limit: '.$limit.')', \OCP\Util::DEBUG); + \OCP\Util::writeLog('user_ldap', 'getAllGroups('.$search.'): read '.$nread.' at offset '.$chunk_offset.' (limit: '.$chunk_limit.')', \OCP\Util::DEBUG); if ($nread) { $all_groups = array_merge($all_groups, $ldap_groups); - $offset += $nread; + $chunk_offset += $nread; } - if ($nread < $limit) { + if ($nread < $chunk_limit) { break; } } From eb59e63c3b031b9a80a24865beb41a94eaa3b246 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Mar 2014 19:47:49 +0100 Subject: [PATCH 09/94] revert updateGroups job to use getGroups() instead of getAllGroups() --- apps/user_ldap/lib/jobs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php index 2e5c440fd6..9b108da633 100644 --- a/apps/user_ldap/lib/jobs.php +++ b/apps/user_ldap/lib/jobs.php @@ -41,7 +41,7 @@ class Jobs extends \OC\BackgroundJob\TimedJob { \OCP\Util::writeLog('user_ldap', 'Run background job "updateGroups"', \OCP\Util::DEBUG); $knownGroups = array_keys(self::getKnownGroups()); - $actualGroups = self::getGroupBE()->getAllGroups(); + $actualGroups = self::getGroupBE()->getGroups(); if(empty($actualGroups) && empty($knownGroups)) { \OCP\Util::writeLog('user_ldap', From eb1e36182470b5aa71b4ecd2253479e81c388898 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Mar 2014 21:07:27 +0100 Subject: [PATCH 10/94] getGroups() $limit was not handled correctly --- apps/user_ldap/group_ldap.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index c1008a5ded..861636a763 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -353,10 +353,15 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { || empty($pagingsize)) { return $this->getGroupsChunk($search, $limit, $offset); } + if ($limit > -1) { + $overall_limit = min($limit, 100000); + } else { + $overall_limit = 100000; + } $chunk_offset = $offset; $all_groups = array(); - while ($chunk_offset < $max_groups) { - $chunk_limit = min($pagingsize, $max_groups - $chunk_offset); + while ($chunk_offset < $overall_limit) { + $chunk_limit = min($pagingsize, $overall_limit - $chunk_offset); $ldap_groups = $this->getGroupsChunk('', $chunk_limit, $chunk_offset); $nread = count($ldap_groups); \OCP\Util::writeLog('user_ldap', 'getAllGroups('.$search.'): read '.$nread.' at offset '.$chunk_offset.' (limit: '.$chunk_limit.')', \OCP\Util::DEBUG); From 4645d0a93a1dbf5c89b78d226d069de0dff13167 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 Mar 2014 21:12:47 +0100 Subject: [PATCH 11/94] getGroups(): fix overall max search limit for paged searches --- apps/user_ldap/group_ldap.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index 861636a763..7efbc025ba 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -344,7 +344,6 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { * (active directory has a limit of 1000 by default) */ public function getGroups($search = '', $limit = -1, $offset = 0) { - $max_groups = 100000; // limit max results (just for safety reasons) if(!$this->enabled) { return array(); } @@ -353,10 +352,11 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { || empty($pagingsize)) { return $this->getGroupsChunk($search, $limit, $offset); } + $max_groups = 100000; // limit max results (just for safety reasons) if ($limit > -1) { - $overall_limit = min($limit, 100000); + $overall_limit = min($limit, $max_groups); } else { - $overall_limit = 100000; + $overall_limit = $max_groups; } $chunk_offset = $offset; $all_groups = array(); From 84550fbfb472f31914fc155c4e9228f4c8ba6052 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 5 Mar 2014 10:42:35 +0100 Subject: [PATCH 12/94] fix another oversight... sigh.. --- apps/user_ldap/group_ldap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index 7efbc025ba..064631d789 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -362,7 +362,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { $all_groups = array(); while ($chunk_offset < $overall_limit) { $chunk_limit = min($pagingsize, $overall_limit - $chunk_offset); - $ldap_groups = $this->getGroupsChunk('', $chunk_limit, $chunk_offset); + $ldap_groups = $this->getGroupsChunk($search, $chunk_limit, $chunk_offset); $nread = count($ldap_groups); \OCP\Util::writeLog('user_ldap', 'getAllGroups('.$search.'): read '.$nread.' at offset '.$chunk_offset.' (limit: '.$chunk_limit.')', \OCP\Util::DEBUG); if ($nread) { From 7f8b04d3e0392849de42a2b834bc1213d4c6149f Mon Sep 17 00:00:00 2001 From: Alexander Bergolth Date: Thu, 13 Mar 2014 09:33:07 +0100 Subject: [PATCH 13/94] adapt coding style --- apps/user_ldap/group_ldap.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index 064631d789..cb6d256e5c 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -352,28 +352,28 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { || empty($pagingsize)) { return $this->getGroupsChunk($search, $limit, $offset); } - $max_groups = 100000; // limit max results (just for safety reasons) + $maxGroups = 100000; // limit max results (just for safety reasons) if ($limit > -1) { - $overall_limit = min($limit, $max_groups); + $overallLimit = min($limit, $maxGroups); } else { - $overall_limit = $max_groups; + $overallLimit = $maxGroups; } - $chunk_offset = $offset; - $all_groups = array(); - while ($chunk_offset < $overall_limit) { - $chunk_limit = min($pagingsize, $overall_limit - $chunk_offset); - $ldap_groups = $this->getGroupsChunk($search, $chunk_limit, $chunk_offset); - $nread = count($ldap_groups); - \OCP\Util::writeLog('user_ldap', 'getAllGroups('.$search.'): read '.$nread.' at offset '.$chunk_offset.' (limit: '.$chunk_limit.')', \OCP\Util::DEBUG); + $chunkOffset = $offset; + $allGroups = array(); + while ($chunkOffset < $overallLimit) { + $chunkLimit = min($pagingsize, $overallLimit - $chunkOffset); + $ldapGroups = $this->getGroupsChunk($search, $chunkLimit, $chunkOffset); + $nread = count($ldapGroups); + \OCP\Util::writeLog('user_ldap', 'getGroups('.$search.'): read '.$nread.' at offset '.$chunkOffset.' (limit: '.$chunkLimit.')', \OCP\Util::DEBUG); if ($nread) { - $all_groups = array_merge($all_groups, $ldap_groups); - $chunk_offset += $nread; + $allGroups = array_merge($allGroups, $ldapGroups); + $chunkOffset += $nread; } - if ($nread < $chunk_limit) { + if ($nread < $chunkLimit) { break; } } - return $all_groups; + return $allGroups; } public function groupMatchesFilter($group) { From c76d952dacd049971d128ec4061603e127de766e Mon Sep 17 00:00:00 2001 From: Alexander Bergolth Date: Thu, 13 Mar 2014 10:57:19 +0100 Subject: [PATCH 14/94] make getGroupsChunk() protected instead of private --- apps/user_ldap/group_ldap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php index cb6d256e5c..4f2424d953 100644 --- a/apps/user_ldap/group_ldap.php +++ b/apps/user_ldap/group_ldap.php @@ -301,7 +301,7 @@ class GROUP_LDAP extends BackendUtility implements \OCP\GroupInterface { * * Returns a list with all groups (used by getGroups) */ - private function getGroupsChunk($search = '', $limit = -1, $offset = 0) { + protected function getGroupsChunk($search = '', $limit = -1, $offset = 0) { if(!$this->enabled) { return array(); } From d58fda7ff3e8f67e7699123eb4cca8248484c9ea Mon Sep 17 00:00:00 2001 From: Jamie McClelland Date: Sat, 23 Nov 2013 19:47:45 -0500 Subject: [PATCH 15/94] fix update to remove shares where file doesn't exist on postgres Without patch, breaks with: Failed to upgrade "files_sharing". Exception="SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "5,179"" See: https://github.com/owncloud/core/issues/5758 removing unnecessary cruft - no parameter is set, none to pass. https://github.com/owncloud/core/issues/5758 removing subquery, making more readable See: https://github.com/owncloud/core/pull/6016#issuecomment-29510979 parameters to sql calls should be arrays https://github.com/owncloud/core/pull/6016 boosting version to ensure fix gets executed properly escaping the sql select statement removing extraneous closing paren. --- apps/files_sharing/appinfo/update.php | 27 +++++++++++++-------------- apps/files_sharing/appinfo/version | 2 +- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php index 4b716e764f..446c94ea54 100644 --- a/apps/files_sharing/appinfo/update.php +++ b/apps/files_sharing/appinfo/update.php @@ -71,19 +71,18 @@ if (version_compare($installedVersion, '0.3', '<')) { } // clean up oc_share table from files which are no longer exists -if (version_compare($installedVersion, '0.3.5', '<')) { +if (version_compare($installedVersion, '0.3.5.6', '<')) { + // delete all shares where the original file no longer exists + $findShares = \OC_DB::prepare('SELECT `*PREFIX*share`.`id` ' . + 'FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` ' . + 'WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')'); + $sharesFound = $findShares->execute(array())->fetchAll(); - // get all shares where the original file no longer exists - $findShares = \OC_DB::prepare('SELECT `file_source` FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')'); - $sharesFound = $findShares->execute(array())->fetchAll(); - - // delete those shares from the oc_share table - if (is_array($sharesFound) && !empty($sharesFound)) { - $delArray = array(); - foreach ($sharesFound as $share) { - $delArray[] = $share['file_source']; - } - $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `file_source` IN (?)'); - $result = $removeShares->execute(array(implode(',', $delArray))); - } + // delete those shares from the oc_share table + if (is_array($sharesFound) && !empty($sharesFound)) { + $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` = ? '); + foreach ($sharesFound as $share) { + $result = $removeShares->execute(array($share['id'])); + } + } } diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version index 09e9157034..8f91d33378 100644 --- a/apps/files_sharing/appinfo/version +++ b/apps/files_sharing/appinfo/version @@ -1 +1 @@ -0.3.5 \ No newline at end of file +0.3.5.6 From ec54bc77093265b2b9f03eecc1507cb266683624 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Thu, 20 Feb 2014 15:21:53 +0100 Subject: [PATCH 16/94] Refactor update script to class and add unit test --- apps/files_sharing/appinfo/update.php | 14 +---- apps/files_sharing/lib/updater.php | 22 +++++++ apps/files_sharing/tests/updater.php | 85 +++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 13 deletions(-) create mode 100644 apps/files_sharing/tests/updater.php diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php index 446c94ea54..ab32108ea2 100644 --- a/apps/files_sharing/appinfo/update.php +++ b/apps/files_sharing/appinfo/update.php @@ -72,17 +72,5 @@ if (version_compare($installedVersion, '0.3', '<')) { // clean up oc_share table from files which are no longer exists if (version_compare($installedVersion, '0.3.5.6', '<')) { - // delete all shares where the original file no longer exists - $findShares = \OC_DB::prepare('SELECT `*PREFIX*share`.`id` ' . - 'FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` ' . - 'WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')'); - $sharesFound = $findShares->execute(array())->fetchAll(); - - // delete those shares from the oc_share table - if (is_array($sharesFound) && !empty($sharesFound)) { - $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` = ? '); - foreach ($sharesFound as $share) { - $result = $removeShares->execute(array($share['id'])); - } - } + \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate(); } diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php index 23ebc9fb81..950575ec26 100644 --- a/apps/files_sharing/lib/updater.php +++ b/apps/files_sharing/lib/updater.php @@ -135,4 +135,26 @@ class Shared_Updater { } } + /** + * clean up oc_share table from files which are no longer exists + * + * This fixes issues from updates from files_sharing < 0.3.5.6 (ownCloud 4.5) + * It will just be called during the update of the app + */ + static public function fixBrokenSharesOnAppUpdate() { + // delete all shares where the original file no longer exists + $findShares = \OC_DB::prepare('SELECT `*PREFIX*share`.`id` ' . + 'FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` ' . + 'WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')'); + $sharesFound = $findShares->execute(array())->fetchAll(); + + // delete those shares from the oc_share table + if (is_array($sharesFound) && !empty($sharesFound)) { + $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` = ? '); + foreach ($sharesFound as $share) { + $result = $removeShares->execute(array($share['id'])); + } + } + } + } diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php new file mode 100644 index 0000000000..f369062c22 --- /dev/null +++ b/apps/files_sharing/tests/updater.php @@ -0,0 +1,85 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ + +/** + * Class Test_Files_Sharing_Updater + */ +class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { + + function setUp() { + $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (file_source, id, item_type, uid_owner) VALUES (?, ?, \'file\', 1)'); + $shares = array(1, 2, 3); + foreach($shares as $share) { + // the number is used as item_source and id + $addShares->execute(array($share, $share)); + } + // add items except one - because this is the test case for the broken share table + $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (fileid, storage, path_hash, ' . + 'parent, mimetype, mimepart, size, mtime, storage_mtime) ' . + 'VALUES (?, 1, ?, 1, 1, 1, 1, 1, 1)'); + $items = array(1, 3); + foreach($items as $item) { + // the number is used as file_id and path_hash + $addItems->execute(array($item, $item)); + } + } + + function tearDown() { + $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share`'); + $removeShares->execute(); + $removeItems = \OC_DB::prepare('DELETE FROM `*PREFIX*filecache`'); + $removeItems->execute(); + } + + /** + * @medium + */ + function testRemoveBrokenShares() { + // check if there are just 3 shares (see setUp - precondition: empty table) + $countShares = \OC_DB::prepare('SELECT COUNT(id) FROM `*PREFIX*share`'); + $result = $countShares->execute()->fetchOne(); + $this->assertEquals(3, $result); + + // check if there are just 2 items (see setUp - precondition: empty table) + $countItems = \OC_DB::prepare('SELECT COUNT(fileid) FROM `*PREFIX*filecache`'); + $result = $countItems->execute()->fetchOne(); + $this->assertEquals(2, $result); + + // execute actual code which should be tested + \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate(); + + // check if there are just 2 shares (one gets killed by the code as there is no filecache entry for this) + $countShares = \OC_DB::prepare('SELECT COUNT(id) FROM `*PREFIX*share`'); + $result = $countShares->execute()->fetchOne(); + $this->assertEquals(2, $result); + + // check if the share of file '2' is removed as there is no entry for this in filecache table + $countShares = \OC_DB::prepare('SELECT COUNT(id) FROM `*PREFIX*share` WHERE file_source = 2'); + $result = $countShares->execute()->fetchOne(); + $this->assertEquals(0, $result); + + // check if there are just 2 items + $countItems = \OC_DB::prepare('SELECT COUNT(fileid) FROM `*PREFIX*filecache`'); + $result = $countItems->execute()->fetchOne(); + $this->assertEquals(2, $result); + } +} From 4bb303cbd6152cf4199136c7142a66259531d571 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Thu, 27 Feb 2014 13:27:24 +0100 Subject: [PATCH 17/94] Clean up database before setup the database for testing --- apps/files_sharing/tests/updater.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php index f369062c22..1b6e3c58d5 100644 --- a/apps/files_sharing/tests/updater.php +++ b/apps/files_sharing/tests/updater.php @@ -26,6 +26,10 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { function setUp() { + // some previous tests didn't clean up and therefore this has to be done here + // FIXME: DIRTY HACK - TODO: find tests, that don't clean up and fix it there + $this->tearDown(); + $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (file_source, id, item_type, uid_owner) VALUES (?, ?, \'file\', 1)'); $shares = array(1, 2, 3); foreach($shares as $share) { From 02be15ce2fd78a7fd2b3b14fed6ac470666c560d Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 28 Feb 2014 15:28:50 +0100 Subject: [PATCH 18/94] Added backticks for Oracle in sharing updater unit test --- apps/files_sharing/tests/updater.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php index 1b6e3c58d5..1148399bf9 100644 --- a/apps/files_sharing/tests/updater.php +++ b/apps/files_sharing/tests/updater.php @@ -30,15 +30,15 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { // FIXME: DIRTY HACK - TODO: find tests, that don't clean up and fix it there $this->tearDown(); - $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (file_source, id, item_type, uid_owner) VALUES (?, ?, \'file\', 1)'); + $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `id`, `item_type`, `uid_owner`) VALUES (?, ?, \'file\', 1)'); $shares = array(1, 2, 3); foreach($shares as $share) { // the number is used as item_source and id $addShares->execute(array($share, $share)); } // add items except one - because this is the test case for the broken share table - $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (fileid, storage, path_hash, ' . - 'parent, mimetype, mimepart, size, mtime, storage_mtime) ' . + $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (`fileid`, `storage`, `path_hash`, ' . + '`parent`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`) ' . 'VALUES (?, 1, ?, 1, 1, 1, 1, 1, 1)'); $items = array(1, 3); foreach($items as $item) { @@ -59,12 +59,12 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { */ function testRemoveBrokenShares() { // check if there are just 3 shares (see setUp - precondition: empty table) - $countShares = \OC_DB::prepare('SELECT COUNT(id) FROM `*PREFIX*share`'); + $countShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share`'); $result = $countShares->execute()->fetchOne(); $this->assertEquals(3, $result); // check if there are just 2 items (see setUp - precondition: empty table) - $countItems = \OC_DB::prepare('SELECT COUNT(fileid) FROM `*PREFIX*filecache`'); + $countItems = \OC_DB::prepare('SELECT COUNT(`fileid`) FROM `*PREFIX*filecache`'); $result = $countItems->execute()->fetchOne(); $this->assertEquals(2, $result); @@ -72,17 +72,17 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { \OC\Files\Cache\Shared_Updater::fixBrokenSharesOnAppUpdate(); // check if there are just 2 shares (one gets killed by the code as there is no filecache entry for this) - $countShares = \OC_DB::prepare('SELECT COUNT(id) FROM `*PREFIX*share`'); + $countShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share`'); $result = $countShares->execute()->fetchOne(); $this->assertEquals(2, $result); // check if the share of file '2' is removed as there is no entry for this in filecache table - $countShares = \OC_DB::prepare('SELECT COUNT(id) FROM `*PREFIX*share` WHERE file_source = 2'); + $countShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `file_source` = 2'); $result = $countShares->execute()->fetchOne(); $this->assertEquals(0, $result); // check if there are just 2 items - $countItems = \OC_DB::prepare('SELECT COUNT(fileid) FROM `*PREFIX*filecache`'); + $countItems = \OC_DB::prepare('SELECT COUNT(`fileid`) FROM `*PREFIX*filecache`'); $result = $countItems->execute()->fetchOne(); $this->assertEquals(2, $result); } From 206364cd1c25e577544159a9822c9395a516d38a Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 3 Mar 2014 19:59:25 +0100 Subject: [PATCH 19/94] remove invalid shares with one SQL statement --- apps/files_sharing/lib/updater.php | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php index 950575ec26..e3a7679292 100644 --- a/apps/files_sharing/lib/updater.php +++ b/apps/files_sharing/lib/updater.php @@ -143,18 +143,11 @@ class Shared_Updater { */ static public function fixBrokenSharesOnAppUpdate() { // delete all shares where the original file no longer exists - $findShares = \OC_DB::prepare('SELECT `*PREFIX*share`.`id` ' . - 'FROM `*PREFIX*share` LEFT JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid` ' . - 'WHERE `*PREFIX*filecache`.`fileid` IS NULL AND `*PREFIX*share`.`item_type` IN (\'file\', \'folder\')'); - $sharesFound = $findShares->execute(array())->fetchAll(); - - // delete those shares from the oc_share table - if (is_array($sharesFound) && !empty($sharesFound)) { - $removeShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `id` = ? '); - foreach ($sharesFound as $share) { - $result = $removeShares->execute(array($share['id'])); - } - } + $findAndRemoveShares = \OC_DB::prepare('DELETE FROM `*PREFIX*share` ' . + 'WHERE `file_source` NOT IN ( ' . + 'SELECT `fileid` FROM `*PREFIX*filecache` WHERE `item_type` IN (\'file\', \'folder\'))' + ); + $findAndRemoveShares->execute(array()); } } From 4033eba374cde80751c393e1f6ed5c647661f4c8 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 12 Mar 2014 16:57:39 +0100 Subject: [PATCH 20/94] Fixed chunking and insufficient storage check - fixed free space detection based on the already uploaded chunks - now deleting chunks as soon as it is read out before writing it into the part file, which reduces the space needed when assembling part files --- lib/private/connector/sabre/quotaplugin.php | 11 ++++++ lib/private/filechunking.php | 40 +++++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/lib/private/connector/sabre/quotaplugin.php b/lib/private/connector/sabre/quotaplugin.php index 8099794f67..227e684741 100644 --- a/lib/private/connector/sabre/quotaplugin.php +++ b/lib/private/connector/sabre/quotaplugin.php @@ -56,8 +56,19 @@ class OC_Connector_Sabre_QuotaPlugin extends Sabre_DAV_ServerPlugin { $uri='/'.$uri; } list($parentUri, $newName) = Sabre_DAV_URLUtil::splitPath($uri); + $req = $this->server->httpRequest; + if ($req->getHeader('OC-Chunked')) { + $info = OC_FileChunking::decodeName($newName); + $chunkHandler = new OC_FileChunking($info); + // substract the already uploaded size to see whether + // there is still enough space for the remaining chunks + $length -= $chunkHandler->getCurrentSize(); + } $freeSpace = $this->getFreeSpace($parentUri); if ($freeSpace !== \OC\Files\SPACE_UNKNOWN && $length > $freeSpace) { + if (isset($chunkHandler)) { + $chunkHandler->cleanup(); + } throw new Sabre_DAV_Exception_InsufficientStorage(); } } diff --git a/lib/private/filechunking.php b/lib/private/filechunking.php index be7f4e14a1..1da02fc81e 100644 --- a/lib/private/filechunking.php +++ b/lib/private/filechunking.php @@ -64,19 +64,45 @@ class OC_FileChunking { return $parts == $this->info['chunkcount']; } + /** + * Assembles the chunks into the file specified by the path. + * Chunks are deleted afterwards. + * + * @param string $f target path + * + * @return assembled file size + * + * @throws \OC\InsufficientStorageException when file could not be fully + * assembled due to lack of free space + */ public function assemble($f) { $cache = $this->getCache(); $prefix = $this->getPrefix(); $count = 0; - for($i=0; $i < $this->info['chunkcount']; $i++) { + for ($i = 0; $i < $this->info['chunkcount']; $i++) { $chunk = $cache->get($prefix.$i); + // remove after reading to directly save space + $cache->remove($prefix.$i); $count += fwrite($f, $chunk); } - $this->cleanup(); return $count; } + /** + * Returns the size of the chunks already present + * @return size in bytes + */ + public function getCurrentSize() { + $cache = $this->getCache(); + $prefix = $this->getPrefix(); + $total = 0; + for ($i = 0; $i < $this->info['chunkcount']; $i++) { + $total += $cache->size($prefix.$i); + } + return $total; + } + /** * Removes all chunks which belong to this transmission */ @@ -128,7 +154,15 @@ class OC_FileChunking { } /** - * @param string $path + * Assembles the chunks into the file specified by the path. + * Also triggers the relevant hooks and proxies. + * + * @param string $path target path + * + * @return assembled file size or false if file could not be created + * + * @throws \OC\InsufficientStorageException when file could not be fully + * assembled due to lack of free space */ public function file_assemble($path) { $absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path)); From 59d1ee565e66a0394e2cf1d59bde125cb2e70a48 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Thu, 20 Mar 2014 13:34:50 +0530 Subject: [PATCH 21/94] Makes #app-navigation a part of app management. --- settings/css/settings.css | 26 +++----------------- settings/js/apps.js | 26 ++++++++++---------- settings/templates/apps.php | 49 +++++++++++++++++++------------------ 3 files changed, 42 insertions(+), 59 deletions(-) diff --git a/settings/css/settings.css b/settings/css/settings.css index a47e7bf656..d7d8b0aede 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -62,13 +62,7 @@ tr:hover>td.password>span, tr:hover>td.displayName>span { margin:0; cursor:point tr:hover>td.remove>a, tr:hover>td.password>img,tr:hover>td.displayName>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; } tr:hover>td.remove>a { float:right; } -li.selected, -#leftcontent li.selected { - background-color: #ddd; -} - table.grid { width:100%; } -#rightcontent { padding-left: 10px; } div.quota { float: right; display: block; @@ -106,30 +100,18 @@ select.quota.active { background: #fff; } /* APPS */ .appinfo { margin: 1em 40px; } h3 { font-size: 1.4em; font-weight: bold; } -ul.applist a { - height: 2.2em; - padding: 0.2em 0.2em 0.2em 0.8em !important; -} -ul.applist .app-external { - width: 100%; -} -li { color:#888; } -li.active { color:#000; } -#leftcontent .appwarning { +#app-navigation .appwarning { background: #fcc; } -#leftcontent .appwarning:hover { +#app-navigation.appwarning:hover { background: #fbb; } small.externalapp { color:#FFF; background-color:#BBB; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 4px;} -small.externalapp.list { float: right; } small.recommendedapp { color:#FFF; background-color:#888; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 4px;} -small.recommendedapp.list { float: right; } +small.externalapp.list, small.recommendedapp.list { position: absolute; right: 10px; top: 12px; } span.version { margin-left:1em; margin-right:1em; color:#555; } -.app { position: relative; display: inline-block; padding: 0.2em 0 0.2em 0 !important; text-overflow: hidden; overflow: hidden; white-space: nowrap; /*transition: .2s max-width linear; -o-transition: .2s max-width linear; -moz-transition: .2s max-width linear; -webkit-transition: .2s max-width linear; -ms-transition: .2s max-width linear;*/ } -.app.externalapp { max-width: 12.5em; } -.app.recommendedapp { max-width: 12.5em; } + /* Transition to complete width! */ .app:hover, .app:active { max-width: inherit; } diff --git a/settings/js/apps.js b/settings/js/apps.js index 3dbc8a2f7c..f151a034a8 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -8,7 +8,7 @@ OC.Settings = OC.Settings || {}; OC.Settings.Apps = OC.Settings.Apps || { loadApp:function(app) { - var page = $('#rightcontent'); + var page = $('#app-content'); page.find('p.license').show(); page.find('span.name').text(app.name); page.find('small.externalapp').text(app.internallabel); @@ -82,16 +82,16 @@ OC.Settings.Apps = OC.Settings.Apps || { page.find('p.appslink').hide(); page.find('span.score').hide(); } - if (typeof($('#leftcontent li[data-id="'+app.id+'"]').data('errormsg')) !== "undefined") { + if (typeof($('#app-navigation li[data-id="'+app.id+'"]').data('errormsg')) !== "undefined") { page.find(".warning").show(); - page.find(".warning").text($('#leftcontent li[data-id="'+app.id+'"]').data('errormsg')); + page.find(".warning").text($('#app-navigation li[data-id="'+app.id+'"]').data('errormsg')); } else { page.find(".warning").hide(); } }, enableApp:function(appid, active, element) { console.log('enableApp:', appid, active, element); - var appitem=$('#leftcontent li[data-id="'+appid+'"]'); + var appitem=$('#app-navigation ul li[data-id="'+appid+'"]'); element.val(t('settings','Please wait....')); if(active) { $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) { @@ -160,7 +160,7 @@ OC.Settings.Apps = OC.Settings.Apps || { }, insertApp:function(appdata) { - var applist = $('#leftcontent li'); + var applist = $('#app-navigation ul li'); var app = $('
  • ' + '' @@ -242,30 +242,30 @@ OC.Settings.Apps = OC.Settings.Apps || { }; $(document).ready(function(){ - $('#leftcontent li').each(function(index,li){ + $('#app-navigation ul li').each(function(index,li){ var app = OC.get('appData_'+$(li).data('id')); $(li).data('app',app); $(this).find('span.hidden').remove(); }); - $('#leftcontent li').keydown(function(event) { + $('#app-navigation ul li').keydown(function(event) { if (event.which === 13 || event.which === 32) { $(event.target).click(); } return false; }); - $(document).on('click', '#leftcontent', function(event){ + $(document).on('click', '#app-navigation', function(event){ var tgt = $(event.target); if (tgt.is('li') || tgt.is('a')) { var item = tgt.is('li') ? $(tgt) : $(tgt).parent(); var app = item.data('app'); OC.Settings.Apps.loadApp(app); - $('#leftcontent .selected').removeClass('selected'); + $('#app-navigation .selected').removeClass('selected'); item.addClass('selected'); } return false; }); - $('#rightcontent input.enable').click(function(){ + $('#app-content input.enable').click(function(){ var element = $(this); var appid=$(this).data('appid'); var active=$(this).data('active'); @@ -273,7 +273,7 @@ $(document).ready(function(){ OC.Settings.Apps.enableApp(appid, active, element); } }); - $('#rightcontent input.update').click(function(){ + $('#app-content input.update').click(function(){ var element = $(this); var appid=$(this).data('appid'); if(appid) { @@ -282,11 +282,11 @@ $(document).ready(function(){ }); if(appid) { - var item = $('#leftcontent li[data-id="'+appid+'"]'); + var item = $('#app-navigation ul li[data-id="'+appid+'"]'); if(item) { item.trigger('click'); item.addClass('active'); - $('#leftcontent').animate({scrollTop: $(item).offset().top-70}, 'slow','swing'); + $('#app-navigation').animate({scrollTop: $(item).offset().top-70}, 'slow','swing'); } } }); diff --git a/settings/templates/apps.php b/settings/templates/apps.php index 4c77c62f51..b7f3b6121a 100644 --- a/settings/templates/apps.php +++ b/settings/templates/apps.php @@ -7,32 +7,33 @@ src="?appid="> +
    + +
    +

    t('Select an App'));?>

    From 3d8ce8104f134d8c53bedc62ef9e0fcbb9e03465 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Mon, 24 Mar 2014 17:59:53 +0530 Subject: [PATCH 22/94] Adds Style changes to app-navigation in core/css/apps.css --- core/css/apps.css | 13 +++++++++++-- settings/js/apps.js | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/css/apps.css b/core/css/apps.css index 0e6a080c9c..5bfc2d4a08 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -29,10 +29,19 @@ -moz-box-sizing: border-box; box-sizing: border-box; } #app-navigation .active, -#app-navigation .active a, -#app-navigation li:hover > a { +#app-navigation .active a { + background-color: #eee; +} +#app-navigation li:hover > a { background-color: #ddd; } +#app-navigation .active { + font-weight:700; +} +#app-navigation .selected, +#app-navigation .selected a { + background-color:#ddd; +} /* special rules for first-level entries and folders */ #app-navigation > ul > li { diff --git a/settings/js/apps.js b/settings/js/apps.js index f151a034a8..05db4c9a04 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -82,9 +82,9 @@ OC.Settings.Apps = OC.Settings.Apps || { page.find('p.appslink').hide(); page.find('span.score').hide(); } - if (typeof($('#app-navigation li[data-id="'+app.id+'"]').data('errormsg')) !== "undefined") { + if (typeof($('#app-navigation ul li[data-id="'+app.id+'"]').data('errormsg')) !== "undefined") { page.find(".warning").show(); - page.find(".warning").text($('#app-navigation li[data-id="'+app.id+'"]').data('errormsg')); + page.find(".warning").text($('#app-navigation ul li[data-id="'+app.id+'"]').data('errormsg')); } else { page.find(".warning").hide(); } From ec9260647a5ec0bb62065eba6bfa004b6d2c696c Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Tue, 25 Mar 2014 20:18:58 +0100 Subject: [PATCH 23/94] Fixed share updater unit test Now using \OC_DB::insertId() to retrieve the generated ids because Oracle ignores the passed values. --- apps/files_sharing/tests/updater.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php index 1148399bf9..993bf0169e 100644 --- a/apps/files_sharing/tests/updater.php +++ b/apps/files_sharing/tests/updater.php @@ -30,21 +30,23 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { // FIXME: DIRTY HACK - TODO: find tests, that don't clean up and fix it there $this->tearDown(); - $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `id`, `item_type`, `uid_owner`) VALUES (?, ?, \'file\', 1)'); - $shares = array(1, 2, 3); - foreach($shares as $share) { - // the number is used as item_source and id - $addShares->execute(array($share, $share)); - } // add items except one - because this is the test case for the broken share table $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (`fileid`, `storage`, `path_hash`, ' . '`parent`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`) ' . 'VALUES (?, 1, ?, 1, 1, 1, 1, 1, 1)'); $items = array(1, 3); + $fileIds = array(); foreach($items as $item) { // the number is used as file_id and path_hash $addItems->execute(array($item, $item)); + $fileIds[] = \OC_DB::insertId('*PREFIX*filecache'); } + + $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `id`, `item_type`, `uid_owner`) VALUES (?, ?, \'file\', 1)'); + // the number is used as item_source and id + $addShares->execute(array(1, $fileIds[0])); + $addShares->execute(array(2, 200)); // id of "deleted" file + $addShares->execute(array(3, $fileIds[1])); } function tearDown() { @@ -76,8 +78,8 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { $result = $countShares->execute()->fetchOne(); $this->assertEquals(2, $result); - // check if the share of file '2' is removed as there is no entry for this in filecache table - $countShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `file_source` = 2'); + // check if the share of file '200' is removed as there is no entry for this in filecache table + $countShares = \OC_DB::prepare('SELECT COUNT(`id`) FROM `*PREFIX*share` WHERE `file_source` = 200'); $result = $countShares->execute()->fetchOne(); $this->assertEquals(0, $result); From cbfd16089b8c4317dc831dbab52f36f2ad60c5c0 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 26 Mar 2014 09:29:28 +0100 Subject: [PATCH 24/94] Fixed share upgrade cleanup tests to use the correct ids --- apps/files_sharing/tests/updater.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/files_sharing/tests/updater.php b/apps/files_sharing/tests/updater.php index 993bf0169e..79ae4879b6 100644 --- a/apps/files_sharing/tests/updater.php +++ b/apps/files_sharing/tests/updater.php @@ -31,22 +31,22 @@ class Test_Files_Sharing_Updater extends \PHPUnit_Framework_TestCase { $this->tearDown(); // add items except one - because this is the test case for the broken share table - $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (`fileid`, `storage`, `path_hash`, ' . + $addItems = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache` (`storage`, `path_hash`, ' . '`parent`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`) ' . - 'VALUES (?, 1, ?, 1, 1, 1, 1, 1, 1)'); + 'VALUES (1, ?, 1, 1, 1, 1, 1, 1)'); $items = array(1, 3); $fileIds = array(); foreach($items as $item) { - // the number is used as file_id and path_hash - $addItems->execute(array($item, $item)); + // the number is used as path_hash + $addItems->execute(array($item)); $fileIds[] = \OC_DB::insertId('*PREFIX*filecache'); } - $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `id`, `item_type`, `uid_owner`) VALUES (?, ?, \'file\', 1)'); - // the number is used as item_source and id - $addShares->execute(array(1, $fileIds[0])); - $addShares->execute(array(2, 200)); // id of "deleted" file - $addShares->execute(array(3, $fileIds[1])); + $addShares = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`file_source`, `item_type`, `uid_owner`) VALUES (?, \'file\', 1)'); + // the number is used as item_source + $addShares->execute(array($fileIds[0])); + $addShares->execute(array(200)); // id of "deleted" file + $addShares->execute(array($fileIds[1])); } function tearDown() { From 83b4bcfdbf832f1ebc78c9cf6f6aba5490b65cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 26 Mar 2014 11:17:23 +0100 Subject: [PATCH 25/94] idn_to_ascii is only used if available --- lib/private/mail.php | 3 +++ tests/lib/mail.php | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/private/mail.php b/lib/private/mail.php index 79f5160963..f9083cc4e6 100644 --- a/lib/private/mail.php +++ b/lib/private/mail.php @@ -137,6 +137,9 @@ class OC_Mail { * @return string */ public static function buildAsciiEmail($emailAddress) { + if (!function_exists('idn_to_ascii')) { + return $emailAddress; + } list($name, $domain) = explode('@', $emailAddress, 2); $domain = idn_to_ascii($domain); diff --git a/tests/lib/mail.php b/tests/lib/mail.php index a88a9d797a..3cc9868e25 100644 --- a/tests/lib/mail.php +++ b/tests/lib/mail.php @@ -8,6 +8,15 @@ class Test_Mail extends PHPUnit_Framework_TestCase { + protected function setUp() + { + if (!function_exists('idn_to_ascii')) { + $this->markTestSkipped( + 'The intl extension is not available.' + ); + } + } + /** * @dataProvider buildAsciiEmailProvider * @param $expected From bf77c580c1e20400dbeb3bdbb7e3ddcd87880409 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 16:06:37 +0100 Subject: [PATCH 26/94] general styles for the content area --- core/css/apps.css | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/core/css/apps.css b/core/css/apps.css index 0e6a080c9c..8eb3bdd683 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -151,9 +151,6 @@ transition: padding-bottom 500ms ease 0s; padding-bottom: 40px; } -#app-navigation .personalblock > legend { /* TODO @Raydiation: still needed? */ - padding: 10px 0; margin: 0; -} #app-navigation .error { color: #dd1144; } @@ -242,3 +239,22 @@ button.loading { padding-right: 30px; } + +/* general styles for the content area */ +.section { + display: block; + padding: 30px; + color: #555; + border-top: 1px solid #ddd; +} +.section h2 { + font-size: 20px; + font-weight: normal; + margin-bottom: 7px; +} +/* slight position correction of checkboxes and radio buttons */ +.section input[type="checkbox"], +.section input[type="radio"] { + vertical-align: -2px; + margin-right: 4px; +} From 69be5bdbd8fb9fc04d0c05179fa183a4e4fd35a3 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 16:28:05 +0100 Subject: [PATCH 27/94] replace personalblock fieldset with section div in admin and personal settings --- settings/templates/admin.php | 61 ++++++----- settings/templates/personal.php | 175 +++++++++++++++----------------- 2 files changed, 112 insertions(+), 124 deletions(-) diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 9092d2833f..10f19b8891 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -43,35 +43,35 @@ if ($_['mail_smtpmode'] == 'qmail') { // is ssl working ? if (!$_['isConnectedViaHTTPS']) { ?> -
    +

    t('Security Warning'));?>

    t('You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead.', $theme->getTitle())); ?> -
    +
    -
    +

    t('Security Warning'));?>

    t('Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root.')); ?> -
    +
    -
    +

    t('Setup Warning'));?>

    @@ -79,42 +79,42 @@ if (!$_['isWebDavWorking']) { t('Please double check the installation guides.', link_to_docs('admin-install'))); ?> -
    +
  • -
    +

    t('Module \'fileinfo\' missing'));?>

    t('The PHP module \'fileinfo\' is missing. We strongly recommend to enable this module to get best results with mime-type detection.')); ?> -
    + -
    +

    t('Your PHP version is outdated'));?>

    t('Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly.')); ?> -
    + -
    +

    t('Locale not working'));?>

    @@ -132,21 +132,21 @@ if (!$_['isLocaleWorking']) { ?> -
    + -
    +

    t('Internet connection not working'));?>

    t('This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.')); ?> -
    + @@ -156,7 +156,7 @@ if (!$_['internetconnectionworking']) { } ;?> -
    +

    t('Cron'));?>

    @@ -199,9 +199,9 @@ if (!$_['internetconnectionworking']) {
    t("Use systems cron service to call the cron.php file every 15 minutes.")); ?>

    -
    + -
    +

    t('Sharing'));?>

    @@ -255,9 +255,9 @@ if (!$_['internetconnectionworking']) {
    -
    + -
    +

    t('Security'));?>

    @@ -288,9 +288,9 @@ if (!$_['internetconnectionworking']) {
    -
    + -
    +

    t('Email Server'));?>

    t('This is used for sending out notifications.')); ?>

    @@ -370,9 +370,9 @@ if (!$_['internetconnectionworking']) { t( 'Test email settings' )); ?> -
    + -
    +

    t('Log'));?>

    t('Log level'));?> - - - -
    -
    -
    +
    +

    t('Password'));?>

    +
    t('Your password was changed');?>
    +
    t('Unable to change your password');?>
    + + + + +
    +
    -
    -
    -

    t('Full Name');?>

    - - - -
    + +

    t('Full Name');?>

    + + +
    -
    -
    -

    t('Email'));?>

    - -
    - t('Fill in an email address to enable password recovery and receive notifications'));?> -
    + +

    t('Email'));?>

    + +
    + t('Fill in an email address to enable password recovery and receive notifications'));?>
    -
    -
    -

    t('Profile picture')); ?>

    -
    -

    - - -
    t('Upload new')); ?>
    - -
    t('Select new from Files')); ?>
    -
    t('Remove image')); ?>

    - t('Either png or jpg. Ideally square but you will be able to crop it.')); ?> - - t('Your avatar is provided by your original account.')); ?> - -
    - -
    + +

    t('Profile picture')); ?>

    +
    +

    + + +
    t('Upload new')); ?>
    + +
    t('Select new from Files')); ?>
    +
    t('Remove image')); ?>

    + t('Either png or jpg. Ideally square but you will be able to crop it.')); ?> + + t('Your avatar is provided by your original account.')); ?> + +
    +
    -
    -
    -

    t('Language'));?>

    - + + + - - - - - - - - - - - t('Help translate'));?> - - -
    + + + + + + + + + t('Help translate'));?> + +
    -
    +

    t('WebDAV'));?>


    t('Use this address to access your Files via WebDAV', array(link_to_docs('user-webdav'))));?> -
    + -
    +

    t( 'Encryption' ) ); ?>

    @@ -174,18 +164,17 @@ if($_['passwordChangeSupported']) {


    -
    + -
    +

    t('Version'));?>

    getName()); ?>
    t('Developed by the ownCloud community, the source code is licensed under the AGPL.')); ?> -
    - + + + From 6de572c6e6387ae2b60c97b655083a0412bfa643 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 16:35:34 +0100 Subject: [PATCH 28/94] replace personalblock fieldset with section class in files apps --- apps/files/templates/admin.php | 42 ++- .../templates/settings-admin.php | 113 ++++---- .../templates/settings-personal.php | 119 ++++---- apps/files_external/templates/settings.php | 262 +++++++++--------- 4 files changed, 263 insertions(+), 273 deletions(-) diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index a5afd55fbc..5f7d3261d6 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -1,28 +1,26 @@ -
    -
    -

    t('File handling')); ?>

    - - - '/> - - (t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>) - -
    + +

    t('File handling')); ?>

    + + + '/> + + (t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>) - checked="checked" /> -
    +
    + + checked="checked" /> +
    - ' - title="t( '0 is unlimited' )); ?>" - disabled="disabled" />
    - t( 'Maximum input size for ZIP files' )); ?>
    + ' + title="t( '0 is unlimited' )); ?>" + disabled="disabled" />
    + t( 'Maximum input size for ZIP files' )); ?>
    - - -
    + +
    diff --git a/apps/files_encryption/templates/settings-admin.php b/apps/files_encryption/templates/settings-admin.php index 231a68b6a5..cf676c445c 100644 --- a/apps/files_encryption/templates/settings-admin.php +++ b/apps/files_encryption/templates/settings-admin.php @@ -1,63 +1,60 @@ -
    -
    + +

    t('Encryption')); ?>

    -

    t('Encryption')); ?>

    +

    + t("Enable recovery key (allow to recover users files in case of password loss):")); ?> +
    +
    + + +
    + + +
    + /> + t("Enabled")); ?> +
    -

    - t("Enable recovery key (allow to recover users files in case of password loss):")); ?> -
    -
    - - -
    - - -
    - /> - t("Enabled")); ?> -
    + /> + t("Disabled")); ?> +

    +

    - /> - t("Disabled")); ?> -

    +

    > + t("Change recovery key password:")); ?>

    - -

    > - t("Change recovery key password:")); ?> -

    - t("Old Recovery key password")); ?> -
    -
    - t("New Recovery key password")); ?> -
    - t("Repeat New Recovery key password")); ?> -
    - - -

    -
    + t("Old Recovery key password")); ?> +
    +
    + t("New Recovery key password")); ?> +
    + t("Repeat New Recovery key password")); ?> +
    + + +

    diff --git a/apps/files_encryption/templates/settings-personal.php b/apps/files_encryption/templates/settings-personal.php index 1b4239d82c..8139ece195 100644 --- a/apps/files_encryption/templates/settings-personal.php +++ b/apps/files_encryption/templates/settings-personal.php @@ -1,66 +1,63 @@ -
    -
    -

    t( 'Encryption' ) ); ?>

    + +

    t( 'Encryption' ) ); ?>

    - -

    - - -
    - t( "Set your old private key password to your current log-in password." ) ); ?> - t( " If you don't remember your old password you can ask your administrator to recover your files." ) ); - endif; ?> - -
    - - -
    - - -
    - - -

    - - - + +

    + +
    -

    - -
    - t( "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" ) ); ?> -
    - /> - t( "Enabled" ) ); ?> -
    + t( "Set your old private key password to your current log-in password." ) ); ?> + t( " If you don't remember your old password you can ask your administrator to recover your files." ) ); + endif; ?> + +
    + + +
    + + +
    + + +

    + - /> - t( "Disabled" ) ); ?> -
    t( 'File recovery settings updated' ) ); ?>
    -
    t( 'Could not update file recovery' ) ); ?>
    -

    - + +
    +

    + +
    + t( "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" ) ); ?> +
    + /> + t( "Enabled" ) ); ?> +
    -

    + /> + t( "Disabled" ) ); ?> +
    t( 'File recovery settings updated' ) ); ?>
    +
    t( 'Could not update file recovery' ) ); ?>
    +

    + diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 5e84fa8a25..e7be16bede 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -1,141 +1,139 @@ -
    -
    +

    t('External Storage')); ?>

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

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

    - -
    +

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

    +
    From 25326b89dad234ecbb91b778e6d1adf3600f09c6 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 16:41:16 +0100 Subject: [PATCH 29/94] replace personalblock fieldset with section class in core user_ apps --- apps/user_ldap/templates/settings.php | 2 +- apps/user_webdavauth/templates/settings.php | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index 79c4ae224c..ee4a7df3cb 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -1,5 +1,5 @@
    -
    +
      $title) { ?>
    • diff --git a/apps/user_webdavauth/templates/settings.php b/apps/user_webdavauth/templates/settings.php index ad1701add8..4596fdf3c7 100755 --- a/apps/user_webdavauth/templates/settings.php +++ b/apps/user_webdavauth/templates/settings.php @@ -1,9 +1,7 @@ - -
      -

      t('WebDAV Authentication'));?>

      -

      - - -
      t('The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.')); ?> -

      + +

      t('WebDAV Authentication'));?>

      +

      + + +
      t('The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials.')); ?>

      From 5b2abb32a64de2c315148893d2774a84315a5ac2 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 16:42:08 +0100 Subject: [PATCH 30/94] remove CSS rules for personalblock, remove it from core --- core/css/styles.css | 16 ++++------------ settings/css/settings.css | 5 ----- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index bd8111ebc7..4420633e34 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -790,20 +790,12 @@ tr .action { width:16px; height:16px; } tr:hover .action:hover, .selectedActions a:hover, .header-action:hover { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } tbody tr:hover, tr:active { background-color:#f8f8f8; } -#body-settings h2 { - font-size: 20px; - font-weight: normal; - margin-bottom: 7px; -} -#body-settings .personalblock, #body-settings .helpblock { - padding: 30px; - color: #555; - border-top: 1px solid #ddd; -} -#body-settings .personalblock#quota { position:relative; padding:0; } -#body-settings #controls+.helpblock { position:relative; margin-top:3em; } code { font-family:"Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", monospace; } +#quota { + position: relative; + padding: 0; +} #quota div { padding: 0; background-color: rgb(220,220,220); diff --git a/settings/css/settings.css b/settings/css/settings.css index 280d022af4..19678e687e 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -12,11 +12,6 @@ input#openid, input#webdav { width:20em; } display: block; } -.personalblock input[type="checkbox"] { - position: relative; - top: 2px; -} - /* Sync clients */ .clientsbox { margin:12px; } .clientsbox h1 { font-size:40px; font-weight:bold; margin:50px 0 20px; } From 53b1e4a00b30db8d385370680ab5d81676b3644e Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 17:13:12 +0100 Subject: [PATCH 31/94] remove additional radio button width declaration --- settings/css/settings.css | 1 - 1 file changed, 1 deletion(-) diff --git a/settings/css/settings.css b/settings/css/settings.css index 280d022af4..2cb1867087 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -152,7 +152,6 @@ table.grid td.date{ /* ADMIN */ span.securitywarning {color:#C33; font-weight:bold; } span.connectionwarning {color:#933; font-weight:bold; } -input[type=radio] { width:1em; } table.shareAPI td { padding-bottom: 0.8em; } #mail_settings p label:first-child { From ec46a071957dd21fa0613ebeb7a539ee8b1eaa47 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Thu, 27 Mar 2014 17:13:36 +0100 Subject: [PATCH 32/94] convert input metrics to px --- core/css/styles.css | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index bd8111ebc7..9719de191e 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -101,9 +101,14 @@ select, button, .button, #quota, .pager li a { - width:10em; margin:.3em; padding:.6em .5em .4em; - font-size:1em; - background:#fff; color:#333; border:1px solid #ddd; outline:none; + width: 130px; + margin: 3px 3px 3px 0; + padding: 7px 6px 5px; + font-size: 13px; + background: #fff; + color: #333; + border: 1px solid #ddd; + outline: none; border-radius: 3px; } input[type="hidden"] { From 0d9d70b51c8113713c5da05548c584ffc954162d Mon Sep 17 00:00:00 2001 From: Alexander Bergolth Date: Fri, 28 Mar 2014 14:02:19 +0100 Subject: [PATCH 33/94] change default ldap paging size to 500 --- apps/user_ldap/lib/configuration.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/lib/configuration.php b/apps/user_ldap/lib/configuration.php index cc68a41d73..713fba8365 100644 --- a/apps/user_ldap/lib/configuration.php +++ b/apps/user_ldap/lib/configuration.php @@ -345,7 +345,7 @@ class Configuration { 'has_memberof_filter_support' => 0, 'last_jpegPhoto_lookup' => 0, 'ldap_nested_groups' => 0, - 'ldap_paging_size' => 0, + 'ldap_paging_size' => 500, ); } From b1589392839a1481f351a43187b12de2de1a4076 Mon Sep 17 00:00:00 2001 From: Alexander Bergolth Date: Fri, 28 Mar 2014 14:20:01 +0100 Subject: [PATCH 34/94] adapt description of paging size configuration --- apps/user_ldap/templates/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php index a61d00bc15..95a888a31d 100644 --- a/apps/user_ldap/templates/settings.php +++ b/apps/user_ldap/templates/settings.php @@ -37,7 +37,7 @@

      -

      +

    t('Special Attributes'));?>

    From f331d5f9d4a4609370bf6a5593e0720ba7c77c04 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 27 Mar 2014 16:43:34 +0100 Subject: [PATCH 35/94] Give storages the option to implement the getById behaviour for View->getPath --- lib/private/files/cache/cache.php | 16 ++++++++++++++++ lib/private/files/view.php | 19 +++++++++++++------ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php index abc11e7647..42fee4f336 100644 --- a/lib/private/files/cache/cache.php +++ b/lib/private/files/cache/cache.php @@ -593,6 +593,22 @@ class Cache { } } + /** + * get the storage id of the storage for a file and the internal path of the file + * + * @param int $id + * @return string | null + */ + public function getPathById($id) { + $sql = 'SELECT `path` FROM `*PREFIX*filecache` WHERE `fileid` = ? AND `storage` = ?'; + $result = \OC_DB::executeAudited($sql, array($id, $this->getNumericStorageId())); + if ($row = $result->fetchRow()) { + return $row['path']; + } else { + return null; + } + } + /** * get the storage id of the storage for a file and the internal path of the file * diff --git a/lib/private/files/view.php b/lib/private/files/view.php index f06c2fcd66..90b0da09c3 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -1129,15 +1129,22 @@ class View { * @return string */ public function getPath($id) { - list($storage, $internalPath) = Cache\Cache::getById($id); - $mounts = Filesystem::getMountByStorageId($storage); + $manager = Filesystem::getMountManager(); + $mounts = $manager->findIn($this->fakeRoot); + $mounts[] = $manager->find($this->fakeRoot); + // reverse the array so we start with the storage this view is in + // which is the most likely to contain the file we're looking for + $mounts = array_reverse($mounts); foreach ($mounts as $mount) { /** - * @var \OC\Files\Mount $mount + * @var \OC\Files\Mount\Mount $mount */ - $fullPath = $mount->getMountPoint() . $internalPath; - if (!is_null($path = $this->getRelativePath($fullPath))) { - return $path; + $cache = $mount->getStorage()->getCache(); + if ($internalPath = $cache->getPathById($id)) { + $fullPath = $mount->getMountPoint() . $internalPath; + if (!is_null($path = $this->getRelativePath($fullPath))) { + return $path; + } } } return null; From fe78d963d9a7cbae6aabd8e1a275c6de783440ba Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 28 Mar 2014 15:26:15 +0100 Subject: [PATCH 36/94] Implement getPath for shared files --- apps/files_sharing/lib/cache.php | 51 +++++++++++++++++++++++++----- apps/files_sharing/tests/cache.php | 39 +++++++++++++++++++++++ 2 files changed, 82 insertions(+), 8 deletions(-) diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index 01db29d72e..49b1d208d4 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -20,6 +20,7 @@ */ namespace OC\Files\Cache; + use OCP\Share_Backend_Collection; /** @@ -50,7 +51,7 @@ class Shared_Cache extends Cache { \OC\Files\Filesystem::initMountPoints($source['fileOwner']); $mount = \OC\Files\Filesystem::getMountByNumericId($source['storage']); if (is_array($mount)) { - $fullPath = $mount[key($mount)]->getMountPoint().$source['path']; + $fullPath = $mount[key($mount)]->getMountPoint() . $source['path']; list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($fullPath); if ($storage) { $this->files[$target] = $internalPath; @@ -75,7 +76,7 @@ class Shared_Cache extends Cache { /** * get the stored metadata of a file or folder * - * @param string/int $file + * @param string /int $file * @return array */ public function get($file) { @@ -95,8 +96,8 @@ class Shared_Cache extends Cache { } else { $query = \OC_DB::prepare( 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`,' - .' `size`, `mtime`, `encrypted`, `unencrypted_size`' - .' FROM `*PREFIX*filecache` WHERE `fileid` = ?'); + . ' `size`, `mtime`, `encrypted`, `unencrypted_size`' + . ' FROM `*PREFIX*filecache` WHERE `fileid` = ?'); $result = $query->execute(array($file)); $data = $result->fetchRow(); $data['fileid'] = (int)$data['fileid']; @@ -288,8 +289,7 @@ class Shared_Cache extends Cache { foreach ($files as $file) { if ($file['mimetype'] === 'httpd/unix-directory') { $exploreDirs[] = ltrim($dir . '/' . $file['name'], '/'); - } - else if (($mimepart && $file['mimepart'] === $mimepart) || ($mimetype && $file['mimetype'] === $mimetype)) { + } else if (($mimepart && $file['mimepart'] === $mimepart) || ($mimetype && $file['mimetype'] === $mimetype)) { // usersPath not reliable //$file['path'] = $file['usersPath']; $file['path'] = ltrim($dir . '/' . $file['name'], '/'); @@ -344,8 +344,6 @@ class Shared_Cache extends Cache { if ($row['encrypted'] or ($row['unencrypted_size'] > 0 and $row['mimetype'] === 'httpd/unix-directory')) { $row['encrypted_size'] = $row['size']; $row['size'] = $row['unencrypted_size']; - } else { - $row['size'] = $row['size']; } $files[] = $row; } @@ -402,4 +400,41 @@ class Shared_Cache extends Cache { return false; } + public function getPathById($id, $pathEnd = '') { + // direct shares are easy + if ($path = $this->getShareById($id)) { + return $path . $pathEnd; + } else { + // if the item is a direct share we try and get the path of the parent and append the name of the item to it + list($parent, $name) = $this->getParentInfo($id); + if ($parent > 0) { + return $this->getPathById($parent, '/' . $name . $pathEnd); + } else { + return null; + } + } + } + + private function getShareById($id) { + $item = \OCP\Share::getItemSharedWithBySource('file', $id); + if ($item) { + return trim($item['file_target'], '/'); + } + $item = \OCP\Share::getItemSharedWithBySource('folder', $id); + if ($item) { + return trim($item['file_target'], '/'); + } + return null; + } + + private function getParentInfo($id) { + $sql = 'SELECT `parent`, `name` FROM `*PREFIX*filecache` WHERE `fileid` = ?'; + $query = \OC_DB::prepare($sql); + $result = $query->execute(array($id)); + if ($row = $result->fetchRow()) { + return array($row['parent'], $row['name']); + } else { + return array(-1, ''); + } + } } diff --git a/apps/files_sharing/tests/cache.php b/apps/files_sharing/tests/cache.php index a75e186052..47969833ab 100644 --- a/apps/files_sharing/tests/cache.php +++ b/apps/files_sharing/tests/cache.php @@ -246,4 +246,43 @@ class Test_Files_Sharing_Cache extends Test_Files_Sharing_Base { } } + public function testGetPathByIdDirectShare() { + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + \OC\Files\Filesystem::file_put_contents('test.txt', 'foo'); + $info = \OC\Files\Filesystem::getFileInfo('test.txt'); + \OCP\Share::shareItem('file', $info->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL); + \OC_Util::tearDownFS(); + + self::loginHelper(self::TEST_FILES_SHARING_API_USER2); + $this->assertTrue(\OC\Files\Filesystem::file_exists('/Shared/test.txt')); + list($sharedStorage) = \OC\Files\Filesystem::resolvePath('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/Shared/test.txt'); + /** + * @var \OC\Files\Storage\Shared $sharedStorage + */ + + $sharedCache = $sharedStorage->getCache(); + $this->assertEquals('test.txt', $sharedCache->getPathById($info->getId())); + } + + public function testGetPathByIdShareSubFolder() { + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + \OC\Files\Filesystem::mkdir('foo'); + \OC\Files\Filesystem::mkdir('foo/bar'); + \OC\Files\Filesystem::touch('foo/bar/test.txt', 'bar'); + $folderInfo = \OC\Files\Filesystem::getFileInfo('foo'); + $fileInfo = \OC\Files\Filesystem::getFileInfo('foo/bar/test.txt'); + \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER2, \OCP\PERMISSION_ALL); + \OC_Util::tearDownFS(); + + self::loginHelper(self::TEST_FILES_SHARING_API_USER2); + $this->assertTrue(\OC\Files\Filesystem::file_exists('/Shared/foo')); + list($sharedStorage) = \OC\Files\Filesystem::resolvePath('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/Shared/foo'); + /** + * @var \OC\Files\Storage\Shared $sharedStorage + */ + + $sharedCache = $sharedStorage->getCache(); + $this->assertEquals('foo', $sharedCache->getPathById($folderInfo->getId())); + $this->assertEquals('foo/bar/test.txt', $sharedCache->getPathById($fileInfo->getId())); + } } From 82f98fb3d3822a001a298a924267c337e8d79f43 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 28 Mar 2014 18:12:21 +0100 Subject: [PATCH 37/94] Fixed user list offset call --- settings/js/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/js/users.js b/settings/js/users.js index 284976d3ba..eef3c23727 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -226,7 +226,7 @@ var UserList = { $('table+.loading').css('visibility', 'visible'); UserList.updating = true; var query = $.param({ offset: UserList.offset, limit: UserList.usersToLoad }); - $.get(OC.generateUrl('/settings/ajax/userlist') + query, function (result) { + $.get(OC.generateUrl('/settings/ajax/userlist') + '?' + query, function (result) { var loadedUsers = 0; var trs = []; if (result.status === 'success') { From 51b727cfcaa0bf3aa486129d42eab05e0f5af363 Mon Sep 17 00:00:00 2001 From: Rodrigo Hjort Date: Fri, 28 Mar 2014 15:08:59 -0300 Subject: [PATCH 38/94] Correction: failure on sharing when user ID was prefixed by zero --- core/js/share.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/js/share.js b/core/js/share.js index 9ee50ff696..ed11e59d28 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -551,7 +551,7 @@ $(document).ready(function() { var itemType = $('#dropdown').data('item-type'); var itemSource = $('#dropdown').data('item-source'); var shareType = $li.data('share-type'); - var shareWith = $li.data('share-with'); + var shareWith = $li.attr('data-share-with'); OC.Share.unshare(itemType, itemSource, shareType, shareWith, function() { $li.remove(); var index = OC.Share.itemShares[shareType].indexOf(shareWith); @@ -597,7 +597,7 @@ $(document).ready(function() { OC.Share.setPermissions($('#dropdown').data('item-type'), $('#dropdown').data('item-source'), li.data('share-type'), - li.data('share-with'), + li.attr('data-share-with'), permissions); }); @@ -782,7 +782,7 @@ $(document).ready(function() { } var shareType = $li.data('share-type'); - var shareWith = $li.data('share-with'); + var shareWith = $li.attr('data-share-with'); $.post(OC.filePath('core', 'ajax', 'share.php'), {action: action, recipient: shareWith, shareType: shareType, itemSource: itemSource, itemType: itemType}, function(result) { if (result.status !== 'success') { From 881c66df52cba16df17297a88978297231d1d7d9 Mon Sep 17 00:00:00 2001 From: raghunayyar Date: Sun, 30 Mar 2014 15:48:47 +0530 Subject: [PATCH 39/94] Removes highlighting of selected items, padding from apps management. --- core/css/apps.css | 3 --- settings/css/settings.css | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/css/apps.css b/core/css/apps.css index 5bfc2d4a08..9e48e28fce 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -35,9 +35,6 @@ #app-navigation li:hover > a { background-color: #ddd; } -#app-navigation .active { - font-weight:700; -} #app-navigation .selected, #app-navigation .selected a { background-color:#ddd; diff --git a/settings/css/settings.css b/settings/css/settings.css index d7d8b0aede..50e3eacbc1 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -100,6 +100,9 @@ select.quota.active { background: #fff; } /* APPS */ .appinfo { margin: 1em 40px; } h3 { font-size: 1.4em; font-weight: bold; } +#app-navigation { + padding-bottom: 0px; +} #app-navigation .appwarning { background: #fcc; } From 615de6534f659b3f0bc8149b5ccf8558aaf491e9 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Mon, 31 Mar 2014 12:27:26 +0200 Subject: [PATCH 40/94] fix duplicate rules for button/input styles, em to px --- core/css/styles.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/css/styles.css b/core/css/styles.css index 9719de191e..68317d1588 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -99,6 +99,8 @@ input[type="time"], textarea, select, button, .button, +input[type="submit"], +input[type="button"], #quota, .pager li a { width: 130px; @@ -173,14 +175,12 @@ input[type="submit"], input[type="button"], button, .button, #quota, select, .pager li a { width: auto; - padding: .4em; + padding: 5px; background-color: rgba(240,240,240,.9); font-weight: bold; color: #555; border: 1px solid rgba(190,190,190,.9); cursor: pointer; - border-radius: 3px; - outline: none; } input[type="submit"]:hover, input[type="submit"]:focus, input[type="button"]:hover, input[type="button"]:focus, From 6ac85480f7bffeb65fcbc5820ea7bd4ecd8f21ad Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Mon, 31 Mar 2014 13:00:46 +0200 Subject: [PATCH 41/94] replace last personalblock fieldset within files_external --- apps/files_external/templates/settings.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index e7be16bede..8b01b7677e 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -137,11 +137,10 @@ -
    -

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

    '> @@ -161,6 +160,5 @@ - From 8bd308ffedec77f1dd4b7ddaf588c7a4029ea34f Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 31 Mar 2014 13:51:53 +0200 Subject: [PATCH 42/94] merge CSS rules --- core/css/apps.css | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/css/apps.css b/core/css/apps.css index 9e48e28fce..5899aa0909 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -32,12 +32,10 @@ #app-navigation .active a { background-color: #eee; } -#app-navigation li:hover > a { - background-color: #ddd; -} +#app-navigation li:hover > a, #app-navigation .selected, #app-navigation .selected a { - background-color:#ddd; + background-color: #ddd; } /* special rules for first-level entries and folders */ From 6292aa57af8900f38885e9bb08b748a80d86aec1 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 31 Mar 2014 14:24:38 +0200 Subject: [PATCH 43/94] Check if web root has already been appended --- lib/private/urlgenerator.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/private/urlgenerator.php b/lib/private/urlgenerator.php index 0d238737dd..260eeb1510 100644 --- a/lib/private/urlgenerator.php +++ b/lib/private/urlgenerator.php @@ -149,6 +149,11 @@ class URLGenerator implements IURLGenerator { public function getAbsoluteURL($url) { $separator = $url[0] === '/' ? '' : '/'; - return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost(). \OC::$WEBROOT . $separator . $url; + // The ownCloud web root can already be prepended. + $webRoot = substr($url, 0, strlen(\OC::$WEBROOT)) === \OC::$WEBROOT + ? '' + : \OC::$WEBROOT; + + return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost(). $webRoot . $separator . $url; } } From 0c2585f3ac9dbf82bf45023963dfecc66c515b78 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 31 Mar 2014 14:29:55 +0200 Subject: [PATCH 44/94] Improve phpdoc --- apps/files_sharing/lib/cache.php | 7 +++++++ lib/private/files/cache/cache.php | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index 49b1d208d4..eeb62c3cce 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -400,6 +400,13 @@ class Shared_Cache extends Cache { return false; } + /** + * get the path of a file on this storage by it's id + * + * @param int $id + * @param string $pathEnd (optional) used internally for recursive calls + * @return string | null + */ public function getPathById($id, $pathEnd = '') { // direct shares are easy if ($path = $this->getShareById($id)) { diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php index 42fee4f336..1c9de56f8c 100644 --- a/lib/private/files/cache/cache.php +++ b/lib/private/files/cache/cache.php @@ -594,7 +594,7 @@ class Cache { } /** - * get the storage id of the storage for a file and the internal path of the file + * get the path of a file on this storage by it's id * * @param int $id * @return string | null @@ -611,6 +611,8 @@ class Cache { /** * get the storage id of the storage for a file and the internal path of the file + * unlike getPathById this does not limit the search to files on this storage and + * instead does a global search in the cache table * * @param int $id * @return array, first element holding the storage id, second the path From 3a731a01b1742f22b67eda6bc2a643462a9ae40d Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 31 Mar 2014 15:02:02 +0200 Subject: [PATCH 45/94] select statement always need to contain file_source respectively item_source --- lib/private/share/share.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/private/share/share.php b/lib/private/share/share.php index 8238797600..7bab98b00b 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -1523,9 +1523,9 @@ class Share extends \OC\Share\Constants { $select = '*'; if ($format == self::FORMAT_STATUSES) { if ($fileDependent) { - $select = '`*PREFIX*share`.`id`, `*PREFIX*share`.`parent`, `share_type`, `path`, `share_with`, `uid_owner`'; + $select = '`*PREFIX*share`.`id`, `*PREFIX*share`.`parent`, `share_type`, `path`, `share_with`, `uid_owner` , `file_source`'; } else { - $select = '`id`, `parent`, `share_type`, `share_with`, `uid_owner`'; + $select = '`id`, `parent`, `share_type`, `share_with`, `uid_owner`, `item_source`'; } } else { if (isset($uidOwner)) { From 8ebb1f15d31b449401c7f2b726007aaff78a4879 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Thu, 27 Mar 2014 13:49:48 +0100 Subject: [PATCH 46/94] move check if a file should be encrypted to the pre hook --- apps/files_encryption/lib/proxy.php | 92 ++++++++++------------------- apps/files_encryption/lib/util.php | 33 ++++++----- 2 files changed, 50 insertions(+), 75 deletions(-) diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index bae1fded53..f7f5ff6f36 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -3,9 +3,10 @@ /** * ownCloud * - * @author Sam Tuke, Robin Appelman - * @copyright 2012 Sam Tuke samtuke@owncloud.com, Robin Appelman - * icewind1991@gmail.com + * @author Bjoern Schiessle, Sam Tuke, Robin Appelman + * @copyright 2012 Sam Tuke + * 2012 Robin Appelman + * 2014 Bjoern Schiessle * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE @@ -36,37 +37,40 @@ namespace OCA\Encryption; */ class Proxy extends \OC_FileProxy { - private static $blackList = null; //mimetypes blacklisted from encryption private static $unencryptedSizes = array(); // remember unencrypted size private static $fopenMode = array(); // remember the fopen mode + private static $enableEncryption = false; // Enable encryption for the given path /** * Check if a file requires encryption * @param string $path + * @param string $mode type of access * @return bool * - * Tests if server side encryption is enabled, and file is allowed by blacklists + * Tests if server side encryption is enabled, and if we should call the + * crypt stream wrapper for the given file */ - private static function shouldEncrypt($path) { + private static function shouldEncrypt($path, $mode = 'w') { $userId = Helper::getUser($path); - if (\OCP\App::isEnabled('files_encryption') === false || Crypt::mode() !== 'server' || - strpos($path, '/' . $userId . '/files') !== 0) { + // don't call the crypt stream wrapper, if... + if ( + \OCP\App::isEnabled('files_encryption') === false // encryption is disabled + || Crypt::mode() !== 'server' // we are not in server-side-encryption mode + || strpos($path, '/' . $userId . '/files') !== 0 // path is not in files/ + || substr($path, 0, 8) === 'crypt://' // we are already in crypt mode + ) { return false; } - if (is_null(self::$blackList)) { - self::$blackList = explode(',', \OCP\Config::getAppValue('files_encryption', 'type_blacklist', '')); - } + $view = new \OC_FilesystemView(''); + $util = new Util($view, $userId); - if (Crypt::isCatfileContent($path)) { - return true; - } - - $extension = substr($path, strrpos($path, '.') + 1); - - if (array_search($extension, self::$blackList) === false) { + // for write operation we always encrypt the files, for read operations + // we check if the existing file is encrypted or not decide if it needs to + // decrypt it. + if (($mode !== 'r' && $mode !== 'rb') || $util->isEncryptedPath($path)) { return true; } @@ -220,7 +224,10 @@ class Proxy extends \OC_FileProxy { * @param string $mode type of access */ public function preFopen($path, $mode) { + self::$fopenMode[$path] = $mode; + self::$enableEncryption = self::shouldEncrypt($path, $mode); + } @@ -233,26 +240,14 @@ class Proxy extends \OC_FileProxy { $path = \OC\Files\Filesystem::normalizePath($path); - if (!$result) { + if (!$result || self::$enableEncryption === false) { return $result; } - // split the path parts - $pathParts = explode('/', $path); - - // don't try to encrypt/decrypt cache chunks or files in the trash bin - if (isset($pathParts[2]) && ($pathParts[2] === 'cache' || $pathParts[2] === 'files_trashbin')) { - return $result; - } - - // Disable encryption proxy to prevent recursive calls - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; - // if we remember the mode from the pre proxy we re-use it - // oterwise we fall back to stream_get_meta_data() + // otherwise we fall back to stream_get_meta_data() if (isset(self::$fopenMode[$path])) { $mode = self::$fopenMode[$path]; unset(self::$fopenMode[$path]); @@ -261,35 +256,12 @@ class Proxy extends \OC_FileProxy { $mode = $meta['mode']; } - $view = new \OC_FilesystemView(''); + // Close the original encrypted file + fclose($result); - $userId = Helper::getUser($path); - $util = new Util($view, $userId); - - // If file is already encrypted, decrypt using crypto protocol - if ( - Crypt::mode() === 'server' - && $util->isEncryptedPath($path) - ) { - - // Close the original encrypted file - fclose($result); - - // Open the file using the crypto stream wrapper - // protocol and let it do the decryption work instead - $result = fopen('crypt://' . $path, $mode); - - } elseif ( - self::shouldEncrypt($path) - and $mode !== 'r' - and $mode !== 'rb' - - ) { - $result = fopen('crypt://' . $path, $mode); - } - - // Re-enable the proxy - \OC_FileProxy::$enabled = $proxyStatus; + // Open the file using the crypto stream wrapper + // protocol and let it do the decryption work instead + $result = fopen('crypt://' . $path, $mode); return $result; diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php index 3db5a42347..c3058aefa6 100644 --- a/apps/files_encryption/lib/util.php +++ b/apps/files_encryption/lib/util.php @@ -432,25 +432,28 @@ class Util { $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; - // we only need 24 byte from the last chunk $data = ''; - $handle = $this->view->fopen($path, 'r'); - if (is_resource($handle)) { - // suppress fseek warining, we handle the case that fseek doesn't - // work in the else branch - if (@fseek($handle, -24, SEEK_END) === 0) { - $data = fgets($handle); - } else { - // if fseek failed on the storage we create a local copy from the file - // and read this one - fclose($handle); - $localFile = $this->view->getLocalFile($path); - $handle = fopen($localFile, 'r'); - if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) { + + // we only need 24 byte from the last chunk + if ($this->view->file_exists($path)) { + $handle = $this->view->fopen($path, 'r'); + if (is_resource($handle)) { + // suppress fseek warining, we handle the case that fseek doesn't + // work in the else branch + if (@fseek($handle, -24, SEEK_END) === 0) { $data = fgets($handle); + } else { + // if fseek failed on the storage we create a local copy from the file + // and read this one + fclose($handle); + $localFile = $this->view->getLocalFile($path); + $handle = fopen($localFile, 'r'); + if (is_resource($handle) && fseek($handle, -24, SEEK_END) === 0) { + $data = fgets($handle); + } } + fclose($handle); } - fclose($handle); } // re-enable proxy From aa867ad647677d9648f746681adde630fed60850 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 31 Mar 2014 12:43:38 +0200 Subject: [PATCH 47/94] don't call getFileInfo() to avoid to open the same file twice --- apps/files_encryption/lib/stream.php | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php index 58ac03373a..1a163db887 100644 --- a/apps/files_encryption/lib/stream.php +++ b/apps/files_encryption/lib/stream.php @@ -568,21 +568,25 @@ class Stream { // part file. $path = Helper::stripPartialFileExtension($this->rawPath); - // get file info - $fileInfo = $this->rootView->getFileInfo($path); - if ($fileInfo) { - // set encryption data - $fileInfo['encrypted'] = true; - $fileInfo['size'] = $this->size; - $fileInfo['unencrypted_size'] = $this->unencryptedSize; + $fileInfo = array( + 'encrypted' => true, + 'size' => $this->size, + 'unencrypted_size' => $this->unencryptedSize, + ); - // set fileinfo - $this->rootView->putFileInfo($path, $fileInfo); - } + // set fileinfo + $this->rootView->putFileInfo($path, $fileInfo); } - return fclose($this->handle); + $result = fclose($this->handle); + + if ($result === false) { + \OCP\Util::writeLog('Encryption library', 'Could not close stream, file could be corrupted', \OCP\Util::FATAL); + } + + return $result; + } } From cf361b6b4afe76e3bb6295a1fdd80d5ad0badd65 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 31 Mar 2014 15:30:44 +0200 Subject: [PATCH 48/94] Allow using "/" in "overwritewebroot" Whenever the reverse proxy is using "/" as the webroot, it is now possible to set that value in "overwritewebroot" --- config/config.sample.php | 2 +- lib/private/request.php | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/config.sample.php b/config/config.sample.php index 140b75706e..adcc175e2f 100755 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -41,7 +41,7 @@ $CONFIG = array( /* The automatic protocol detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the protocol detection. For example "https" */ "overwriteprotocol" => "", -/* The automatic webroot detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the automatic detection. For example "/domain.tld/ownCloud" */ +/* The automatic webroot detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the automatic detection. For example "/domain.tld/ownCloud". The value "/" can be used to remove the root. */ "overwritewebroot" => "", /* The automatic detection of ownCloud can fail in certain reverse proxy situations. This option allows to define a manually override condition as regular expression for the remote ip address. For example "^10\.0\.0\.[1-3]$" */ diff --git a/lib/private/request.php b/lib/private/request.php index 8041c4f004..7cbbb0676b 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -166,10 +166,11 @@ class OC_Request { */ public static function scriptName() { $name = $_SERVER['SCRIPT_NAME']; - if (OC_Config::getValue('overwritewebroot', '') !== '' and self::isOverwriteCondition()) { + $overwriteWebRoot = OC_Config::getValue('overwritewebroot', ''); + if ($overwriteWebRoot !== '' and self::isOverwriteCondition()) { $serverroot = str_replace("\\", '/', substr(__DIR__, 0, -strlen('lib/private/'))); $suburi = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen($serverroot))); - $name = OC_Config::getValue('overwritewebroot', '') . $suburi; + $name = '/' . ltrim($overwriteWebRoot . $suburi, '/'); } return $name; } From 76c63a576089edcd553244f02d8c3f6c28038fd2 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 31 Mar 2014 17:00:32 +0200 Subject: [PATCH 49/94] Fix uploading files containing a # in the path for webdav --- apps/files_external/lib/webdav.php | 2 +- tests/lib/files/storage/storage.php | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 279ae71693..f5010f9220 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -267,7 +267,7 @@ class DAV extends \OC\Files\Storage\Common { $curl = curl_init(); curl_setopt($curl, CURLOPT_USERPWD, $this->user . ':' . $this->password); - curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . str_replace(' ', '%20', $target)); + curl_setopt($curl, CURLOPT_URL, $this->createBaseUri() . $this->encodePath($target)); curl_setopt($curl, CURLOPT_BINARYTRANSFER, true); curl_setopt($curl, CURLOPT_INFILE, $source); // file pointer curl_setopt($curl, CURLOPT_INFILESIZE, filesize($path)); diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index f3bfba3feb..e4d9e93ca9 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -299,7 +299,7 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertFalse($this->instance->file_exists('folder')); } - public function hashProvider(){ + public function hashProvider() { return array( array('Foobar', 'md5'), array('Foobar', 'sha1'), @@ -315,4 +315,23 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { $this->assertEquals(hash($type, $data), $this->instance->hash($type, 'hash.txt')); $this->assertEquals(hash($type, $data, true), $this->instance->hash($type, 'hash.txt', true)); } + + public function testHashInFileName() { + $this->instance->file_put_contents('#test.txt', 'data'); + $this->assertEquals('data', $this->instance->file_get_contents('#test.txt')); + + $this->instance->mkdir('#foo'); + $this->instance->file_put_contents('#foo/test.txt', 'data'); + $this->assertEquals('data', $this->instance->file_get_contents('#foo/test.txt')); + + $dh = $this->instance->opendir('#foo'); + $content = array(); + while ($file = readdir($dh)) { + if ($file != '.' and $file != '..') { + $content[] = $file; + } + } + + $this->assertEquals(array('test.txt'), $content); + } } From fe2c6f4e6d77ca77fc7faed130217f38904d67f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Mon, 31 Mar 2014 18:03:42 +0200 Subject: [PATCH 50/94] remove pl_PL - fixes #7973 --- apps/files/l10n/pl_PL.php | 5 - core/l10n/pl_PL.php | 6 - l10n/pl_PL/core.po | 617 --------------------------------- l10n/pl_PL/files.po | 322 ----------------- l10n/pl_PL/files_encryption.po | 103 ------ l10n/pl_PL/files_external.po | 123 ------- l10n/pl_PL/files_sharing.po | 48 --- l10n/pl_PL/files_trashbin.po | 84 ----- l10n/pl_PL/files_versions.po | 57 --- l10n/pl_PL/lib.po | 245 ------------- l10n/pl_PL/settings.po | 496 -------------------------- l10n/pl_PL/user_ldap.po | 419 ---------------------- l10n/pl_PL/user_webdavauth.po | 33 -- lib/l10n/pl_PL.php | 5 - settings/l10n/pl_PL.php | 6 - 15 files changed, 2569 deletions(-) delete mode 100644 apps/files/l10n/pl_PL.php delete mode 100644 core/l10n/pl_PL.php delete mode 100644 l10n/pl_PL/core.po delete mode 100644 l10n/pl_PL/files.po delete mode 100644 l10n/pl_PL/files_encryption.po delete mode 100644 l10n/pl_PL/files_external.po delete mode 100644 l10n/pl_PL/files_sharing.po delete mode 100644 l10n/pl_PL/files_trashbin.po delete mode 100644 l10n/pl_PL/files_versions.po delete mode 100644 l10n/pl_PL/lib.po delete mode 100644 l10n/pl_PL/settings.po delete mode 100644 l10n/pl_PL/user_ldap.po delete mode 100644 l10n/pl_PL/user_webdavauth.po delete mode 100644 lib/l10n/pl_PL.php delete mode 100644 settings/l10n/pl_PL.php diff --git a/apps/files/l10n/pl_PL.php b/apps/files/l10n/pl_PL.php deleted file mode 100644 index b67f67b972..0000000000 --- a/apps/files/l10n/pl_PL.php +++ /dev/null @@ -1,5 +0,0 @@ - "Zapisz" -); -$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/core/l10n/pl_PL.php b/core/l10n/pl_PL.php deleted file mode 100644 index 15c376eb95..0000000000 --- a/core/l10n/pl_PL.php +++ /dev/null @@ -1,6 +0,0 @@ - "Ustawienia", -"Username" => "Nazwa użytkownika" -); -$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/l10n/pl_PL/core.po b/l10n/pl_PL/core.po deleted file mode 100644 index 7b4ef7d09a..0000000000 --- a/l10n/pl_PL/core.po +++ /dev/null @@ -1,617 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-06-04 02:29+0200\n" -"PO-Revision-Date: 2013-06-03 00:32+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/share.php:97 -#, php-format -msgid "User %s shared a file with you" -msgstr "" - -#: ajax/share.php:99 -#, php-format -msgid "User %s shared a folder with you" -msgstr "" - -#: ajax/share.php:101 -#, php-format -msgid "" -"User %s shared the file \"%s\" with you. It is available for download here: " -"%s" -msgstr "" - -#: ajax/share.php:104 -#, php-format -msgid "" -"User %s shared the folder \"%s\" with you. It is available for download " -"here: %s" -msgstr "" - -#: ajax/vcategories/add.php:26 ajax/vcategories/edit.php:25 -msgid "Category type not provided." -msgstr "" - -#: ajax/vcategories/add.php:30 -msgid "No category to add?" -msgstr "" - -#: ajax/vcategories/add.php:37 -#, php-format -msgid "This category already exists: %s" -msgstr "" - -#: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27 -#: ajax/vcategories/favorites.php:24 -#: ajax/vcategories/removeFromFavorites.php:26 -msgid "Object type not provided." -msgstr "" - -#: ajax/vcategories/addToFavorites.php:30 -#: ajax/vcategories/removeFromFavorites.php:30 -#, php-format -msgid "%s ID not provided." -msgstr "" - -#: ajax/vcategories/addToFavorites.php:35 -#, php-format -msgid "Error adding %s to favorites." -msgstr "" - -#: ajax/vcategories/delete.php:35 js/oc-vcategories.js:136 -msgid "No categories selected for deletion." -msgstr "" - -#: ajax/vcategories/removeFromFavorites.php:35 -#, php-format -msgid "Error removing %s from favorites." -msgstr "" - -#: js/config.php:34 -msgid "Sunday" -msgstr "" - -#: js/config.php:35 -msgid "Monday" -msgstr "" - -#: js/config.php:36 -msgid "Tuesday" -msgstr "" - -#: js/config.php:37 -msgid "Wednesday" -msgstr "" - -#: js/config.php:38 -msgid "Thursday" -msgstr "" - -#: js/config.php:39 -msgid "Friday" -msgstr "" - -#: js/config.php:40 -msgid "Saturday" -msgstr "" - -#: js/config.php:45 -msgid "January" -msgstr "" - -#: js/config.php:46 -msgid "February" -msgstr "" - -#: js/config.php:47 -msgid "March" -msgstr "" - -#: js/config.php:48 -msgid "April" -msgstr "" - -#: js/config.php:49 -msgid "May" -msgstr "" - -#: js/config.php:50 -msgid "June" -msgstr "" - -#: js/config.php:51 -msgid "July" -msgstr "" - -#: js/config.php:52 -msgid "August" -msgstr "" - -#: js/config.php:53 -msgid "September" -msgstr "" - -#: js/config.php:54 -msgid "October" -msgstr "" - -#: js/config.php:55 -msgid "November" -msgstr "" - -#: js/config.php:56 -msgid "December" -msgstr "" - -#: js/js.js:286 -msgid "Settings" -msgstr "Ustawienia" - -#: js/js.js:718 -msgid "seconds ago" -msgstr "" - -#: js/js.js:719 -msgid "1 minute ago" -msgstr "" - -#: js/js.js:720 -msgid "{minutes} minutes ago" -msgstr "" - -#: js/js.js:721 -msgid "1 hour ago" -msgstr "" - -#: js/js.js:722 -msgid "{hours} hours ago" -msgstr "" - -#: js/js.js:723 -msgid "today" -msgstr "" - -#: js/js.js:724 -msgid "yesterday" -msgstr "" - -#: js/js.js:725 -msgid "{days} days ago" -msgstr "" - -#: js/js.js:726 -msgid "last month" -msgstr "" - -#: js/js.js:727 -msgid "{months} months ago" -msgstr "" - -#: js/js.js:728 -msgid "months ago" -msgstr "" - -#: js/js.js:729 -msgid "last year" -msgstr "" - -#: js/js.js:730 -msgid "years ago" -msgstr "" - -#: js/oc-dialogs.js:117 -msgid "Choose" -msgstr "" - -#: js/oc-dialogs.js:122 -msgid "Cancel" -msgstr "" - -#: js/oc-dialogs.js:141 js/oc-dialogs.js:200 -msgid "Error loading file picker template" -msgstr "" - -#: js/oc-dialogs.js:164 -msgid "Yes" -msgstr "" - -#: js/oc-dialogs.js:172 -msgid "No" -msgstr "" - -#: js/oc-dialogs.js:185 -msgid "Ok" -msgstr "" - -#: js/oc-vcategories.js:5 js/oc-vcategories.js:85 js/oc-vcategories.js:102 -#: js/oc-vcategories.js:117 js/oc-vcategories.js:132 js/oc-vcategories.js:162 -msgid "The object type is not specified." -msgstr "" - -#: js/oc-vcategories.js:14 js/oc-vcategories.js:80 js/oc-vcategories.js:95 -#: js/oc-vcategories.js:110 js/oc-vcategories.js:125 js/oc-vcategories.js:136 -#: js/oc-vcategories.js:172 js/oc-vcategories.js:189 js/oc-vcategories.js:195 -#: js/oc-vcategories.js:199 js/share.js:136 js/share.js:143 js/share.js:577 -#: js/share.js:589 -msgid "Error" -msgstr "" - -#: js/oc-vcategories.js:179 -msgid "The app name is not specified." -msgstr "" - -#: js/oc-vcategories.js:194 -msgid "The required file {file} is not installed!" -msgstr "" - -#: js/share.js:30 js/share.js:45 js/share.js:87 -msgid "Shared" -msgstr "" - -#: js/share.js:90 -msgid "Share" -msgstr "" - -#: js/share.js:125 js/share.js:617 -msgid "Error while sharing" -msgstr "" - -#: js/share.js:136 -msgid "Error while unsharing" -msgstr "" - -#: js/share.js:143 -msgid "Error while changing permissions" -msgstr "" - -#: js/share.js:152 -msgid "Shared with you and the group {group} by {owner}" -msgstr "" - -#: js/share.js:154 -msgid "Shared with you by {owner}" -msgstr "" - -#: js/share.js:159 -msgid "Share with" -msgstr "" - -#: js/share.js:164 -msgid "Share with link" -msgstr "" - -#: js/share.js:167 -msgid "Password protect" -msgstr "" - -#: js/share.js:169 templates/installation.php:54 templates/login.php:26 -msgid "Password" -msgstr "" - -#: js/share.js:173 -msgid "Email link to person" -msgstr "" - -#: js/share.js:174 -msgid "Send" -msgstr "" - -#: js/share.js:178 -msgid "Set expiration date" -msgstr "" - -#: js/share.js:179 -msgid "Expiration date" -msgstr "" - -#: js/share.js:211 -msgid "Share via email:" -msgstr "" - -#: js/share.js:213 -msgid "No people found" -msgstr "" - -#: js/share.js:251 -msgid "Resharing is not allowed" -msgstr "" - -#: js/share.js:287 -msgid "Shared in {item} with {user}" -msgstr "" - -#: js/share.js:308 -msgid "Unshare" -msgstr "" - -#: js/share.js:320 -msgid "can edit" -msgstr "" - -#: js/share.js:322 -msgid "access control" -msgstr "" - -#: js/share.js:325 -msgid "create" -msgstr "" - -#: js/share.js:328 -msgid "update" -msgstr "" - -#: js/share.js:331 -msgid "delete" -msgstr "" - -#: js/share.js:334 -msgid "share" -msgstr "" - -#: js/share.js:368 js/share.js:564 -msgid "Password protected" -msgstr "" - -#: js/share.js:577 -msgid "Error unsetting expiration date" -msgstr "" - -#: js/share.js:589 -msgid "Error setting expiration date" -msgstr "" - -#: js/share.js:604 -msgid "Sending ..." -msgstr "" - -#: js/share.js:615 -msgid "Email sent" -msgstr "" - -#: js/update.js:14 -msgid "" -"The update was unsuccessful. Please report this issue to the ownCloud " -"community." -msgstr "" - -#: js/update.js:18 -msgid "The update was successful. Redirecting you to ownCloud now." -msgstr "" - -#: lostpassword/controller.php:48 -msgid "ownCloud password reset" -msgstr "" - -#: lostpassword/templates/email.php:2 -msgid "Use the following link to reset your password: {link}" -msgstr "" - -#: lostpassword/templates/lostpassword.php:4 -msgid "" -"The link to reset your password has been sent to your email.
    If you do " -"not receive it within a reasonable amount of time, check your spam/junk " -"folders.
    If it is not there ask your local administrator ." -msgstr "" - -#: lostpassword/templates/lostpassword.php:12 -msgid "Request failed!
    Did you make sure your email/username was right?" -msgstr "" - -#: lostpassword/templates/lostpassword.php:15 -msgid "You will receive a link to reset your password via Email." -msgstr "" - -#: lostpassword/templates/lostpassword.php:18 templates/installation.php:48 -#: templates/login.php:19 -msgid "Username" -msgstr "Nazwa użytkownika" - -#: lostpassword/templates/lostpassword.php:21 -msgid "Request reset" -msgstr "" - -#: lostpassword/templates/resetpassword.php:4 -msgid "Your password was reset" -msgstr "" - -#: lostpassword/templates/resetpassword.php:5 -msgid "To login page" -msgstr "" - -#: lostpassword/templates/resetpassword.php:8 -msgid "New password" -msgstr "" - -#: lostpassword/templates/resetpassword.php:11 -msgid "Reset password" -msgstr "" - -#: strings.php:5 -msgid "Personal" -msgstr "" - -#: strings.php:6 -msgid "Users" -msgstr "" - -#: strings.php:7 -msgid "Apps" -msgstr "" - -#: strings.php:8 -msgid "Admin" -msgstr "" - -#: strings.php:9 -msgid "Help" -msgstr "" - -#: templates/403.php:12 -msgid "Access forbidden" -msgstr "" - -#: templates/404.php:12 -msgid "Cloud not found" -msgstr "" - -#: templates/edit_categories_dialog.php:4 -msgid "Edit categories" -msgstr "" - -#: templates/edit_categories_dialog.php:16 -msgid "Add" -msgstr "" - -#: templates/installation.php:24 templates/installation.php:31 -#: templates/installation.php:38 -msgid "Security Warning" -msgstr "" - -#: templates/installation.php:25 -msgid "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" -msgstr "" - -#: templates/installation.php:26 -msgid "Please update your PHP installation to use ownCloud securely." -msgstr "" - -#: templates/installation.php:32 -msgid "" -"No secure random number generator is available, please enable the PHP " -"OpenSSL extension." -msgstr "" - -#: templates/installation.php:33 -msgid "" -"Without a secure random number generator an attacker may be able to predict " -"password reset tokens and take over your account." -msgstr "" - -#: templates/installation.php:39 -msgid "" -"Your data directory and files are probably accessible from the internet " -"because the .htaccess file does not work." -msgstr "" - -#: templates/installation.php:40 -msgid "" -"For information how to properly configure your server, please see the documentation." -msgstr "" - -#: templates/installation.php:44 -msgid "Create an admin account" -msgstr "" - -#: templates/installation.php:62 -msgid "Advanced" -msgstr "" - -#: templates/installation.php:64 -msgid "Data folder" -msgstr "" - -#: templates/installation.php:74 -msgid "Configure the database" -msgstr "" - -#: templates/installation.php:79 templates/installation.php:91 -#: templates/installation.php:102 templates/installation.php:113 -#: templates/installation.php:125 -msgid "will be used" -msgstr "" - -#: templates/installation.php:137 -msgid "Database user" -msgstr "" - -#: templates/installation.php:144 -msgid "Database password" -msgstr "" - -#: templates/installation.php:149 -msgid "Database name" -msgstr "" - -#: templates/installation.php:159 -msgid "Database tablespace" -msgstr "" - -#: templates/installation.php:166 -msgid "Database host" -msgstr "" - -#: templates/installation.php:172 -msgid "Finish setup" -msgstr "" - -#: templates/layout.guest.php:40 -msgid "web services under your control" -msgstr "" - -#: templates/layout.user.php:37 -#, php-format -msgid "%s is available. Get more information on how to update." -msgstr "" - -#: templates/layout.user.php:62 -msgid "Log out" -msgstr "" - -#: templates/login.php:9 -msgid "Automatic logon rejected!" -msgstr "" - -#: templates/login.php:10 -msgid "" -"If you did not change your password recently, your account may be " -"compromised!" -msgstr "" - -#: templates/login.php:12 -msgid "Please change your password to secure your account again." -msgstr "" - -#: templates/login.php:34 -msgid "Lost your password?" -msgstr "" - -#: templates/login.php:39 -msgid "remember" -msgstr "" - -#: templates/login.php:41 -msgid "Log in" -msgstr "" - -#: templates/login.php:47 -msgid "Alternative Logins" -msgstr "" - -#: templates/part.pagenavi.php:3 -msgid "prev" -msgstr "" - -#: templates/part.pagenavi.php:20 -msgid "next" -msgstr "" - -#: templates/update.php:3 -#, php-format -msgid "Updating ownCloud to version %s, this may take a while." -msgstr "" diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po deleted file mode 100644 index be28fc5ba3..0000000000 --- a/l10n/pl_PL/files.po +++ /dev/null @@ -1,322 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-06-03 02:27+0200\n" -"PO-Revision-Date: 2013-06-02 23:17+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/move.php:17 -#, php-format -msgid "Could not move %s - File with this name already exists" -msgstr "" - -#: ajax/move.php:27 ajax/move.php:30 -#, php-format -msgid "Could not move %s" -msgstr "" - -#: ajax/upload.php:19 -msgid "No file was uploaded. Unknown error" -msgstr "" - -#: ajax/upload.php:26 -msgid "There is no error, the file uploaded with success" -msgstr "" - -#: ajax/upload.php:27 -msgid "" -"The uploaded file exceeds the upload_max_filesize directive in php.ini: " -msgstr "" - -#: ajax/upload.php:29 -msgid "" -"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " -"the HTML form" -msgstr "" - -#: ajax/upload.php:30 -msgid "The uploaded file was only partially uploaded" -msgstr "" - -#: ajax/upload.php:31 -msgid "No file was uploaded" -msgstr "" - -#: ajax/upload.php:32 -msgid "Missing a temporary folder" -msgstr "" - -#: ajax/upload.php:33 -msgid "Failed to write to disk" -msgstr "" - -#: ajax/upload.php:51 -msgid "Not enough storage available" -msgstr "" - -#: ajax/upload.php:83 -msgid "Invalid directory." -msgstr "" - -#: appinfo/app.php:12 -msgid "Files" -msgstr "" - -#: js/fileactions.js:116 -msgid "Share" -msgstr "" - -#: js/fileactions.js:126 -msgid "Delete permanently" -msgstr "" - -#: js/fileactions.js:128 templates/index.php:93 templates/index.php:94 -msgid "Delete" -msgstr "" - -#: js/fileactions.js:194 -msgid "Rename" -msgstr "" - -#: js/filelist.js:49 js/filelist.js:52 js/filelist.js:421 -msgid "Pending" -msgstr "" - -#: js/filelist.js:259 js/filelist.js:261 -msgid "{new_name} already exists" -msgstr "" - -#: js/filelist.js:259 js/filelist.js:261 -msgid "replace" -msgstr "" - -#: js/filelist.js:259 -msgid "suggest name" -msgstr "" - -#: js/filelist.js:259 js/filelist.js:261 -msgid "cancel" -msgstr "" - -#: js/filelist.js:306 -msgid "replaced {new_name} with {old_name}" -msgstr "" - -#: js/filelist.js:306 -msgid "undo" -msgstr "" - -#: js/filelist.js:331 -msgid "perform delete operation" -msgstr "" - -#: js/filelist.js:413 -msgid "1 file uploading" -msgstr "" - -#: js/filelist.js:416 js/filelist.js:470 -msgid "files uploading" -msgstr "" - -#: js/files.js:52 -msgid "'.' is an invalid file name." -msgstr "" - -#: js/files.js:56 -msgid "File name cannot be empty." -msgstr "" - -#: js/files.js:64 -msgid "" -"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not " -"allowed." -msgstr "" - -#: js/files.js:78 -msgid "Your storage is full, files can not be updated or synced anymore!" -msgstr "" - -#: js/files.js:82 -msgid "Your storage is almost full ({usedSpacePercent}%)" -msgstr "" - -#: js/files.js:231 -msgid "" -"Your download is being prepared. This might take some time if the files are " -"big." -msgstr "" - -#: js/files.js:264 -msgid "Unable to upload your file as it is a directory or has 0 bytes" -msgstr "" - -#: js/files.js:277 -msgid "Not enough space available" -msgstr "" - -#: js/files.js:317 -msgid "Upload cancelled." -msgstr "" - -#: js/files.js:413 -msgid "" -"File upload is in progress. Leaving the page now will cancel the upload." -msgstr "" - -#: js/files.js:486 -msgid "URL cannot be empty." -msgstr "" - -#: js/files.js:491 -msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud" -msgstr "" - -#: js/files.js:520 js/files.js:536 js/files.js:826 js/files.js:864 -msgid "Error" -msgstr "" - -#: js/files.js:877 templates/index.php:69 -msgid "Name" -msgstr "" - -#: js/files.js:878 templates/index.php:80 -msgid "Size" -msgstr "" - -#: js/files.js:879 templates/index.php:82 -msgid "Modified" -msgstr "" - -#: js/files.js:898 -msgid "1 folder" -msgstr "" - -#: js/files.js:900 -msgid "{count} folders" -msgstr "" - -#: js/files.js:908 -msgid "1 file" -msgstr "" - -#: js/files.js:910 -msgid "{count} files" -msgstr "" - -#: lib/app.php:53 -msgid "Invalid folder name. Usage of 'Shared' is reserved by ownCloud" -msgstr "" - -#: lib/app.php:73 -msgid "Unable to rename file" -msgstr "" - -#: lib/helper.php:11 templates/index.php:18 -msgid "Upload" -msgstr "" - -#: templates/admin.php:5 -msgid "File handling" -msgstr "" - -#: templates/admin.php:7 -msgid "Maximum upload size" -msgstr "" - -#: templates/admin.php:10 -msgid "max. possible: " -msgstr "" - -#: templates/admin.php:15 -msgid "Needed for multi-file and folder downloads." -msgstr "" - -#: templates/admin.php:17 -msgid "Enable ZIP-download" -msgstr "" - -#: templates/admin.php:20 -msgid "0 is unlimited" -msgstr "" - -#: templates/admin.php:22 -msgid "Maximum input size for ZIP files" -msgstr "" - -#: templates/admin.php:26 -msgid "Save" -msgstr "Zapisz" - -#: templates/index.php:7 -msgid "New" -msgstr "" - -#: templates/index.php:10 -msgid "Text file" -msgstr "" - -#: templates/index.php:12 -msgid "Folder" -msgstr "" - -#: templates/index.php:14 -msgid "From link" -msgstr "" - -#: templates/index.php:42 -msgid "Deleted files" -msgstr "" - -#: templates/index.php:48 -msgid "Cancel upload" -msgstr "" - -#: templates/index.php:54 -msgid "You don’t have write permissions here." -msgstr "" - -#: templates/index.php:61 -msgid "Nothing in here. Upload something!" -msgstr "" - -#: templates/index.php:75 -msgid "Download" -msgstr "" - -#: templates/index.php:87 templates/index.php:88 -msgid "Unshare" -msgstr "" - -#: templates/index.php:107 -msgid "Upload too large" -msgstr "" - -#: templates/index.php:109 -msgid "" -"The files you are trying to upload exceed the maximum size for file uploads " -"on this server." -msgstr "" - -#: templates/index.php:114 -msgid "Files are being scanned, please wait." -msgstr "" - -#: templates/index.php:117 -msgid "Current scanning" -msgstr "" - -#: templates/upgrade.php:2 -msgid "Upgrading filesystem cache..." -msgstr "" diff --git a/l10n/pl_PL/files_encryption.po b/l10n/pl_PL/files_encryption.po deleted file mode 100644 index 6b66a61ef6..0000000000 --- a/l10n/pl_PL/files_encryption.po +++ /dev/null @@ -1,103 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-30 02:27+0200\n" -"PO-Revision-Date: 2013-05-30 00:27+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/adminrecovery.php:29 -msgid "Recovery key successfully enabled" -msgstr "" - -#: ajax/adminrecovery.php:34 -msgid "" -"Could not enable recovery key. Please check your recovery key password!" -msgstr "" - -#: ajax/adminrecovery.php:48 -msgid "Recovery key successfully disabled" -msgstr "" - -#: ajax/adminrecovery.php:53 -msgid "" -"Could not disable recovery key. Please check your recovery key password!" -msgstr "" - -#: ajax/changeRecoveryPassword.php:49 -msgid "Password successfully changed." -msgstr "" - -#: ajax/changeRecoveryPassword.php:51 -msgid "Could not change the password. Maybe the old password was not correct." -msgstr "" - -#: js/settings-admin.js:11 -msgid "Saving..." -msgstr "" - -#: templates/settings-admin.php:5 templates/settings-personal.php:4 -msgid "Encryption" -msgstr "" - -#: templates/settings-admin.php:9 -msgid "" -"Enable encryption passwords recovery key (allow sharing to recovery key):" -msgstr "" - -#: templates/settings-admin.php:13 -msgid "Recovery account password" -msgstr "" - -#: templates/settings-admin.php:20 templates/settings-personal.php:18 -msgid "Enabled" -msgstr "" - -#: templates/settings-admin.php:28 templates/settings-personal.php:26 -msgid "Disabled" -msgstr "" - -#: templates/settings-admin.php:32 -msgid "Change encryption passwords recovery key:" -msgstr "" - -#: templates/settings-admin.php:39 -msgid "Old Recovery account password" -msgstr "" - -#: templates/settings-admin.php:46 -msgid "New Recovery account password" -msgstr "" - -#: templates/settings-admin.php:51 -msgid "Change Password" -msgstr "" - -#: templates/settings-personal.php:9 -msgid "Enable password recovery by sharing all files with your administrator:" -msgstr "" - -#: templates/settings-personal.php:11 -msgid "" -"Enabling this option will allow you to reobtain access to your encrypted " -"files if your password is lost" -msgstr "" - -#: templates/settings-personal.php:27 -msgid "File recovery settings updated" -msgstr "" - -#: templates/settings-personal.php:28 -msgid "Could not update file recovery" -msgstr "" diff --git a/l10n/pl_PL/files_external.po b/l10n/pl_PL/files_external.po deleted file mode 100644 index be11b7a026..0000000000 --- a/l10n/pl_PL/files_external.po +++ /dev/null @@ -1,123 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-25 02:01+0200\n" -"PO-Revision-Date: 2013-04-26 08:01+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: js/dropbox.js:7 js/dropbox.js:28 js/google.js:16 js/google.js:34 -msgid "Access granted" -msgstr "" - -#: js/dropbox.js:30 js/dropbox.js:96 js/dropbox.js:102 -msgid "Error configuring Dropbox storage" -msgstr "" - -#: js/dropbox.js:65 js/google.js:66 -msgid "Grant access" -msgstr "" - -#: js/dropbox.js:101 -msgid "Please provide a valid Dropbox app key and secret." -msgstr "" - -#: js/google.js:36 js/google.js:93 -msgid "Error configuring Google Drive storage" -msgstr "" - -#: lib/config.php:431 -msgid "" -"Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " -"is not possible. Please ask your system administrator to install it." -msgstr "" - -#: lib/config.php:434 -msgid "" -"Warning: 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." -msgstr "" - -#: lib/config.php:437 -msgid "" -"Warning: The Curl support in PHP is not enabled or installed. " -"Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask " -"your system administrator to install it." -msgstr "" - -#: templates/settings.php:3 -msgid "External Storage" -msgstr "" - -#: templates/settings.php:9 templates/settings.php:28 -msgid "Folder name" -msgstr "" - -#: templates/settings.php:10 -msgid "External storage" -msgstr "" - -#: templates/settings.php:11 -msgid "Configuration" -msgstr "" - -#: templates/settings.php:12 -msgid "Options" -msgstr "" - -#: templates/settings.php:13 -msgid "Applicable" -msgstr "" - -#: templates/settings.php:33 -msgid "Add storage" -msgstr "" - -#: templates/settings.php:90 -msgid "None set" -msgstr "" - -#: templates/settings.php:91 -msgid "All Users" -msgstr "" - -#: templates/settings.php:92 -msgid "Groups" -msgstr "" - -#: templates/settings.php:100 -msgid "Users" -msgstr "" - -#: templates/settings.php:113 templates/settings.php:114 -#: templates/settings.php:149 templates/settings.php:150 -msgid "Delete" -msgstr "" - -#: templates/settings.php:129 -msgid "Enable User External Storage" -msgstr "" - -#: templates/settings.php:130 -msgid "Allow users to mount their own external storage" -msgstr "" - -#: templates/settings.php:141 -msgid "SSL root certificates" -msgstr "" - -#: templates/settings.php:159 -msgid "Import Root Certificate" -msgstr "" diff --git a/l10n/pl_PL/files_sharing.po b/l10n/pl_PL/files_sharing.po deleted file mode 100644 index c8bd08a2ea..0000000000 --- a/l10n/pl_PL/files_sharing.po +++ /dev/null @@ -1,48 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-25 02:01+0200\n" -"PO-Revision-Date: 2013-04-26 08:01+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: templates/authenticate.php:4 -msgid "Password" -msgstr "" - -#: templates/authenticate.php:6 -msgid "Submit" -msgstr "" - -#: templates/public.php:10 -#, php-format -msgid "%s shared the folder %s with you" -msgstr "" - -#: templates/public.php:13 -#, php-format -msgid "%s shared the file %s with you" -msgstr "" - -#: templates/public.php:19 templates/public.php:43 -msgid "Download" -msgstr "" - -#: templates/public.php:40 -msgid "No preview available for" -msgstr "" - -#: templates/public.php:50 -msgid "web services under your control" -msgstr "" diff --git a/l10n/pl_PL/files_trashbin.po b/l10n/pl_PL/files_trashbin.po deleted file mode 100644 index e6ecf010e7..0000000000 --- a/l10n/pl_PL/files_trashbin.po +++ /dev/null @@ -1,84 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-25 02:01+0200\n" -"PO-Revision-Date: 2013-04-26 08:01+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/delete.php:42 -#, php-format -msgid "Couldn't delete %s permanently" -msgstr "" - -#: ajax/undelete.php:42 -#, php-format -msgid "Couldn't restore %s" -msgstr "" - -#: js/trash.js:7 js/trash.js:96 -msgid "perform restore operation" -msgstr "" - -#: js/trash.js:19 js/trash.js:46 js/trash.js:114 js/trash.js:139 -msgid "Error" -msgstr "" - -#: js/trash.js:34 -msgid "delete file permanently" -msgstr "" - -#: js/trash.js:121 -msgid "Delete permanently" -msgstr "" - -#: js/trash.js:174 templates/index.php:17 -msgid "Name" -msgstr "" - -#: js/trash.js:175 templates/index.php:27 -msgid "Deleted" -msgstr "" - -#: js/trash.js:184 -msgid "1 folder" -msgstr "" - -#: js/trash.js:186 -msgid "{count} folders" -msgstr "" - -#: js/trash.js:194 -msgid "1 file" -msgstr "" - -#: js/trash.js:196 -msgid "{count} files" -msgstr "" - -#: templates/index.php:9 -msgid "Nothing in here. Your trash bin is empty!" -msgstr "" - -#: templates/index.php:20 templates/index.php:22 -msgid "Restore" -msgstr "" - -#: templates/index.php:30 templates/index.php:31 -msgid "Delete" -msgstr "" - -#: templates/part.breadcrumb.php:9 -msgid "Deleted Files" -msgstr "" diff --git a/l10n/pl_PL/files_versions.po b/l10n/pl_PL/files_versions.po deleted file mode 100644 index d6ce265c2a..0000000000 --- a/l10n/pl_PL/files_versions.po +++ /dev/null @@ -1,57 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-25 02:01+0200\n" -"PO-Revision-Date: 2013-04-26 08:01+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/rollbackVersion.php:15 -#, php-format -msgid "Could not revert: %s" -msgstr "" - -#: history.php:40 -msgid "success" -msgstr "" - -#: history.php:42 -#, php-format -msgid "File %s was reverted to version %s" -msgstr "" - -#: history.php:49 -msgid "failure" -msgstr "" - -#: history.php:51 -#, php-format -msgid "File %s could not be reverted to version %s" -msgstr "" - -#: history.php:69 -msgid "No old versions available" -msgstr "" - -#: history.php:74 -msgid "No path specified" -msgstr "" - -#: js/versions.js:6 -msgid "Versions" -msgstr "" - -#: templates/history.php:20 -msgid "Revert a file to a previous version by clicking on its revert button" -msgstr "" diff --git a/l10n/pl_PL/lib.po b/l10n/pl_PL/lib.po deleted file mode 100644 index e91de0bce1..0000000000 --- a/l10n/pl_PL/lib.po +++ /dev/null @@ -1,245 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-06-04 02:29+0200\n" -"PO-Revision-Date: 2013-06-03 00:32+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: app.php:357 -msgid "Help" -msgstr "" - -#: app.php:370 -msgid "Personal" -msgstr "" - -#: app.php:381 -msgid "Settings" -msgstr "Ustawienia" - -#: app.php:393 -msgid "Users" -msgstr "" - -#: app.php:406 -msgid "Apps" -msgstr "" - -#: app.php:414 -msgid "Admin" -msgstr "" - -#: files.php:210 -msgid "ZIP download is turned off." -msgstr "" - -#: files.php:211 -msgid "Files need to be downloaded one by one." -msgstr "" - -#: files.php:212 files.php:245 -msgid "Back to Files" -msgstr "" - -#: files.php:242 -msgid "Selected files too large to generate zip file." -msgstr "" - -#: helper.php:236 -msgid "couldn't be determined" -msgstr "" - -#: json.php:28 -msgid "Application is not enabled" -msgstr "" - -#: json.php:39 json.php:62 json.php:73 -msgid "Authentication error" -msgstr "" - -#: json.php:51 -msgid "Token expired. Please reload page." -msgstr "" - -#: search/provider/file.php:17 search/provider/file.php:35 -msgid "Files" -msgstr "" - -#: search/provider/file.php:26 search/provider/file.php:33 -msgid "Text" -msgstr "" - -#: search/provider/file.php:29 -msgid "Images" -msgstr "" - -#: setup.php:34 -msgid "Set an admin username." -msgstr "" - -#: setup.php:37 -msgid "Set an admin password." -msgstr "" - -#: setup.php:55 -#, php-format -msgid "%s enter the database username." -msgstr "" - -#: setup.php:58 -#, php-format -msgid "%s enter the database name." -msgstr "" - -#: setup.php:61 -#, php-format -msgid "%s you may not use dots in the database name" -msgstr "" - -#: setup.php:64 -#, php-format -msgid "%s set the database host." -msgstr "" - -#: setup.php:132 setup.php:329 setup.php:374 -msgid "PostgreSQL username and/or password not valid" -msgstr "" - -#: setup.php:133 setup.php:238 -msgid "You need to enter either an existing account or the administrator." -msgstr "" - -#: setup.php:155 -msgid "Oracle connection could not be established" -msgstr "" - -#: setup.php:237 -msgid "MySQL username and/or password not valid" -msgstr "" - -#: setup.php:291 setup.php:395 setup.php:404 setup.php:422 setup.php:432 -#: setup.php:441 setup.php:474 setup.php:540 setup.php:566 setup.php:573 -#: setup.php:584 setup.php:591 setup.php:600 setup.php:608 setup.php:617 -#: setup.php:623 -#, php-format -msgid "DB Error: \"%s\"" -msgstr "" - -#: setup.php:292 setup.php:396 setup.php:405 setup.php:423 setup.php:433 -#: setup.php:442 setup.php:475 setup.php:541 setup.php:567 setup.php:574 -#: setup.php:585 setup.php:601 setup.php:609 setup.php:618 -#, php-format -msgid "Offending command was: \"%s\"" -msgstr "" - -#: setup.php:308 -#, php-format -msgid "MySQL user '%s'@'localhost' exists already." -msgstr "" - -#: setup.php:309 -msgid "Drop this user from MySQL" -msgstr "" - -#: setup.php:314 -#, php-format -msgid "MySQL user '%s'@'%%' already exists" -msgstr "" - -#: setup.php:315 -msgid "Drop this user from MySQL." -msgstr "" - -#: setup.php:466 setup.php:533 -msgid "Oracle username and/or password not valid" -msgstr "" - -#: setup.php:592 setup.php:624 -#, php-format -msgid "Offending command was: \"%s\", name: %s, password: %s" -msgstr "" - -#: setup.php:644 -#, php-format -msgid "MS SQL username and/or password not valid: %s" -msgstr "" - -#: setup.php:867 -msgid "" -"Your web server is not yet properly setup to allow files synchronization " -"because the WebDAV interface seems to be broken." -msgstr "" - -#: setup.php:868 -#, php-format -msgid "Please double check the installation guides." -msgstr "" - -#: template.php:113 -msgid "seconds ago" -msgstr "" - -#: template.php:114 -msgid "1 minute ago" -msgstr "" - -#: template.php:115 -#, php-format -msgid "%d minutes ago" -msgstr "" - -#: template.php:116 -msgid "1 hour ago" -msgstr "" - -#: template.php:117 -#, php-format -msgid "%d hours ago" -msgstr "" - -#: template.php:118 -msgid "today" -msgstr "" - -#: template.php:119 -msgid "yesterday" -msgstr "" - -#: template.php:120 -#, php-format -msgid "%d days ago" -msgstr "" - -#: template.php:121 -msgid "last month" -msgstr "" - -#: template.php:122 -#, php-format -msgid "%d months ago" -msgstr "" - -#: template.php:123 -msgid "last year" -msgstr "" - -#: template.php:124 -msgid "years ago" -msgstr "" - -#: vcategories.php:188 vcategories.php:249 -#, php-format -msgid "Could not find category \"%s\"" -msgstr "" diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po deleted file mode 100644 index 68a0e23721..0000000000 --- a/l10n/pl_PL/settings.po +++ /dev/null @@ -1,496 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-06-03 02:27+0200\n" -"PO-Revision-Date: 2013-06-02 23:17+0000\n" -"Last-Translator: I Robot \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/apps/ocs.php:20 -msgid "Unable to load list from App Store" -msgstr "" - -#: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17 -#: ajax/togglegroups.php:20 -msgid "Authentication error" -msgstr "" - -#: ajax/changedisplayname.php:31 -msgid "Your display name has been changed." -msgstr "" - -#: ajax/changedisplayname.php:34 -msgid "Unable to change display name" -msgstr "" - -#: ajax/creategroup.php:10 -msgid "Group already exists" -msgstr "" - -#: ajax/creategroup.php:19 -msgid "Unable to add group" -msgstr "" - -#: ajax/enableapp.php:11 -msgid "Could not enable app. " -msgstr "" - -#: ajax/lostpassword.php:12 -msgid "Email saved" -msgstr "" - -#: ajax/lostpassword.php:14 -msgid "Invalid email" -msgstr "" - -#: ajax/removegroup.php:13 -msgid "Unable to delete group" -msgstr "" - -#: ajax/removeuser.php:24 -msgid "Unable to delete user" -msgstr "" - -#: ajax/setlanguage.php:15 -msgid "Language changed" -msgstr "" - -#: ajax/setlanguage.php:17 ajax/setlanguage.php:20 -msgid "Invalid request" -msgstr "" - -#: ajax/togglegroups.php:12 -msgid "Admins can't remove themself from the admin group" -msgstr "" - -#: ajax/togglegroups.php:30 -#, php-format -msgid "Unable to add user to group %s" -msgstr "" - -#: ajax/togglegroups.php:36 -#, php-format -msgid "Unable to remove user from group %s" -msgstr "" - -#: ajax/updateapp.php:14 -msgid "Couldn't update app." -msgstr "" - -#: js/apps.js:30 -msgid "Update to {appversion}" -msgstr "" - -#: js/apps.js:36 js/apps.js:76 -msgid "Disable" -msgstr "" - -#: js/apps.js:36 js/apps.js:64 js/apps.js:83 -msgid "Enable" -msgstr "" - -#: js/apps.js:55 -msgid "Please wait...." -msgstr "" - -#: js/apps.js:59 js/apps.js:71 js/apps.js:80 js/apps.js:93 -msgid "Error" -msgstr "" - -#: js/apps.js:90 -msgid "Updating...." -msgstr "" - -#: js/apps.js:93 -msgid "Error while updating app" -msgstr "" - -#: js/apps.js:96 -msgid "Updated" -msgstr "" - -#: js/personal.js:118 -msgid "Saving..." -msgstr "" - -#: js/users.js:47 -msgid "deleted" -msgstr "" - -#: js/users.js:47 -msgid "undo" -msgstr "" - -#: js/users.js:79 -msgid "Unable to remove user" -msgstr "" - -#: js/users.js:92 templates/users.php:26 templates/users.php:83 -#: templates/users.php:108 -msgid "Groups" -msgstr "" - -#: js/users.js:95 templates/users.php:85 templates/users.php:120 -msgid "Group Admin" -msgstr "" - -#: js/users.js:115 templates/users.php:160 -msgid "Delete" -msgstr "" - -#: js/users.js:269 -msgid "add group" -msgstr "" - -#: js/users.js:428 -msgid "A valid username must be provided" -msgstr "" - -#: js/users.js:429 js/users.js:435 js/users.js:450 -msgid "Error creating user" -msgstr "" - -#: js/users.js:434 -msgid "A valid password must be provided" -msgstr "" - -#: personal.php:35 personal.php:36 -msgid "__language_name__" -msgstr "" - -#: templates/admin.php:15 -msgid "Security Warning" -msgstr "" - -#: templates/admin.php:18 -msgid "" -"Your data directory and your files are probably accessible from the " -"internet. The .htaccess file that ownCloud provides is not working. We " -"strongly suggest that you configure your webserver in a way that the data " -"directory is no longer accessible or you move the data directory outside the" -" webserver document root." -msgstr "" - -#: templates/admin.php:29 -msgid "Setup Warning" -msgstr "" - -#: templates/admin.php:32 -msgid "" -"Your web server is not yet properly setup to allow files synchronization " -"because the WebDAV interface seems to be broken." -msgstr "" - -#: templates/admin.php:33 -#, php-format -msgid "Please double check the installation guides." -msgstr "" - -#: templates/admin.php:44 -msgid "Module 'fileinfo' missing" -msgstr "" - -#: templates/admin.php:47 -msgid "" -"The PHP module 'fileinfo' is missing. We strongly recommend to enable this " -"module to get best results with mime-type detection." -msgstr "" - -#: templates/admin.php:58 -msgid "Locale not working" -msgstr "" - -#: templates/admin.php:63 -#, php-format -msgid "" -"This ownCloud server can't set system locale to %s. This means that there " -"might be problems with certain characters in file names. We strongly suggest" -" to install the required packages on your system to support %s." -msgstr "" - -#: templates/admin.php:75 -msgid "Internet connection not working" -msgstr "" - -#: templates/admin.php:78 -msgid "" -"This ownCloud server has no working internet connection. This means that " -"some of the features like mounting of external storage, notifications about " -"updates or installation of 3rd party apps don´t work. Accessing files from " -"remote and sending of notification emails might also not work. We suggest to" -" enable internet connection for this server if you want to have all features" -" of ownCloud." -msgstr "" - -#: templates/admin.php:92 -msgid "Cron" -msgstr "" - -#: templates/admin.php:101 -msgid "Execute one task with each page loaded" -msgstr "" - -#: templates/admin.php:111 -msgid "" -"cron.php is registered at a webcron service. Call the cron.php page in the " -"owncloud root once a minute over http." -msgstr "" - -#: templates/admin.php:121 -msgid "" -"Use systems cron service. Call the cron.php file in the owncloud folder via " -"a system cronjob once a minute." -msgstr "" - -#: templates/admin.php:128 -msgid "Sharing" -msgstr "" - -#: templates/admin.php:134 -msgid "Enable Share API" -msgstr "" - -#: templates/admin.php:135 -msgid "Allow apps to use the Share API" -msgstr "" - -#: templates/admin.php:142 -msgid "Allow links" -msgstr "" - -#: templates/admin.php:143 -msgid "Allow users to share items to the public with links" -msgstr "" - -#: templates/admin.php:150 -msgid "Allow resharing" -msgstr "" - -#: templates/admin.php:151 -msgid "Allow users to share items shared with them again" -msgstr "" - -#: templates/admin.php:158 -msgid "Allow users to share with anyone" -msgstr "" - -#: templates/admin.php:161 -msgid "Allow users to only share with users in their groups" -msgstr "" - -#: templates/admin.php:168 -msgid "Security" -msgstr "" - -#: templates/admin.php:181 -msgid "Enforce HTTPS" -msgstr "" - -#: templates/admin.php:182 -msgid "" -"Enforces the clients to connect to ownCloud via an encrypted connection." -msgstr "" - -#: templates/admin.php:185 -msgid "" -"Please connect to this ownCloud instance via HTTPS to enable or disable the " -"SSL enforcement." -msgstr "" - -#: templates/admin.php:195 -msgid "Log" -msgstr "" - -#: templates/admin.php:196 -msgid "Log level" -msgstr "" - -#: templates/admin.php:227 -msgid "More" -msgstr "" - -#: templates/admin.php:228 -msgid "Less" -msgstr "" - -#: templates/admin.php:235 templates/personal.php:111 -msgid "Version" -msgstr "" - -#: templates/admin.php:237 templates/personal.php:114 -msgid "" -"Developed by the ownCloud community, the source code is " -"licensed under the AGPL." -msgstr "" - -#: templates/apps.php:11 -msgid "Add your App" -msgstr "" - -#: templates/apps.php:12 -msgid "More Apps" -msgstr "" - -#: templates/apps.php:28 -msgid "Select an App" -msgstr "" - -#: templates/apps.php:34 -msgid "See application page at apps.owncloud.com" -msgstr "" - -#: templates/apps.php:36 -msgid "-licensed by " -msgstr "" - -#: templates/apps.php:38 -msgid "Update" -msgstr "Uaktualnienie" - -#: templates/help.php:4 -msgid "User Documentation" -msgstr "" - -#: templates/help.php:6 -msgid "Administrator Documentation" -msgstr "" - -#: templates/help.php:9 -msgid "Online Documentation" -msgstr "" - -#: templates/help.php:11 -msgid "Forum" -msgstr "" - -#: templates/help.php:14 -msgid "Bugtracker" -msgstr "" - -#: templates/help.php:17 -msgid "Commercial Support" -msgstr "" - -#: templates/personal.php:8 -#, php-format -msgid "You have used %s of the available %s" -msgstr "" - -#: templates/personal.php:15 -msgid "Get the apps to sync your files" -msgstr "" - -#: templates/personal.php:26 -msgid "Show First Run Wizard again" -msgstr "" - -#: templates/personal.php:37 templates/users.php:23 templates/users.php:82 -msgid "Password" -msgstr "" - -#: templates/personal.php:38 -msgid "Your password was changed" -msgstr "" - -#: templates/personal.php:39 -msgid "Unable to change your password" -msgstr "" - -#: templates/personal.php:40 -msgid "Current password" -msgstr "" - -#: templates/personal.php:42 -msgid "New password" -msgstr "" - -#: templates/personal.php:44 -msgid "Change password" -msgstr "" - -#: templates/personal.php:56 templates/users.php:81 -msgid "Display Name" -msgstr "" - -#: templates/personal.php:71 -msgid "Email" -msgstr "Email" - -#: templates/personal.php:73 -msgid "Your email address" -msgstr "" - -#: templates/personal.php:74 -msgid "Fill in an email address to enable password recovery" -msgstr "" - -#: templates/personal.php:83 templates/personal.php:84 -msgid "Language" -msgstr "" - -#: templates/personal.php:95 -msgid "Help translate" -msgstr "" - -#: templates/personal.php:100 -msgid "WebDAV" -msgstr "" - -#: templates/personal.php:102 -msgid "Use this address to connect to your ownCloud in your file manager" -msgstr "" - -#: templates/users.php:21 templates/users.php:80 -msgid "Login Name" -msgstr "" - -#: templates/users.php:30 -msgid "Create" -msgstr "" - -#: templates/users.php:34 -msgid "Admin Recovery Password" -msgstr "" - -#: templates/users.php:38 -msgid "Default Storage" -msgstr "" - -#: templates/users.php:44 templates/users.php:138 -msgid "Unlimited" -msgstr "" - -#: templates/users.php:62 templates/users.php:153 -msgid "Other" -msgstr "" - -#: templates/users.php:87 -msgid "Storage" -msgstr "" - -#: templates/users.php:98 -msgid "change display name" -msgstr "" - -#: templates/users.php:102 -msgid "set new password" -msgstr "" - -#: templates/users.php:133 -msgid "Default" -msgstr "" diff --git a/l10n/pl_PL/user_ldap.po b/l10n/pl_PL/user_ldap.po deleted file mode 100644 index 242252ed0e..0000000000 --- a/l10n/pl_PL/user_ldap.po +++ /dev/null @@ -1,419 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-25 02:01+0200\n" -"PO-Revision-Date: 2013-04-26 08:02+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: ajax/clearMappings.php:34 -msgid "Failed to clear the mappings." -msgstr "" - -#: ajax/deleteConfiguration.php:34 -msgid "Failed to delete the server configuration" -msgstr "" - -#: ajax/testConfiguration.php:36 -msgid "The configuration is valid and the connection could be established!" -msgstr "" - -#: ajax/testConfiguration.php:39 -msgid "" -"The configuration is valid, but the Bind failed. Please check the server " -"settings and credentials." -msgstr "" - -#: ajax/testConfiguration.php:43 -msgid "" -"The configuration is invalid. Please look in the ownCloud log for further " -"details." -msgstr "" - -#: js/settings.js:66 -msgid "Deletion failed" -msgstr "" - -#: js/settings.js:82 -msgid "Take over settings from recent server configuration?" -msgstr "" - -#: js/settings.js:83 -msgid "Keep settings?" -msgstr "" - -#: js/settings.js:97 -msgid "Cannot add server configuration" -msgstr "" - -#: js/settings.js:111 -msgid "mappings cleared" -msgstr "" - -#: js/settings.js:112 -msgid "Success" -msgstr "" - -#: js/settings.js:117 -msgid "Error" -msgstr "" - -#: js/settings.js:141 -msgid "Connection test succeeded" -msgstr "" - -#: js/settings.js:146 -msgid "Connection test failed" -msgstr "" - -#: js/settings.js:156 -msgid "Do you really want to delete the current Server Configuration?" -msgstr "" - -#: js/settings.js:157 -msgid "Confirm Deletion" -msgstr "" - -#: templates/settings.php:9 -msgid "" -"Warning: Apps user_ldap and user_webdavauth are incompatible. You may" -" experience unexpected behaviour. Please ask your system administrator to " -"disable one of them." -msgstr "" - -#: templates/settings.php:12 -msgid "" -"Warning: The PHP LDAP module is not installed, the backend will not " -"work. Please ask your system administrator to install it." -msgstr "" - -#: templates/settings.php:16 -msgid "Server configuration" -msgstr "" - -#: templates/settings.php:32 -msgid "Add Server Configuration" -msgstr "" - -#: templates/settings.php:37 -msgid "Host" -msgstr "" - -#: templates/settings.php:39 -msgid "" -"You can omit the protocol, except you require SSL. Then start with ldaps://" -msgstr "" - -#: templates/settings.php:40 -msgid "Base DN" -msgstr "" - -#: templates/settings.php:41 -msgid "One Base DN per line" -msgstr "" - -#: templates/settings.php:42 -msgid "You can specify Base DN for users and groups in the Advanced tab" -msgstr "" - -#: templates/settings.php:44 -msgid "User DN" -msgstr "" - -#: templates/settings.php:46 -msgid "" -"The DN of the client user with which the bind shall be done, e.g. " -"uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password " -"empty." -msgstr "" - -#: templates/settings.php:47 -msgid "Password" -msgstr "" - -#: templates/settings.php:50 -msgid "For anonymous access, leave DN and Password empty." -msgstr "" - -#: templates/settings.php:51 -msgid "User Login Filter" -msgstr "" - -#: templates/settings.php:54 -#, php-format -msgid "" -"Defines the filter to apply, when login is attempted. %%uid replaces the " -"username in the login action." -msgstr "" - -#: templates/settings.php:55 -#, php-format -msgid "use %%uid placeholder, e.g. \"uid=%%uid\"" -msgstr "" - -#: templates/settings.php:56 -msgid "User List Filter" -msgstr "" - -#: templates/settings.php:59 -msgid "Defines the filter to apply, when retrieving users." -msgstr "" - -#: templates/settings.php:60 -msgid "without any placeholder, e.g. \"objectClass=person\"." -msgstr "" - -#: templates/settings.php:61 -msgid "Group Filter" -msgstr "" - -#: templates/settings.php:64 -msgid "Defines the filter to apply, when retrieving groups." -msgstr "" - -#: templates/settings.php:65 -msgid "without any placeholder, e.g. \"objectClass=posixGroup\"." -msgstr "" - -#: templates/settings.php:69 -msgid "Connection Settings" -msgstr "" - -#: templates/settings.php:71 -msgid "Configuration Active" -msgstr "" - -#: templates/settings.php:71 -msgid "When unchecked, this configuration will be skipped." -msgstr "" - -#: templates/settings.php:72 -msgid "Port" -msgstr "" - -#: templates/settings.php:73 -msgid "Backup (Replica) Host" -msgstr "" - -#: templates/settings.php:73 -msgid "" -"Give an optional backup host. It must be a replica of the main LDAP/AD " -"server." -msgstr "" - -#: templates/settings.php:74 -msgid "Backup (Replica) Port" -msgstr "" - -#: templates/settings.php:75 -msgid "Disable Main Server" -msgstr "" - -#: templates/settings.php:75 -msgid "When switched on, ownCloud will only connect to the replica server." -msgstr "" - -#: templates/settings.php:76 -msgid "Use TLS" -msgstr "" - -#: templates/settings.php:76 -msgid "Do not use it additionally for LDAPS connections, it will fail." -msgstr "" - -#: templates/settings.php:77 -msgid "Case insensitve LDAP server (Windows)" -msgstr "" - -#: templates/settings.php:78 -msgid "Turn off SSL certificate validation." -msgstr "" - -#: templates/settings.php:78 -msgid "" -"If connection only works with this option, import the LDAP server's SSL " -"certificate in your ownCloud server." -msgstr "" - -#: templates/settings.php:78 -msgid "Not recommended, use for testing only." -msgstr "" - -#: templates/settings.php:79 -msgid "Cache Time-To-Live" -msgstr "" - -#: templates/settings.php:79 -msgid "in seconds. A change empties the cache." -msgstr "" - -#: templates/settings.php:81 -msgid "Directory Settings" -msgstr "" - -#: templates/settings.php:83 -msgid "User Display Name Field" -msgstr "" - -#: templates/settings.php:83 -msgid "The LDAP attribute to use to generate the user`s ownCloud name." -msgstr "" - -#: templates/settings.php:84 -msgid "Base User Tree" -msgstr "" - -#: templates/settings.php:84 -msgid "One User Base DN per line" -msgstr "" - -#: templates/settings.php:85 -msgid "User Search Attributes" -msgstr "" - -#: templates/settings.php:85 templates/settings.php:88 -msgid "Optional; one attribute per line" -msgstr "" - -#: templates/settings.php:86 -msgid "Group Display Name Field" -msgstr "" - -#: templates/settings.php:86 -msgid "The LDAP attribute to use to generate the groups`s ownCloud name." -msgstr "" - -#: templates/settings.php:87 -msgid "Base Group Tree" -msgstr "" - -#: templates/settings.php:87 -msgid "One Group Base DN per line" -msgstr "" - -#: templates/settings.php:88 -msgid "Group Search Attributes" -msgstr "" - -#: templates/settings.php:89 -msgid "Group-Member association" -msgstr "" - -#: templates/settings.php:91 -msgid "Special Attributes" -msgstr "" - -#: templates/settings.php:93 -msgid "Quota Field" -msgstr "" - -#: templates/settings.php:94 -msgid "Quota Default" -msgstr "" - -#: templates/settings.php:94 -msgid "in bytes" -msgstr "" - -#: templates/settings.php:95 -msgid "Email Field" -msgstr "" - -#: templates/settings.php:96 -msgid "User Home Folder Naming Rule" -msgstr "" - -#: templates/settings.php:96 -msgid "" -"Leave empty for user name (default). Otherwise, specify an LDAP/AD " -"attribute." -msgstr "" - -#: templates/settings.php:101 -msgid "Internal Username" -msgstr "" - -#: templates/settings.php:102 -msgid "" -"By default the internal username will be created from the UUID attribute. It" -" makes sure that the username is unique and characters do not need to be " -"converted. The internal username has the restriction that only these " -"characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced " -"with their ASCII correspondence or simply omitted. On collisions a number " -"will be added/increased. The internal username is used to identify a user " -"internally. It is also the default name for the user home folder in " -"ownCloud. It is also a port of remote URLs, for instance for all *DAV " -"services. With this setting, the default behaviour can be overriden. To " -"achieve a similar behaviour as before ownCloud 5 enter the user display name" -" attribute in the following field. Leave it empty for default behaviour. " -"Changes will have effect only on newly mapped (added) LDAP users." -msgstr "" - -#: templates/settings.php:103 -msgid "Internal Username Attribute:" -msgstr "" - -#: templates/settings.php:104 -msgid "Override UUID detection" -msgstr "" - -#: templates/settings.php:105 -msgid "" -"By default, ownCloud autodetects the UUID attribute. The UUID attribute is " -"used to doubtlessly identify LDAP users and groups. Also, the internal " -"username will be created based on the UUID, if not specified otherwise " -"above. You can override the setting and pass an attribute of your choice. " -"You must make sure that the attribute of your choice can be fetched for both" -" users and groups and it is unique. Leave it empty for default behaviour. " -"Changes will have effect only on newly mapped (added) LDAP users and groups." -msgstr "" - -#: templates/settings.php:106 -msgid "UUID Attribute:" -msgstr "" - -#: templates/settings.php:107 -msgid "Username-LDAP User Mapping" -msgstr "" - -#: templates/settings.php:108 -msgid "" -"ownCloud uses usernames to store and assign (meta) data. In order to " -"precisely identify and recognize users, each LDAP user will have a internal " -"username. This requires a mapping from ownCloud username to LDAP user. The " -"created username is mapped to the UUID of the LDAP user. Additionally the DN" -" is cached as well to reduce LDAP interaction, but it is not used for " -"identification. If the DN changes, the changes will be found by ownCloud. " -"The internal ownCloud name is used all over in ownCloud. Clearing the " -"Mappings will have leftovers everywhere. Clearing the Mappings is not " -"configuration sensitive, it affects all LDAP configurations! Do never clear " -"the mappings in a production environment. Only clear mappings in a testing " -"or experimental stage." -msgstr "" - -#: templates/settings.php:109 -msgid "Clear Username-LDAP User Mapping" -msgstr "" - -#: templates/settings.php:109 -msgid "Clear Groupname-LDAP Group Mapping" -msgstr "" - -#: templates/settings.php:111 -msgid "Test Configuration" -msgstr "" - -#: templates/settings.php:111 -msgid "Help" -msgstr "" diff --git a/l10n/pl_PL/user_webdavauth.po b/l10n/pl_PL/user_webdavauth.po deleted file mode 100644 index 2ac39a4621..0000000000 --- a/l10n/pl_PL/user_webdavauth.po +++ /dev/null @@ -1,33 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: ownCloud\n" -"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n" -"POT-Creation-Date: 2013-05-25 02:01+0200\n" -"PO-Revision-Date: 2012-11-09 09:06+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pl_PL\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -#: templates/settings.php:3 -msgid "WebDAV Authentication" -msgstr "" - -#: templates/settings.php:4 -msgid "URL: http://" -msgstr "" - -#: templates/settings.php:7 -msgid "" -"ownCloud will send the user credentials to this URL. This plugin checks the " -"response and will interpret the HTTP statuscodes 401 and 403 as invalid " -"credentials, and all other responses as valid credentials." -msgstr "" diff --git a/lib/l10n/pl_PL.php b/lib/l10n/pl_PL.php deleted file mode 100644 index 5494e3dab2..0000000000 --- a/lib/l10n/pl_PL.php +++ /dev/null @@ -1,5 +0,0 @@ - "Ustawienia" -); -$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; diff --git a/settings/l10n/pl_PL.php b/settings/l10n/pl_PL.php deleted file mode 100644 index 91ae517f23..0000000000 --- a/settings/l10n/pl_PL.php +++ /dev/null @@ -1,6 +0,0 @@ - "Uaktualnienie", -"Email" => "Email" -); -$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"; From 8e34812393d730da9a161d1724eba818de61076c Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 31 Mar 2014 18:09:46 +0200 Subject: [PATCH 51/94] always encrypt files to owner --- apps/files_encryption/lib/stream.php | 2 +- apps/files_encryption/lib/util.php | 16 +++++++--------- lib/public/share.php | 6 +++--- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php index 58ac03373a..6687194588 100644 --- a/apps/files_encryption/lib/stream.php +++ b/apps/files_encryption/lib/stream.php @@ -545,7 +545,7 @@ class Stream { $util = new Util($this->rootView, $this->userId); // Get all users sharing the file includes current user - $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath, $this->userId); + $uniqueUserIds = $util->getSharingUsersArray($sharingEnabled, $this->relPath); $checkedUserIds = $util->filterShareReadyUsers($uniqueUserIds); // Fetch public keys for all sharing users diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php index 3db5a42347..4bf987d925 100644 --- a/apps/files_encryption/lib/util.php +++ b/apps/files_encryption/lib/util.php @@ -1124,8 +1124,9 @@ class Util { * @brief Find, sanitise and format users sharing a file * @note This wraps other methods into a portable bundle * @param boolean $sharingEnabled + * @param string $filePath path relativ to current users files folder */ - public function getSharingUsersArray($sharingEnabled, $filePath, $currentUserId = false) { + public function getSharingUsersArray($sharingEnabled, $filePath) { $appConfig = \OC::$server->getAppConfig(); @@ -1144,12 +1145,14 @@ class Util { $ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath); - $userIds = array(); + // always add owner to the list of users with access to the file + $userIds = array($owner); + if ($sharingEnabled) { // Find out who, if anyone, is sharing the file - $result = \OCP\Share::getUsersSharingFile($ownerPath, $owner, true); - $userIds = $result['users']; + $result = \OCP\Share::getUsersSharingFile($ownerPath, $owner); + $userIds = \array_merge($userIds, $result['users']); if ($result['public']) { $userIds[] = $this->publicShareKeyId; } @@ -1165,11 +1168,6 @@ class Util { $userIds[] = $recoveryKeyId; } - // add current user if given - if ($currentUserId !== false) { - $userIds[] = $currentUserId; - } - // check if it is a group mount if (\OCP\App::isEnabled("files_external")) { $mount = \OC_Mount_Config::getSystemMountPoints(); diff --git a/lib/public/share.php b/lib/public/share.php index a08134b383..564839e86b 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -63,9 +63,9 @@ class Share extends \OC\Share\Constants { /** * Find which users can access a shared item - * @param $path to the file - * @param $user owner of the file - * @param include owner to the list of users with access to the file + * @param string $path to the file + * @param string $user owner of the file + * @param bool $includeOwner include owner to the list of users with access to the file * @return array * @note $path needs to be relative to user data dir, e.g. 'file.txt' * not '/admin/data/file.txt' From c578ab68fe133abdd1519810be642c4b27aed6c3 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Mon, 31 Mar 2014 18:24:53 +0200 Subject: [PATCH 52/94] there is no need to re-calculate the shares after a touch --- apps/files_encryption/lib/proxy.php | 45 ----------------------------- 1 file changed, 45 deletions(-) diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 6549273c8f..3f59a99eea 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -206,16 +206,6 @@ class Proxy extends \OC_FileProxy { } - /** - * @param $path - * @return bool - */ - public function postTouch($path) { - $this->handleFile($path); - - return true; - } - /** * @brief remember initial fopen mode because sometimes it gets changed during the request * @param string $path path @@ -404,39 +394,4 @@ class Proxy extends \OC_FileProxy { return $size; } - /** - * @param $path - */ - public function handleFile($path) { - - // Disable encryption proxy to prevent recursive calls - $proxyStatus = \OC_FileProxy::$enabled; - \OC_FileProxy::$enabled = false; - - $view = new \OC_FilesystemView('/'); - $session = new \OCA\Encryption\Session($view); - $userId = Helper::getUser($path); - $util = new Util($view, $userId); - - // split the path parts - $pathParts = explode('/', $path); - - // get relative path - $relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path); - - // only if file is on 'files' folder fix file size and sharing - if (isset($pathParts[2]) && $pathParts[2] === 'files' && $util->fixFileSize($path)) { - - // get sharing app state - $sharingEnabled = \OCP\Share::isEnabled(); - - // get users - $usersSharing = $util->getSharingUsersArray($sharingEnabled, $relativePath); - - // update sharing-keys - $util->setSharedFileKeyfiles($session, $usersSharing, $relativePath); - } - - \OC_FileProxy::$enabled = $proxyStatus; - } } From 7a4a836abe2cce89df92648a39cd9e2cd3fae1de Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 1 Apr 2014 01:56:15 -0400 Subject: [PATCH 53/94] [tx-robot] updated from transifex --- apps/files/l10n/el.php | 3 ++ apps/files_encryption/l10n/el.php | 1 + apps/files_external/l10n/el.php | 1 + apps/files_external/l10n/sk_SK.php | 1 + apps/files_sharing/l10n/sk_SK.php | 1 + apps/user_ldap/l10n/el.php | 4 ++ core/l10n/el.php | 7 ++++ l10n/el/core.po | 59 +++++++++++++++-------------- l10n/el/files.po | 35 ++++++++--------- l10n/el/files_encryption.po | 9 +++-- l10n/el/files_external.po | 37 +++++++++--------- l10n/el/lib.po | 25 ++++++------ l10n/el/settings.po | 35 ++++++++--------- l10n/el/user_ldap.po | 15 ++++---- l10n/sk_SK/core.po | 44 ++++++++++----------- l10n/sk_SK/files_external.po | 34 ++++++++--------- l10n/sk_SK/files_sharing.po | 10 ++--- l10n/sk_SK/lib.po | 42 ++++++++++---------- l10n/sk_SK/settings.po | 38 +++++++++---------- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/private.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- lib/l10n/el.php | 2 + lib/l10n/sk_SK.php | 1 + settings/l10n/el.php | 6 +++ settings/l10n/sk_SK.php | 8 ++++ 35 files changed, 242 insertions(+), 200 deletions(-) diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php index 9144cf3ea1..c71aa9a35a 100644 --- a/apps/files/l10n/el.php +++ b/apps/files/l10n/el.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.", "\"%s\" is an invalid file name." => "Το \"%s\" είναι ένα μη έγκυρο όνομα αρχείου.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.", +"The target folder has been moved or deleted." => "Ο φάκελος προορισμού έχει μετακινηθεί ή διαγραφεί.", "The name %s is already used in the folder %s. Please choose a different name." => "Το όνομα %s χρησιμοποιείτε ήδη στον φάκελο %s. Παρακαλώ επιλέξτε ένα άλλο όνομα.", "Not a valid source" => "Μη έγκυρη πηγή", "Server is not allowed to open URLs, please check the server configuration" => "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή", @@ -28,6 +29,8 @@ $TRANSLATIONS = array( "Invalid directory." => "Μη έγκυρος φάκελος.", "Files" => "Αρχεία", "Unable to upload {filename} as it is a directory or has 0 bytes" => "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes", +"Total file size {size1} exceeds upload limit {size2}" => "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}", +"Not enough free space, you are uploading {size1} but only {size2} is left" => "Δεν υπάρχει αρκετός ελεύθερος χώρος, μεταφορτώνετε μέγεθος {size1} αλλά υπάρχει χώρος μόνο {size2}", "Upload cancelled." => "Η αποστολή ακυρώθηκε.", "Could not get result from server." => "Αδυναμία λήψης αποτελέσματος από το διακομιστή.", "File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php index ad8617bc6d..972d7d7138 100644 --- a/apps/files_encryption/l10n/el.php +++ b/apps/files_encryption/l10n/el.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.", "Following users are not set up for encryption:" => "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:", "Initial encryption started... This can take some time. Please wait." => "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.", +"Initial encryption running... Please try again later." => "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.", "Go directly to your " => "Πηγαίνε απευθείας στο ", "personal settings" => "προσωπικές ρυθμίσεις", "Encryption" => "Κρυπτογράφηση", diff --git a/apps/files_external/l10n/el.php b/apps/files_external/l10n/el.php index 4dcd93d7ac..15f2b3b15e 100644 --- a/apps/files_external/l10n/el.php +++ b/apps/files_external/l10n/el.php @@ -22,6 +22,7 @@ $TRANSLATIONS = array( "Users" => "Χρήστες", "Delete" => "Διαγραφή", "Enable User External Storage" => "Ενεργοποίηση Εξωτερικού Αποθηκευτικού Χώρου Χρήστη", +"Allow users to mount the following external storage" => "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης", "SSL root certificates" => "Πιστοποιητικά SSL root", "Import Root Certificate" => "Εισαγωγή Πιστοποιητικού Root" ); diff --git a/apps/files_external/l10n/sk_SK.php b/apps/files_external/l10n/sk_SK.php index aa28898257..245bcc62aa 100644 --- a/apps/files_external/l10n/sk_SK.php +++ b/apps/files_external/l10n/sk_SK.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Grant access" => "Povoliť prístup", "Please provide a valid Dropbox app key and secret." => "Zadajte platný kľúč aplikácie a heslo Dropbox", "Error configuring Google Drive storage" => "Chyba pri konfigurácii úložiska Google drive", +"Saved" => "Uložené", "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Upozornenie: \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje.", "Warning: 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." => "Upozornenie: Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje.", "Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Varovanie: nie je nainštalovaná, alebo povolená, podpora Curl v PHP. Nie je možné pripojenie oddielov ownCloud, WebDAV, či GoogleDrive. Prosím požiadajte svojho administrátora systému, nech ju nainštaluje.", diff --git a/apps/files_sharing/l10n/sk_SK.php b/apps/files_sharing/l10n/sk_SK.php index 4e9856da4a..6856c0591f 100644 --- a/apps/files_sharing/l10n/sk_SK.php +++ b/apps/files_sharing/l10n/sk_SK.php @@ -11,6 +11,7 @@ $TRANSLATIONS = array( "sharing is disabled" => "zdieľanie je zakázané", "For more info, please ask the person who sent this link." => "Pre viac informácií kontaktujte osobu, ktorá vám poslala tento odkaz.", "shared by %s" => "Zdieľa %s", +"Download %s" => "Stiahnuť %s", "Direct link" => "Priama linka" ); $PLURAL_FORMS = "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"; diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php index 1e97591195..926419d86b 100644 --- a/apps/user_ldap/l10n/el.php +++ b/apps/user_ldap/l10n/el.php @@ -33,12 +33,14 @@ $TRANSLATIONS = array( "Save" => "Αποθήκευση", "Test Configuration" => "Δοκιμαστικες ρυθμισεις", "Help" => "Βοήθεια", +"Groups meeting these criteria are available in %s:" => "Οι ομάδες που πληρούν τα κριτήρια είναι διαθέσιμες σε %s:", "only those object classes:" => "μόνο αυτές οι κλάσεις αντικειμένων:", "only from those groups:" => "μόνο από αυτές τις ομάδες:", "Edit raw filter instead" => "Επεξεργασία πρωτογενούς φίλτρου αντί αυτού", "Raw LDAP filter" => "Πρωτογενές φίλτρο ", "The filter specifies which LDAP groups shall have access to the %s instance." => "Το φίλτρο καθορίζει ποιες ομάδες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.", "groups found" => "ομάδες βρέθηκαν", +"Users login with this attribute:" => "Οι χρήστες εισέρχονται με αυτό το χαρακτηριστικό:", "LDAP Username:" => "Όνομα χρήστη LDAP:", "LDAP Email Address:" => "Διεύθυνση ηλ. ταχυδρομείου LDAP:", "Other Attributes:" => "Άλλες Ιδιότητες:", @@ -53,6 +55,7 @@ $TRANSLATIONS = array( "For anonymous access, leave DN and Password empty." => "Για ανώνυμη πρόσβαση, αφήστε κενά τα πεδία DN και Pasword.", "One Base DN per line" => "Ένα DN Βάσης ανά γραμμή ", "You can specify Base DN for users and groups in the Advanced tab" => "Μπορείτε να καθορίσετε το Base DN για χρήστες και ομάδες από την καρτέλα Προηγμένες ρυθμίσεις", +"Limit %s access to users meeting these criteria:" => "Περιορισμός της πρόσβασης %s σε χρήστες που πληρούν τα κριτήρια:", "The filter specifies which LDAP users shall have access to the %s instance." => "Το φίλτρο καθορίζει ποιοι χρήστες LDAP θα έχουν πρόσβαση στην εγκατάσταση %s.", "users found" => "χρήστες βρέθηκαν", "Back" => "Επιστροφή", @@ -85,6 +88,7 @@ $TRANSLATIONS = array( "One Group Base DN per line" => "Μια ομαδικη Βάση DN ανά γραμμή", "Group Search Attributes" => "Ομάδα Χαρακτηριστικων Αναζήτηση", "Group-Member association" => "Group-Member association", +"Nested Groups" => "Φωλιασμένες ομάδες", "Special Attributes" => "Ειδικά Χαρακτηριστικά ", "Quota Field" => "Ποσοσταση πεδιου", "Quota Default" => "Προκαθισμενο πεδιο", diff --git a/core/l10n/el.php b/core/l10n/el.php index ed7792b726..0ffb746fc7 100644 --- a/core/l10n/el.php +++ b/core/l10n/el.php @@ -1,5 +1,6 @@ "Η ημερομηνία λήξης είναι στο παρελθόν.", "Couldn't send mail to following users: %s " => "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s", "Turned on maintenance mode" => "Η κατάσταση συντήρησης ενεργοποιήθηκε", "Turned off maintenance mode" => "Η κατάσταση συντήρησης απενεργοποιήθηκε", @@ -55,8 +56,10 @@ $TRANSLATIONS = array( "Continue" => "Συνέχεια", "(all selected)" => "(όλα τα επιλεγμένα)", "({count} selected)" => "({count} επιλέχθησαν)", +"Error loading file exists template" => "Σφάλμα κατά την φόρτωση του προτύπου ύπαρξης αρχείου", "Very weak password" => "Πολύ αδύναμο συνθηματικό", "Weak password" => "Αδύναμο συνθηματικό", +"So-so password" => "Μέτριο συνθηματικό", "Good password" => "Καλό συνθηματικό", "Strong password" => "Δυνατό συνθηματικό", "Shared" => "Κοινόχρηστα", @@ -119,6 +122,8 @@ $TRANSLATIONS = array( "To login page" => "Σελίδα εισόδου", "New password" => "Νέο συνθηματικό", "Reset password" => "Επαναφορά συνθηματικού", +"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!", +"For the best results, please consider using a GNU/Linux server instead." => "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux.", "Personal" => "Προσωπικά", "Users" => "Χρήστες", "Apps" => "Εφαρμογές", @@ -144,6 +149,7 @@ $TRANSLATIONS = array( "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.", "For information how to properly configure your server, please see the documentation." => "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την τεκμηρίωση.", "Create an admin account" => "Δημιουργήστε έναν λογαριασμό διαχειριστή", +"Storage & database" => "Αποθήκευση & βάση δεδομένων", "Data folder" => "Φάκελος δεδομένων", "Configure the database" => "Ρύθμιση της βάσης δεδομένων", "will be used" => "θα χρησιμοποιηθούν", @@ -166,6 +172,7 @@ $TRANSLATIONS = array( "remember" => "απομνημόνευση", "Log in" => "Είσοδος", "Alternative Logins" => "Εναλλακτικές Συνδέσεις", +"Hey there,

    just letting you know that %s shared %s with you.
    View it!

    " => "Γειά χαρά,

    απλά σας ενημερώνω πως ο %s μοιράστηκε το%s με εσάς.
    Δείτε το!

    ", "This ownCloud instance is currently in single user mode." => "Αυτή η εγκατάσταση ownCloud είναι τώρα σε κατάσταση ενός χρήστη.", "This means only administrators can use the instance." => "Αυτό σημαίνει ότι μόνο διαχειριστές μπορούν να χρησιμοποιήσουν την εγκατάσταση.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Επικοινωνήστε με το διαχειριστή του συστήματος αν αυτό το μήνυμα συνεχίζει να εμφανίζεται ή εμφανίστηκε απρόσμενα.", diff --git a/l10n/el/core.po b/l10n/el/core.po index 54906380cd..7f52a39aed 100644 --- a/l10n/el/core.po +++ b/l10n/el/core.po @@ -6,6 +6,7 @@ # Efstathios Iosifidis , 2013-2014 # Efstathios Iosifidis , 2013 # KAT.RAT12 , 2013 +# pe_ppe , 2014 # Teogramm , 2013 # Teogramm , 2013 # vkehayas , 2013-2014 @@ -16,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-22 01:55-0400\n" -"PO-Revision-Date: 2014-03-22 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 16:30+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,24 +27,24 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/share.php:88 +#: ajax/share.php:87 msgid "Expiration date is in the past." -msgstr "" +msgstr "Η ημερομηνία λήξης είναι στο παρελθόν." -#: ajax/share.php:120 ajax/share.php:162 +#: ajax/share.php:119 ajax/share.php:161 #, php-format msgid "Couldn't send mail to following users: %s " msgstr "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s" -#: ajax/update.php:11 +#: ajax/update.php:10 msgid "Turned on maintenance mode" msgstr "Η κατάσταση συντήρησης ενεργοποιήθηκε" -#: ajax/update.php:14 +#: ajax/update.php:13 msgid "Turned off maintenance mode" msgstr "Η κατάσταση συντήρησης απενεργοποιήθηκε" -#: ajax/update.php:17 +#: ajax/update.php:16 msgid "Updated database" msgstr "Ενημερωμένη βάση δεδομένων" @@ -147,59 +148,59 @@ msgstr "Δεκέμβριος" msgid "Settings" msgstr "Ρυθμίσεις" -#: js/js.js:496 +#: js/js.js:543 msgid "Saving..." msgstr "Γίνεται αποθήκευση..." -#: js/js.js:995 +#: js/js.js:1103 msgid "seconds ago" msgstr "δευτερόλεπτα πριν" -#: js/js.js:996 +#: js/js.js:1104 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "%n λεπτό πριν" msgstr[1] "%n λεπτά πριν" -#: js/js.js:997 +#: js/js.js:1105 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "%n ώρα πριν" msgstr[1] "%n ώρες πριν" -#: js/js.js:998 +#: js/js.js:1106 msgid "today" msgstr "σήμερα" -#: js/js.js:999 +#: js/js.js:1107 msgid "yesterday" msgstr "χτες" -#: js/js.js:1000 +#: js/js.js:1108 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "%n ημέρα πριν" msgstr[1] "%n ημέρες πριν" -#: js/js.js:1001 +#: js/js.js:1109 msgid "last month" msgstr "τελευταίο μήνα" -#: js/js.js:1002 +#: js/js.js:1110 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "%n μήνας πριν" msgstr[1] "%n μήνες πριν" -#: js/js.js:1003 +#: js/js.js:1111 msgid "months ago" msgstr "μήνες πριν" -#: js/js.js:1004 +#: js/js.js:1112 msgid "last year" msgstr "τελευταίο χρόνο" -#: js/js.js:1005 +#: js/js.js:1113 msgid "years ago" msgstr "χρόνια πριν" @@ -265,7 +266,7 @@ msgstr "({count} επιλέχθησαν)" #: js/oc-dialogs.js:457 msgid "Error loading file exists template" -msgstr "" +msgstr "Σφάλμα κατά την φόρτωση του προτύπου ύπαρξης αρχείου" #: js/setup.js:84 msgid "Very weak password" @@ -277,7 +278,7 @@ msgstr "Αδύναμο συνθηματικό" #: js/setup.js:86 msgid "So-so password" -msgstr "" +msgstr "Μέτριο συνθηματικό" #: js/setup.js:87 msgid "Good password" @@ -542,17 +543,17 @@ msgstr "Νέο συνθηματικό" msgid "Reset password" msgstr "Επαναφορά συνθηματικού" -#: setup/controller.php:138 +#: setup/controller.php:140 #, php-format msgid "" "Mac OS X is not supported and %s will not work properly on this platform. " "Use it at your own risk! " -msgstr "" +msgstr "Το Mac OS X δεν υποστηρίζεται και το %s δεν θα λειτουργήσει σωστά σε αυτή την πλατφόρμα. Χρησιμοποιείτε με δική σας ευθύνη!" -#: setup/controller.php:142 +#: setup/controller.php:144 msgid "" "For the best results, please consider using a GNU/Linux server instead." -msgstr "" +msgstr "Για καλύτερα αποτελέσματα, παρακαλούμε εξετάστε την μετατροπή σε έναν διακομιστή GNU/Linux." #: strings.php:5 msgid "Personal" @@ -674,7 +675,7 @@ msgstr "Δημιουργήστε έναν λογαριασμό διαχ #: templates/installation.php:70 msgid "Storage & database" -msgstr "" +msgstr "Αποθήκευση & βάση δεδομένων" #: templates/installation.php:77 msgid "Data folder" @@ -775,7 +776,7 @@ msgstr "Εναλλακτικές Συνδέσεις" msgid "" "Hey there,

    just letting you know that %s shared %s " "with you.
    View it!

    " -msgstr "" +msgstr "Γειά χαρά,

    απλά σας ενημερώνω πως ο %s μοιράστηκε το%s με εσάς.
    Δείτε το!

    " #: templates/singleuser.user.php:3 msgid "This ownCloud instance is currently in single user mode." diff --git a/l10n/el/files.po b/l10n/el/files.po index fc989942bb..086a36cec3 100644 --- a/l10n/el/files.po +++ b/l10n/el/files.po @@ -7,14 +7,15 @@ # Efstathios Iosifidis , 2013 # gtsamis , 2013 # frerisp , 2013 +# pe_ppe , 2014 # vkehayas , 2013 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-27 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 06:01+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 16:30+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -50,7 +51,7 @@ msgstr "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' #: ajax/newfile.php:76 ajax/newfolder.php:35 ajax/upload.php:141 #: lib/app.php:65 msgid "The target folder has been moved or deleted." -msgstr "" +msgstr "Ο φάκελος προορισμού έχει μετακινηθεί ή διαγραφεί." #: ajax/newfile.php:88 ajax/newfolder.php:47 lib/app.php:74 #, php-format @@ -154,12 +155,12 @@ msgstr "Αδυναμία φόρτωσης {filename} καθώς είναι κα #: js/file-upload.js:258 msgid "Total file size {size1} exceeds upload limit {size2}" -msgstr "" +msgstr "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}" #: js/file-upload.js:268 msgid "" "Not enough free space, you are uploading {size1} but only {size2} is left" -msgstr "" +msgstr "Δεν υπάρχει αρκετός ελεύθερος χώρος, μεταφορτώνετε μέγεθος {size1} αλλά υπάρχει χώρος μόνο {size2}" #: js/file-upload.js:340 msgid "Upload cancelled." @@ -198,15 +199,15 @@ msgstr "Αδυναμία δημιουργίας φακέλου" msgid "Error fetching URL" msgstr "Σφάλμα φόρτωσης URL" -#: js/fileactions.js:149 +#: js/fileactions.js:164 msgid "Share" msgstr "Διαμοιρασμός" -#: js/fileactions.js:162 +#: js/fileactions.js:177 msgid "Delete permanently" msgstr "Μόνιμη διαγραφή" -#: js/fileactions.js:223 +#: js/fileactions.js:238 msgid "Rename" msgstr "Μετονομασία" @@ -230,13 +231,13 @@ msgstr "αναίρεση" msgid "Error deleting file." msgstr "Σφάλμα διαγραφής αρχείου." -#: js/filelist.js:687 js/filelist.js:761 js/files.js:691 +#: js/filelist.js:687 js/filelist.js:761 js/files.js:694 msgid "%n folder" msgid_plural "%n folders" msgstr[0] "%n φάκελος" msgstr[1] "%n φάκελοι" -#: js/filelist.js:688 js/filelist.js:762 js/files.js:697 +#: js/filelist.js:688 js/filelist.js:762 js/files.js:700 msgid "%n file" msgid_plural "%n files" msgstr[0] "%n αρχείο" @@ -283,29 +284,29 @@ msgid "" "your personal settings to decrypt your files." msgstr "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις" -#: js/files.js:379 +#: js/files.js:382 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος." -#: js/files.js:610 js/files.js:654 +#: js/files.js:613 js/files.js:657 msgid "Error moving file" msgstr "Σφάλμα κατά τη μετακίνηση του αρχείου" -#: js/files.js:610 js/files.js:654 +#: js/files.js:613 js/files.js:657 msgid "Error" msgstr "Σφάλμα" -#: js/files.js:672 templates/index.php:68 +#: js/files.js:675 templates/index.php:68 msgid "Name" msgstr "Όνομα" -#: js/files.js:673 templates/index.php:80 +#: js/files.js:676 templates/index.php:80 msgid "Size" msgstr "Μέγεθος" -#: js/files.js:674 templates/index.php:82 +#: js/files.js:677 templates/index.php:82 msgid "Modified" msgstr "Τροποποιήθηκε" diff --git a/l10n/el/files_encryption.po b/l10n/el/files_encryption.po index bd28873a5e..0398e97567 100644 --- a/l10n/el/files_encryption.po +++ b/l10n/el/files_encryption.po @@ -5,6 +5,7 @@ # Translators: # Efstathios Iosifidis , 2013 # Marios Bekatoros <>, 2013 +# pe_ppe , 2014 # Teogramm , 2013 # Teogramm , 2013 # vkehayas , 2013 @@ -12,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-11 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 16:30+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -106,7 +107,7 @@ msgstr "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπ #: js/detect-migration.js:25 msgid "Initial encryption running... Please try again later." -msgstr "" +msgstr "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα." #: templates/invalid_private_key.php:8 msgid "Go directly to your " diff --git a/l10n/el/files_external.po b/l10n/el/files_external.po index ca669ad43a..f2240af793 100644 --- a/l10n/el/files_external.po +++ b/l10n/el/files_external.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# pe_ppe , 2014 # KAT.RAT12 , 2013 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-13 17:12-0400\n" -"PO-Revision-Date: 2014-03-13 14:21+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 16:30+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,24 +39,24 @@ msgstr "Παρακαλούμε δώστε έγκυρο κλειδί Dropbox κα msgid "Error configuring Google Drive storage" msgstr "Σφάλμα ρυθμίζωντας αποθήκευση Google Drive " -#: js/settings.js:313 js/settings.js:320 +#: js/settings.js:318 js/settings.js:325 msgid "Saved" msgstr "Αποθηκεύτηκαν" -#: lib/config.php:512 +#: lib/config.php:654 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "Προσοχή: Ο \"smbclient\" δεν εγκαταστάθηκε. Δεν είναι δυνατή η προσάρτηση CIFS/SMB. Παρακαλώ ενημερώστε τον διαχειριστή συστήματος να το εγκαταστήσει." -#: lib/config.php:516 +#: lib/config.php:658 msgid "" "Warning: 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." msgstr "Προσοχή: Η υποστήριξη FTP στην PHP δεν ενεργοποιήθηκε ή εγκαταστάθηκε. Δεν είναι δυνατή η προσάρτηση FTP. Παρακαλώ ενημερώστε τον διαχειριστή συστήματος να το εγκαταστήσει." -#: lib/config.php:519 +#: lib/config.php:661 msgid "" "Warning: The Curl support in PHP is not enabled or installed. " "Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask " @@ -90,39 +91,39 @@ msgstr "Εφαρμόσιμο" msgid "Add storage" msgstr "Προσθηκη αποθηκευσης" -#: templates/settings.php:90 +#: templates/settings.php:93 msgid "None set" msgstr "Κανένα επιλεγμένο" -#: templates/settings.php:91 +#: templates/settings.php:94 msgid "All Users" msgstr "Όλοι οι Χρήστες" -#: templates/settings.php:92 +#: templates/settings.php:95 msgid "Groups" msgstr "Ομάδες" -#: templates/settings.php:100 +#: templates/settings.php:103 msgid "Users" msgstr "Χρήστες" -#: templates/settings.php:113 templates/settings.php:114 -#: templates/settings.php:155 templates/settings.php:156 +#: templates/settings.php:116 templates/settings.php:117 +#: templates/settings.php:158 templates/settings.php:159 msgid "Delete" msgstr "Διαγραφή" -#: templates/settings.php:127 +#: templates/settings.php:130 msgid "Enable User External Storage" msgstr "Ενεργοποίηση Εξωτερικού Αποθηκευτικού Χώρου Χρήστη" -#: templates/settings.php:130 +#: templates/settings.php:133 msgid "Allow users to mount the following external storage" -msgstr "" +msgstr "Χορήγηση άδειας στους χρήστες να συνδέσουν τα παρακάτω εξωτερικά μέσα αποθήκευσης" -#: templates/settings.php:147 +#: templates/settings.php:150 msgid "SSL root certificates" msgstr "Πιστοποιητικά SSL root" -#: templates/settings.php:165 +#: templates/settings.php:168 msgid "Import Root Certificate" msgstr "Εισαγωγή Πιστοποιητικού Root" diff --git a/l10n/el/lib.po b/l10n/el/lib.po index 8f6d6e8c54..3428c9dade 100644 --- a/l10n/el/lib.po +++ b/l10n/el/lib.po @@ -5,14 +5,15 @@ # Translators: # Efstathios Iosifidis , 2014 # Efstathios Iosifidis , 2013 +# pe_ppe , 2014 # vkehayas , 2013-2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-16 03:12-0400\n" -"PO-Revision-Date: 2014-03-15 22:50+0000\n" -"Last-Translator: Efstathios Iosifidis \n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 16:30+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -68,23 +69,23 @@ msgstr "Μη έγκυρη εικόνα" msgid "web services under your control" msgstr "υπηρεσίες δικτύου υπό τον έλεγχό σας" -#: private/files.php:231 +#: private/files.php:232 msgid "ZIP download is turned off." msgstr "Η λήψη ZIP απενεργοποιήθηκε." -#: private/files.php:232 +#: private/files.php:233 msgid "Files need to be downloaded one by one." msgstr "Τα αρχεία πρέπει να ληφθούν ένα-ένα." -#: private/files.php:233 private/files.php:261 +#: private/files.php:234 private/files.php:262 msgid "Back to Files" msgstr "Πίσω στα Αρχεία" -#: private/files.php:258 +#: private/files.php:259 msgid "Selected files too large to generate zip file." msgstr "Τα επιλεγμένα αρχεία είναι μεγάλα ώστε να δημιουργηθεί αρχείο zip." -#: private/files.php:259 +#: private/files.php:260 msgid "" "Please download the files separately in smaller chunks or kindly ask your " "administrator." @@ -234,7 +235,7 @@ msgstr "Υπάρχει ήδη ο χρήστης '%s'@'localhost' της MySQL/Ma #: private/setup/mysql.php:86 msgid "Drop this user from MySQL/MariaDB" -msgstr "" +msgstr "Κατάργηση του χρήστη από MySQL/MariaDB" #: private/setup/mysql.php:91 #, php-format @@ -243,7 +244,7 @@ msgstr "Υπάρχει ήδη ο χρήστης '%s'@'%%' της MySQL/MariaDB" #: private/setup/mysql.php:92 msgid "Drop this user from MySQL/MariaDB." -msgstr "" +msgstr "Κατάργηση του χρήστη από MySQL/MariaDB." #: private/setup/oci.php:34 msgid "Oracle connection could not be established" @@ -270,13 +271,13 @@ msgstr "Εισάγετε όνομα χρήστη διαχειριστή." msgid "Set an admin password." msgstr "Εισάγετε συνθηματικό διαχειριστή." -#: private/setup.php:198 +#: private/setup.php:202 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν να είναι κατεστραμμένη." -#: private/setup.php:199 +#: private/setup.php:203 #, php-format msgid "Please double check the installation guides." msgstr "Ελέγξτε ξανά τις οδηγίες εγκατάστασης." diff --git a/l10n/el/settings.po b/l10n/el/settings.po index 963340f3af..adda7be21d 100644 --- a/l10n/el/settings.po +++ b/l10n/el/settings.po @@ -6,6 +6,7 @@ # Efstathios Iosifidis , 2013-2014 # Efstathios Iosifidis , 2013 # KAT.RAT12 , 2013 +# pe_ppe , 2014 # Teogramm , 2013 # Teogramm , 2013 # vkehayas , 2013 @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-26 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 17:11+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,7 +29,7 @@ msgstr "" #: admin/controller.php:66 #, php-format msgid "Invalid value supplied for %s" -msgstr "" +msgstr "Άκυρη τιμή για το %s" #: admin/controller.php:73 msgid "Saved" @@ -72,7 +73,7 @@ msgid "Unable to load list from App Store" msgstr "Σφάλμα στην φόρτωση της λίστας από το App Store" #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17 -#: ajax/togglegroups.php:20 changepassword/controller.php:55 +#: ajax/togglegroups.php:20 changepassword/controller.php:49 msgid "Authentication error" msgstr "Σφάλμα πιστοποίησης" @@ -134,32 +135,32 @@ msgstr "Αδυναμία αφαίρεσης χρήστη από την ομάδ msgid "Couldn't update app." msgstr "Αδυναμία ενημέρωσης εφαρμογής" -#: changepassword/controller.php:20 +#: changepassword/controller.php:17 msgid "Wrong password" msgstr "Εσφαλμένο συνθηματικό" -#: changepassword/controller.php:42 +#: changepassword/controller.php:36 msgid "No user supplied" msgstr "Δεν εισήχθη χρήστης" -#: changepassword/controller.php:74 +#: changepassword/controller.php:68 msgid "" "Please provide an admin recovery password, otherwise all user data will be " "lost" msgstr "Παρακαλώ παρέχετε έναν κωδικό ανάκτησης διαχειριστή, διαφορετικά όλα τα δεδομένα χρήστη θα χαθούν" -#: changepassword/controller.php:79 +#: changepassword/controller.php:73 msgid "" "Wrong admin recovery password. Please check the password and try again." msgstr "Λάθος κωδικός ανάκτησης διαχειριστή. Παρακαλώ ελέγξτε τον κωδικό και δοκιμάστε ξανά." -#: changepassword/controller.php:87 +#: changepassword/controller.php:81 msgid "" "Back-end doesn't support password change, but the users encryption key was " "successfully updated." msgstr "Το βασικό πλαίσιο δεν υποστηρίζει αλλαγή κωδικού, αλλά το κλειδί κρυπτογράφησης των χρηστών ενημερώθηκε επιτυχώς." -#: changepassword/controller.php:92 changepassword/controller.php:103 +#: changepassword/controller.php:86 changepassword/controller.php:97 msgid "Unable to change password" msgstr "Αδυναμία αλλαγής συνθηματικού" @@ -233,7 +234,7 @@ msgstr "Αδύναμο συνθηματικό" #: js/personal.js:279 msgid "So-so password" -msgstr "" +msgstr "Μέτριο συνθηματικό" #: js/personal.js:280 msgid "Good password" @@ -292,7 +293,7 @@ msgstr "Πρέπει να δοθεί έγκυρο συνθηματικό" msgid "Warning: Home directory for user \"{user}\" already exists" msgstr "Προειδοποίηση: Ο μητρικός κατάλογος του χρήστη \"{user}\" υπάρχει ήδη" -#: personal.php:49 personal.php:50 +#: personal.php:48 personal.php:49 msgid "__language_name__" msgstr "__όνομα_γλώσσας__" @@ -326,7 +327,7 @@ msgstr "Σύνδεση" #: templates/admin.php:18 msgid "Plain" -msgstr "" +msgstr "Απλό" #: templates/admin.php:19 msgid "NT LAN Manager" @@ -437,18 +438,18 @@ msgstr "Cron" #: templates/admin.php:167 #, php-format msgid "Last cron was executed at %s." -msgstr "" +msgstr "Η τελευταία εκτέλεση του cron ήταν στις %s" #: templates/admin.php:170 #, php-format msgid "" "Last cron was executed at %s. This is more than an hour ago, something seems" " wrong." -msgstr "" +msgstr "Η τελευταία εκτέλεση του cron ήταν στις %s. Αυτό είναι πάνω από μια ώρα πριν, ίσως κάτι δεν πάει καλά." #: templates/admin.php:174 msgid "Cron was not executed yet!" -msgstr "" +msgstr "Η διεργασία cron δεν εκτελέστηκε ακόμα!" #: templates/admin.php:184 msgid "Execute one task with each page loaded" diff --git a/l10n/el/user_ldap.po b/l10n/el/user_ldap.po index f9c9174c55..aeb2e20036 100644 --- a/l10n/el/user_ldap.po +++ b/l10n/el/user_ldap.po @@ -4,14 +4,15 @@ # # Translators: # Marios Bekatoros <>, 2013 +# pe_ppe , 2014 # vkehayas , 2013-2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-27 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 06:01+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 17:11+0000\n" +"Last-Translator: pe_ppe \n" "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -165,7 +166,7 @@ msgstr "Βοήθεια" #: templates/part.wizard-groupfilter.php:4 #, php-format msgid "Groups meeting these criteria are available in %s:" -msgstr "" +msgstr "Οι ομάδες που πληρούν τα κριτήρια είναι διαθέσιμες σε %s:" #: templates/part.wizard-groupfilter.php:8 #: templates/part.wizard-userfilter.php:8 @@ -201,7 +202,7 @@ msgstr "ομάδες βρέθηκαν" #: templates/part.wizard-loginfilter.php:4 msgid "Users login with this attribute:" -msgstr "" +msgstr "Οι χρήστες εισέρχονται με αυτό το χαρακτηριστικό:" #: templates/part.wizard-loginfilter.php:8 msgid "LDAP Username:" @@ -269,7 +270,7 @@ msgstr "Μπορείτε να καθορίσετε το Base DN για χρήσ #: templates/part.wizard-userfilter.php:4 #, php-format msgid "Limit %s access to users meeting these criteria:" -msgstr "" +msgstr "Περιορισμός της πρόσβασης %s σε χρήστες που πληρούν τα κριτήρια:" #: templates/part.wizard-userfilter.php:31 #, php-format @@ -413,7 +414,7 @@ msgstr "Group-Member association" #: templates/settings.php:39 msgid "Nested Groups" -msgstr "" +msgstr "Φωλιασμένες ομάδες" #: templates/settings.php:39 msgid "" diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po index 4a51239c72..91d7cf7c70 100644 --- a/l10n/sk_SK/core.po +++ b/l10n/sk_SK/core.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-22 01:55-0400\n" -"PO-Revision-Date: 2014-03-22 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 10:38+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,24 +19,24 @@ msgstr "" "Language: sk_SK\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: ajax/share.php:88 +#: ajax/share.php:87 msgid "Expiration date is in the past." msgstr "" -#: ajax/share.php:120 ajax/share.php:162 +#: ajax/share.php:119 ajax/share.php:161 #, php-format msgid "Couldn't send mail to following users: %s " msgstr "Nebolo možné odoslať email týmto používateľom: %s " -#: ajax/update.php:11 +#: ajax/update.php:10 msgid "Turned on maintenance mode" msgstr "Mód údržby je zapnutý" -#: ajax/update.php:14 +#: ajax/update.php:13 msgid "Turned off maintenance mode" msgstr "Mód údržby e vypnutý" -#: ajax/update.php:17 +#: ajax/update.php:16 msgid "Updated database" msgstr "Databáza je aktualizovaná" @@ -140,63 +140,63 @@ msgstr "December" msgid "Settings" msgstr "Nastavenia" -#: js/js.js:496 +#: js/js.js:543 msgid "Saving..." msgstr "Ukladám..." -#: js/js.js:995 +#: js/js.js:1103 msgid "seconds ago" msgstr "pred sekundami" -#: js/js.js:996 +#: js/js.js:1104 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "pred %n minútou" msgstr[1] "pred %n minútami" msgstr[2] "pred %n minútami" -#: js/js.js:997 +#: js/js.js:1105 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "pred %n hodinou" msgstr[1] "pred %n hodinami" msgstr[2] "pred %n hodinami" -#: js/js.js:998 +#: js/js.js:1106 msgid "today" msgstr "dnes" -#: js/js.js:999 +#: js/js.js:1107 msgid "yesterday" msgstr "včera" -#: js/js.js:1000 +#: js/js.js:1108 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "pred %n dňom" msgstr[1] "pred %n dňami" msgstr[2] "pred %n dňami" -#: js/js.js:1001 +#: js/js.js:1109 msgid "last month" msgstr "minulý mesiac" -#: js/js.js:1002 +#: js/js.js:1110 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "pred %n mesiacom" msgstr[1] "pred %n mesiacmi" msgstr[2] "pred %n mesiacmi" -#: js/js.js:1003 +#: js/js.js:1111 msgid "months ago" msgstr "pred mesiacmi" -#: js/js.js:1004 +#: js/js.js:1112 msgid "last year" msgstr "minulý rok" -#: js/js.js:1005 +#: js/js.js:1113 msgid "years ago" msgstr "pred rokmi" @@ -540,14 +540,14 @@ msgstr "Nové heslo" msgid "Reset password" msgstr "Obnovenie hesla" -#: setup/controller.php:138 +#: setup/controller.php:140 #, php-format msgid "" "Mac OS X is not supported and %s will not work properly on this platform. " "Use it at your own risk! " msgstr "" -#: setup/controller.php:142 +#: setup/controller.php:144 msgid "" "For the best results, please consider using a GNU/Linux server instead." msgstr "" diff --git a/l10n/sk_SK/files_external.po b/l10n/sk_SK/files_external.po index 5ac968e0c4..9b27d46c88 100644 --- a/l10n/sk_SK/files_external.po +++ b/l10n/sk_SK/files_external.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-11 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 05:55+0000\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 10:51+0000\n" "Last-Translator: I Robot\n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" @@ -38,24 +38,24 @@ msgstr "Zadajte platný kľúč aplikácie a heslo Dropbox" msgid "Error configuring Google Drive storage" msgstr "Chyba pri konfigurácii úložiska Google drive" -#: js/settings.js:313 js/settings.js:320 +#: js/settings.js:318 js/settings.js:325 msgid "Saved" -msgstr "" +msgstr "Uložené" -#: lib/config.php:512 +#: lib/config.php:654 msgid "" "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares " "is not possible. Please ask your system administrator to install it." msgstr "Upozornenie: \"smbclient\" nie je nainštalovaný. Nie je možné pripojenie oddielov CIFS/SMB. Požiadajte administrátora systému, nech ho nainštaluje." -#: lib/config.php:516 +#: lib/config.php:658 msgid "" "Warning: 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." msgstr "Upozornenie: Podpora FTP v PHP nie je povolená alebo nainštalovaná. Nie je možné pripojenie oddielov FTP. Požiadajte administrátora systému, nech ho nainštaluje." -#: lib/config.php:519 +#: lib/config.php:661 msgid "" "Warning: The Curl support in PHP is not enabled or installed. " "Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask " @@ -90,39 +90,39 @@ msgstr "Aplikovateľné" msgid "Add storage" msgstr "Pridať úložisko" -#: templates/settings.php:90 +#: templates/settings.php:93 msgid "None set" msgstr "Žiadne nastavené" -#: templates/settings.php:91 +#: templates/settings.php:94 msgid "All Users" msgstr "Všetci používatelia" -#: templates/settings.php:92 +#: templates/settings.php:95 msgid "Groups" msgstr "Skupiny" -#: templates/settings.php:100 +#: templates/settings.php:103 msgid "Users" msgstr "Používatelia" -#: templates/settings.php:113 templates/settings.php:114 -#: templates/settings.php:155 templates/settings.php:156 +#: templates/settings.php:116 templates/settings.php:117 +#: templates/settings.php:158 templates/settings.php:159 msgid "Delete" msgstr "Zmazať" -#: templates/settings.php:127 +#: templates/settings.php:130 msgid "Enable User External Storage" msgstr "Povoliť externé úložisko" -#: templates/settings.php:130 +#: templates/settings.php:133 msgid "Allow users to mount the following external storage" msgstr "" -#: templates/settings.php:147 +#: templates/settings.php:150 msgid "SSL root certificates" msgstr "Koreňové SSL certifikáty" -#: templates/settings.php:165 +#: templates/settings.php:168 msgid "Import Root Certificate" msgstr "Importovať koreňový certifikát" diff --git a/l10n/sk_SK/files_sharing.po b/l10n/sk_SK/files_sharing.po index 74a307337e..fafef561bd 100644 --- a/l10n/sk_SK/files_sharing.po +++ b/l10n/sk_SK/files_sharing.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# mhh , 2013 +# mhh , 2013-2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-12 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 06:12+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 10:40+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -66,7 +66,7 @@ msgstr "Zdieľa %s" #: templates/public.php:44 #, php-format msgid "Download %s" -msgstr "" +msgstr "Stiahnuť %s" #: templates/public.php:48 msgid "Direct link" diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po index 41d6fb6139..a7df661ab0 100644 --- a/l10n/sk_SK/lib.po +++ b/l10n/sk_SK/lib.po @@ -3,15 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# mhh , 2013 +# mhh , 2013-2014 # martin, 2013 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-12 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 06:12+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 10:40+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -67,23 +67,23 @@ msgstr "Chybný obrázok" msgid "web services under your control" msgstr "webové služby pod Vašou kontrolou" -#: private/files.php:231 +#: private/files.php:232 msgid "ZIP download is turned off." msgstr "Sťahovanie súborov ZIP je vypnuté." -#: private/files.php:232 +#: private/files.php:233 msgid "Files need to be downloaded one by one." msgstr "Súbory musia byť nahrávané jeden za druhým." -#: private/files.php:233 private/files.php:261 +#: private/files.php:234 private/files.php:262 msgid "Back to Files" msgstr "Späť na súbory" -#: private/files.php:258 +#: private/files.php:259 msgid "Selected files too large to generate zip file." msgstr "Zvolené súbory sú príliš veľké na vygenerovanie zip súboru." -#: private/files.php:259 +#: private/files.php:260 msgid "" "Please download the files separately in smaller chunks or kindly ask your " "administrator." @@ -159,7 +159,7 @@ msgstr "Token vypršal. Obnovte, prosím, stránku." #: private/json.php:75 msgid "Unknown user" -msgstr "" +msgstr "Neznámy používateľ" #: private/search/provider/file.php:18 private/search/provider/file.php:36 msgid "Files" @@ -194,8 +194,8 @@ msgid "MS SQL username and/or password not valid: %s" msgstr "Používateľské meno, alebo heslo MS SQL nie je platné: %s" #: private/setup/mssql.php:21 private/setup/mysql.php:13 -#: private/setup/oci.php:114 private/setup/postgresql.php:24 -#: private/setup/postgresql.php:70 +#: private/setup/oci.php:114 private/setup/postgresql.php:31 +#: private/setup/postgresql.php:84 msgid "You need to enter either an existing account or the administrator." msgstr "Musíte zadať jestvujúci účet alebo administrátora." @@ -208,9 +208,9 @@ msgstr "" #: private/setup/oci.php:151 private/setup/oci.php:162 #: private/setup/oci.php:169 private/setup/oci.php:178 #: private/setup/oci.php:186 private/setup/oci.php:195 -#: private/setup/oci.php:201 private/setup/postgresql.php:89 -#: private/setup/postgresql.php:98 private/setup/postgresql.php:115 -#: private/setup/postgresql.php:125 private/setup/postgresql.php:134 +#: private/setup/oci.php:201 private/setup/postgresql.php:103 +#: private/setup/postgresql.php:112 private/setup/postgresql.php:129 +#: private/setup/postgresql.php:139 private/setup/postgresql.php:148 #, php-format msgid "DB Error: \"%s\"" msgstr "Chyba DB: \"%s\"" @@ -219,9 +219,9 @@ msgstr "Chyba DB: \"%s\"" #: private/setup/oci.php:122 private/setup/oci.php:145 #: private/setup/oci.php:152 private/setup/oci.php:163 #: private/setup/oci.php:179 private/setup/oci.php:187 -#: private/setup/oci.php:196 private/setup/postgresql.php:90 -#: private/setup/postgresql.php:99 private/setup/postgresql.php:116 -#: private/setup/postgresql.php:126 private/setup/postgresql.php:135 +#: private/setup/oci.php:196 private/setup/postgresql.php:104 +#: private/setup/postgresql.php:113 private/setup/postgresql.php:130 +#: private/setup/postgresql.php:140 private/setup/postgresql.php:149 #, php-format msgid "Offending command was: \"%s\"" msgstr "Podozrivý príkaz bol: \"%s\"" @@ -257,7 +257,7 @@ msgstr "Používateľské meno a/alebo heslo pre Oracle databázu je neplatné" msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "Podozrivý príkaz bol: \"%s\", meno: %s, heslo: %s" -#: private/setup/postgresql.php:23 private/setup/postgresql.php:69 +#: private/setup/postgresql.php:30 private/setup/postgresql.php:83 msgid "PostgreSQL username and/or password not valid" msgstr "Používateľské meno a/alebo heslo pre PostgreSQL databázu je neplatné" @@ -269,13 +269,13 @@ msgstr "Zadajte používateľské meno administrátora." msgid "Set an admin password." msgstr "Zadajte heslo administrátora." -#: private/setup.php:198 +#: private/setup.php:202 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Váš webový server nie je správne nastavený na synchronizáciu, pretože rozhranie WebDAV je poškodené." -#: private/setup.php:199 +#: private/setup.php:203 #, php-format msgid "Please double check the installation guides." msgstr "Prosím skontrolujte inštalačnú príručku." diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po index 32ec5e902e..224946f78b 100644 --- a/l10n/sk_SK/settings.po +++ b/l10n/sk_SK/settings.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-26 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" +"PO-Revision-Date: 2014-03-31 10:51+0000\n" +"Last-Translator: mhh \n" "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +26,7 @@ msgstr "" #: admin/controller.php:73 msgid "Saved" -msgstr "" +msgstr "Uložené" #: admin/controller.php:90 msgid "test email settings" @@ -66,7 +66,7 @@ msgid "Unable to load list from App Store" msgstr "Nie je možné nahrať zoznam z App Store" #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17 -#: ajax/togglegroups.php:20 changepassword/controller.php:55 +#: ajax/togglegroups.php:20 changepassword/controller.php:49 msgid "Authentication error" msgstr "Chyba autentifikácie" @@ -128,38 +128,38 @@ msgstr "Nie je možné odstrániť používateľa zo skupiny %s" msgid "Couldn't update app." msgstr "Nemožno aktualizovať aplikáciu." -#: changepassword/controller.php:20 +#: changepassword/controller.php:17 msgid "Wrong password" msgstr "Nesprávne heslo" -#: changepassword/controller.php:42 +#: changepassword/controller.php:36 msgid "No user supplied" msgstr "Nebol uvedený používateľ" -#: changepassword/controller.php:74 +#: changepassword/controller.php:68 msgid "" "Please provide an admin recovery password, otherwise all user data will be " "lost" msgstr "Zadajte administrátorské heslo pre obnovu, inak budú všetky dáta stratené" -#: changepassword/controller.php:79 +#: changepassword/controller.php:73 msgid "" "Wrong admin recovery password. Please check the password and try again." msgstr "Chybné administrátorské heslo pre obnovu. Skontrolujte správnosť hesla a skúste to znovu." -#: changepassword/controller.php:87 +#: changepassword/controller.php:81 msgid "" "Back-end doesn't support password change, but the users encryption key was " "successfully updated." msgstr "Úložisko nepodporuje zmenu hesla, ale šifrovací kľúč používateľov bol úspešne zmenený." -#: changepassword/controller.php:92 changepassword/controller.php:103 +#: changepassword/controller.php:86 changepassword/controller.php:97 msgid "Unable to change password" msgstr "Zmena hesla sa nepodarila" #: js/admin.js:73 msgid "Sending..." -msgstr "" +msgstr "Odosielam..." #: js/apps.js:45 templates/help.php:4 msgid "User Documentation" @@ -286,7 +286,7 @@ msgstr "Musíte zadať platné heslo" msgid "Warning: Home directory for user \"{user}\" already exists" msgstr "Upozornenie: Domovský priečinok používateľa \"{user}\" už existuje" -#: personal.php:49 personal.php:50 +#: personal.php:48 personal.php:49 msgid "__language_name__" msgstr "Slovensky" @@ -328,11 +328,11 @@ msgstr "" #: templates/admin.php:24 msgid "SSL" -msgstr "" +msgstr "SSL" #: templates/admin.php:25 msgid "TLS" -msgstr "" +msgstr "TLS" #: templates/admin.php:47 templates/admin.php:61 msgid "Security Warning" @@ -533,7 +533,7 @@ msgstr "Pripojte sa k %s cez HTTPS pre povolenie alebo zakázanie vynútenia SSL #: templates/admin.php:294 msgid "Email Server" -msgstr "" +msgstr "Email server" #: templates/admin.php:296 msgid "This is used for sending out notifications." @@ -561,11 +561,11 @@ msgstr "Prihlasovanie údaje" #: templates/admin.php:363 msgid "SMTP Username" -msgstr "" +msgstr "SMTP používateľské meno" #: templates/admin.php:366 msgid "SMTP Password" -msgstr "" +msgstr "SMTP heslo" #: templates/admin.php:370 msgid "Test email settings" @@ -573,7 +573,7 @@ msgstr "" #: templates/admin.php:371 msgid "Send email" -msgstr "" +msgstr "Odoslať email" #: templates/admin.php:376 msgid "Log" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index eacfde04d8..e2343f68a9 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index bc931be91d..32c823f911 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 99f9cf030b..426ee835c5 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 6334e403e4..15d3055889 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 8fbff46261..5acf3d4e6f 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index f9b4401c78..d890a5395d 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 3381aea0a7..21b5360797 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 10017472d1..f7ed90f06a 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot index 12fa6ad930..64f139c496 100644 --- a/l10n/templates/private.pot +++ b/l10n/templates/private.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 892d64a273..2da34f73a9 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index d16fe0386e..2e57ba0cb5 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index d2e917267c..5d24239a41 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-31 01:55-0400\n" +"POT-Creation-Date: 2014-04-01 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/lib/l10n/el.php b/lib/l10n/el.php index 148b7fc1fe..a169ae3864 100644 --- a/lib/l10n/el.php +++ b/lib/l10n/el.php @@ -44,7 +44,9 @@ $TRANSLATIONS = array( "DB Error: \"%s\"" => "Σφάλμα Βάσης Δεδομένων: \"%s\"", "Offending command was: \"%s\"" => "Η εντολη παραβατικοτητας ηταν: \"%s\"", "MySQL/MariaDB user '%s'@'localhost' exists already." => "Υπάρχει ήδη ο χρήστης '%s'@'localhost' της MySQL/MariaDB", +"Drop this user from MySQL/MariaDB" => "Κατάργηση του χρήστη από MySQL/MariaDB", "MySQL/MariaDB user '%s'@'%%' already exists" => "Υπάρχει ήδη ο χρήστης '%s'@'%%' της MySQL/MariaDB", +"Drop this user from MySQL/MariaDB." => "Κατάργηση του χρήστη από MySQL/MariaDB.", "Oracle connection could not be established" => "Αδυναμία σύνδεσης Oracle", "Oracle username and/or password not valid" => "Μη έγκυρος χρήστης και/ή συνθηματικό της Oracle", "Offending command was: \"%s\", name: %s, password: %s" => "Η εντολη παραβατικοτητας ηταν: \"%s\", ονομα: %s, κωδικος: %s", diff --git a/lib/l10n/sk_SK.php b/lib/l10n/sk_SK.php index 546e301797..424f0f5bd8 100644 --- a/lib/l10n/sk_SK.php +++ b/lib/l10n/sk_SK.php @@ -31,6 +31,7 @@ $TRANSLATIONS = array( "Application is not enabled" => "Aplikácia nie je zapnutá", "Authentication error" => "Chyba autentifikácie", "Token expired. Please reload page." => "Token vypršal. Obnovte, prosím, stránku.", +"Unknown user" => "Neznámy používateľ", "Files" => "Súbory", "Text" => "Text", "Images" => "Obrázky", diff --git a/settings/l10n/el.php b/settings/l10n/el.php index c438fa0f99..0b6ee6a298 100644 --- a/settings/l10n/el.php +++ b/settings/l10n/el.php @@ -1,5 +1,6 @@ "Άκυρη τιμή για το %s", "Saved" => "Αποθηκεύτηκαν", "test email settings" => "δοκιμή ρυθμίσεων email", "If you received this email, the settings seem to be correct." => "Εάν λάβατε αυτό το email, οι ρυθμίσεις δείχνουν να είναι σωστές.", @@ -48,6 +49,7 @@ $TRANSLATIONS = array( "Select a profile picture" => "Επιλογή εικόνας προφίλ", "Very weak password" => "Πολύ αδύναμο συνθηματικό", "Weak password" => "Αδύναμο συνθηματικό", +"So-so password" => "Μέτριο συνθηματικό", "Good password" => "Καλό συνθηματικό", "Strong password" => "Δυνατό συνθηματικό", "Decrypting files... Please wait, this can take some time." => "Αποκρυπτογράφηση αρχείων... Παρακαλώ περιμένετε, αυτό μπορεί να πάρει κάποιο χρόνο.", @@ -70,6 +72,7 @@ $TRANSLATIONS = array( "Fatal issues only" => "Καίρια ζητήματα μόνο", "None" => "Τίποτα", "Login" => "Σύνδεση", +"Plain" => "Απλό", "NT LAN Manager" => "Διαχειριστης NT LAN", "SSL" => "SSL", "TLS" => "TLS", @@ -90,6 +93,9 @@ $TRANSLATIONS = array( "Internet connection not working" => "Η σύνδεση στο διαδίκτυο δεν δουλεύει", "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις περί ενημερώσεων ή η εγκατάσταση 3ων εφαρμογών δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.", "Cron" => "Cron", +"Last cron was executed at %s." => "Η τελευταία εκτέλεση του cron ήταν στις %s", +"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Η τελευταία εκτέλεση του cron ήταν στις %s. Αυτό είναι πάνω από μια ώρα πριν, ίσως κάτι δεν πάει καλά.", +"Cron was not executed yet!" => "Η διεργασία cron δεν εκτελέστηκε ακόμα!", "Execute one task with each page loaded" => "Εκτέλεση μιας διεργασίας με κάθε σελίδα που φορτώνεται", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "Το cron.php είναι καταχωρημένο σε μια υπηρεσία webcron ώστε να καλεί το cron.php κάθε 15 λεπτά μέσω http.", "Use systems cron service to call the cron.php file every 15 minutes." => "Χρήση της υπηρεσίας cron του συστήματος για να καλεστεί το αρχείο cron.php κάθε 15 λεπτά.", diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php index eaa8552f9c..e613b5b04c 100644 --- a/settings/l10n/sk_SK.php +++ b/settings/l10n/sk_SK.php @@ -1,5 +1,6 @@ "Uložené", "Email sent" => "Email odoslaný", "Encryption" => "Šifrovanie", "Unable to load list from App Store" => "Nie je možné nahrať zoznam z App Store", @@ -24,6 +25,7 @@ $TRANSLATIONS = array( "Wrong admin recovery password. Please check the password and try again." => "Chybné administrátorské heslo pre obnovu. Skontrolujte správnosť hesla a skúste to znovu.", "Back-end doesn't support password change, but the users encryption key was successfully updated." => "Úložisko nepodporuje zmenu hesla, ale šifrovací kľúč používateľov bol úspešne zmenený.", "Unable to change password" => "Zmena hesla sa nepodarila", +"Sending..." => "Odosielam...", "User Documentation" => "Príručka používateľa", "Update to {appversion}" => "Aktualizovať na {appversion}", "Disable" => "Zakázať", @@ -57,6 +59,8 @@ $TRANSLATIONS = array( "Fatal issues only" => "Len fatálne problémy", "None" => "Žiadny", "Login" => "Prihlásenie", +"SSL" => "SSL", +"TLS" => "TLS", "Security Warning" => "Bezpečnostné upozornenie", "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." => "Do %s máte prístup cez HTTP. Dôrazne odporúčame nakonfigurovať server tak, aby namiesto toho vyžadoval použitie HTTPS.", "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Odporúčame nakonfigurovať webový server tak, aby priečinok s dátami nebol naďalej prístupný, alebo presunúť priečinok s dátami mimo priestor sprístupňovaný webovým serverom.", @@ -94,9 +98,13 @@ $TRANSLATIONS = array( "Enforce HTTPS" => "Vynútiť HTTPS", "Forces the clients to connect to %s via an encrypted connection." => "Vynúti pripájanie klientov k %s šifrovaným pripojením.", "Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Pripojte sa k %s cez HTTPS pre povolenie alebo zakázanie vynútenia SSL.", +"Email Server" => "Email server", "Server address" => "Adresa servera", "Port" => "Port", "Credentials" => "Prihlasovanie údaje", +"SMTP Username" => "SMTP používateľské meno", +"SMTP Password" => "SMTP heslo", +"Send email" => "Odoslať email", "Log" => "Záznam", "Log level" => "Úroveň záznamu", "More" => "Viac", From d6ce45fe61c05c0779cfaa3207a538a7a5b9a04c Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 31 Mar 2014 18:36:52 +0200 Subject: [PATCH 54/94] Correctly read the full stream in file_get_contents When using user-defined stream wrappers, PHP will return a maximum of 8192 bytes even if more was requested. This fix uses stream_get_contents to make sure the full stream is read and not only the first 8 KB. Added unit test with a bigger test file to cover this case. --- lib/private/files/storage/common.php | 7 ++----- tests/data/lorem-big.txt | 29 ++++++++++++++++++++++++++++ tests/lib/files/storage/storage.php | 15 ++++++++++++-- 3 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 tests/data/lorem-big.txt diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index 2b69714151..480cf6b5c7 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -118,11 +118,8 @@ abstract class Common implements \OC\Files\Storage\Storage { if (!$handle) { return false; } - $size = $this->filesize($path); - if ($size == 0) { - return ''; - } - return fread($handle, $size); + $data = stream_get_contents($handle); + return $data; } public function file_put_contents($path, $data) { diff --git a/tests/data/lorem-big.txt b/tests/data/lorem-big.txt new file mode 100644 index 0000000000..3712b9d30f --- /dev/null +++ b/tests/data/lorem-big.txt @@ -0,0 +1,29 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id hendrerit felis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed dictum dolor nec lobortis sagittis. Aliquam blandit lobortis ullamcorper. Donec malesuada ante ante, vel cursus purus suscipit ut. Sed a eros vitae lorem tristique hendrerit a a odio. Cras interdum mi lectus, sed molestie mauris tempus sit amet. Praesent auctor neque venenatis diam tincidunt sodales. Maecenas tincidunt ligula et ipsum dignissim, et molestie dui hendrerit. Nunc lobortis mauris vel tempor tristique. Sed consectetur bibendum nunc. Pellentesque augue velit, interdum ac posuere eu, eleifend et massa. Vestibulum ac mi eu mi viverra iaculis. Sed consequat leo adipiscing dui varius, sagittis vestibulum massa vehicula. + +Praesent imperdiet erat vitae dui placerat, sit amet vulputate tortor viverra. In laoreet elit lorem, at luctus est tempor ac. Nam elementum scelerisque nisl vitae accumsan. Curabitur cursus rutrum est, ut adipiscing ante elementum ut. Ut lectus sem, luctus ut massa non, dignissim vestibulum ipsum. Suspendisse non convallis enim, aliquam adipiscing velit. Donec pharetra non turpis hendrerit porttitor. Aliquam erat volutpat. + +Cras eget arcu eu dolor faucibus accumsan non eget orci. Integer quis quam tincidunt, faucibus neque in, imperdiet lacus. Aenean dui turpis, lacinia quis ligula non, semper adipiscing tellus. Curabitur vitae dui quis nisl malesuada commodo. Nunc eleifend metus enim, eu aliquet dui semper sit amet. Sed a odio sapien. Suspendisse vitae ante id sapien semper accumsan. Sed vestibulum erat quis laoreet pellentesque. Nullam placerat ligula eu odio faucibus, eget dictum orci tristique. Quisque sit amet pulvinar velit, lacinia dictum sem. + +Phasellus id sagittis lacus. Vivamus facilisis convallis metus, sit amet ultricies purus gravida quis. Vivamus eget egestas arcu, a euismod risus. Fusce metus arcu, molestie ut lacinia at, commodo eu nibh. In leo tortor, feugiat aliquet semper in, malesuada ac nulla. Fusce tempor ultricies blandit. Pellentesque et lorem quam. Suspendisse eros eros, mattis ut porttitor vitae, fermentum eget augue. Aliquam vitae justo sed est dictum lobortis. Cras lacinia commodo ligula sed ornare. Donec ut eros semper, sodales tellus quis, cursus quam. Quisque elementum ullamcorper pellentesque. Integer in rutrum ante, vel condimentum metus. Aliquam erat volutpat. + +Quisque convallis tempus eros, sit amet mattis ipsum eleifend in. Mauris volutpat, urna ut commodo tempus, est quam scelerisque erat, eget consequat nulla arcu id eros. Nam elementum nibh quis tincidunt adipiscing. Fusce tristique pretium mollis. Nulla quis ornare felis, vel lacinia diam. In et dui et mauris vestibulum commodo. In hac habitasse platea dictumst. Vestibulum viverra pellentesque tortor, tempor vehicula orci. Praesent rutrum turpis ipsum, ac commodo nisi vehicula ac. + +Nulla gravida ultrices mauris. Ut congue purus nec dolor euismod, vitae auctor elit condimentum. Nullam elementum velit lectus, fringilla pharetra sem hendrerit sit amet. Cras quis lobortis nisi, id interdum massa. Proin eget porttitor sapien. Vivamus quam odio, consectetur at rhoncus vel, posuere in nisi. Donec hendrerit urna ac massa tristique, pellentesque consequat orci dapibus. Mauris mi erat, aliquet id adipiscing ultricies, ultrices nec lacus. Proin imperdiet elit magna, ut suscipit metus faucibus eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas at leo lorem. Donec mi nibh, blandit ut mi quis, dictum adipiscing ante. Curabitur sodales blandit odio id viverra. Fusce sagittis rutrum nibh. Mauris risus lacus, placerat at dictum in, varius volutpat quam. + +Ut accumsan tincidunt dui, non semper lorem sodales nec. Curabitur pellentesque velit nec erat ultrices, in convallis diam suscipit. Curabitur pellentesque convallis mi. Phasellus iaculis orci quis nisi semper auctor. Vestibulum eleifend tortor quis odio feugiat, pulvinar congue turpis blandit. Sed viverra diam risus, vel mattis orci dignissim ut. Cras pellentesque dapibus dolor. Morbi tempor eleifend magna. Ut sodales ut sapien sed elementum. In hac habitasse platea dictumst. + +Nullam eget sagittis tellus. Donec a tellus id ligula viverra pellentesque. Pellentesque nulla turpis, pretium vel sem vel, placerat ultricies diam. Donec felis nibh, rhoncus id ornare at, lobortis vel massa. Nullam eu luctus ipsum. Mauris consequat dictum aliquam. Suspendisse ullamcorper aliquam mauris, viverra tincidunt augue suscipit at. Sed luctus scelerisque justo ut semper. Phasellus massa mauris, molestie at nulla eget, dictum ultricies nisi. Aliquam rhoncus nisl sed urna egestas, vel luctus lectus euismod. Mauris sagittis dapibus leo. Donec vitae dignissim risus, ac ultricies augue. Ut vulputate tortor sed dui consectetur placerat. Nullam viverra non diam vel dignissim. + +Suspendisse potenti. Integer facilisis neque vitae euismod adipiscing. Aenean dictum leo commodo dui sodales, sit amet volutpat mauris gravida. Proin tempus convallis eros at consectetur. Proin nisl purus, dictum vel euismod ut, imperdiet quis est. Etiam sollicitudin lobortis neque eget pulvinar. Etiam venenatis vel sem ut posuere. Aliquam consectetur rhoncus facilisis. Morbi a viverra orci. + +Praesent ut vehicula orci, vel convallis risus. Suspendisse consectetur varius interdum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Proin vel sodales enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur suscipit tristique justo vel dapibus. Sed tincidunt mattis massa a auctor. Donec in tincidunt elit. Curabitur interdum neque at ante fringilla tempus. In hac habitasse platea dictumst. Vivamus luctus ligula ut nisl fermentum egestas. Praesent pulvinar accumsan neque. Sed nec leo sit amet arcu vehicula vehicula non ac diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; + +Morbi vel arcu quis neque dictum ullamcorper. Pellentesque condimentum consequat lacinia. Vestibulum eleifend placerat erat, eu hendrerit dui pulvinar eget. Vestibulum accumsan, lectus id vehicula fringilla, erat eros dictum massa, ut tristique libero mi eu ante. In at ante nunc. Praesent sodales ullamcorper porta. Curabitur egestas odio elit. Praesent et libero malesuada, venenatis lorem vitae, eleifend nisl. Donec dapibus euismod turpis, nec porttitor turpis dapibus ac. Fusce iaculis lacus eget dictum aliquam. Sed dictum eu enim ac posuere. Ut accumsan, ipsum et laoreet consectetur, ipsum quam dapibus diam, ac molestie ligula dui id massa. Nulla aliquam mauris congue nibh vestibulum imperdiet. + +Aenean ultricies, orci vel consectetur suscipit, ante nisi eleifend est, vitae suscipit risus erat dictum dui. Ut nisi diam, tristique sed nisl nec, aliquam gravida orci. Vestibulum in molestie sem. Ut eu molestie mi. Suspendisse potenti. Nunc sagittis lorem ut est vehicula, vitae imperdiet leo rutrum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec pharetra urna pretium, faucibus orci cursus, sodales purus. Duis iaculis dignissim augue, non aliquet ligula elementum quis. Sed tempus a nisi et faucibus. Donec mattis ligula ac sem aliquam, sed sodales est ullamcorper. Cras vel orci est. Integer eget ultricies nisi. + +Quisque rhoncus, nisl vel auctor consectetur, sapien augue iaculis urna, quis suscipit arcu dolor ac est. Fusce sit amet quam lacinia, malesuada lorem vitae, dapibus justo. Mauris eget massa nec dolor volutpat tempor ut eu ante. Donec risus mi, aliquam at euismod vulputate, ullamcorper non leo. Etiam ac elit velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus sollicitudin enim sed felis pharetra, a convallis mi venenatis. Donec convallis non velit venenatis suscipit. Sed massa risus, dictum quis aliquam ut, placerat quis arcu. Donec at nisi neque. Nullam porta et mi vel ultricies. Donec vel aliquam sem. Mauris varius, ipsum interdum mattis rhoncus, nunc nisl vehicula tortor, quis condimentum nibh nisl vel ante. Sed vel pretium dui. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce pulvinar molestie neque, quis luctus ante. + +Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec ac ipsum egestas, luctus urna aliquet, fringilla tortor. Cras eleifend sed tellus tempor congue. Integer venenatis magna dignissim pharetra cursus. Nulla volutpat, sem sit amet malesuada laoreet, odio libero consectetur orci, sit amet pellentesque neque ligula quis libero. Morbi nec interdum metus, in imperdiet justo. Fusce euismod egestas nulla et elementum. Etiam aliquam lectus quis eros semper, sed dapibus velit ultrices. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Proin sed elit vel massa placerat mattis et vel mauris. Aliquam accumsan ante ligula, at accumsan enim pellentesque sit amet. Sed eget quam vel nunc molestie iaculis vitae nec massa. Vivamus sed accumsan libero. Duis pretium quam at blandit sollicitudin. Nullam sodales sit amet elit ac adipiscing. Ut ullamcorper dignissim sapien. Nulla facilisi. Fusce sed consequat lectus, et tempus ipsum. Aliquam vestibulum lectus vitae quam mollis, et adipiscing nisl lobortis diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index f3bfba3feb..6ec35dfbc9 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -113,11 +113,22 @@ abstract class Storage extends \PHPUnit_Framework_TestCase { ); } + function loremFileProvider() { + $root = \OC::$SERVERROOT . '/tests/data/'; + return array( + // small file + array($root . 'lorem.txt'), + // bigger file (> 8 KB which is the standard PHP block size) + array($root . 'lorem-big.txt') + ); + } + /** * test the various uses of file_get_contents and file_put_contents + * + * @dataProvider loremFileProvider */ - public function testGetPutContents() { - $sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt'; + public function testGetPutContents($sourceFile) { $sourceText = file_get_contents($sourceFile); //fill a file with string data From 0067a4eac287928a70a50c925b00777d760e4ec1 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 31 Mar 2014 18:37:52 +0200 Subject: [PATCH 55/94] Added missing fclose in file_get_contents and file_put_contents --- lib/private/files/storage/common.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index 480cf6b5c7..0ce447a5a4 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -119,13 +119,16 @@ abstract class Common implements \OC\Files\Storage\Storage { return false; } $data = stream_get_contents($handle); + fclose($handle); return $data; } public function file_put_contents($path, $data) { $handle = $this->fopen($path, "w"); $this->removeCachedFile($path); - return fwrite($handle, $data); + $count = fwrite($handle, $data); + fclose($handle); + return $count; } public function rename($path1, $path2) { From 0d2a81a0959576f02a0d82bc1efba88ee7bb09d0 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Tue, 1 Apr 2014 10:48:55 +0200 Subject: [PATCH 56/94] apply proposed change --- core/css/apps.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/css/apps.css b/core/css/apps.css index 5899aa0909..836d36d8b8 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -30,12 +30,12 @@ } #app-navigation .active, #app-navigation .active a { - background-color: #eee; + background-color: #ddd; } #app-navigation li:hover > a, #app-navigation .selected, #app-navigation .selected a { - background-color: #ddd; + background-color: #ccc; } /* special rules for first-level entries and folders */ From 0a112de676ab41579a40eb04d4f8b0cc96b326a7 Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Tue, 1 Apr 2014 14:26:06 +0200 Subject: [PATCH 57/94] external storage: change confusing 'applicable' to 'available for' --- apps/files_external/templates/settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index a2bdbcf463..28836ed5b5 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -9,7 +9,7 @@
    - '.$l->t('Applicable').''); ?> + '.$l->t('Available for').''); ?> From acfb3cfff544096342b9d44410bcb74bbffec99a Mon Sep 17 00:00:00 2001 From: Jan-Christoph Borchardt Date: Tue, 1 Apr 2014 14:28:33 +0200 Subject: [PATCH 58/94] external storage: set storages to be available for All Users by default --- apps/files_external/templates/settings.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index 28836ed5b5..e8815acaf1 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -88,9 +88,12 @@ data-applicable-users=''> ').attr({ + "data-id" : fileData.id, "data-type": type, - "data-size": size, + "data-size": fileData.size, "data-file": name, - "data-permissions": permissions + "data-mime": mime, + "data-mtime": mtime, + "data-etag": fileData.etag, + "data-permissions": fileData.permissions || this.getDirectoryPermissions() }); + + if (type === 'dir') { + // use default folder icon + icon = icon || OC.imagePath('core', 'filetypes/folder'); + } + else { + icon = icon || OC.imagePath('core', 'filetypes/file'); + } + // filename td td = $('').attr({ - "class": "filename svg", - "style": 'background-image:url('+iconurl+'); background-size: 32px;' + "class": "filename", + "style": 'background-image:url(' + icon + '); background-size: 32px;' }); - var rand = Math.random().toString(16).slice(2); - td.append(''); + + // linkUrl + if (type === 'dir') { + linkUrl = FileList.linkTo(FileList.getCurrentDirectory() + '/' + name); + } + else { + linkUrl = Files.getDownloadUrl(name, FileList.getCurrentDirectory()); + } + td.append(''); var link_elem = $('').attr({ "class": "name", - "href": linktarget + "href": linkUrl }); - //split extension from filename for non dirs + + // from here work on the display name + name = fileData.displayName || name; + + // split extension from filename for non dirs if (type !== 'dir' && name.indexOf('.') !== -1) { - basename=name.substr(0,name.lastIndexOf('.')); - extension=name.substr(name.lastIndexOf('.')); + basename = name.substr(0, name.lastIndexOf('.')); + extension = name.substr(name.lastIndexOf('.')); } else { - basename=name; - extension=false; + basename = name; + extension = false; } var name_span=$('').addClass('nametext').text(basename); link_elem.append(name_span); if (extension) { name_span.append($('').addClass('extension').text(extension)); } - //dirs can show the number of uploaded files + // dirs can show the number of uploaded files if (type === 'dir') { link_elem.append($('').attr({ 'class': 'uploadtext', @@ -103,98 +259,122 @@ window.FileList={ td.append(link_elem); tr.append(td); - //size column - if (size !== t('files', 'Pending')) { - simpleSize = humanFileSize(size); + // size column + if (typeof(fileData.size) !== 'undefined' && fileData.size >= 0) { + simpleSize = humanFileSize(parseInt(fileData.size, 10)); + sizeColor = Math.round(160-Math.pow((fileData.size/(1024*1024)),2)); } else { - simpleSize=t('files', 'Pending'); + simpleSize = t('files', 'Pending'); } - var sizeColor = Math.round(160-Math.pow((size/(1024*1024)),2)); - var lastModifiedTime = Math.round(lastModified.getTime() / 1000); + var lastModifiedTime = Math.round(mtime / 1000); td = $('').attr({ "class": "filesize", - "style": 'color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')' + "style": 'color:rgb(' + sizeColor + ',' + sizeColor + ',' + sizeColor + ')' }).text(simpleSize); tr.append(td); // date column - var modifiedColor = Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5); + var modifiedColor = Math.round((Math.round((new Date()).getTime() / 1000) - mtime)/60/60/24*5); td = $('').attr({ "class": "date" }); td.append($('').attr({ "class": "modified", - "title": formatDate(lastModified), + "title": formatDate(mtime), "style": 'color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')' - }).text( relative_modified_date(lastModified.getTime() / 1000) )); + }).text( relative_modified_date(mtime / 1000) )); + tr.find('.filesize').text(simpleSize); tr.append(td); return tr; }, - addFile:function(name, size, lastModified, loading, hidden, param) { - var imgurl; + /** + * Adds an entry to the files table using the data from the given file data + * @param fileData map of file attributes + * @param options map of attributes: + * - "insert" true to insert in a sorted manner, false to append (default) + * - "updateSummary" true to update the summary after adding (default), false otherwise + * @return new tr element (not appended to the table) + */ + add: function(fileData, options) { + options = options || {}; + var type = fileData.type || 'file', + mime = fileData.mimetype, + permissions = parseInt(fileData.permissions, 10) || 0; - if (!param) { - param = {}; + if (type === 'dir') { + mime = mime || 'httpd/unix-directory'; } - - var download_url = null; - if (!param.download_url) { - download_url = OC.generateUrl( - 'apps/files/download{file}', - { file: $('#dir').val()+'/'+name }); - } else { - download_url = param.download_url; - } - - if (loading) { - imgurl = OC.imagePath('core', 'loading.gif'); - } else { - imgurl = OC.imagePath('core', 'filetypes/file'); - } - var tr = this.createRow( - 'file', - name, - imgurl, - download_url, - size, - lastModified, - $('#permissions').val() + var tr = this._createRow( + fileData, + options ); + var filenameTd = tr.find('td.filename'); - FileList.insertElement(name, 'file', tr); - if (loading) { - tr.data('loading', true); - } else { - tr.find('td.filename').draggable(dragOptions); + // sorted insert is expensive, so needs to be explicitly + // requested + if (options.insert) { + this.insertElement(fileData.name, type, tr); } - if (hidden) { - tr.hide(); + else { + this.$fileList.append(tr); + } + FileList.isEmpty = false; + + // TODO: move dragging to FileActions ? + // enable drag only for deletable files + if (permissions & OC.PERMISSION_DELETE) { + filenameTd.draggable(dragOptions); + } + // allow dropping on folders + if (fileData.type === 'dir') { + filenameTd.droppable(folderDropOptions); + } + + if (options.hidden) { + tr.addClass('hidden'); + } + + // display actions + FileActions.display(filenameTd, false); + + if (fileData.isPreviewAvailable) { + // lazy load / newly inserted td ? + if (!fileData.icon) { + Files.lazyLoadPreview(getPathForPreview(fileData.name), mime, function(url) { + filenameTd.css('background-image', 'url(' + url + ')'); + }, null, null, fileData.etag); + } + else { + // set the preview URL directly + var urlSpec = { + file: FileList.getCurrentDirectory() + '/' + fileData.name, + c: fileData.etag + }; + var previewUrl = Files.generatePreviewUrl(urlSpec); + previewUrl = previewUrl.replace('(', '%28').replace(')', '%29'); + filenameTd.css('background-image', 'url(' + previewUrl + ')'); + } + } + + // defaults to true if not defined + if (typeof(options.updateSummary) === 'undefined' || !!options.updateSummary) { + this.updateFileSummary(); + this.updateEmptyContent(); } return tr; }, - addDir:function(name, size, lastModified, hidden) { - - var tr = this.createRow( - 'dir', - name, - OC.imagePath('core', 'filetypes/folder'), - OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent($('#dir').val()+'/'+name).replace(/%2F/g, '/'), - size, - lastModified, - $('#permissions').val() - ); - - FileList.insertElement(name, 'dir', tr); - var td = tr.find('td.filename'); - td.draggable(dragOptions); - td.droppable(folderDropOptions); - if (hidden) { - tr.hide(); - } - FileActions.display(tr.find('td.filename'), true); - return tr; - }, + /** + * Returns the current directory + * @return current directory + */ getCurrentDirectory: function(){ return $('#dir').val() || '/'; }, + /** + * Returns the directory permissions + * @return permission value as integer + */ + getDirectoryPermissions: function() { + return parseInt($('#permissions').val(), 10); + }, /** * @brief Changes the current directory and reload the file list. * @param targetDir target directory (non URL encoded) @@ -209,7 +389,7 @@ window.FileList={ if (!force && currentDir === targetDir) { return; } - FileList.setCurrentDir(targetDir, changeUrl); + FileList._setCurrentDir(targetDir, changeUrl); $('#fileList').trigger( jQuery.Event('changeDirectory', { dir: targetDir, @@ -221,7 +401,13 @@ window.FileList={ linkTo: function(dir) { return OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); }, - setCurrentDir: function(targetDir, changeUrl) { + + /** + * Sets the current directory name and updates the breadcrumb. + * @param targetDir directory to display + * @param changeUrl true to also update the URL, false otherwise (default) + */ + _setCurrentDir: function(targetDir, changeUrl) { var url, baseDir = OC.basename(targetDir); @@ -243,6 +429,7 @@ window.FileList={ window.location.hash = '?dir='+ encodeURIComponent(targetDir).replace(/%2F/g, '/'); } } + this.breadcrumb.setDirectory(this.getCurrentDirectory()); }, /** * @brief Reloads the file list using ajax call @@ -253,10 +440,9 @@ window.FileList={ FileList._reloadCall.abort(); } FileList._reloadCall = $.ajax({ - url: OC.filePath('files','ajax','list.php'), + url: Files.getAjaxUrl('list'), data: { - dir : $('#dir').val(), - breadcrumb: true + dir : $('#dir').val() }, error: function(result) { FileList.reloadCallback(result); @@ -269,8 +455,8 @@ window.FileList={ reloadCallback: function(result) { var $controls = $('#controls'); - delete FileList._reloadCall; - FileList.hideMask(); + delete this._reloadCall; + this.hideMask(); if (!result || result.status === 'error') { OC.Notification.show(result.data.message); @@ -279,7 +465,11 @@ window.FileList={ if (result.status === 404) { // go back home - FileList.changeDirectory('/'); + this.changeDirectory('/'); + return; + } + // aborted ? + if (result.status === 0){ return; } @@ -288,24 +478,10 @@ window.FileList={ Files.updateStorageStatistics(true); if (result.data.permissions) { - FileList.setDirectoryPermissions(result.data.permissions); + this.setDirectoryPermissions(result.data.permissions); } - if (typeof(result.data.breadcrumb) !== 'undefined') { - $controls.find('.crumb').remove(); - $controls.prepend(result.data.breadcrumb); - - var width = $(window).width(); - Files.initBreadCrumbs(); - Files.resizeBreadcrumbs(width, true); - - // in case svg is not supported by the browser we need to execute the fallback mechanism - if (!SVGSupport()) { - replaceSVG(); - } - } - - FileList.update(result.data.files); + this.setFiles(result.data.files); }, setDirectoryPermissions: function(permissions) { var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; @@ -322,10 +498,14 @@ window.FileList={ $('.actions,#file_action_panel').toggleClass('hidden', !show); if (show){ // make sure to display according to permissions - var permissions = $('#permissions').val(); + var permissions = this.getDirectoryPermissions(); var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; $('.creatable').toggleClass('hidden', !isCreatable); $('.notCreatable').toggleClass('hidden', isCreatable); + // remove old style breadcrumbs (some apps might create them) + $('#controls .crumb').remove(); + // refresh breadcrumbs in case it was replaced by an app + this.breadcrumb.render(); } else{ $('.creatable, .notCreatable').addClass('hidden'); @@ -341,22 +521,32 @@ window.FileList={ this.showActions(!show); $('#filestable').toggleClass('hidden', show); }, - remove:function(name){ + /** + * Removes a file entry from the list + * @param name name of the file to remove + * @param options optional options as map: + * "updateSummary": true to update the summary (default), false otherwise + */ + remove:function(name, options){ + options = options || {}; var fileEl = FileList.findFileEl(name); if (fileEl.data('permissions') & OC.PERMISSION_DELETE) { // file is only draggable when delete permissions are set fileEl.find('td.filename').draggable('destroy'); } fileEl.remove(); - FileList.updateFileSummary(); - if ( ! $('tr[data-file]').exists() ) { - $('#emptycontent').removeClass('hidden'); - $('#filescontent th').addClass('hidden'); + // TODO: improve performance on batch update + FileList.isEmpty = !this.$fileList.find('tr:not(.summary)').length; + if (typeof(options.updateSummary) === 'undefined' || !!options.updateSummary) { + FileList.updateEmptyContent(); + FileList.updateFileSummary(); } + return fileEl; }, insertElement:function(name, type, element) { - //find the correct spot to insert the file or folder - var pos, fileElements=$('tr[data-file][data-type="'+type+'"]:visible'); + // find the correct spot to insert the file or folder + var pos, + fileElements = this.$fileList.find('tr[data-file][data-type="'+type+'"]:not(.hidden)'); if (name.localeCompare($(fileElements[0]).attr('data-file')) < 0) { pos = -1; } else if (name.localeCompare($(fileElements[fileElements.length-1]).attr('data-file')) > 0) { @@ -376,35 +566,18 @@ window.FileList={ } else { $(fileElements[pos]).after(element); } - } else if (type === 'dir' && $('tr[data-file]').exists()) { - $('tr[data-file]').first().before(element); - } else if (type === 'file' && $('tr[data-file]').exists()) { - $('tr[data-file]').last().before(element); + } else if (type === 'dir' && !FileList.isEmpty) { + this.$fileList.find('tr[data-file]:first').before(element); + } else if (type === 'file' && !FileList.isEmpty) { + this.$fileList.find('tr[data-file]:last').before(element); } else { - $('#fileList').append(element); + this.$fileList.append(element); } - $('#emptycontent').addClass('hidden'); - $('#filestable th').removeClass('hidden'); + FileList.isEmpty = false; + FileList.updateEmptyContent(); FileList.updateFileSummary(); }, - loadingDone:function(name, id) { - var mime, tr = FileList.findFileEl(name); - tr.data('loading', false); - mime = tr.data('mime'); - tr.attr('data-mime', mime); - if (id) { - tr.attr('data-id', id); - } - var path = getPathForPreview(name); - Files.lazyLoadPreview(path, mime, function(previewpath) { - tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); - }, null, null, tr.attr('data-etag')); - tr.find('td.filename').draggable(dragOptions); - }, - isLoading:function(file) { - return FileList.findFileEl(file).data('loading'); - }, - rename:function(oldname) { + rename: function(oldname) { var tr, td, input, form; tr = FileList.findFileEl(oldname); tr.data('renaming',true); @@ -438,6 +611,7 @@ window.FileList={ event.preventDefault(); try { var newname = input.val(); + var directory = FileList.getCurrentDirectory(); if (newname !== oldname) { checkInput(); // save background image, because it's replaced by a spinner while async request @@ -480,12 +654,12 @@ window.FileList={ tr.attr('data-mime', fileInfo.mime); tr.attr('data-etag', fileInfo.etag); if (fileInfo.isPreviewAvailable) { - Files.lazyLoadPreview(fileInfo.directory + '/' + fileInfo.name, result.data.mime, function(previewpath) { + Files.lazyLoadPreview(directory + '/' + fileInfo.name, result.data.mime, function(previewpath) { tr.find('td.filename').attr('style','background-image:url('+previewpath+')'); }, null, null, result.data.etag); } else { - tr.find('td.filename').removeClass('preview').attr('style','background-image:url('+fileInfo.icon+')'); + tr.find('td.filename').removeClass('preview').attr('style','background-image:url('+FileList._replaceSVG(fileInfo.icon)+')'); } } // reinsert row @@ -554,58 +728,12 @@ window.FileList={ inList:function(file) { return FileList.findFileEl(file).length; }, - replace:function(oldName, newName, isNewFile) { - // Finish any existing actions - var oldFileEl = FileList.findFileEl(oldName); - var newFileEl = FileList.findFileEl(newName); - oldFileEl.hide(); - newFileEl.hide(); - var tr = oldFileEl.clone(); - tr.attr('data-replace', 'true'); - tr.attr('data-file', newName); - var td = tr.children('td.filename'); - td.children('a.name .span').text(newName); - var path = td.children('a.name').attr('href'); - td.children('a.name').attr('href', path.replace(encodeURIComponent(oldName), encodeURIComponent(newName))); - var basename = newName; - if (newName.indexOf('.') > 0) { - basename = newName.substr(0, newName.lastIndexOf('.')); - } - td.children('a.name').empty(); - var span = $(''); - span.text(basename); - td.children('a.name').append(span); - if (newName.indexOf('.') > 0) { - span.append($(''+newName.substr(newName.lastIndexOf('.'))+'')); - } - FileList.insertElement(newName, tr.data('type'), tr); - tr.show(); - FileList.replaceCanceled = false; - FileList.replaceOldName = oldName; - FileList.replaceNewName = newName; - FileList.replaceIsNewFile = isNewFile; - FileList.lastAction = function() { - FileList.finishReplace(); - }; - if (!isNewFile) { - OC.Notification.showHtml(t('files', 'replaced {new_name} with {old_name}', {new_name: newName}, {old_name: oldName})+''+t('files', 'undo')+''); - } - }, - finishReplace:function() { - if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) { - $.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) { - if (result && result.status === 'success') { - $('tr[data-replace="true"').removeAttr('data-replace'); - } else { - OC.dialogs.alert(result.data.message, 'Error moving file'); - } - FileList.replaceCanceled = true; - FileList.replaceOldName = null; - FileList.replaceNewName = null; - FileList.lastAction = null; - }}); - } - }, + /** + * Delete the given files from the given dir + * @param files file names list (without path) + * @param dir directory in which to delete the files, defaults to the current + * directory + */ do_delete:function(files, dir) { var params; if (files && files.substr) { @@ -622,7 +750,7 @@ window.FileList={ FileList.lastAction(); } - var params = { + params = { dir: dir || FileList.getCurrentDirectory() }; if (files) { @@ -643,10 +771,9 @@ window.FileList={ } else { $.each(files,function(index,file) { - var files = FileList.findFileEl(file); - files.remove(); - files.find('input[type="checkbox"]').removeAttr('checked'); - files.removeClass('selected'); + var fileEl = FileList.remove(file, {updateSummary: false}); + fileEl.find('input[type="checkbox"]').prop('checked', false); + fileEl.removeClass('selected'); }); } procesSelection(); @@ -680,7 +807,7 @@ window.FileList={ }); }, createFileSummary: function() { - if( $('#fileList tr').exists() ) { + if ( !FileList.isEmpty ) { var summary = this._calculateFileSummary(); // Get translations @@ -702,7 +829,7 @@ window.FileList={ } var $summary = $(''+fileSize+''); - $('#fileList').append($summary); + this.$fileList.append($summary); var $dirInfo = $summary.find('.dirinfo'); var $fileInfo = $summary.find('.fileinfo'); @@ -710,12 +837,12 @@ window.FileList={ // Show only what's necessary, e.g.: no files: don't show "0 files" if (summary.totalDirs === 0) { - $dirInfo.hide(); - $connector.hide(); + $dirInfo.addClass('hidden'); + $connector.addClass('hidden'); } if (summary.totalFiles === 0) { - $fileInfo.hide(); - $connector.hide(); + $fileInfo.addClass('hidden'); + $connector.addClass('hidden'); } } }, @@ -740,10 +867,13 @@ window.FileList={ return result; }, updateFileSummary: function() { - var $summary = $('.summary'); + var $summary = this.$el.find('.summary'); + + // always make it the last element + this.$fileList.append($summary.detach()); // Check if we should remove the summary to show "Upload something" - if ($('#fileList tr').length === 1 && $summary.length === 1) { + if (this.isEmpty && $summary.length === 1) { $summary.remove(); } // If there's no summary create one (createFileSummary checks if there's data) @@ -751,7 +881,7 @@ window.FileList={ FileList.createFileSummary(); } // There's a summary and data -> Update the summary - else if ($('#fileList tr').length > 1 && $summary.length === 1) { + else if (!this.isEmpty && $summary.length === 1) { var fileSummary = this._calculateFileSummary(); var $dirInfo = $('.summary .dirinfo'); var $fileInfo = $('.summary .fileinfo'); @@ -764,19 +894,19 @@ window.FileList={ // Show only what's necessary (may be hidden) if (fileSummary.totalDirs === 0) { - $dirInfo.hide(); - $connector.hide(); + $dirInfo.addClass('hidden'); + $connector.addClass('hidden'); } else { - $dirInfo.show(); + $dirInfo.removeClass('hidden'); } if (fileSummary.totalFiles === 0) { - $fileInfo.hide(); - $connector.hide(); + $fileInfo.addClass('hidden'); + $connector.addClass('hidden'); } else { - $fileInfo.show(); + $fileInfo.removeClass('hidden'); } if (fileSummary.totalDirs > 0 && fileSummary.totalFiles > 0) { - $connector.show(); + $connector.removeClass('hidden'); } } }, @@ -784,10 +914,14 @@ window.FileList={ var $fileList = $('#fileList'); var permissions = $('#permissions').val(); var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; - var exists = $fileList.find('tr:first').exists(); - $('#emptycontent').toggleClass('hidden', !isCreatable || exists); - $('#filestable th').toggleClass('hidden', !exists); + $('#emptycontent').toggleClass('hidden', !isCreatable || !FileList.isEmpty); + $('#filestable thead th').toggleClass('hidden', FileList.isEmpty); }, + /** + * Shows the loading mask. + * + * @see #hideMask + */ showMask: function() { // in case one was shown before var $mask = $('#content .mask'); @@ -795,23 +929,23 @@ window.FileList={ return; } + this.$el.addClass('hidden'); + $mask = $('
    '); $mask.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); $mask.css('background-repeat', 'no-repeat'); $('#content').append($mask); - // block UI, but only make visible in case loading takes longer - FileList._maskTimeout = window.setTimeout(function() { - // reset opacity - $mask.removeClass('transparent'); - }, 250); + $mask.removeClass('transparent'); }, + /** + * Hide the loading mask. + * @see #showMask + */ hideMask: function() { - var $mask = $('#content .mask').remove(); - if (FileList._maskTimeout) { - window.clearTimeout(FileList._maskTimeout); - } + $('#content .mask').remove(); + this.$el.removeClass('hidden'); }, scrollTo:function(file) { //scroll to and highlight preselected file @@ -850,29 +984,11 @@ window.FileList={ */ isAllSelected: function() { return $('#select_all').prop('checked'); - }, - - /** - * Returns the download URL of the given file - * @param filename file name of the file - * @param dir optional directory in which the file name is, defaults to the current directory - */ - getDownloadUrl: function(filename, dir) { - var files = filename; - if ($.isArray(filename)) { - files = JSON.stringify(filename); - } - var params = { - dir: dir || FileList.getCurrentDirectory(), - files: files - }; - return OC.filePath('files', 'ajax', 'download.php') + '?' + OC.buildQueryString(params); } }; $(document).ready(function() { - var baseDir, - isPublic = !!$('#isPublic').val(); + FileList.initialize(); // handle upload events var file_upload_start = $('#file_upload_start'); @@ -907,8 +1023,13 @@ $(document).ready(function() { {name: 'requesttoken', value: oc_requesttoken} ]; }; + } else { + // cancel uploads to current dir if no permission + var isCreatable = (FileList.getDirectoryPermissions() & OC.PERMISSION_CREATE) !== 0; + if (!isCreatable) { + return false; + } } - }); file_upload_start.on('fileuploadadd', function(e, data) { OC.Upload.log('filelist handle fileuploadadd', e, data); @@ -993,31 +1114,11 @@ $(document).ready(function() { if (data.files[0].size>=0) { size=data.files[0].size; } - var date=new Date(); - var param = {}; - if ($('#publicUploadRequestToken').exists()) { - param.download_url = document.location.href + '&download&path=/' + $('#dir').val() + '/' + file.name; - } //should the file exist in the list remove it FileList.remove(file.name); // create new file context - data.context = FileList.addFile(file.name, file.size, date, false, false, param); - - // update file data - data.context.attr('data-mime',file.mime).attr('data-id',file.id).attr('data-etag', file.etag); - - var permissions = data.context.data('permissions'); - if (permissions !== file.permissions) { - data.context.attr('data-permissions', file.permissions); - data.context.data('permissions', file.permissions); - } - FileActions.display(data.context.find('td.filename'), true); - - var path = getPathForPreview(file.name); - Files.lazyLoadPreview(path, file.mime, function(previewpath) { - data.context.find('td.filename').attr('style','background-image:url('+previewpath+')'); - }, null, null, file.etag); + data.context = FileList.add(file, {insert: true}); } } }); @@ -1049,31 +1150,6 @@ $(document).ready(function() { }); $('#notification').hide(); - $('#notification').on('click', '.undo', function() { - if (FileList.deleteFiles) { - $.each(FileList.deleteFiles,function(index,file) { - FileList.findFileEl(file).show(); - }); - FileList.deleteCanceled=true; - FileList.deleteFiles=null; - } else if (FileList.replaceOldName && FileList.replaceNewName) { - if (FileList.replaceIsNewFile) { - // Delete the new uploaded file - FileList.deleteCanceled = false; - FileList.deleteFiles = [FileList.replaceOldName]; - } else { - FileList.findFileEl(FileList.replaceOldName).show(); - } - $('tr[data-replace="true"').remove(); - FileList.findFileEl(FileList.replaceNewName).show(); - FileList.replaceCanceled = true; - FileList.replaceOldName = null; - FileList.replaceNewName = null; - FileList.replaceIsNewFile = null; - } - FileList.lastAction = null; - OC.Notification.hide(); - }); $('#notification:first-child').on('click', '.replace', function() { OC.Notification.hide(function() { FileList.replace($('#notification > span').attr('data-oldName'), $('#notification > span').attr('data-newName'), $('#notification > span').attr('data-isNewFile')); @@ -1081,7 +1157,7 @@ $(document).ready(function() { }); $('#notification:first-child').on('click', '.suggest', function() { var file = $('#notification > span').attr('data-oldName'); - FileList.findFileEl(file).show(); + FileList.findFileEl(file).removeClass('hidden'); OC.Notification.hide(); }); $('#notification:first-child').on('click', '.cancel', function() { @@ -1130,34 +1206,32 @@ $(document).ready(function() { } // disable ajax/history API for public app (TODO: until it gets ported) - if (!isPublic) { - // fallback to hashchange when no history support - if (!window.history.pushState) { - $(window).on('hashchange', function() { - FileList.changeDirectory(parseCurrentDirFromUrl(), false); - }); - } - window.onpopstate = function(e) { - var targetDir; - if (e.state && e.state.dir) { - targetDir = e.state.dir; - } - else{ - // read from URL - targetDir = parseCurrentDirFromUrl(); - } - if (targetDir) { - FileList.changeDirectory(targetDir, false); - } - }; - - if (parseInt($('#ajaxLoad').val(), 10) === 1) { - // need to initially switch the dir to the one from the hash (IE8) - FileList.changeDirectory(parseCurrentDirFromUrl(), false, true); - } - - FileList.setCurrentDir(parseCurrentDirFromUrl(), false); + // fallback to hashchange when no history support + if (!window.history.pushState) { + $(window).on('hashchange', function() { + FileList.changeDirectory(parseCurrentDirFromUrl(), false); + }); } + window.onpopstate = function(e) { + var targetDir; + if (e.state && e.state.dir) { + targetDir = e.state.dir; + } + else{ + // read from URL + targetDir = parseCurrentDirFromUrl(); + } + if (targetDir) { + FileList.changeDirectory(targetDir, false); + } + }; + + var dir = parseCurrentDirFromUrl(); + // trigger ajax load, deferred to let sub-apps do their overrides first + setTimeout(function() { + FileList.changeDirectory(dir, false, true); + }, 0); FileList.createFileSummary(); }); + diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 1137364db4..4c2d87d808 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -161,80 +161,33 @@ var Files = { }); }, - lastWidth: 0, - - initBreadCrumbs: function () { - var $controls = $('#controls'); - - Files.lastWidth = 0; - Files.breadcrumbs = []; - - // initialize with some extra space - Files.breadcrumbsWidth = 64; - if ( document.getElementById("navigation") ) { - Files.breadcrumbsWidth += $('#navigation').get(0).offsetWidth; + /** + * Returns the download URL of the given file(s) + * @param filename string or array of file names to download + * @param dir optional directory in which the file name is, defaults to the current directory + */ + getDownloadUrl: function(filename, dir) { + if ($.isArray(filename)) { + filename = JSON.stringify(filename); } - Files.hiddenBreadcrumbs = 0; - - $.each($('.crumb'), function(index, breadcrumb) { - Files.breadcrumbs[index] = breadcrumb; - Files.breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth; - }); - - $.each($('#controls .actions>div'), function(index, action) { - Files.breadcrumbsWidth += $(action).get(0).offsetWidth; - }); - - // event handlers for breadcrumb items - $controls.find('.crumb a').on('click', onClickBreadcrumb); - - // setup drag and drop - $controls.find('.crumb:not(.last)').droppable(crumbDropOptions); + var params = { + dir: dir || FileList.getCurrentDirectory(), + files: filename + }; + return this.getAjaxUrl('download', params); }, - resizeBreadcrumbs: function (width, firstRun) { - if (width !== Files.lastWidth) { - if ((width < Files.lastWidth || firstRun) && width < Files.breadcrumbsWidth) { - if (Files.hiddenBreadcrumbs === 0) { - bc = $(Files.breadcrumbs[1]).get(0); - if (typeof bc != 'undefined') { - Files.breadcrumbsWidth -= bc.offsetWidth; - $(Files.breadcrumbs[1]).find('a').hide(); - $(Files.breadcrumbs[1]).append('...'); - Files.breadcrumbsWidth += bc.offsetWidth; - Files.hiddenBreadcrumbs = 2; - } - } - var i = Files.hiddenBreadcrumbs; - while (width < Files.breadcrumbsWidth && i > 1 && i < Files.breadcrumbs.length - 1) { - Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth; - $(Files.breadcrumbs[i]).hide(); - Files.hiddenBreadcrumbs = i; - i++; - } - } else if (width > Files.lastWidth && Files.hiddenBreadcrumbs > 0) { - var i = Files.hiddenBreadcrumbs; - while (width > Files.breadcrumbsWidth && i > 0) { - if (Files.hiddenBreadcrumbs === 1) { - Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth; - $(Files.breadcrumbs[1]).find('span').remove(); - $(Files.breadcrumbs[1]).find('a').show(); - Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth; - } else { - $(Files.breadcrumbs[i]).show(); - Files.breadcrumbsWidth += $(Files.breadcrumbs[i]).get(0).offsetWidth; - if (Files.breadcrumbsWidth > width) { - Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth; - $(Files.breadcrumbs[i]).hide(); - break; - } - } - i--; - Files.hiddenBreadcrumbs = i; - } - } - Files.lastWidth = width; + /** + * Returns the ajax URL for a given action + * @param action action string + * @param params optional params map + */ + getAjaxUrl: function(action, params) { + var q = ''; + if (params) { + q = '?' + OC.buildQueryString(params); } + return OC.filePath('files', 'ajax', action + '.php') + q; } }; $(document).ready(function() { @@ -245,14 +198,10 @@ $(document).ready(function() { Files.displayEncryptionWarning(); Files.bindKeyboardShortcuts(document, jQuery); - FileList.postProcessList(); Files.setupDragAndDrop(); $('#file_action_panel').attr('activeAction', false); - // allow dropping on the "files" app icon - $('ul#apps li:first-child').data('dir','').droppable(crumbDropOptions); - // Triggers invisible file input $('#upload a').on('click', function() { $(this).parent().children('#file_upload_start').trigger('click'); @@ -311,7 +260,7 @@ $(document).ready(function() { var filename=$(this).parent().parent().attr('data-file'); var tr = FileList.findFileEl(filename); var renaming=tr.data('renaming'); - if (!renaming && !FileList.isLoading(filename)) { + if (!renaming) { FileActions.currentFile = $(this).parent(); var mime=FileActions.getCurrentMimeType(); var type=FileActions.getCurrentType(); @@ -377,15 +326,15 @@ $(document).ready(function() { dir = OC.dirname(dir) || '/'; } else { - files = getSelectedFilesTrash('name'); + files = Files.getSelectedFiles('name'); } OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.')); - OC.redirect(FileList.getDownloadUrl(files, dir)); + OC.redirect(Files.getDownloadUrl(files, dir)); return false; }); $('.delete-selected').click(function(event) { - var files=getSelectedFilesTrash('name'); + var files = Files.getSelectedFiles('name'); event.preventDefault(); if (FileList.isAllSelected()) { files = null; @@ -403,16 +352,6 @@ $(document).ready(function() { //do a background scan if needed scanFiles(); - Files.initBreadCrumbs(); - - $(window).resize(function() { - var width = $(this).width(); - Files.resizeBreadcrumbs(width, false); - }); - - var width = $(this).width(); - Files.resizeBreadcrumbs(width, true); - // display storage warnings setTimeout(Files.displayStorageWarnings, 100); OC.Notification.setDefault(Files.displayStorageWarnings); @@ -503,7 +442,7 @@ var createDragShadow = function(event) { $(event.target).parents('tr').find('td input:first').prop('checked',true); } - var selectedFiles = getSelectedFilesTrash(); + var selectedFiles = Files.getSelectedFiles(); if (!isDragSelected && selectedFiles.length === 1) { //revert the selection @@ -619,52 +558,8 @@ var folderDropOptions={ tolerance: 'pointer' }; -var crumbDropOptions={ - drop: function( event, ui ) { - var target=$(this).data('dir'); - var dir = $('#dir').val(); - while(dir.substr(0,1) === '/') {//remove extra leading /'s - dir=dir.substr(1); - } - dir = '/' + dir; - if (dir.substr(-1,1) !== '/') { - dir = dir + '/'; - } - if (target === dir || target+'/' === dir) { - return; - } - var files = ui.helper.find('tr'); - $(files).each(function(i,row) { - var dir = $(row).data('dir'); - var file = $(row).data('filename'); - //slapdash selector, tracking down our original element that the clone budded off of. - var origin = $('tr[data-id=' + $(row).data('origin') + ']'); - var td = origin.children('td.filename'); - var oldBackgroundImage = td.css('background-image'); - td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')'); - $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) { - if (result) { - if (result.status === 'success') { - FileList.remove(file); - procesSelection(); - $('#notification').hide(); - } else { - $('#notification').hide(); - $('#notification').text(result.data.message); - $('#notification').fadeIn(); - } - } else { - OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error')); - } - td.css('background-image', oldBackgroundImage); - }); - }); - }, - tolerance: 'pointer' -}; - function procesSelection() { - var selected = getSelectedFilesTrash(); + var selected = Files.getSelectedFiles(); var selectedFiles = selected.filter(function(el) { return el.type==='file'; }); @@ -714,7 +609,7 @@ function procesSelection() { * if property is set, an array with that property for each file is returnd * if it's ommited an array of objects with all properties is returned */ -function getSelectedFilesTrash(property) { +Files.getSelectedFiles = function(property) { var elements=$('td.filename input:checkbox:checked').parent().parent(); var files=[]; elements.each(function(i,element) { @@ -755,25 +650,30 @@ function getPathForPreview(name) { return path; } +/** + * Generates a preview URL based on the URL space. + * @param urlSpec map with {x: width, y: height, file: file path} + * @return preview URL + */ +Files.generatePreviewUrl = function(urlSpec) { + urlSpec = urlSpec || {}; + if (!urlSpec.x) { + urlSpec.x = $('#filestable').data('preview-x'); + } + if (!urlSpec.y) { + urlSpec.y = $('#filestable').data('preview-y'); + } + urlSpec.forceIcon = 0; + return OC.generateUrl('/core/preview.png?') + $.param(urlSpec); +} + Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) { // get mime icon url Files.getMimeIcon(mime, function(iconURL) { - var urlSpec = {}; var previewURL; + urlSpec = {}; ready(iconURL); // set mimeicon URL - // now try getting a preview thumbnail URL - if ( ! width ) { - width = $('#filestable').data('preview-x'); - } - if ( ! height ) { - height = $('#filestable').data('preview-y'); - } - // note: the order of arguments must match the one - // from the server's template so that the browser - // knows it's the same file for caching - urlSpec.x = width; - urlSpec.y = height; urlSpec.file = Files.fixPath(path); if (etag){ @@ -784,15 +684,9 @@ Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) { console.warn('Files.lazyLoadPreview(): missing etag argument'); } - if ( $('#isPublic').length ) { - urlSpec.t = $('#dirToken').val(); - previewURL = OC.generateUrl('/publicpreview.png?') + $.param(urlSpec); - } else { - previewURL = OC.generateUrl('/core/preview.png?') + $.param(urlSpec); - } + previewURL = Files.generatePreviewUrl(urlSpec); previewURL = previewURL.replace('(', '%28'); previewURL = previewURL.replace(')', '%29'); - previewURL += '&forceIcon=0'; // preload image to prevent delay // this will make the browser cache the image @@ -841,14 +735,8 @@ function checkTrashStatus() { }); } -function onClickBreadcrumb(e) { - var $el = $(e.target).closest('.crumb'), - $targetDir = $el.data('dir'), - isPublic = !!$('#isPublic').val(); - - if ($targetDir !== undefined && !isPublic) { - e.preventDefault(); - FileList.changeDirectory(decodeURIComponent($targetDir)); - } +// override core's fileDownloadPath (legacy) +function fileDownloadPath(dir, file) { + return Files.getDownloadUrl(file, dir); } diff --git a/apps/files/lib/app.php b/apps/files/lib/app.php index fea88faa92..adfca66957 100644 --- a/apps/files/lib/app.php +++ b/apps/files/lib/app.php @@ -84,25 +84,7 @@ class App { ) { // successful rename $meta = $this->view->getFileInfo($dir . '/' . $newname); - if ($meta['mimetype'] === 'httpd/unix-directory') { - $meta['type'] = 'dir'; - } - else { - $meta['type'] = 'file'; - } - // these need to be set for determineIcon() - $meta['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($meta['mimetype']); - $meta['directory'] = $dir; - $fileinfo = array( - 'id' => $meta['fileid'], - 'mime' => $meta['mimetype'], - 'size' => $meta['size'], - 'etag' => $meta['etag'], - 'directory' => $meta['directory'], - 'name' => $newname, - 'isPreviewAvailable' => $meta['isPreviewAvailable'], - 'icon' => \OCA\Files\Helper::determineIcon($meta) - ); + $fileinfo = \OCA\Files\Helper::formatFileInfo($meta); $result['success'] = true; $result['data'] = $fileinfo; } else { diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index c41e2d1558..b765fdaf3e 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -19,11 +19,17 @@ class Helper 'usedSpacePercent' => (int)$storageInfo['relative']); } + /** + * Determine icon for a given file + * + * @param \OC\Files\FileInfo $file file info + * @return string icon URL + */ public static function determineIcon($file) { if($file['type'] === 'dir') { $dir = $file['directory']; $icon = \OC_Helper::mimetypeIcon('dir'); - $absPath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir.'/'.$file['name']); + $absPath = $file->getPath(); $mount = \OC\Files\Filesystem::getMountManager()->find($absPath); if (!is_null($mount)) { $sid = $mount->getStorageId(); @@ -38,11 +44,7 @@ class Helper } } }else{ - if($file['isPreviewAvailable']) { - $pathForPreview = $file['directory'] . '/' . $file['name']; - return \OC_Helper::previewIcon($pathForPreview) . '&c=' . $file['etag']; - } - $icon = \OC_Helper::mimetypeIcon($file['mimetype']); + $icon = \OC_Helper::mimetypeIcon($file->getMimetype()); } return substr($icon, 0, -3) . 'svg'; @@ -69,52 +71,58 @@ class Helper } /** - * Retrieves the contents of the given directory and - * returns it as a sorted array. - * @param string $dir path to the directory - * @return array of files + * Formats the file info to be returned as JSON to the client. + * + * @param \OCP\Files\FileInfo file info + * @return array formatted file info */ - public static function getFiles($dir) { - $content = \OC\Files\Filesystem::getDirectoryContent($dir); - $files = array(); + public static function formatFileInfo($i) { + $entry = array(); - foreach ($content as $i) { - $i['date'] = \OCP\Util::formatDate($i['mtime']); - if ($i['type'] === 'file') { - $fileinfo = pathinfo($i['name']); - $i['basename'] = $fileinfo['filename']; - if (!empty($fileinfo['extension'])) { - $i['extension'] = '.' . $fileinfo['extension']; - } else { - $i['extension'] = ''; - } - } - $i['directory'] = $dir; - $i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($i['mimetype']); - $i['icon'] = \OCA\Files\Helper::determineIcon($i); - $files[] = $i; + $entry['id'] = $i['fileid']; + $entry['date'] = \OCP\Util::formatDate($i['mtime']); + $entry['mtime'] = $i['mtime'] * 1000; + // only pick out the needed attributes + $entry['icon'] = \OCA\Files\Helper::determineIcon($i); + if (\OC::$server->getPreviewManager()->isMimeSupported($i['mimetype'])) { + $entry['isPreviewAvailable'] = true; } + $entry['name'] = $i['name']; + $entry['permissions'] = $i['permissions']; + $entry['mimetype'] = $i['mimetype']; + $entry['size'] = $i['size']; + $entry['type'] = $i['type']; + $entry['etag'] = $i['etag']; + if (isset($i['displayname_owner'])) { + $entry['shareOwner'] = $i['displayname_owner']; + } + return $entry; + } - usort($files, array('\OCA\Files\Helper', 'fileCmp')); + /** + * Format file info for JSON + * @param \OCP\Files\FileInfo[] $fileInfos file infos + */ + public static function formatFileInfos($fileInfos) { + $files = array(); + foreach ($fileInfos as $i) { + $files[] = self::formatFileInfo($i); + } return $files; } /** - * Splits the given path into a breadcrumb structure. - * @param string $dir path to process - * @return array where each entry is a hash of the absolute - * directory path and its name + * Retrieves the contents of the given directory and + * returns it as a sorted array of FileInfo. + * + * @param string $dir path to the directory + * @return \OCP\Files\FileInfo[] files */ - public static function makeBreadcrumb($dir){ - $breadcrumb = array(); - $pathtohere = ''; - foreach (explode('/', $dir) as $i) { - if ($i !== '') { - $pathtohere .= '/' . $i; - $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i); - } - } - return $breadcrumb; + public static function getFiles($dir) { + $content = \OC\Files\Filesystem::getDirectoryContent($dir); + + usort($content, array('\OCA\Files\Helper', 'fileCmp')); + return $content; } } diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 34acd9c4f5..95edd625cb 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -1,6 +1,5 @@
    - -
    +
    -
    +
    -
    class="hidden">t('Nothing in here. Upload something!'))?>
    +
    t('External storage')); ?> t('Configuration')); ?>  
    '+info+'
    - - - + -
    class="hidden" id='headerName'> + class="hidden" id="headerSize">t('Size')); ?>class="hidden" id="headerDate"> +
    @@ -111,7 +109,6 @@ - diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php deleted file mode 100644 index 69b4cbca10..0000000000 --- a/apps/files/templates/part.breadcrumb.php +++ /dev/null @@ -1,17 +0,0 @@ -
    " data-dir=''> - - - - - -
    - -
    svg" - data-dir=''> - -
    - -160) $relative_date_color = 160; - $name = \OCP\Util::encodePath($file['name']); - $directory = \OCP\Util::encodePath($file['directory']); ?> - - data-share-owner="" - - > - - - - - style="background-image:url()" - > - - - - - - - - - - - - - - - - - - - - - - - - - - - - -viewMock->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array( + ->will($this->returnValue(new \OC\Files\FileInfo( + '/test', + null, + '/test', + array( 'fileid' => 123, 'type' => 'dir', 'mimetype' => 'httpd/unix-directory', + 'mtime' => 0, + 'permissions' => 31, 'size' => 18, 'etag' => 'abcdef', 'directory' => '/', 'name' => 'new_name', - ))); + )))); $result = $this->files->rename($dir, $oldname, $newname); $this->assertTrue($result['success']); $this->assertEquals(123, $result['data']['id']); $this->assertEquals('new_name', $result['data']['name']); - $this->assertEquals('/test', $result['data']['directory']); $this->assertEquals(18, $result['data']['size']); - $this->assertEquals('httpd/unix-directory', $result['data']['mime']); + $this->assertEquals('httpd/unix-directory', $result['data']['mimetype']); $icon = \OC_Helper::mimetypeIcon('dir'); $icon = substr($icon, 0, -3) . 'svg'; $this->assertEquals($icon, $result['data']['icon']); - $this->assertFalse($result['data']['isPreviewAvailable']); } /** @@ -148,29 +152,33 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase { $this->viewMock->expects($this->any()) ->method('getFileInfo') - ->will($this->returnValue(array( + ->will($this->returnValue(new \OC\Files\FileInfo( + '/', + null, + '/', + array( 'fileid' => 123, 'type' => 'dir', 'mimetype' => 'httpd/unix-directory', + 'mtime' => 0, + 'permissions' => 31, 'size' => 18, 'etag' => 'abcdef', 'directory' => '/', 'name' => 'new_name', - ))); + )))); $result = $this->files->rename($dir, $oldname, $newname); $this->assertTrue($result['success']); $this->assertEquals(123, $result['data']['id']); - $this->assertEquals('newname', $result['data']['name']); - $this->assertEquals('/', $result['data']['directory']); + $this->assertEquals('new_name', $result['data']['name']); $this->assertEquals(18, $result['data']['size']); - $this->assertEquals('httpd/unix-directory', $result['data']['mime']); + $this->assertEquals('httpd/unix-directory', $result['data']['mimetype']); $this->assertEquals('abcdef', $result['data']['etag']); $icon = \OC_Helper::mimetypeIcon('dir'); $icon = substr($icon, 0, -3) . 'svg'; $this->assertEquals($icon, $result['data']['icon']); - $this->assertFalse($result['data']['isPreviewAvailable']); } /** diff --git a/apps/files/tests/js/breadcrumbSpec.js b/apps/files/tests/js/breadcrumbSpec.js new file mode 100644 index 0000000000..1bfe5308a2 --- /dev/null +++ b/apps/files/tests/js/breadcrumbSpec.js @@ -0,0 +1,248 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . +* +*/ + +/* global BreadCrumb */ +describe('BreadCrumb tests', function() { + describe('Rendering', function() { + var bc; + beforeEach(function() { + bc = new BreadCrumb({ + getCrumbUrl: function(part, index) { + // for testing purposes + return part.dir + '#' + index; + } + }); + }); + afterEach(function() { + bc = null; + }); + it('Renders its own container', function() { + bc.render(); + expect(bc.$el.hasClass('breadcrumb')).toEqual(true); + }); + it('Renders root by default', function() { + var $crumbs; + bc.render(); + $crumbs = bc.$el.find('.crumb'); + expect($crumbs.length).toEqual(1); + expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0'); + expect($crumbs.eq(0).find('img').length).toEqual(1); + expect($crumbs.eq(0).attr('data-dir')).toEqual('/'); + }); + it('Renders root when switching to root', function() { + var $crumbs; + bc.setDirectory('/somedir'); + bc.setDirectory('/'); + $crumbs = bc.$el.find('.crumb'); + expect($crumbs.length).toEqual(1); + expect($crumbs.eq(0).attr('data-dir')).toEqual('/'); + }); + it('Renders last crumb with "last" class', function() { + bc.setDirectory('/abc/def'); + expect(bc.$el.find('.crumb:last').hasClass('last')).toEqual(true); + }); + it('Renders single path section', function() { + var $crumbs; + bc.setDirectory('/somedir'); + $crumbs = bc.$el.find('.crumb'); + expect($crumbs.length).toEqual(2); + expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0'); + expect($crumbs.eq(0).find('img').length).toEqual(1); + expect($crumbs.eq(0).attr('data-dir')).toEqual('/'); + expect($crumbs.eq(1).find('a').attr('href')).toEqual('/somedir#1'); + expect($crumbs.eq(1).find('img').length).toEqual(0); + expect($crumbs.eq(1).attr('data-dir')).toEqual('/somedir'); + }); + it('Renders multiple path sections and special chars', function() { + var $crumbs; + bc.setDirectory('/somedir/with space/abc'); + $crumbs = bc.$el.find('.crumb'); + expect($crumbs.length).toEqual(4); + expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0'); + expect($crumbs.eq(0).find('img').length).toEqual(1); + expect($crumbs.eq(0).attr('data-dir')).toEqual('/'); + + expect($crumbs.eq(1).find('a').attr('href')).toEqual('/somedir#1'); + expect($crumbs.eq(1).find('img').length).toEqual(0); + expect($crumbs.eq(1).attr('data-dir')).toEqual('/somedir'); + + expect($crumbs.eq(2).find('a').attr('href')).toEqual('/somedir/with space#2'); + expect($crumbs.eq(2).find('img').length).toEqual(0); + expect($crumbs.eq(2).attr('data-dir')).toEqual('/somedir/with space'); + + expect($crumbs.eq(3).find('a').attr('href')).toEqual('/somedir/with space/abc#3'); + expect($crumbs.eq(3).find('img').length).toEqual(0); + expect($crumbs.eq(3).attr('data-dir')).toEqual('/somedir/with space/abc'); + }); + }); + describe('Events', function() { + it('Calls onClick handler when clicking on a crumb', function() { + var handler = sinon.stub(); + var bc = new BreadCrumb({ + onClick: handler + }); + bc.setDirectory('/one/two/three/four'); + bc.$el.find('.crumb:eq(3)').click(); + expect(handler.calledOnce).toEqual(true); + expect(handler.getCall(0).thisValue).toEqual(bc.$el.find('.crumb').get(3)); + + handler.reset(); + bc.$el.find('.crumb:eq(0) a').click(); + expect(handler.calledOnce).toEqual(true); + expect(handler.getCall(0).thisValue).toEqual(bc.$el.find('.crumb').get(0)); + }); + it('Calls onDrop handler when dropping on a crumb', function() { + var droppableStub = sinon.stub($.fn, 'droppable'); + var handler = sinon.stub(); + var bc = new BreadCrumb({ + onDrop: handler + }); + bc.setDirectory('/one/two/three/four'); + expect(droppableStub.calledOnce).toEqual(true); + + expect(droppableStub.getCall(0).args[0].drop).toBeDefined(); + // simulate drop + droppableStub.getCall(0).args[0].drop({dummy: true}); + + expect(handler.calledOnce).toEqual(true); + expect(handler.getCall(0).args[0]).toEqual({dummy: true}); + + droppableStub.restore(); + }); + }); + describe('Resizing', function() { + var bc, widthStub, dummyDir, + oldUpdateTotalWidth; + + beforeEach(function() { + dummyDir = '/short name/longer name/looooooooooooonger/even longer long long long longer long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/last one'; + + oldUpdateTotalWidth = BreadCrumb.prototype._updateTotalWidth; + BreadCrumb.prototype._updateTotalWidth = function() { + // need to set display:block for correct offsetWidth (no CSS loaded here) + $('div.crumb').css({ + 'display': 'block', + 'float': 'left' + }); + + return oldUpdateTotalWidth.apply(this, arguments); + }; + + bc = new BreadCrumb(); + widthStub = sinon.stub($.fn, 'width'); + // append dummy navigation and controls + // as they are currently used for measurements + $('#testArea').append( + '', + '
    ' + ); + + // make sure we know the test screen width + $('#testArea').css('width', 1280); + + // use test area as we need it for measurements + $('#controls').append(bc.$el); + $('#controls').append('
    Dummy action with a given width
    '); + }); + afterEach(function() { + BreadCrumb.prototype._updateTotalWidth = oldUpdateTotalWidth; + widthStub.restore(); + bc = null; + }); + it('Hides breadcrumbs to fit window', function() { + var $crumbs; + + widthStub.returns(500); + // triggers resize implicitly + bc.setDirectory(dummyDir); + $crumbs = bc.$el.find('.crumb'); + + // first one is always visible + expect($crumbs.eq(0).hasClass('hidden')).toEqual(false); + // second one has ellipsis + expect($crumbs.eq(1).hasClass('hidden')).toEqual(false); + expect($crumbs.eq(1).find('.ellipsis').length).toEqual(1); + // there is only one ellipsis in total + expect($crumbs.find('.ellipsis').length).toEqual(1); + // subsequent elements are hidden + expect($crumbs.eq(2).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(3).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(4).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(5).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(6).hasClass('hidden')).toEqual(false); + }); + it('Updates ellipsis on window size increase', function() { + var $crumbs; + + widthStub.returns(500); + // triggers resize implicitly + bc.setDirectory(dummyDir); + $crumbs = bc.$el.find('.crumb'); + + // simulate increase + $('#testArea').css('width', 1800); + bc.resize(1800); + + // first one is always visible + expect($crumbs.eq(0).hasClass('hidden')).toEqual(false); + // second one has ellipsis + expect($crumbs.eq(1).hasClass('hidden')).toEqual(false); + expect($crumbs.eq(1).find('.ellipsis').length).toEqual(1); + // there is only one ellipsis in total + expect($crumbs.find('.ellipsis').length).toEqual(1); + // subsequent elements are hidden + expect($crumbs.eq(2).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(3).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(4).hasClass('hidden')).toEqual(true); + // the rest is visible + expect($crumbs.eq(5).hasClass('hidden')).toEqual(false); + expect($crumbs.eq(6).hasClass('hidden')).toEqual(false); + }); + it('Updates ellipsis on window size decrease', function() { + var $crumbs; + + $('#testArea').css('width', 2000); + widthStub.returns(2000); + // triggers resize implicitly + bc.setDirectory(dummyDir); + $crumbs = bc.$el.find('.crumb'); + + // simulate decrease + bc.resize(500); + $('#testArea').css('width', 500); + + // first one is always visible + expect($crumbs.eq(0).hasClass('hidden')).toEqual(false); + // second one has ellipsis + expect($crumbs.eq(1).hasClass('hidden')).toEqual(false); + expect($crumbs.eq(1).find('.ellipsis').length).toEqual(1); + // there is only one ellipsis in total + expect($crumbs.find('.ellipsis').length).toEqual(1); + // subsequent elements are hidden + expect($crumbs.eq(2).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(3).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(4).hasClass('hidden')).toEqual(true); + // the rest is visible + expect($crumbs.eq(5).hasClass('hidden')).toEqual(true); + expect($crumbs.eq(6).hasClass('hidden')).toEqual(false); + }); + }); +}); diff --git a/apps/files/tests/js/fileactionsSpec.js b/apps/files/tests/js/fileactionsSpec.js index 80c04b5b24..3c22c84b86 100644 --- a/apps/files/tests/js/fileactionsSpec.js +++ b/apps/files/tests/js/fileactionsSpec.js @@ -22,6 +22,7 @@ /* global OC, FileActions, FileList */ describe('FileActions tests', function() { var $filesTable; + beforeEach(function() { // init horrible parameters var $body = $('body'); @@ -34,17 +35,20 @@ describe('FileActions tests', function() { $('#dir, #permissions, #filestable').remove(); }); it('calling display() sets file actions', function() { - // note: download_url is actually the link target, not the actual download URL... - var $tr = FileList.addFile('testName.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'}); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'plain/text', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; - // no actions before call - expect($tr.find('.action.action-download').length).toEqual(0); - expect($tr.find('.action.action-rename').length).toEqual(0); - expect($tr.find('.action.delete').length).toEqual(0); + // note: FileActions.display() is called implicitly + var $tr = FileList.add(fileData); - FileActions.display($tr.find('td.filename'), true); - - // actions defined after cal + // actions defined after call expect($tr.find('.action.action-download').length).toEqual(1); expect($tr.find('.action.action-download').attr('data-action')).toEqual('Download'); expect($tr.find('.nametext .action.action-rename').length).toEqual(1); @@ -52,7 +56,16 @@ describe('FileActions tests', function() { expect($tr.find('.action.delete').length).toEqual(1); }); it('calling display() twice correctly replaces file actions', function() { - var $tr = FileList.addFile('testName.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'}); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'plain/text', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = FileList.add(fileData); FileActions.display($tr.find('td.filename'), true); FileActions.display($tr.find('td.filename'), true); @@ -64,19 +77,36 @@ describe('FileActions tests', function() { }); it('redirects to download URL when clicking download', function() { var redirectStub = sinon.stub(OC, 'redirect'); - // note: download_url is actually the link target, not the actual download URL... - var $tr = FileList.addFile('test download File.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'}); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'plain/text', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = FileList.add(fileData); FileActions.display($tr.find('td.filename'), true); $tr.find('.action-download').click(); expect(redirectStub.calledOnce).toEqual(true); - expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=test%20download%20File.txt'); + expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=testName.txt'); redirectStub.restore(); }); it('deletes file when clicking delete', function() { var deleteStub = sinon.stub(FileList, 'do_delete'); - var $tr = FileList.addFile('test delete File.txt', 1234, new Date()); + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'plain/text', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = FileList.add(fileData); FileActions.display($tr.find('td.filename'), true); $tr.find('.action.delete').click(); diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 8f4cb86ab4..ca85a360cf 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -21,6 +21,9 @@ /* global OC, FileList */ describe('FileList tests', function() { + var testFiles, alertStub, notificationStub, + pushStateStub; + beforeEach(function() { // init horrible parameters var $body = $('body'); @@ -28,45 +31,784 @@ describe('FileList tests', function() { $body.append(''); // dummy files table $body.append('
    '); + + // prevents URL changes during tests + pushStateStub = sinon.stub(window.history, 'pushState'); + + alertStub = sinon.stub(OC.dialogs, 'alert'); + notificationStub = sinon.stub(OC.Notification, 'show'); + + // init parameters and test table elements + $('#testArea').append( + '' + + '' + + // dummy controls + '
    ' + + '
    ' + + '
    ' + + '
    ' + + // dummy table + '' + + '' + + '' + + '
    ' + + '
    Empty content message
    ' + ); + + testFiles = [{ + id: 1, + type: 'file', + name: 'One.txt', + mimetype: 'text/plain', + size: 12 + }, { + id: 2, + type: 'file', + name: 'Two.jpg', + mimetype: 'image/jpeg', + size: 12049 + }, { + id: 3, + type: 'file', + name: 'Three.pdf', + mimetype: 'application/pdf', + size: 58009 + }, { + id: 4, + type: 'dir', + name: 'somedir', + mimetype: 'httpd/unix-directory', + size: 250 + }]; + + FileList.initialize(); }); afterEach(function() { + testFiles = undefined; + FileList.initialized = false; + FileList.isEmpty = true; + delete FileList._reloadCall; + $('#dir, #permissions, #filestable').remove(); + notificationStub.restore(); + alertStub.restore(); + pushStateStub.restore(); }); - it('generates file element with correct attributes when calling addFile', function() { - var lastMod = new Date(10000); - // note: download_url is actually the link target, not the actual download URL... - var $tr = FileList.addFile('testName.txt', 1234, lastMod, false, false, {download_url: 'test/download/url'}); - - expect($tr).toBeDefined(); - expect($tr[0].tagName.toLowerCase()).toEqual('tr'); - expect($tr.find('a:first').attr('href')).toEqual('test/download/url'); - expect($tr.attr('data-type')).toEqual('file'); - expect($tr.attr('data-file')).toEqual('testName.txt'); - expect($tr.attr('data-size')).toEqual('1234'); - expect($tr.attr('data-permissions')).toEqual('31'); - //expect($tr.attr('data-mime')).toEqual('plain/text'); + describe('Getters', function() { + it('Returns the current directory', function() { + $('#dir').val('/one/two/three'); + expect(FileList.getCurrentDirectory()).toEqual('/one/two/three'); + }); + it('Returns the directory permissions as int', function() { + $('#permissions').val('23'); + expect(FileList.getDirectoryPermissions()).toEqual(23); + }); }); - it('generates dir element with correct attributes when calling addDir', function() { - var lastMod = new Date(10000); - var $tr = FileList.addDir('testFolder', 1234, lastMod, false); + describe('Adding files', function() { + var clock, now; + beforeEach(function() { + // to prevent date comparison issues + clock = sinon.useFakeTimers(); + now = new Date(); + }); + afterEach(function() { + clock.restore(); + }); + it('generates file element with correct attributes when calling add() with file data', function() { + var fileData = { + id: 18, + type: 'file', + name: 'testName.txt', + mimetype: 'plain/text', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = FileList.add(fileData); - expect($tr).toBeDefined(); - expect($tr[0].tagName.toLowerCase()).toEqual('tr'); - expect($tr.attr('data-type')).toEqual('dir'); - expect($tr.attr('data-file')).toEqual('testFolder'); - expect($tr.attr('data-size')).toEqual('1234'); - expect($tr.attr('data-permissions')).toEqual('31'); - //expect($tr.attr('data-mime')).toEqual('httpd/unix-directory'); + expect($tr).toBeDefined(); + expect($tr[0].tagName.toLowerCase()).toEqual('tr'); + expect($tr.attr('data-id')).toEqual('18'); + expect($tr.attr('data-type')).toEqual('file'); + expect($tr.attr('data-file')).toEqual('testName.txt'); + expect($tr.attr('data-size')).toEqual('1234'); + expect($tr.attr('data-etag')).toEqual('a01234c'); + expect($tr.attr('data-permissions')).toEqual('31'); + expect($tr.attr('data-mime')).toEqual('plain/text'); + expect($tr.attr('data-mtime')).toEqual('123456'); + expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=testName.txt'); + + expect($tr.find('.filesize').text()).toEqual('1 kB'); + expect(FileList.findFileEl('testName.txt')[0]).toEqual($tr[0]); + }); + it('generates dir element with correct attributes when calling add() with dir data', function() { + var fileData = { + id: 19, + type: 'dir', + name: 'testFolder', + mimetype: 'httpd/unix-directory', + size: '1234', + etag: 'a01234c', + mtime: '123456' + }; + var $tr = FileList.add(fileData); + + expect($tr).toBeDefined(); + expect($tr[0].tagName.toLowerCase()).toEqual('tr'); + expect($tr.attr('data-id')).toEqual('19'); + expect($tr.attr('data-type')).toEqual('dir'); + expect($tr.attr('data-file')).toEqual('testFolder'); + expect($tr.attr('data-size')).toEqual('1234'); + expect($tr.attr('data-etag')).toEqual('a01234c'); + expect($tr.attr('data-permissions')).toEqual('31'); + expect($tr.attr('data-mime')).toEqual('httpd/unix-directory'); + expect($tr.attr('data-mtime')).toEqual('123456'); + + expect($tr.find('.filesize').text()).toEqual('1 kB'); + + expect(FileList.findFileEl('testFolder')[0]).toEqual($tr[0]); + }); + it('generates file element with default attributes when calling add() with minimal data', function() { + var fileData = { + type: 'file', + name: 'testFile.txt' + }; + + clock.tick(123456); + var $tr = FileList.add(fileData); + + expect($tr).toBeDefined(); + expect($tr[0].tagName.toLowerCase()).toEqual('tr'); + expect($tr.attr('data-id')).toEqual(null); + expect($tr.attr('data-type')).toEqual('file'); + expect($tr.attr('data-file')).toEqual('testFile.txt'); + expect($tr.attr('data-size')).toEqual(null); + expect($tr.attr('data-etag')).toEqual(null); + expect($tr.attr('data-permissions')).toEqual('31'); + expect($tr.attr('data-mime')).toEqual(null); + expect($tr.attr('data-mtime')).toEqual('123456'); + + expect($tr.find('.filesize').text()).toEqual('Pending'); + }); + it('generates dir element with default attributes when calling add() with minimal data', function() { + var fileData = { + type: 'dir', + name: 'testFolder' + }; + clock.tick(123456); + var $tr = FileList.add(fileData); + + expect($tr).toBeDefined(); + expect($tr[0].tagName.toLowerCase()).toEqual('tr'); + expect($tr.attr('data-id')).toEqual(null); + expect($tr.attr('data-type')).toEqual('dir'); + expect($tr.attr('data-file')).toEqual('testFolder'); + expect($tr.attr('data-size')).toEqual(null); + expect($tr.attr('data-etag')).toEqual(null); + expect($tr.attr('data-permissions')).toEqual('31'); + expect($tr.attr('data-mime')).toEqual('httpd/unix-directory'); + expect($tr.attr('data-mtime')).toEqual('123456'); + + expect($tr.find('.filesize').text()).toEqual('Pending'); + }); + it('generates file element with zero size when size is explicitly zero', function() { + var fileData = { + type: 'dir', + name: 'testFolder', + size: '0' + }; + var $tr = FileList.add(fileData); + expect($tr.find('.filesize').text()).toEqual('0 B'); + }); + it('adds new file to the end of the list before the summary', function() { + var fileData = { + type: 'file', + name: 'P comes after O.txt' + }; + FileList.setFiles(testFiles); + $tr = FileList.add(fileData); + expect($tr.index()).toEqual(4); + expect($tr.next().hasClass('summary')).toEqual(true); + }); + it('adds new file at correct position in insert mode', function() { + var fileData = { + type: 'file', + name: 'P comes after O.txt' + }; + FileList.setFiles(testFiles); + $tr = FileList.add(fileData, {insert: true}); + // after "One.txt" + expect($tr.index()).toEqual(1); + }); + it('removes empty content message and shows summary when adding first file', function() { + var fileData = { + type: 'file', + name: 'first file.txt', + size: 12 + }; + FileList.setFiles([]); + expect(FileList.isEmpty).toEqual(true); + FileList.add(fileData); + $summary = $('#fileList .summary'); + expect($summary.length).toEqual(1); + // yes, ugly... + expect($summary.find('.info').text()).toEqual('0 folders and 1 file'); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true); + expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false); + expect($summary.find('.filesize').text()).toEqual('12 B'); + expect($('#filestable thead th').hasClass('hidden')).toEqual(false); + expect($('#emptycontent').hasClass('hidden')).toEqual(true); + expect(FileList.isEmpty).toEqual(false); + }); + }); + describe('Removing files from the list', function() { + it('Removes file from list when calling remove() and updates summary', function() { + var $removedEl; + FileList.setFiles(testFiles); + $removedEl = FileList.remove('One.txt'); + expect($removedEl).toBeDefined(); + expect($removedEl.attr('data-file')).toEqual('One.txt'); + expect($('#fileList tr:not(.summary)').length).toEqual(3); + expect(FileList.findFileEl('One.txt').length).toEqual(0); + + $summary = $('#fileList .summary'); + expect($summary.length).toEqual(1); + expect($summary.find('.info').text()).toEqual('1 folder and 2 files'); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false); + expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false); + expect($summary.find('.filesize').text()).toEqual('69 kB'); + expect(FileList.isEmpty).toEqual(false); + }); + it('Shows empty content when removing last file', function() { + FileList.setFiles([testFiles[0]]); + FileList.remove('One.txt'); + expect($('#fileList tr:not(.summary)').length).toEqual(0); + expect(FileList.findFileEl('One.txt').length).toEqual(0); + + $summary = $('#fileList .summary'); + expect($summary.length).toEqual(0); + expect($('#filestable thead th').hasClass('hidden')).toEqual(true); + expect($('#emptycontent').hasClass('hidden')).toEqual(false); + expect(FileList.isEmpty).toEqual(true); + }); + }); + describe('Deleting files', function() { + function doDelete() { + var request, query; + // note: normally called from FileActions + FileList.do_delete(['One.txt', 'Two.jpg']); + + expect(fakeServer.requests.length).toEqual(1); + request = fakeServer.requests[0]; + expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/delete.php'); + + query = fakeServer.requests[0].requestBody; + expect(OC.parseQueryString(query)).toEqual({'dir': '/subdir', files: '["One.txt","Two.jpg"]'}); + } + it('calls delete.php, removes the deleted entries and updates summary', function() { + FileList.setFiles(testFiles); + doDelete(); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + expect(FileList.findFileEl('One.txt').length).toEqual(0); + expect(FileList.findFileEl('Two.jpg').length).toEqual(0); + expect(FileList.findFileEl('Three.pdf').length).toEqual(1); + expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(2); + + $summary = $('#fileList .summary'); + expect($summary.length).toEqual(1); + expect($summary.find('.info').text()).toEqual('1 folder and 1 file'); + expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false); + expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false); + expect($summary.find('.filesize').text()).toEqual('57 kB'); + expect(FileList.isEmpty).toEqual(false); + expect($('#filestable thead th').hasClass('hidden')).toEqual(false); + expect($('#emptycontent').hasClass('hidden')).toEqual(true); + + expect(notificationStub.notCalled).toEqual(true); + }); + it('updates summary when deleting last file', function() { + FileList.setFiles([testFiles[0], testFiles[1]]); + doDelete(); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(0); + + $summary = $('#fileList .summary'); + expect($summary.length).toEqual(0); + expect(FileList.isEmpty).toEqual(true); + expect($('#filestable thead th').hasClass('hidden')).toEqual(true); + expect($('#emptycontent').hasClass('hidden')).toEqual(false); + }); + it('bring back deleted item when delete call failed', function() { + FileList.setFiles(testFiles); + doDelete(); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'error', data: {message: 'WOOT'}}) + ); + + // files are still in the list + expect(FileList.findFileEl('One.txt').length).toEqual(1); + expect(FileList.findFileEl('Two.jpg').length).toEqual(1); + expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(4); + + expect(notificationStub.calledOnce).toEqual(true); + }); + }); + describe('Renaming files', function() { + function doRename() { + var $input, request; + + FileList.setFiles(testFiles); + + // trigger rename prompt + FileList.rename('One.txt'); + $input = FileList.$fileList.find('input.filename'); + $input.val('One_renamed.txt').blur(); + + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + expect(request.url.substr(0, request.url.indexOf('?'))).toEqual(OC.webroot + '/index.php/apps/files/ajax/rename.php'); + expect(OC.parseQueryString(request.url)).toEqual({'dir': '/subdir', newname: 'One_renamed.txt', file: 'One.txt'}); + + // element is renamed before the request finishes + expect(FileList.findFileEl('One.txt').length).toEqual(0); + expect(FileList.findFileEl('One_renamed.txt').length).toEqual(1); + // input is gone + expect(FileList.$fileList.find('input.filename').length).toEqual(0); + } + it('Keeps renamed file entry if rename ajax call suceeded', function() { + doRename(); + + fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({ + status: 'success', + data: { + name: 'One_renamed.txt' + } + })); + + // element stays renamed + expect(FileList.findFileEl('One.txt').length).toEqual(0); + expect(FileList.findFileEl('One_renamed.txt').length).toEqual(1); + + expect(alertStub.notCalled).toEqual(true); + }); + it('Reverts file entry if rename ajax call failed', function() { + doRename(); + + fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({ + status: 'error', + data: { + message: 'Something went wrong' + } + })); + + // element was reverted + expect(FileList.findFileEl('One.txt').length).toEqual(1); + expect(FileList.findFileEl('One_renamed.txt').length).toEqual(0); + + expect(alertStub.calledOnce).toEqual(true); + }); + it('Correctly updates file link after rename', function() { + var $tr; + doRename(); + + fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({ + status: 'success', + data: { + name: 'One_renamed.txt' + } + })); + + $tr = FileList.findFileEl('One_renamed.txt'); + expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=One_renamed.txt'); + }); + // FIXME: fix this in the source code! + xit('Correctly updates file link after rename when path has same name', function() { + var $tr; + // evil case: because of buggy code + $('#dir').val('/One.txt/subdir'); + doRename(); + + fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({ + status: 'success', + data: { + name: 'One_renamed.txt' + } + })); + + $tr = FileList.findFileEl('One_renamed.txt'); + expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=One.txt'); + }); + }); + describe('List rendering', function() { + it('renders a list of files using add()', function() { + var addSpy = sinon.spy(FileList, 'add'); + FileList.setFiles(testFiles); + expect(addSpy.callCount).toEqual(4); + expect($('#fileList tr:not(.summary)').length).toEqual(4); + addSpy.restore(); + }); + it('updates summary using the file sizes', function() { + var $summary; + FileList.setFiles(testFiles); + $summary = $('#fileList .summary'); + expect($summary.length).toEqual(1); + expect($summary.find('.info').text()).toEqual('1 folder and 3 files'); + expect($summary.find('.filesize').text()).toEqual('69 kB'); + }); + it('shows headers, summary and hide empty content message after setting files', function(){ + FileList.setFiles(testFiles); + expect($('#filestable thead th').hasClass('hidden')).toEqual(false); + expect($('#emptycontent').hasClass('hidden')).toEqual(true); + expect(FileList.$fileList.find('.summary').length).toEqual(1); + }); + it('hides headers, summary and show empty content message after setting empty file list', function(){ + FileList.setFiles([]); + expect($('#filestable thead th').hasClass('hidden')).toEqual(true); + expect($('#emptycontent').hasClass('hidden')).toEqual(false); + expect(FileList.$fileList.find('.summary').length).toEqual(0); + }); + it('hides headers, empty content message, and summary when list is empty and user has no creation permission', function(){ + $('#permissions').val(0); + FileList.setFiles([]); + expect($('#filestable thead th').hasClass('hidden')).toEqual(true); + expect($('#emptycontent').hasClass('hidden')).toEqual(true); + expect(FileList.$fileList.find('.summary').length).toEqual(0); + }); + it('calling findFileEl() can find existing file element', function() { + FileList.setFiles(testFiles); + expect(FileList.findFileEl('Two.jpg').length).toEqual(1); + }); + it('calling findFileEl() returns empty when file not found in file', function() { + FileList.setFiles(testFiles); + expect(FileList.findFileEl('unexist.dat').length).toEqual(0); + }); + it('only add file if in same current directory', function() { + $('#dir').val('/current dir'); + var fileData = { + type: 'file', + name: 'testFile.txt', + directory: '/current dir' + }; + var $tr = FileList.add(fileData); + expect(FileList.findFileEl('testFile.txt').length).toEqual(1); + }); + it('triggers "fileActionsReady" event after update', function() { + var handler = sinon.stub(); + FileList.$fileList.on('fileActionsReady', handler); + FileList.setFiles(testFiles); + expect(handler.calledOnce).toEqual(true); + }); + it('triggers "updated" event after update', function() { + var handler = sinon.stub(); + FileList.$fileList.on('updated', handler); + FileList.setFiles(testFiles); + expect(handler.calledOnce).toEqual(true); + }); + }); + describe('file previews', function() { + var previewLoadStub; + + function getImageUrl($el) { + // might be slightly different cross-browser + var url = $el.css('background-image'); + var r = url.match(/url\(['"]?([^'")]*)['"]?\)/); + if (!r) { + return url; + } + return r[1]; + } + + beforeEach(function() { + previewLoadStub = sinon.stub(Files, 'lazyLoadPreview'); + }); + afterEach(function() { + previewLoadStub.restore(); + }); + it('renders default icon for file when none provided and no preview is available', function() { + var fileData = { + type: 'file', + name: 'testFile.txt' + }; + var $tr = FileList.add(fileData); + var $td = $tr.find('td.filename'); + expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg'); + expect(previewLoadStub.notCalled).toEqual(true); + }); + it('renders default icon for dir when none provided and no preview is available', function() { + var fileData = { + type: 'dir', + name: 'test dir' + }; + var $tr = FileList.add(fileData); + var $td = $tr.find('td.filename'); + expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/folder.svg'); + expect(previewLoadStub.notCalled).toEqual(true); + }); + it('renders provided icon for file when provided', function() { + var fileData = { + type: 'file', + name: 'test dir', + icon: OC.webroot + '/core/img/filetypes/application-pdf.svg' + }; + var $tr = FileList.add(fileData); + var $td = $tr.find('td.filename'); + expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/application-pdf.svg'); + expect(previewLoadStub.notCalled).toEqual(true); + }); + it('renders preview when no icon was provided and preview is available', function() { + var fileData = { + type: 'file', + name: 'test dir', + isPreviewAvailable: true + }; + var $tr = FileList.add(fileData); + var $td = $tr.find('td.filename'); + expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg'); + expect(previewLoadStub.calledOnce).toEqual(true); + // third argument is callback + previewLoadStub.getCall(0).args[2](OC.webroot + '/somepath.png'); + expect(getImageUrl($td)).toEqual(OC.webroot + '/somepath.png'); + }); + it('renders default file type icon when no icon was provided and no preview is available', function() { + var fileData = { + type: 'file', + name: 'test dir', + isPreviewAvailable: false + }; + var $tr = FileList.add(fileData); + var $td = $tr.find('td.filename'); + expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg'); + expect(previewLoadStub.notCalled).toEqual(true); + }); + }); + describe('viewer mode', function() { + it('enabling viewer mode hides files table and action buttons', function() { + FileList.setViewerMode(true); + expect($('#filestable').hasClass('hidden')).toEqual(true); + expect($('.actions').hasClass('hidden')).toEqual(true); + expect($('.notCreatable').hasClass('hidden')).toEqual(true); + }); + it('disabling viewer mode restores files table and action buttons', function() { + FileList.setViewerMode(true); + FileList.setViewerMode(false); + expect($('#filestable').hasClass('hidden')).toEqual(false); + expect($('.actions').hasClass('hidden')).toEqual(false); + expect($('.notCreatable').hasClass('hidden')).toEqual(true); + }); + it('disabling viewer mode restores files table and action buttons with correct permissions', function() { + $('#permissions').val(0); + FileList.setViewerMode(true); + FileList.setViewerMode(false); + expect($('#filestable').hasClass('hidden')).toEqual(false); + expect($('.actions').hasClass('hidden')).toEqual(true); + expect($('.notCreatable').hasClass('hidden')).toEqual(false); + }); + }); + describe('loading file list', function() { + beforeEach(function() { + var data = { + status: 'success', + data: { + files: testFiles, + permissions: 31 + } + }; + fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2F(subdir|anothersubdir)/, [ + 200, { + "Content-Type": "application/json" + }, + JSON.stringify(data) + ]); + }); + it('fetches file list from server and renders it when reload() is called', function() { + FileList.reload(); + expect(fakeServer.requests.length).toEqual(1); + var url = fakeServer.requests[0].url; + var query = url.substr(url.indexOf('?') + 1); + expect(OC.parseQueryString(query)).toEqual({'dir': '/subdir'}); + fakeServer.respond(); + expect($('#fileList tr:not(.summary)').length).toEqual(4); + expect(FileList.findFileEl('One.txt').length).toEqual(1); + }); + it('switches dir and fetches file list when calling changeDirectory()', function() { + FileList.changeDirectory('/anothersubdir'); + expect(FileList.getCurrentDirectory()).toEqual('/anothersubdir'); + expect(fakeServer.requests.length).toEqual(1); + var url = fakeServer.requests[0].url; + var query = url.substr(url.indexOf('?') + 1); + expect(OC.parseQueryString(query)).toEqual({'dir': '/anothersubdir'}); + fakeServer.respond(); + }); + it('switches to root dir when current directory does not exist', function() { + fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [ + 404, { + "Content-Type": "application/json" + }, + '' + ]); + FileList.changeDirectory('/unexist'); + fakeServer.respond(); + expect(FileList.getCurrentDirectory()).toEqual('/'); + }); + it('shows mask before loading file list then hides it at the end', function() { + var showMaskStub = sinon.stub(FileList, 'showMask'); + var hideMaskStub = sinon.stub(FileList, 'hideMask'); + FileList.changeDirectory('/anothersubdir'); + expect(showMaskStub.calledOnce).toEqual(true); + expect(hideMaskStub.calledOnce).toEqual(false); + fakeServer.respond(); + expect(showMaskStub.calledOnce).toEqual(true); + expect(hideMaskStub.calledOnce).toEqual(true); + showMaskStub.restore(); + hideMaskStub.restore(); + }); + it('changes URL to target dir', function() { + FileList.changeDirectory('/somedir'); + expect(pushStateStub.calledOnce).toEqual(true); + expect(pushStateStub.getCall(0).args[0]).toEqual({dir: '/somedir'}); + expect(pushStateStub.getCall(0).args[2]).toEqual(OC.webroot + '/index.php/apps/files?dir=/somedir'); + }); + it('refreshes breadcrumb after update', function() { + var setDirSpy = sinon.spy(FileList.breadcrumb, 'setDirectory'); + FileList.changeDirectory('/anothersubdir'); + fakeServer.respond(); + expect(FileList.breadcrumb.setDirectory.calledOnce).toEqual(true); + expect(FileList.breadcrumb.setDirectory.calledWith('/anothersubdir')).toEqual(true); + setDirSpy.restore(); + }); + }); + describe('breadcrumb events', function() { + beforeEach(function() { + var data = { + status: 'success', + data: { + files: testFiles, + permissions: 31 + } + }; + fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2Fsubdir/, [ + 200, { + "Content-Type": "application/json" + }, + JSON.stringify(data) + ]); + }); + it('clicking on root breadcrumb changes directory to root', function() { + FileList.changeDirectory('/subdir/two/three with space/four/five'); + fakeServer.respond(); + var changeDirStub = sinon.stub(FileList, 'changeDirectory'); + FileList.breadcrumb.$el.find('.crumb:eq(0)').click(); + + expect(changeDirStub.calledOnce).toEqual(true); + expect(changeDirStub.getCall(0).args[0]).toEqual('/'); + changeDirStub.restore(); + }); + it('clicking on breadcrumb changes directory', function() { + FileList.changeDirectory('/subdir/two/three with space/four/five'); + fakeServer.respond(); + var changeDirStub = sinon.stub(FileList, 'changeDirectory'); + FileList.breadcrumb.$el.find('.crumb:eq(3)').click(); + + expect(changeDirStub.calledOnce).toEqual(true); + expect(changeDirStub.getCall(0).args[0]).toEqual('/subdir/two/three with space'); + changeDirStub.restore(); + }); + it('dropping files on breadcrumb calls move operation', function() { + var request, query, testDir = '/subdir/two/three with space/four/five'; + FileList.changeDirectory(testDir); + fakeServer.respond(); + var $crumb = FileList.breadcrumb.$el.find('.crumb:eq(3)'); + // no idea what this is but is required by the handler + var ui = { + helper: { + find: sinon.stub() + } + }; + // returns a list of tr that were dragged + // FIXME: why are their attributes different than the + // regular file trs ? + ui.helper.find.returns([ + $(''), + $('') + ]); + // simulate drop event + FileList._onDropOnBreadCrumb.call($crumb, new $.Event('drop'), ui); + + // will trigger two calls to move.php (first one was previous list.php) + expect(fakeServer.requests.length).toEqual(3); + + request = fakeServer.requests[1]; + expect(request.method).toEqual('POST'); + expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/move.php'); + query = OC.parseQueryString(request.requestBody); + expect(query).toEqual({ + target: '/subdir/two/three with space', + dir: testDir, + file: 'One.txt' + }); + + request = fakeServer.requests[2]; + expect(request.method).toEqual('POST'); + expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/move.php'); + query = OC.parseQueryString(request.requestBody); + expect(query).toEqual({ + target: '/subdir/two/three with space', + dir: testDir, + file: 'Two.jpg' + }); + }); + it('dropping files on same dir breadcrumb does nothing', function() { + var request, query, testDir = '/subdir/two/three with space/four/five'; + FileList.changeDirectory(testDir); + fakeServer.respond(); + var $crumb = FileList.breadcrumb.$el.find('.crumb:last'); + // no idea what this is but is required by the handler + var ui = { + helper: { + find: sinon.stub() + } + }; + // returns a list of tr that were dragged + // FIXME: why are their attributes different than the + // regular file trs ? + ui.helper.find.returns([ + $(''), + $('') + ]); + // simulate drop event + FileList._onDropOnBreadCrumb.call($crumb, new $.Event('drop'), ui); + + // no extra server request + expect(fakeServer.requests.length).toEqual(1); + }); }); describe('Download Url', function() { it('returns correct download URL for single files', function() { - expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt'); - expect(FileList.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt'); + expect(Files.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt'); + expect(Files.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt'); $('#dir').val('/'); - expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt'); + expect(Files.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt'); }); it('returns correct download URL for multiple files', function() { - expect(FileList.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D'); + expect(Files.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D'); + }); + it('returns the correct ajax URL', function() { + expect(Files.getAjaxUrl('test', {a:1, b:'x y'})).toEqual(OC.webroot + '/index.php/apps/files/ajax/test.php?a=1&b=x%20y'); }); }); }); diff --git a/apps/files_sharing/ajax/list.php b/apps/files_sharing/ajax/list.php new file mode 100644 index 0000000000..4b64549625 --- /dev/null +++ b/apps/files_sharing/ajax/list.php @@ -0,0 +1,91 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ + +// only need filesystem apps +$RUNTIME_APPTYPES=array('filesystem'); + +// Init owncloud + +if(!\OC_App::isEnabled('files_sharing')){ + exit; +} + +if(!isset($_GET['t'])){ + \OC_Response::setStatus(400); //400 Bad Request + \OC_Log::write('core-preview', 'No token parameter was passed', \OC_Log::DEBUG); + exit; +} + +$token = $_GET['t']; + +$password = null; +if (isset($_POST['password'])) { + $password = $_POST['password']; +} + +$relativePath = null; +if (isset($_GET['dir'])) { + $relativePath = $_GET['dir']; +} + +$data = \OCA\Files_Sharing\Helper::setupFromToken($token, $relativePath, $password); + +$linkItem = $data['linkItem']; +// Load the files +$dir = $data['realPath']; + +$dir = \OC\Files\Filesystem::normalizePath($dir); +if (!\OC\Files\Filesystem::is_dir($dir . '/')) { + \OC_Response::setStatus(404); + \OCP\JSON::error(array('success' => false)); + exit(); +} + +$data = array(); +$baseUrl = OCP\Util::linkTo('files_sharing', 'index.php') . '?t=' . urlencode($token) . '&dir='; + +// make filelist +$files = \OCA\Files\Helper::getFiles($dir); + +$formattedFiles = array(); +foreach ($files as $file) { + $entry = \OCA\Files\Helper::formatFileInfo($file); + unset($entry['directory']); // for now + $entry['permissions'] = \OCP\PERMISSION_READ; + $formattedFiles[] = $entry; +} + +$data['directory'] = $relativePath; +$data['files'] = $formattedFiles; +$data['dirToken'] = $linkItem['token']; + +$permissions = $linkItem['permissions']; + +// if globally disabled +if (OC_Appconfig::getValue('core', 'shareapi_allow_public_upload', 'yes') === 'no') { + // only allow reading + $permissions = \OCP\PERMISSION_READ; +} + +$data['permissions'] = $permissions; + +OCP\JSON::success(array('data' => $data)); diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index 5246a4b2fe..f0b9b04491 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -35,6 +35,11 @@ body { background: #fff; text-align: center; margin: 45px auto 0; + min-height: 150px; +} + +#preview .notCreatable { + display: none; } #noPreview { diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 06c168969d..9ce8985f1f 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -8,16 +8,7 @@ * */ -/* global OC, FileList, FileActions */ - -// Override download path to files_sharing/public.php -function fileDownloadPath(dir, file) { - var url = $('#downloadURL').val(); - if (url.indexOf('&path=') != -1) { - url += '/'+file; - } - return url; -} +/* global OC, FileActions, FileList, Files */ $(document).ready(function() { @@ -31,32 +22,44 @@ $(document).ready(function() { action($('#filename').val()); } } - FileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function(filename) { - var tr = FileList.findFileEl(filename); - if (tr.length > 0) { - window.location = $(tr).find('a.name').attr('href'); - } - }); - - // override since the format is different - FileList.getDownloadUrl = function(filename, dir) { - if ($.isArray(filename)) { - filename = JSON.stringify(filename); - } - var path = dir || FileList.getCurrentDirectory(); - var params = { - service: 'files', - t: $('#sharingToken').val(), - path: path, - download: null - }; - if (filename) { - params.files = filename; - } - return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params); - }; } + // override since the format is different + Files.getDownloadUrl = function(filename, dir) { + if ($.isArray(filename)) { + filename = JSON.stringify(filename); + } + var path = dir || FileList.getCurrentDirectory(); + var params = { + service: 'files', + t: $('#sharingToken').val(), + path: path, + files: filename, + download: null + }; + return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params); + }; + + Files.getAjaxUrl = function(action, params) { + params = params || {}; + params.t = $('#sharingToken').val(); + return OC.filePath('files_sharing', 'ajax', action + '.php') + '?' + OC.buildQueryString(params); + }; + + FileList.linkTo = function(dir) { + var params = { + service: 'files', + t: $('#sharingToken').val(), + dir: dir + }; + return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params); + }; + + Files.generatePreviewUrl = function(urlSpec) { + urlSpec.t = $('#dirToken').val(); + return OC.generateUrl('/apps/files_sharing/ajax/publicpreview.php?') + $.param(urlSpec); + }; + var file_upload_start = $('#file_upload_start'); file_upload_start.on('fileuploadadd', function(e, data) { // Add custom data to the upload handler diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index 9f0ed12f93..ea518f3b70 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -1,15 +1,35 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global OC, t, FileList, FileActions */ $(document).ready(function() { var disableSharing = $('#disableSharing').data('status'), sharesLoaded = false; if (typeof OC.Share !== 'undefined' && typeof FileActions !== 'undefined' && !disableSharing) { + var oldCreateRow = FileList._createRow; + FileList._createRow = function(fileData) { + var tr = oldCreateRow.apply(this, arguments); + if (fileData.shareOwner) { + tr.attr('data-share-owner', fileData.shareOwner); + } + return tr; + }; + $('#fileList').on('fileActionsReady',function(){ - var allShared = $('#fileList').find('[data-share-owner]').find('[data-Action="Share"]'); + var allShared = $('#fileList').find('[data-share-owner] [data-Action="Share"]'); allShared.addClass('permanent'); allShared.find('span').text(function(){ - $owner = $(this).closest('tr').attr('data-share-owner'); + var $owner = $(this).closest('tr').attr('data-share-owner'); return ' ' + t('files_sharing', 'Shared by {owner}', {owner: $owner}); }); diff --git a/apps/files_sharing/lib/helper.php b/apps/files_sharing/lib/helper.php new file mode 100644 index 0000000000..b602fe3599 --- /dev/null +++ b/apps/files_sharing/lib/helper.php @@ -0,0 +1,114 @@ + false)); + exit(); + } + + if (!isset($linkItem['item_type'])) { + \OCP\Util::writeLog('share', 'No item type set for share id: ' . $linkItem['id'], \OCP\Util::ERROR); + \OC_Response::setStatus(404); + \OCP\JSON::error(array('success' => false)); + exit(); + } + + if (isset($linkItem['share_with'])) { + if (!self::authenticate($linkItem, $password)) { + \OC_Response::setStatus(403); + \OCP\JSON::error(array('success' => false)); + exit(); + } + } + + $basePath = $path; + $rootName = basename($path); + + if ($relativePath !== null && \OC\Files\Filesystem::isReadable($basePath . $relativePath)) { + $path .= \OC\Files\Filesystem::normalizePath($relativePath); + } + + return array( + 'linkItem' => $linkItem, + 'basePath' => $basePath, + 'realPath' => $path + ); + } + + /** + * Authenticate link item with the given password + * or with the session if no password was given. + * @param array $linkItem link item array + * @param string $password optional password + * + * @return true if authorized, false otherwise + */ + public static function authenticate($linkItem, $password) { + if ($password !== null) { + if ($linkItem['share_type'] == \OCP\Share::SHARE_TYPE_LINK) { + // Check Password + $forcePortable = (CRYPT_BLOWFISH != 1); + $hasher = new PasswordHash(8, $forcePortable); + if (!($hasher->CheckPassword($password.OC_Config::getValue('passwordsalt', ''), + $linkItem['share_with']))) { + return false; + } else { + // Save item id in session for future requests + \OC::$session->set('public_link_authenticated', $linkItem['id']); + } + } else { + \OCP\Util::writeLog('share', 'Unknown share type '.$linkItem['share_type'] + .' for share id '.$linkItem['id'], \OCP\Util::ERROR); + return false; + } + + } + else { + // not authenticated ? + if ( ! \OC::$session->exists('public_link_authenticated') + || \OC::$session->get('public_link_authenticated') !== $linkItem['id']) { + return false; + } + } + return true; + } +} diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php index fe61dd4d5a..ba2494a7b1 100644 --- a/apps/files_sharing/public.php +++ b/apps/files_sharing/public.php @@ -11,31 +11,6 @@ if ($appConfig->getValue('core', 'shareapi_allow_links', 'yes') !== 'yes') { exit(); } -function fileCmp($a, $b) { - if ($a['type'] == 'dir' and $b['type'] != 'dir') { - return -1; - } elseif ($a['type'] != 'dir' and $b['type'] == 'dir') { - return 1; - } else { - return strnatcasecmp($a['name'], $b['name']); - } -} - -function determineIcon($file, $sharingRoot, $sharingToken) { - // for folders we simply reuse the files logic - if($file['type'] == 'dir') { - return \OCA\Files\Helper::determineIcon($file); - } - - $relativePath = substr($file['path'], 6); - $relativePath = substr($relativePath, strlen($sharingRoot)); - if($file['isPreviewAvailable']) { - return OCP\publicPreview_icon($relativePath, $sharingToken) . '&c=' . $file['etag']; - } - $icon = OCP\mimetype_icon($file['mimetype']); - return substr($icon, 0, -3) . 'svg'; -} - if (isset($_GET['t'])) { $token = $_GET['t']; $linkItem = OCP\Share::getShareByToken($token, false); @@ -153,13 +128,10 @@ if (isset($path)) { $tmpl->assign('mimetype', \OC\Files\Filesystem::getMimeType($path)); $tmpl->assign('dirToken', $linkItem['token']); $tmpl->assign('sharingToken', $token); - $allowPublicUploadEnabled = (bool) ($linkItem['permissions'] & OCP\PERMISSION_CREATE); - if ($appConfig->getValue('core', 'shareapi_allow_public_upload', 'yes') === 'no') { - $allowPublicUploadEnabled = false; - } - if ($linkItem['item_type'] !== 'folder') { - $allowPublicUploadEnabled = false; - } + $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); + $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); + $tmpl->assign('freeSpace', $freeSpace); + $tmpl->assign('uploadLimit', $uploadLimit); // PHP upload limit $urlLinkIdentifiers= (isset($token)?'&t='.$token:'') .(isset($_GET['dir'])?'&dir='.$_GET['dir']:'') @@ -170,64 +142,18 @@ if (isset($path)) { OCP\Util::addStyle('files', 'files'); OCP\Util::addStyle('files', 'upload'); + OCP\Util::addScript('files', 'breadcrumb'); OCP\Util::addScript('files', 'files'); OCP\Util::addScript('files', 'filelist'); OCP\Util::addscript('files', 'keyboardshortcuts'); $files = array(); $rootLength = strlen($basePath) + 1; - $totalSize = 0; - foreach (\OC\Files\Filesystem::getDirectoryContent($path) as $i) { - $totalSize += $i['size']; - $i['date'] = OCP\Util::formatDate($i['mtime']); - if ($i['type'] == 'file') { - $fileinfo = pathinfo($i['name']); - $i['basename'] = $fileinfo['filename']; - if (!empty($fileinfo['extension'])) { - $i['extension'] = '.' . $fileinfo['extension']; - } else { - $i['extension'] = ''; - } - } - $i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($i['mimetype']); - $i['directory'] = $getPath; - $i['permissions'] = OCP\PERMISSION_READ; - $i['icon'] = determineIcon($i, $basePath, $token); - $files[] = $i; - } - usort($files, "fileCmp"); - - // Make breadcrumb - $breadcrumb = array(); - $pathtohere = ''; - foreach (explode('/', $getPath) as $i) { - if ($i != '') { - $pathtohere .= '/' . $i; - $breadcrumb[] = array('dir' => $pathtohere, 'name' => $i); - } - } - $list = new OCP\Template('files', 'part.list', ''); - $list->assign('files', $files); - $list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path='); - $list->assign('downloadURL', - OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path='); - $list->assign('isPublic', true); - $list->assign('sharingtoken', $token); - $list->assign('sharingroot', $basePath); - $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); - $breadcrumbNav->assign('breadcrumb', $breadcrumb); - $breadcrumbNav->assign('rootBreadCrumb', $rootName); - $breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path='); $maxUploadFilesize=OCP\Util::maxUploadFilesize($path); - $fileHeader = (!isset($files) or count($files) > 0); - $emptyContent = ($allowPublicUploadEnabled and !$fileHeader); $freeSpace=OCP\Util::freeSpace($path); $uploadLimit=OCP\Util::uploadLimit(); $folder = new OCP\Template('files', 'index', ''); - $folder->assign('fileList', $list->fetchPage()); - $folder->assign('breadcrumb', $breadcrumbNav->fetchPage()); $folder->assign('dir', $getPath); - $folder->assign('isCreatable', $allowPublicUploadEnabled); $folder->assign('dirToken', $linkItem['token']); $folder->assign('permissions', OCP\PERMISSION_READ); $folder->assign('isPublic',true); @@ -239,15 +165,11 @@ if (isset($path)) { $folder->assign('uploadLimit', $uploadLimit); // PHP upload limit $folder->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); $folder->assign('usedSpacePercent', 0); - $folder->assign('fileHeader', $fileHeader); $folder->assign('disableSharing', true); $folder->assign('trash', false); - $folder->assign('emptyContent', $emptyContent); - $folder->assign('ajaxLoad', false); $tmpl->assign('folder', $folder->fetchPage()); $maxInputFileSize = OCP\Config::getSystemValue('maxZipInputSize', OCP\Util::computerFileSize('800 MB')); - $allowZip = OCP\Config::getSystemValue('allowZipDownload', true) - && ( $maxInputFileSize === 0 || $totalSize <= $maxInputFileSize); + $allowZip = OCP\Config::getSystemValue('allowZipDownload', true); $tmpl->assign('allowZipDownload', intval($allowZip)); $tmpl->assign('downloadURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=' . urlencode($getPath)); diff --git a/apps/files_trashbin/ajax/list.php b/apps/files_trashbin/ajax/list.php index cec18c4652..89a5511452 100644 --- a/apps/files_trashbin/ajax/list.php +++ b/apps/files_trashbin/ajax/list.php @@ -4,21 +4,8 @@ OCP\JSON::checkLoggedIn(); // Load the files $dir = isset( $_GET['dir'] ) ? $_GET['dir'] : ''; -$doBreadcrumb = isset( $_GET['breadcrumb'] ) ? true : false; $data = array(); -// Make breadcrumb -if($doBreadcrumb) { - $breadcrumb = \OCA\Files_Trashbin\Helper::makeBreadcrumb($dir); - - $breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', ''); - $breadcrumbNav->assign('breadcrumb', $breadcrumb, false); - $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir='); - $breadcrumbNav->assign('home', OCP\Util::linkTo('files', 'index.php')); - - $data['breadcrumb'] = $breadcrumbNav->fetchPage(); -} - // make filelist try { $files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir); @@ -27,19 +14,11 @@ try { exit(); } -$dirlisting = false; -if ($dir && $dir !== '/') { - $dirlisting = true; -} - $encodedDir = \OCP\Util::encodePath($dir); -$list = new OCP\Template('files_trashbin', 'part.list', ''); -$list->assign('files', $files, false); -$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$encodedDir); -$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/'))); -$list->assign('dirlisting', $dirlisting); -$list->assign('disableDownloadActions', true); -$data['files'] = $list->fetchPage(); + +$data['permissions'] = 0; +$data['directory'] = $dir; +$data['files'] = \OCA\Files_Trashbin\Helper::formatFileInfos($files); OCP\JSON::success(array('data' => $data)); diff --git a/apps/files_trashbin/ajax/preview.php b/apps/files_trashbin/ajax/preview.php index ce64d9ecc9..32905b2a71 100644 --- a/apps/files_trashbin/ajax/preview.php +++ b/apps/files_trashbin/ajax/preview.php @@ -34,7 +34,7 @@ try{ if ($view->is_dir($file)) { $mimetype = 'httpd/unix-directory'; } else { - $pathInfo = pathinfo($file); + $pathInfo = pathinfo(ltrim($file, '/')); $fileName = $pathInfo['basename']; // if in root dir if ($pathInfo['dirname'] === '.') { diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index 9c3ccba7ed..2b00078669 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -19,7 +19,7 @@ if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true') { foreach (OCA\Files_Trashbin\Helper::getTrashFiles($dir) as $file) { $fileName = $file['name']; if (!$dirListing) { - $fileName .= '.d' . $file['timestamp']; + $fileName .= '.d' . $file['mtime']; } $list[] = $fileName; } diff --git a/apps/files_trashbin/css/trash.css b/apps/files_trashbin/css/trash.css index 97819f4e80..7ca3e355fc 100644 --- a/apps/files_trashbin/css/trash.css +++ b/apps/files_trashbin/css/trash.css @@ -1,3 +1,4 @@ -#fileList td a.file, #fileList td a.file span { +#fileList tr[data-type="file"] td a.name, +#fileList tr[data-type="file"] td a.name span { cursor: default; } diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php index f0c5b0508b..e63fe1e418 100644 --- a/apps/files_trashbin/index.php +++ b/apps/files_trashbin/index.php @@ -11,6 +11,7 @@ $tmpl = new OCP\Template('files_trashbin', 'index', 'user'); OCP\Util::addStyle('files', 'files'); OCP\Util::addStyle('files_trashbin', 'trash'); +OCP\Util::addScript('files', 'breadcrumb'); OCP\Util::addScript('files', 'filelist'); // filelist overrides OCP\Util::addScript('files_trashbin', 'filelist'); @@ -34,48 +35,7 @@ if ($isIE8 && isset($_GET['dir'])){ exit(); } -$ajaxLoad = false; - -if (!$isIE8){ - try { - $files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir); - } catch (Exception $e) { - header('Location: ' . OCP\Util::linkTo('files_trashbin', 'index.php')); - exit(); - } -} -else{ - $files = array(); - $ajaxLoad = true; -} - -$dirlisting = false; -if ($dir && $dir !== '/') { - $dirlisting = true; -} - -$breadcrumb = \OCA\Files_Trashbin\Helper::makeBreadcrumb($dir); - -$breadcrumbNav = new OCP\Template('files_trashbin', 'part.breadcrumb', ''); -$breadcrumbNav->assign('breadcrumb', $breadcrumb); -$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php') . '?dir='); -$breadcrumbNav->assign('home', OCP\Util::linkTo('files', 'index.php')); - -$list = new OCP\Template('files_trashbin', 'part.list', ''); -$list->assign('files', $files); - -$encodedDir = \OCP\Util::encodePath($dir); -$list->assign('baseURL', OCP\Util::linkTo('files_trashbin', 'index.php'). '?dir='.$encodedDir); -$list->assign('downloadURL', OCP\Util::linkTo('files_trashbin', 'download.php') . '?file='.$encodedDir); -$list->assign('dirlisting', $dirlisting); -$list->assign('disableDownloadActions', true); - -$tmpl->assign('dirlisting', $dirlisting); -$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage()); -$tmpl->assign('fileList', $list->fetchPage()); -$tmpl->assign('files', $files); $tmpl->assign('dir', $dir); $tmpl->assign('disableSharing', true); -$tmpl->assign('ajaxLoad', true); $tmpl->printPage(); diff --git a/apps/files_trashbin/js/disableDefaultActions.js b/apps/files_trashbin/js/disableDefaultActions.js index afa80cacd6..50ceaf4696 100644 --- a/apps/files_trashbin/js/disableDefaultActions.js +++ b/apps/files_trashbin/js/disableDefaultActions.js @@ -1,4 +1,3 @@ /* disable download and sharing actions */ var disableDownloadActions = true; -var disableSharing = true; var trashBinApp = true; diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js index a88459b0a9..7795daf277 100644 --- a/apps/files_trashbin/js/filelist.js +++ b/apps/files_trashbin/js/filelist.js @@ -1,61 +1,78 @@ -/* globals OC, FileList, t */ -// override reload with own ajax call -FileList.reload = function(){ - FileList.showMask(); - if (FileList._reloadCall){ - FileList._reloadCall.abort(); - } - $.ajax({ - url: OC.filePath('files_trashbin','ajax','list.php'), - data: { - dir : $('#dir').val(), - breadcrumb: true - }, - error: function(result) { - FileList.reloadCallback(result); - }, - success: function(result) { - FileList.reloadCallback(result); +/* global OC, t, FileList */ +(function() { + FileList.appName = t('files_trashbin', 'Deleted files'); + + FileList._deletedRegExp = new RegExp(/^(.+)\.d[0-9]+$/); + + /** + * Convert a file name in the format filename.d12345 to the real file name. + * This will use basename. + * The name will not be changed if it has no ".d12345" suffix. + * @param name file name + * @return converted file name + */ + FileList.getDeletedFileName = function(name) { + name = OC.basename(name); + var match = FileList._deletedRegExp.exec(name); + if (match && match.length > 1) { + name = match[1]; } - }); -}; + return name; + }; -FileList.appName = t('files_trashbin', 'Deleted files'); + var oldSetCurrentDir = FileList._setCurrentDir; + FileList._setCurrentDir = function(targetDir) { + oldSetCurrentDir.apply(this, arguments); -FileList._deletedRegExp = new RegExp(/^(.+)\.d[0-9]+$/); + var baseDir = OC.basename(targetDir); + if (baseDir !== '') { + FileList.setPageTitle(FileList.getDeletedFileName(baseDir)); + } + }; -/** - * Convert a file name in the format filename.d12345 to the real file name. - * This will use basename. - * The name will not be changed if it has no ".d12345" suffix. - * @param name file name - * @return converted file name - */ -FileList.getDeletedFileName = function(name) { - name = OC.basename(name); - var match = FileList._deletedRegExp.exec(name); - if (match && match.length > 1) { - name = match[1]; - } - return name; -}; -var oldSetCurrentDir = FileList.setCurrentDir; -FileList.setCurrentDir = function(targetDir) { - oldSetCurrentDir.apply(this, arguments); + var oldCreateRow = FileList._createRow; + FileList._createRow = function() { + // FIXME: MEGAHACK until we find a better solution + var tr = oldCreateRow.apply(this, arguments); + tr.find('td.filesize').remove(); + return tr; + }; - var baseDir = OC.basename(targetDir); - if (baseDir !== '') { - FileList.setPageTitle(FileList.getDeletedFileName(baseDir)); - } -}; + FileList._onClickBreadCrumb = function(e) { + var $el = $(e.target).closest('.crumb'), + index = $el.index(), + $targetDir = $el.data('dir'); + // first one is home, let the link makes it default action + if (index !== 0) { + e.preventDefault(); + FileList.changeDirectory($targetDir); + } + }; -FileList.linkTo = function(dir){ - return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); -} + var oldAdd = FileList.add; + FileList.add = function(fileData, options) { + options = options || {}; + var dir = FileList.getCurrentDirectory(); + var dirListing = dir !== '' && dir !== '/'; + // show deleted time as mtime + if (fileData.mtime) { + fileData.mtime = parseInt(fileData.mtime, 10); + } + if (!dirListing) { + fileData.displayName = fileData.name; + fileData.name = fileData.name + '.d' + Math.floor(fileData.mtime / 1000); + } + return oldAdd.call(this, fileData, options); + }; -FileList.updateEmptyContent = function(){ - var $fileList = $('#fileList'); - var exists = $fileList.find('tr:first').exists(); - $('#emptycontent').toggleClass('hidden', exists); - $('#filestable th').toggleClass('hidden', !exists); -} + FileList.linkTo = function(dir){ + return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); + }; + + FileList.updateEmptyContent = function(){ + var $fileList = $('#fileList'); + var exists = $fileList.find('tr:first').exists(); + $('#emptycontent').toggleClass('hidden', exists); + $('#filestable th').toggleClass('hidden', !exists); + }; +})(); diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index efe1e89f0b..5cd49e19aa 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -8,9 +8,26 @@ * */ -/* global OC, t, FileList, FileActions */ - +/* global OC, t, BreadCrumb, FileActions, FileList, Files */ $(document).ready(function() { + var deletedRegExp = new RegExp(/^(.+)\.d[0-9]+$/); + + /** + * Convert a file name in the format filename.d12345 to the real file name. + * This will use basename. + * The name will not be changed if it has no ".d12345" suffix. + * @param name file name + * @return converted file name + */ + function getDeletedFileName(name) { + name = OC.basename(name); + var match = deletedRegExp.exec(name); + if (match && match.length > 1) { + name = match[1]; + } + return name; + } + function removeCallback(result) { if (result.status !== 'success') { OC.dialogs.alert(result.data.message, t('core', 'Error')); @@ -18,7 +35,7 @@ $(document).ready(function() { var files = result.data.success; for (var i = 0; i < files.length; i++) { - FileList.findFileEl(OC.basename(files[i].filename)).remove(); + FileList.remove(OC.basename(files[i].filename), {updateSummary: false}); } FileList.updateFileSummary(); FileList.updateEmptyContent(); @@ -74,7 +91,6 @@ $(document).ready(function() { } procesSelection(); }); - $('.undelete').click('click', function(event) { event.preventDefault(); var allFiles = $('#select_all').is(':checked'); @@ -89,7 +105,7 @@ $(document).ready(function() { }; } else { - files = getSelectedFiles('name'); + files = Files.getSelectedFiles('name'); for (var i = 0; i < files.length; i++) { var deleteAction = FileList.findFileEl(files[i]).children("td.date").children(".action.delete"); deleteAction.removeClass('delete-icon').addClass('progress-icon'); @@ -131,7 +147,7 @@ $(document).ready(function() { }; } else { - files = getSelectedFiles('name'); + files = Files.getSelectedFiles('name'); params = { files: JSON.stringify(files), dir: FileList.getCurrentDirectory() @@ -158,7 +174,7 @@ $(document).ready(function() { } FileList.hideMask(); // simply remove all files - FileList.update(''); + FileList.setFiles([]); enableActions(); } else { @@ -191,7 +207,7 @@ $(document).ready(function() { var filename = $(this).parent().parent().attr('data-file'); var tr = FileList.findFileEl(filename); var renaming = tr.data('renaming'); - if(!renaming && !FileList.isLoading(filename)){ + if(!renaming){ if(mime.substr(0, 5) === 'text/'){ //no texteditor for now return; } @@ -203,48 +219,62 @@ $(document).ready(function() { action(filename); } } - - // event handlers for breadcrumb items - $('#controls').delegate('.crumb:not(.home) a', 'click', onClickBreadcrumb); }); + /** + * Override crumb URL maker (hacky!) + */ + FileList.breadcrumb.getCrumbUrl = function(part, index) { + if (index === 0) { + return OC.linkTo('files', 'index.php'); + } + return OC.linkTo('files_trashbin', 'index.php')+"?dir=" + encodeURIComponent(part.dir); + }; + + Files.generatePreviewUrl = function(urlSpec) { + return OC.generateUrl('/apps/files_trashbin/ajax/preview.php?') + $.param(urlSpec); + }; + + Files.getDownloadUrl = function(action, params) { + // no downloads + return '#'; + }; + + Files.getAjaxUrl = function(action, params) { + var q = ''; + if (params) { + q = '?' + OC.buildQueryString(params); + } + return OC.filePath('files_trashbin', 'ajax', action + '.php') + q; + }; + + + /** + * Override crumb making to add "Deleted Files" entry + * and convert files with ".d" extensions to a more + * user friendly name. + */ + var oldMakeCrumbs = BreadCrumb.prototype._makeCrumbs; + BreadCrumb.prototype._makeCrumbs = function() { + var parts = oldMakeCrumbs.apply(this, arguments); + // duplicate first part + parts.unshift(parts[0]); + parts[1] = { + dir: '/', + name: t('files_trashbin', 'Deleted Files') + }; + for (var i = 2; i < parts.length; i++) { + parts[i].name = getDeletedFileName(parts[i].name); + } + return parts; + }; + FileActions.actions.dir = { // only keep 'Open' action for navigation 'Open': FileActions.actions.dir.Open }; }); -/** - * @brief get a list of selected files - * @param string property (option) the property of the file requested - * @return array - * - * possible values for property: name, mime, size and type - * if property is set, an array with that property for each file is returnd - * if it's ommited an array of objects with all properties is returned - */ -function getSelectedFiles(property){ - var elements=$('td.filename input:checkbox:checked').parent().parent(); - var files=[]; - elements.each(function(i,element){ - var file={ - name:$(element).attr('data-file'), - timestamp:$(element).attr('data-timestamp'), - type:$(element).attr('data-type') - }; - if(property){ - files.push(file[property]); - }else{ - files.push(file); - } - }); - return files; -} - -function fileDownloadPath(dir, file) { - return OC.filePath('files_trashbin', '', 'download.php') + '?file='+encodeURIComponent(file); -} - function enableActions() { $(".action").css("display", "inline"); $(":input:checkbox").css("display", "inline"); diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php index 9c24332a96..e6ca73520a 100644 --- a/apps/files_trashbin/lib/helper.php +++ b/apps/files_trashbin/lib/helper.php @@ -27,6 +27,10 @@ class Helper if ($dirContent === false) { return $result; } + + list($storage, $internalPath) = $view->resolvePath($dir); + $absoluteDir = $view->getAbsolutePath($dir); + if (is_resource($dirContent)) { while (($entryName = readdir($dirContent)) !== false) { if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) { @@ -40,76 +44,41 @@ class Helper $parts = explode('/', ltrim($dir, '/')); $timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1); } - $result[] = array( - 'id' => $id, - 'timestamp' => $timestamp, - 'mime' => \OC_Helper::getFileNameMimeType($id), + $i = array( + 'name' => $id, + 'mtime' => $timestamp, + 'mimetype' => \OC_Helper::getFileNameMimeType($id), 'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file', - 'location' => $dir, + 'directory' => ($dir === '/') ? '' : $dir, ); + $result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i); } } closedir($dirContent); } - $files = array(); - $id = 0; - list($storage, $internalPath) = $view->resolvePath($dir); - $absoluteDir = $view->getAbsolutePath($dir); - foreach ($result as $r) { - $i = array(); - $i['id'] = $id++; - $i['name'] = $r['id']; - $i['date'] = \OCP\Util::formatDate($r['timestamp']); - $i['timestamp'] = $r['timestamp']; - $i['etag'] = $r['timestamp']; // add fake etag, it is only needed to identify the preview image - $i['mimetype'] = $r['mime']; - $i['type'] = $r['type']; - if ($i['type'] === 'file') { - $fileinfo = pathinfo($r['id']); - $i['basename'] = $fileinfo['filename']; - $i['extension'] = isset($fileinfo['extension']) ? ('.'.$fileinfo['extension']) : ''; - } - $i['directory'] = $r['location']; - if ($i['directory'] === '/') { - $i['directory'] = ''; - } - $i['permissions'] = \OCP\PERMISSION_READ; - if (\OCP\App::isEnabled('files_encryption')) { - $i['isPreviewAvailable'] = false; - } else { - $i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($r['mime']); - } - $i['icon'] = \OCA\Files\Helper::determineIcon($i); - $files[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i); - } + usort($result, array('\OCA\Files\Helper', 'fileCmp')); - usort($files, array('\OCA\Files\Helper', 'fileCmp')); - - return $files; + return $result; } /** - * Splits the given path into a breadcrumb structure. - * @param string $dir path to process - * @return array where each entry is a hash of the absolute - * directory path and its name + * Format file infos for JSON + * @param \OCP\Files\FileInfo[] $fileInfos file infos */ - public static function makeBreadcrumb($dir){ - // Make breadcrumb - $pathtohere = ''; - $breadcrumb = array(); - foreach (explode('/', $dir) as $i) { - if ($i !== '') { - if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) { - $name = $match[1]; - } else { - $name = $i; - } - $pathtohere .= '/' . $i; - $breadcrumb[] = array('dir' => $pathtohere, 'name' => $name); + public static function formatFileInfos($fileInfos) { + $files = array(); + $id = 0; + foreach ($fileInfos as $i) { + $entry = \OCA\Files\Helper::formatFileInfo($i); + $entry['id'] = $id++; + $entry['etag'] = $entry['mtime']; // add fake etag, it is only needed to identify the preview image + $entry['permissions'] = \OCP\PERMISSION_READ; + if (\OCP\App::isEnabled('files_encryption')) { + $entry['isPreviewAvailable'] = false; } + $files[] = $entry; } - return $breadcrumb; + return $files; } } diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php index f9264d4352..615cf8bdd0 100644 --- a/apps/files_trashbin/templates/index.php +++ b/apps/files_trashbin/templates/index.php @@ -1,13 +1,11 @@
    - -
    +
    -
    class="hidden">t('Nothing in here. Your trash bin is empty!'))?>
    + - - + @@ -40,6 +38,5 @@ -
    diff --git a/apps/files_trashbin/templates/part.breadcrumb.php b/apps/files_trashbin/templates/part.breadcrumb.php deleted file mode 100644 index fdf78c190d..0000000000 --- a/apps/files_trashbin/templates/part.breadcrumb.php +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -
    svg" - data-dir=''> - -
    -200) $relative_date_color = 200; - $name = \OCP\Util::encodePath($file['name']); - $directory = \OCP\Util::encodePath($file['directory']); ?> - ' - - id="" - data-file="" - data-timestamp='' - data-dirlisting=1 - - id="" - data-file="" - data-timestamp='' - data-dirlisting=0 - > - - - - - style="background-image:url()" - - - style="background-image:url()" - - style="background-image:url()" - - - > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Date: Wed, 2 Apr 2014 16:53:45 +0200 Subject: [PATCH 68/94] Reuse known free space in the files app --- apps/files/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files/index.php b/apps/files/index.php index 4d765b69e4..cd9341d3b1 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -97,7 +97,7 @@ $permissions = $dirInfo->getPermissions(); $storageInfo=OC_Helper::getStorageInfo($dir); $freeSpace=$storageInfo['free']; $uploadLimit=OCP\Util::uploadLimit(); -$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir); +$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir, $freeSpace); $publicUploadEnabled = $config->getAppValue('core', 'shareapi_allow_public_upload', 'yes'); // if the encryption app is disabled, than everything is fine (INIT_SUCCESSFUL status code) $encryptionInitStatus = 2; From da5541ac025e5f5f9dbd7318b903266eedbed263 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 2 Apr 2014 17:10:57 +0200 Subject: [PATCH 69/94] Allow reusing FileInfo for getStorageInfo --- apps/files/index.php | 4 ++-- lib/private/helper.php | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/files/index.php b/apps/files/index.php index 4d765b69e4..f2c5bd1335 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -38,7 +38,7 @@ OCP\App::setActiveNavigationEntry('files_index'); // Load the files $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; $dir = \OC\Files\Filesystem::normalizePath($dir); -$dirInfo = \OC\Files\Filesystem::getFileInfo($dir); +$dirInfo = \OC\Files\Filesystem::getFileInfo($dir, false); // Redirect if directory does not exist if (!$dirInfo || !$dirInfo->getType() === 'dir') { header('Location: ' . OCP\Util::getScriptName() . ''); @@ -94,7 +94,7 @@ $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir $permissions = $dirInfo->getPermissions(); // information about storage capacities -$storageInfo=OC_Helper::getStorageInfo($dir); +$storageInfo=OC_Helper::getStorageInfo($dir, $dirInfo); $freeSpace=$storageInfo['free']; $uploadLimit=OCP\Util::uploadLimit(); $maxUploadFilesize=OCP\Util::maxUploadFilesize($dir); diff --git a/lib/private/helper.php b/lib/private/helper.php index d7ac0b5f4f..da3d3cd1c6 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -875,12 +875,15 @@ class OC_Helper { * Calculate the disc space for the given path * * @param string $path + * @param \OCP\Files\FileInfo $rootInfo (optional) * @return array */ - public static function getStorageInfo($path) { + public static function getStorageInfo($path, $rootInfo = null) { // return storage info without adding mount points - $rootInfo = \OC\Files\Filesystem::getFileInfo($path, false); - $used = $rootInfo['size']; + if (is_null($rootInfo)) { + $rootInfo = \OC\Files\Filesystem::getFileInfo($path, false); + } + $used = $rootInfo->getSize(); if ($used < 0) { $used = 0; } From 5f3b8c45d73451d511242a3aabc768520273c40c Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 2 Apr 2014 17:54:33 +0200 Subject: [PATCH 70/94] Remove dependency on container, removing service locator antipattern --- lib/public/appframework/controller.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/public/appframework/controller.php b/lib/public/appframework/controller.php index 7c2219bd04..758f0a8008 100644 --- a/lib/public/appframework/controller.php +++ b/lib/public/appframework/controller.php @@ -38,10 +38,10 @@ use OCP\IRequest; abstract class Controller { /** - * app container for dependency injection - * @var \OCP\AppFramework\IAppContainer + * app name + * @var string */ - protected $app; + protected $appName; /** * current request @@ -51,11 +51,11 @@ abstract class Controller { /** * constructor of the controller - * @param IAppContainer $app interface to the app + * @param string $appName the name of the app * @param IRequest $request an instance of the request */ - public function __construct(IAppContainer $app, IRequest $request){ - $this->app = $app; + public function __construct($appName, IRequest $request){ + $this->appName = $appName; $this->request = $request; } @@ -136,7 +136,7 @@ abstract class Controller { */ public function render($templateName, array $params=array(), $renderAs='user', array $headers=array()){ - $response = new TemplateResponse($this->app->getAppName(), $templateName); + $response = new TemplateResponse($this->appName, $templateName); $response->setParams($params); $response->renderAs($renderAs); From 54783550e8736e0507be05fdc8711d8b30218d72 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 3 Apr 2014 01:56:12 -0400 Subject: [PATCH 71/94] [tx-robot] updated from transifex --- apps/files/l10n/tr.php | 2 +- apps/files_encryption/l10n/hu_HU.php | 1 + apps/files_external/l10n/de.php | 2 ++ apps/files_external/l10n/de_DE.php | 2 ++ apps/files_external/l10n/en_GB.php | 2 ++ apps/files_external/l10n/es.php | 1 + apps/files_external/l10n/fi_FI.php | 2 ++ apps/files_external/l10n/gl.php | 2 ++ apps/files_external/l10n/it.php | 2 ++ apps/files_external/l10n/nl.php | 2 ++ apps/files_external/l10n/pl.php | 2 ++ apps/files_external/l10n/pt_BR.php | 2 ++ apps/files_external/l10n/tr.php | 2 ++ core/l10n/tr.php | 2 +- l10n/de/files_external.po | 11 +++--- l10n/de_DE/files_external.po | 11 +++--- l10n/en_GB/files_external.po | 10 +++--- l10n/es/files_external.po | 8 ++--- l10n/fi_FI/files_external.po | 10 +++--- l10n/gl/files_external.po | 10 +++--- l10n/hu_HU/files_encryption.po | 51 ++++++++++++++-------------- l10n/it/files_external.po | 11 +++--- l10n/nl/files_external.po | 10 +++--- l10n/pl/files_external.po | 10 +++--- l10n/pt_BR/files_external.po | 10 +++--- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/private.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/tr/core.po | 6 ++-- l10n/tr/files.po | 46 ++++++++++++------------- l10n/tr/files_external.po | 10 +++--- 40 files changed, 145 insertions(+), 119 deletions(-) diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index a2570e002a..095578ce65 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -29,7 +29,7 @@ $TRANSLATIONS = array( "Invalid directory." => "Geçersiz dizin.", "Files" => "Dosyalar", "Unable to upload {filename} as it is a directory or has 0 bytes" => "Bir dizin veya 0 bayt olduğundan {filename} yüklenemedi", -"Total file size {size1} exceeds upload limit {size2}" => "Toplam dosya boyutu {size1} gönderme sınırını {size2} aşıyor", +"Total file size {size1} exceeds upload limit {size2}" => "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor", "Not enough free space, you are uploading {size1} but only {size2} is left" => "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut", "Upload cancelled." => "Yükleme iptal edildi.", "Could not get result from server." => "Sunucudan sonuç alınamadı.", diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php index a80c8d6f36..22c1fa989b 100644 --- a/apps/files_encryption/l10n/hu_HU.php +++ b/apps/files_encryption/l10n/hu_HU.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.", "Following users are not set up for encryption:" => "A következő felhasználók nem állították be a titkosítást:", "Initial encryption started... This can take some time. Please wait." => "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.", +"Initial encryption running... Please try again later." => "Kezedeti titkosítás fut... Próbálja később.", "Go directly to your " => "Ugrás ide:", "personal settings" => "személyes beállítások", "Encryption" => "Titkosítás", diff --git a/apps/files_external/l10n/de.php b/apps/files_external/l10n/de.php index 9a885c69e4..4c3f563965 100644 --- a/apps/files_external/l10n/de.php +++ b/apps/files_external/l10n/de.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Externer Speicher", "Configuration" => "Konfiguration", "Options" => "Optionen", +"Available for" => "Verfügbar für", "Add storage" => "Speicher hinzufügen", +"No user or group" => "Kein Nutzer oder Gruppe", "All Users" => "Alle Benutzer", "Groups" => "Gruppen", "Users" => "Benutzer", diff --git a/apps/files_external/l10n/de_DE.php b/apps/files_external/l10n/de_DE.php index 088dfd75b4..63198c9817 100644 --- a/apps/files_external/l10n/de_DE.php +++ b/apps/files_external/l10n/de_DE.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Externer Speicher", "Configuration" => "Konfiguration", "Options" => "Optionen", +"Available for" => "Verfügbar für", "Add storage" => "Speicher hinzufügen", +"No user or group" => "Kein Nutzer oder Gruppe", "All Users" => "Alle Benutzer", "Groups" => "Gruppen", "Users" => "Benutzer", diff --git a/apps/files_external/l10n/en_GB.php b/apps/files_external/l10n/en_GB.php index 9901d49bb7..f0ebb629de 100644 --- a/apps/files_external/l10n/en_GB.php +++ b/apps/files_external/l10n/en_GB.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "External storage", "Configuration" => "Configuration", "Options" => "Options", +"Available for" => "Available for", "Add storage" => "Add storage", +"No user or group" => "No user or group", "All Users" => "All Users", "Groups" => "Groups", "Users" => "Users", diff --git a/apps/files_external/l10n/es.php b/apps/files_external/l10n/es.php index 46d93cbd7f..04537ecf56 100644 --- a/apps/files_external/l10n/es.php +++ b/apps/files_external/l10n/es.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Configuration" => "Configuración", "Options" => "Opciones", "Add storage" => "Añadir almacenamiento", +"No user or group" => "Ningún usuario o grupo", "All Users" => "Todos los usuarios", "Groups" => "Grupos", "Users" => "Usuarios", diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php index 289bbdd3ad..9f8dbd414f 100644 --- a/apps/files_external/l10n/fi_FI.php +++ b/apps/files_external/l10n/fi_FI.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Ulkoinen tallennustila", "Configuration" => "Asetukset", "Options" => "Valinnat", +"Available for" => "Saatavuus", "Add storage" => "Lisää tallennustila", +"No user or group" => "Ei käyttäjää tai ryhmää", "All Users" => "Kaikki käyttäjät", "Groups" => "Ryhmät", "Users" => "Käyttäjät", diff --git a/apps/files_external/l10n/gl.php b/apps/files_external/l10n/gl.php index 1510df381b..3b5aaa53de 100644 --- a/apps/files_external/l10n/gl.php +++ b/apps/files_external/l10n/gl.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Almacenamento externo", "Configuration" => "Configuración", "Options" => "Opcións", +"Available for" => "Dispoñíbel para", "Add storage" => "Engadir almacenamento", +"No user or group" => "Non hai usuario ou grupo", "All Users" => "Todos os usuarios", "Groups" => "Grupos", "Users" => "Usuarios", diff --git a/apps/files_external/l10n/it.php b/apps/files_external/l10n/it.php index 75f60268c3..ea3e573818 100644 --- a/apps/files_external/l10n/it.php +++ b/apps/files_external/l10n/it.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Archiviazione esterna", "Configuration" => "Configurazione", "Options" => "Opzioni", +"Available for" => "Disponibile per", "Add storage" => "Aggiungi archiviazione", +"No user or group" => "Nessun utente o gruppo", "All Users" => "Tutti gli utenti", "Groups" => "Gruppi", "Users" => "Utenti", diff --git a/apps/files_external/l10n/nl.php b/apps/files_external/l10n/nl.php index 74bc7de4d8..dceccc7ee5 100644 --- a/apps/files_external/l10n/nl.php +++ b/apps/files_external/l10n/nl.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Externe opslag", "Configuration" => "Configuratie", "Options" => "Opties", +"Available for" => "Beschikbaar voor", "Add storage" => "Toevoegen opslag", +"No user or group" => "Geen gebruiker of groep", "All Users" => "Alle gebruikers", "Groups" => "Groepen", "Users" => "Gebruikers", diff --git a/apps/files_external/l10n/pl.php b/apps/files_external/l10n/pl.php index d64292e0be..4a3dbaf206 100644 --- a/apps/files_external/l10n/pl.php +++ b/apps/files_external/l10n/pl.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Zewnętrzne zasoby dyskowe", "Configuration" => "Konfiguracja", "Options" => "Opcje", +"Available for" => "Dostępne przez", "Add storage" => "Dodaj zasoby dyskowe", +"No user or group" => "Brak użytkownika lub grupy", "All Users" => "Wszyscy uzytkownicy", "Groups" => "Grupy", "Users" => "Użytkownicy", diff --git a/apps/files_external/l10n/pt_BR.php b/apps/files_external/l10n/pt_BR.php index 1d074a575a..5638fd1d70 100644 --- a/apps/files_external/l10n/pt_BR.php +++ b/apps/files_external/l10n/pt_BR.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Armazenamento Externo", "Configuration" => "Configuração", "Options" => "Opções", +"Available for" => "Disponível para", "Add storage" => "Adicionar Armazenamento", +"No user or group" => "Nenhum usuário ou grupo", "All Users" => "Todos os Usuários", "Groups" => "Grupos", "Users" => "Usuários", diff --git a/apps/files_external/l10n/tr.php b/apps/files_external/l10n/tr.php index 98331d39e3..e9e5556a9f 100644 --- a/apps/files_external/l10n/tr.php +++ b/apps/files_external/l10n/tr.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Harici depolama", "Configuration" => "Yapılandırma", "Options" => "Seçenekler", +"Available for" => "Kullanabilenler", "Add storage" => "Depo ekle", +"No user or group" => "Kullanıcı veya grup yok", "All Users" => "Tüm Kullanıcılar", "Groups" => "Gruplar", "Users" => "Kullanıcılar", diff --git a/core/l10n/tr.php b/core/l10n/tr.php index a0c2c7154f..cb9a98a8fa 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -65,7 +65,7 @@ $TRANSLATIONS = array( "Shared" => "Paylaşılan", "Share" => "Paylaş", "Error" => "Hata", -"Error while sharing" => "Paylaşım sırasında hata ", +"Error while sharing" => "Paylaşım sırasında hata", "Error while unsharing" => "Paylaşım iptal edilirken hata", "Error while changing permissions" => "İzinleri değiştirirken hata oluştu", "Shared with you and the group {group} by {owner}" => "{owner} tarafından sizinle ve {group} ile paylaştırılmış", diff --git a/l10n/de/files_external.po b/l10n/de/files_external.po index 45d63ba005..29cb88a832 100644 --- a/l10n/de/files_external.po +++ b/l10n/de/files_external.po @@ -4,14 +4,15 @@ # # Translators: # arkascha , 2013 +# Mario Siegmann , 2014 # stefanniedermann , 2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 06:20+0000\n" +"Last-Translator: Mario Siegmann \n" "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -85,7 +86,7 @@ msgstr "Optionen" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Verfügbar für" #: templates/settings.php:32 msgid "Add storage" @@ -93,7 +94,7 @@ msgstr "Speicher hinzufügen" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Kein Nutzer oder Gruppe" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/de_DE/files_external.po b/l10n/de_DE/files_external.po index dc3a439caa..f00b82bc67 100644 --- a/l10n/de_DE/files_external.po +++ b/l10n/de_DE/files_external.po @@ -4,15 +4,16 @@ # # Translators: # arkascha , 2013 +# Mario Siegmann , 2014 # stefanniedermann , 2014 # Mirodin , 2013 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 06:20+0000\n" +"Last-Translator: Mario Siegmann \n" "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -86,7 +87,7 @@ msgstr "Optionen" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Verfügbar für" #: templates/settings.php:32 msgid "Add storage" @@ -94,7 +95,7 @@ msgstr "Speicher hinzufügen" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Kein Nutzer oder Gruppe" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/en_GB/files_external.po b/l10n/en_GB/files_external.po index b8fc186e42..f7499ea07d 100644 --- a/l10n/en_GB/files_external.po +++ b/l10n/en_GB/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 11:30+0000\n" +"Last-Translator: mnestis \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/owncloud/language/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Options" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Available for" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Add storage" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "No user or group" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/es/files_external.po b/l10n/es/files_external.po index 987cddc27f..cb1fbff0c3 100644 --- a/l10n/es/files_external.po +++ b/l10n/es/files_external.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 15:20+0000\n" +"Last-Translator: Art O. Pal \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -93,7 +93,7 @@ msgstr "Añadir almacenamiento" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Ningún usuario o grupo" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/fi_FI/files_external.po b/l10n/fi_FI/files_external.po index 1ef911539e..d6334ce805 100644 --- a/l10n/fi_FI/files_external.po +++ b/l10n/fi_FI/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 06:30+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Valinnat" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Saatavuus" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Lisää tallennustila" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Ei käyttäjää tai ryhmää" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/gl/files_external.po b/l10n/gl/files_external.po index b4288acb57..9d0df03eca 100644 --- a/l10n/gl/files_external.po +++ b/l10n/gl/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 11:07+0000\n" +"Last-Translator: mbouzada \n" "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Opcións" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Dispoñíbel para" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Engadir almacenamento" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Non hai usuario ou grupo" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/hu_HU/files_encryption.po b/l10n/hu_HU/files_encryption.po index 99e10dc725..1623bca054 100644 --- a/l10n/hu_HU/files_encryption.po +++ b/l10n/hu_HU/files_encryption.po @@ -6,13 +6,14 @@ # blackc0de , 2013 # ebela , 2013 # Laszlo Tornoci , 2013 +# osztraksajt , 2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-11 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 20:30+0000\n" +"Last-Translator: osztraksajt \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -104,7 +105,7 @@ msgstr "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltartha #: js/detect-migration.js:25 msgid "Initial encryption running... Please try again later." -msgstr "" +msgstr "Kezedeti titkosítás fut... Próbálja később." #: templates/invalid_private_key.php:8 msgid "Go directly to your " @@ -114,91 +115,91 @@ msgstr "Ugrás ide:" msgid "personal settings" msgstr "személyes beállítások" -#: templates/settings-admin.php:4 templates/settings-personal.php:3 +#: templates/settings-admin.php:2 templates/settings-personal.php:2 msgid "Encryption" msgstr "Titkosítás" -#: templates/settings-admin.php:7 +#: templates/settings-admin.php:5 msgid "" "Enable recovery key (allow to recover users files in case of password loss):" msgstr "A helyreállítási kulcs beállítása (lehetővé teszi a felhasználók állományainak visszaállítását, ha elfelejtik a jelszavukat):" -#: templates/settings-admin.php:11 +#: templates/settings-admin.php:9 msgid "Recovery key password" msgstr "A helyreállítási kulcs jelszava" -#: templates/settings-admin.php:14 +#: templates/settings-admin.php:12 msgid "Repeat Recovery key password" msgstr "Ismételje meg a helyreállítási kulcs jelszavát" -#: templates/settings-admin.php:21 templates/settings-personal.php:51 +#: templates/settings-admin.php:19 templates/settings-personal.php:50 msgid "Enabled" msgstr "Bekapcsolva" -#: templates/settings-admin.php:29 templates/settings-personal.php:59 +#: templates/settings-admin.php:27 templates/settings-personal.php:58 msgid "Disabled" msgstr "Kikapcsolva" -#: templates/settings-admin.php:34 +#: templates/settings-admin.php:32 msgid "Change recovery key password:" msgstr "A helyreállítási kulcs jelszavának módosítása:" -#: templates/settings-admin.php:40 +#: templates/settings-admin.php:38 msgid "Old Recovery key password" msgstr "Régi Helyreállítási Kulcs Jelszava" -#: templates/settings-admin.php:47 +#: templates/settings-admin.php:45 msgid "New Recovery key password" msgstr "Új Helyreállítási kulcs jelszava" -#: templates/settings-admin.php:53 +#: templates/settings-admin.php:51 msgid "Repeat New Recovery key password" msgstr "Ismételje meg az új helyreállítási kulcs jelszavát" -#: templates/settings-admin.php:58 +#: templates/settings-admin.php:56 msgid "Change Password" msgstr "Jelszó megváltoztatása" -#: templates/settings-personal.php:9 +#: templates/settings-personal.php:8 msgid "Your private key password no longer match your log-in password:" msgstr "A személyes kulcs jelszava mostantól nem azonos a belépési jelszavával:" -#: templates/settings-personal.php:12 +#: templates/settings-personal.php:11 msgid "Set your old private key password to your current log-in password." msgstr "Állítsuk be a személyes kulcs jelszavát a jelenlegi bejelentkezési jelszavunkra." -#: templates/settings-personal.php:14 +#: templates/settings-personal.php:13 msgid "" " If you don't remember your old password you can ask your administrator to " "recover your files." msgstr "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait." -#: templates/settings-personal.php:22 +#: templates/settings-personal.php:21 msgid "Old log-in password" msgstr "Régi bejelentkezési jelszó" -#: templates/settings-personal.php:28 +#: templates/settings-personal.php:27 msgid "Current log-in password" msgstr "Jelenlegi bejelentkezési jelszó" -#: templates/settings-personal.php:33 +#: templates/settings-personal.php:32 msgid "Update Private Key Password" msgstr "A személyest kulcs jelszó frissítése" -#: templates/settings-personal.php:42 +#: templates/settings-personal.php:41 msgid "Enable password recovery:" msgstr "Jelszó-visszaállítás bekapcsolása" -#: templates/settings-personal.php:44 +#: templates/settings-personal.php:43 msgid "" "Enabling this option will allow you to reobtain access to your encrypted " "files in case of password loss" msgstr "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát" -#: templates/settings-personal.php:60 +#: templates/settings-personal.php:59 msgid "File recovery settings updated" msgstr "A fájlhelyreállítási beállítások frissültek" -#: templates/settings-personal.php:61 +#: templates/settings-personal.php:60 msgid "Could not update file recovery" msgstr "A fájlhelyreállítás nem frissíthető" diff --git a/l10n/it/files_external.po b/l10n/it/files_external.po index 648f9d088b..fc9d04fac6 100644 --- a/l10n/it/files_external.po +++ b/l10n/it/files_external.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Jessica Di Maria , 2014 # Paolo Velati , 2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 17:41+0000\n" +"Last-Translator: Vincenzo Reale \n" "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +85,7 @@ msgstr "Opzioni" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Disponibile per" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +93,7 @@ msgstr "Aggiungi archiviazione" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Nessun utente o gruppo" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/nl/files_external.po b/l10n/nl/files_external.po index 59d36a6178..af9d2bb2e2 100644 --- a/l10n/nl/files_external.po +++ b/l10n/nl/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 07:50+0000\n" +"Last-Translator: André Koot \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Opties" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Beschikbaar voor" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Toevoegen opslag" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Geen gebruiker of groep" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/pl/files_external.po b/l10n/pl/files_external.po index dc44ab1702..73749054af 100644 --- a/l10n/pl/files_external.po +++ b/l10n/pl/files_external.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 11:10+0000\n" +"Last-Translator: bobie \n" "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -85,7 +85,7 @@ msgstr "Opcje" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Dostępne przez" #: templates/settings.php:32 msgid "Add storage" @@ -93,7 +93,7 @@ msgstr "Dodaj zasoby dyskowe" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Brak użytkownika lub grupy" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po index 75e0130978..5e3198d3c4 100644 --- a/l10n/pt_BR/files_external.po +++ b/l10n/pt_BR/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 11:30+0000\n" +"Last-Translator: Flávio Veras \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Opções" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Disponível para" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Adicionar Armazenamento" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Nenhum usuário ou grupo" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index f1fb20c9ac..e57534fed5 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index 0a6ef078e4..3200103804 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index d82167f21f..547d55849d 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index b28dbca00d..f5f737dac8 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 2be87945ad..fe8bbde326 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 9ffd886101..cc837ef6d3 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index ed9c31f941..10bf11cd4b 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 283116e436..8f7656f4f2 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot index 546a7940ee..f50460d212 100644 --- a/l10n/templates/private.pot +++ b/l10n/templates/private.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index 8e54139951..21bb0d4c5e 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index aa690d0e13..cf61da7c93 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 020d1a59e0..669ce82b01 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index 43d667e8d0..3257ce60c1 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-01 17:50+0000\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 13:00+0000\n" "Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -297,7 +297,7 @@ msgstr "Hata" #: js/share.js:160 js/share.js:767 msgid "Error while sharing" -msgstr "Paylaşım sırasında hata " +msgstr "Paylaşım sırasında hata" #: js/share.js:171 msgid "Error while unsharing" diff --git a/l10n/tr/files.po b/l10n/tr/files.po index 3894fb0ad4..cc0a820871 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-27 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 06:01+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 12:00+0000\n" +"Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -153,7 +153,7 @@ msgstr "Bir dizin veya 0 bayt olduğundan {filename} yüklenemedi" #: js/file-upload.js:258 msgid "Total file size {size1} exceeds upload limit {size2}" -msgstr "Toplam dosya boyutu {size1} gönderme sınırını {size2} aşıyor" +msgstr "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor" #: js/file-upload.js:268 msgid "" @@ -197,15 +197,15 @@ msgstr "Klasör oluşturulamadı" msgid "Error fetching URL" msgstr "Adres getirilirken hata" -#: js/fileactions.js:149 +#: js/fileactions.js:164 msgid "Share" msgstr "Paylaş" -#: js/fileactions.js:162 +#: js/fileactions.js:177 msgid "Delete permanently" msgstr "Kalıcı olarak sil" -#: js/fileactions.js:223 +#: js/fileactions.js:238 msgid "Rename" msgstr "İsim değiştir." @@ -229,13 +229,13 @@ msgstr "geri al" msgid "Error deleting file." msgstr "Dosya silinirken hata." -#: js/filelist.js:687 js/filelist.js:761 js/files.js:691 +#: js/filelist.js:687 js/filelist.js:761 js/files.js:694 msgid "%n folder" msgid_plural "%n folders" msgstr[0] "%n dizin" msgstr[1] "%n dizin" -#: js/filelist.js:688 js/filelist.js:762 js/files.js:697 +#: js/filelist.js:688 js/filelist.js:762 js/files.js:700 msgid "%n file" msgid_plural "%n files" msgstr[0] "%n dosya" @@ -282,29 +282,29 @@ msgid "" "your personal settings to decrypt your files." msgstr "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçin." -#: js/files.js:379 +#: js/files.js:382 msgid "" "Your download is being prepared. This might take some time if the files are " "big." msgstr "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir." -#: js/files.js:610 js/files.js:654 +#: js/files.js:613 js/files.js:657 msgid "Error moving file" msgstr "Dosya taşıma hatası" -#: js/files.js:610 js/files.js:654 +#: js/files.js:613 js/files.js:657 msgid "Error" msgstr "Hata" -#: js/files.js:672 templates/index.php:68 +#: js/files.js:675 templates/index.php:68 msgid "Name" msgstr "İsim" -#: js/files.js:673 templates/index.php:80 +#: js/files.js:676 templates/index.php:80 msgid "Size" msgstr "Boyut" -#: js/files.js:674 templates/index.php:82 +#: js/files.js:677 templates/index.php:82 msgid "Modified" msgstr "Değiştirilme" @@ -321,35 +321,35 @@ msgstr "%s yeniden adlandırılamadı" msgid "Upload" msgstr "Yükle" -#: templates/admin.php:5 +#: templates/admin.php:4 msgid "File handling" msgstr "Dosya işlemleri" -#: templates/admin.php:7 +#: templates/admin.php:6 msgid "Maximum upload size" msgstr "Maksimum yükleme boyutu" -#: templates/admin.php:10 +#: templates/admin.php:9 msgid "max. possible: " msgstr "mümkün olan en fazla: " -#: templates/admin.php:15 +#: templates/admin.php:14 msgid "Needed for multi-file and folder downloads." msgstr "Çoklu dosya ve dizin indirmesi için gerekli." -#: templates/admin.php:17 +#: templates/admin.php:16 msgid "Enable ZIP-download" msgstr "ZIP indirmeyi etkinleştir" -#: templates/admin.php:20 +#: templates/admin.php:19 msgid "0 is unlimited" msgstr "0 limitsiz demektir" -#: templates/admin.php:22 +#: templates/admin.php:21 msgid "Maximum input size for ZIP files" msgstr "ZIP dosyaları için en fazla girdi boyutu" -#: templates/admin.php:26 +#: templates/admin.php:25 msgid "Save" msgstr "Kaydet" diff --git a/l10n/tr/files_external.po b/l10n/tr/files_external.po index 11137b1ac5..2076251ca0 100644 --- a/l10n/tr/files_external.po +++ b/l10n/tr/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-03 01:55-0400\n" +"PO-Revision-Date: 2014-04-02 11:07+0000\n" +"Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Seçenekler" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Kullanabilenler" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Depo ekle" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Kullanıcı veya grup yok" #: templates/settings.php:95 msgid "All Users" From eaad6a4e27c291ce8f226bf77bc26b3001b4c380 Mon Sep 17 00:00:00 2001 From: Robin McCorkell Date: Mon, 31 Mar 2014 15:16:33 +0100 Subject: [PATCH 72/94] Fix error log spam Regression from e002b7242cb19a0e028d325cd64b57e67dc48108 --- apps/files_external/templates/settings.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index e8815acaf1..0d04e35e7f 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -16,16 +16,16 @@ array())); ?> - > + > - +

    - +
    From 1b55c312e5929499e09714dc8155065b03c7deaa Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Fri, 4 Apr 2014 22:27:05 +0200 Subject: [PATCH 85/94] Removed two unused functions These two functions were actually not usable and only a todo since ages. I think it's better to remove it than having dead and unmaintained code. --- lib/private/ocs/cloud.php | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/lib/private/ocs/cloud.php b/lib/private/ocs/cloud.php index 06d6a8eb4b..c8bb9425f1 100644 --- a/lib/private/ocs/cloud.php +++ b/lib/private/ocs/cloud.php @@ -99,31 +99,4 @@ class OC_OCS_Cloud { ); return new OC_OCS_Result($data); } - - public static function getUserPublickey($parameters) { - - if(OC_User::userExists($parameters['user'])) { - // calculate the disc space - // TODO - return new OC_OCS_Result(array()); - } else { - return new OC_OCS_Result(null, 300); - } - } - - public static function getUserPrivatekey($parameters) { - $user = OC_User::getUser(); - if(OC_User::isAdminUser($user) or ($user==$parameters['user'])) { - - if(OC_User::userExists($user)) { - // calculate the disc space - $txt = 'this is the private key of '.$parameters['user']; - echo($txt); - } else { - return new OC_OCS_Result(null, 300, 'User does not exist'); - } - } else { - return new OC_OCS_Result('null', 300, 'You don´t have permission to access this ressource.'); - } - } } From 33a2aa886538bd68ee6e0f35a8859acf6f861a53 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Fri, 4 Apr 2014 22:38:16 +0200 Subject: [PATCH 86/94] Delete oauth.css --- settings/css/oauth.css | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 settings/css/oauth.css diff --git a/settings/css/oauth.css b/settings/css/oauth.css deleted file mode 100644 index ccdb98cfa3..0000000000 --- a/settings/css/oauth.css +++ /dev/null @@ -1,4 +0,0 @@ -.guest-container{ width:35%; margin: 2em auto 0 auto; } -#oauth-request a.button{ float: right; } -#oauth-request ul li{ list-style: disc; } -#oauth-request ul { margin-left: 2em; margin-top: 1em; } From ce1b38290569ef26082389107b20e119334bcbaf Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Fri, 4 Apr 2014 22:38:26 +0200 Subject: [PATCH 87/94] Delete auth.css --- core/css/auth.css | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 core/css/auth.css diff --git a/core/css/auth.css b/core/css/auth.css deleted file mode 100644 index 70df9f0ae0..0000000000 --- a/core/css/auth.css +++ /dev/null @@ -1,39 +0,0 @@ -h2 { - font-size:32px; - font-weight:700; - margin-bottom:16px; - white-space:nowrap; -} - -ul.scopes { - list-style:disc; -} - -ul.scopes li { - white-space:nowrap; -} - -h2 img { - width:50%; -} - -#oauth { - width:320px; - margin:64px auto 32px; -} - -#allow-auth { - background-color:#5c3; - box-shadow:0 1px 1px #fff, 0 1px 1px #5f3 inset; - color:#fff; - text-shadow:#5e3 0 1px 0; -} - -#deny-auth { - background:none; - border:0; - box-shadow:0 0 0 #fff, 0 0 0 #fff inset; - font-size:19px; - margin:11px; - padding:0; -} From 2124eaba9296ebd9c491d71a266407d6b31cbd30 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 5 Apr 2014 01:56:08 -0400 Subject: [PATCH 88/94] [tx-robot] updated from transifex --- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/private.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 83b1d8f3ae..73ba9af571 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index ecaa7d3fb7..d886b45f28 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index 535a51360f..a0d7379ced 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 311d698d04..7da098dc9b 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index 393ec651fb..b125954183 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 834d4cb14c..7d32701ec6 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index c4e4dc6dc8..1580e94cd5 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index ffa34f094b..328e080722 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot index 3a473ed96a..47c2ac04ea 100644 --- a/l10n/templates/private.pot +++ b/l10n/templates/private.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index d053872e68..da74353ef1 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index df6b7027c4..adaf525a10 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 34b50a0656..6e980ca8fb 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" +"POT-Creation-Date: 2014-04-05 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From ceb6666e738467118568410696c407231d1dd41c Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sun, 6 Apr 2014 00:16:14 +0200 Subject: [PATCH 89/94] Fix slideshow buttons being invisible --- core/css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/css/styles.css b/core/css/styles.css index f978eab7ca..57e2c4479a 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -109,7 +109,7 @@ input[type="button"], margin: 3px 3px 3px 0; padding: 7px 6px 5px; font-size: 13px; - background: #fff; + background-color: #fff; color: #333; border: 1px solid #ddd; outline: none; From a9d49de46575308348194ce5617b065f896f8b89 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 6 Apr 2014 01:56:11 -0400 Subject: [PATCH 90/94] [tx-robot] updated from transifex --- apps/files/l10n/sv.php | 8 +++++ apps/files/l10n/tr.php | 2 +- apps/files_encryption/l10n/sv.php | 2 ++ apps/files_external/l10n/ja.php | 1 + apps/files_external/l10n/tr.php | 4 +-- apps/user_ldap/l10n/sv.php | 5 +++ core/l10n/ja.php | 3 ++ core/l10n/tr.php | 4 +-- l10n/ja/core.po | 52 ++++++++++++++-------------- l10n/ja/files_external.po | 9 ++--- l10n/sv/files.po | 23 +++++++------ l10n/sv/files_encryption.po | 53 +++++++++++++++-------------- l10n/sv/user_ldap.po | 17 ++++----- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/private.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- l10n/tr/core.po | 34 +++++++++--------- l10n/tr/files.po | 8 ++--- l10n/tr/files_external.po | 8 ++--- l10n/tr/lib.po | 10 +++--- lib/l10n/tr.php | 2 +- 30 files changed, 146 insertions(+), 123 deletions(-) diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php index 314a053cd3..f420216228 100644 --- a/apps/files/l10n/sv.php +++ b/apps/files/l10n/sv.php @@ -3,9 +3,12 @@ $TRANSLATIONS = array( "Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn", "Could not move %s" => "Kan inte flytta %s", "File name cannot be empty." => "Filnamn kan inte vara tomt.", +"\"%s\" is an invalid file name." => "\"%s\" är ett ogiltigt filnamn.", "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.", +"The target folder has been moved or deleted." => "Målmappen har flyttats eller tagits bort.", "The name %s is already used in the folder %s. Please choose a different name." => "Namnet %s används redan i katalogen %s. Välj ett annat namn.", "Not a valid source" => "Inte en giltig källa", +"Server is not allowed to open URLs, please check the server configuration" => "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen", "Error while downloading %s to %s" => "Fel under nerladdning från %s till %s", "Error when creating the file" => "Fel under skapande utav filen", "Folder name cannot be empty." => "Katalognamn kan ej vara tomt.", @@ -26,6 +29,8 @@ $TRANSLATIONS = array( "Invalid directory." => "Felaktig mapp.", "Files" => "Filer", "Unable to upload {filename} as it is a directory or has 0 bytes" => "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller har 0 bytes.", +"Total file size {size1} exceeds upload limit {size2}" => "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}", +"Not enough free space, you are uploading {size1} but only {size2} is left" => "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.", "Upload cancelled." => "Uppladdning avbruten.", "Could not get result from server." => "Gick inte att hämta resultat från server.", "File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", @@ -34,6 +39,7 @@ $TRANSLATIONS = array( "{new_name} already exists" => "{new_name} finns redan", "Could not create file" => "Kunde ej skapa fil", "Could not create folder" => "Kunde ej skapa katalog", +"Error fetching URL" => "Fel vid hämtning av URL", "Share" => "Dela", "Delete permanently" => "Radera permanent", "Rename" => "Byt namn", @@ -46,6 +52,7 @@ $TRANSLATIONS = array( "_%n file_::_%n files_" => array("%n fil","%n filer"), "{dirs} and {files}" => "{dirs} och {files}", "_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"), +"\"{name}\" is an invalid file name." => "\"{name}\" är ett ogiltligt filnamn.", "Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", "Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", @@ -67,6 +74,7 @@ $TRANSLATIONS = array( "Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP-filer", "Save" => "Spara", "New" => "Ny", +"New text file" => "Ny textfil", "Text file" => "Textfil", "New folder" => "Ny mapp", "Folder" => "Mapp", diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php index d1eb4bff59..87c664cc17 100644 --- a/apps/files/l10n/tr.php +++ b/apps/files/l10n/tr.php @@ -62,7 +62,7 @@ $TRANSLATIONS = array( "Name" => "İsim", "Size" => "Boyut", "Modified" => "Değiştirilme", -"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz dizin adı. 'Shared' ismi ayrılmıştır.", +"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz klasör adı. 'Shared' ismi ayrılmıştır.", "%s could not be renamed" => "%s yeniden adlandırılamadı", "Upload" => "Yükle", "File handling" => "Dosya işlemleri", diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php index 90a9bd73a6..b17740f254 100644 --- a/apps/files_encryption/l10n/sv.php +++ b/apps/files_encryption/l10n/sv.php @@ -15,6 +15,8 @@ $TRANSLATIONS = array( "Missing requirements." => "Krav som saknas", "Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.", "Following users are not set up for encryption:" => "Följande användare har inte aktiverat kryptering:", +"Initial encryption started... This can take some time. Please wait." => "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.", +"Initial encryption running... Please try again later." => "Initiala krypteringen körs... Var god försök igen senare.", "Go directly to your " => "Gå direkt till din", "personal settings" => "personliga inställningar", "Encryption" => "Kryptering", diff --git a/apps/files_external/l10n/ja.php b/apps/files_external/l10n/ja.php index e2d252d22a..41deb100e5 100644 --- a/apps/files_external/l10n/ja.php +++ b/apps/files_external/l10n/ja.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Configuration" => "設定", "Options" => "オプション", "Add storage" => "ストレージを追加", +"No user or group" => "ユーザーもしくはグループがありません", "All Users" => "すべてのユーザー", "Groups" => "グループ", "Users" => "ユーザー", diff --git a/apps/files_external/l10n/tr.php b/apps/files_external/l10n/tr.php index e9e5556a9f..426f652e3a 100644 --- a/apps/files_external/l10n/tr.php +++ b/apps/files_external/l10n/tr.php @@ -8,9 +8,9 @@ $TRANSLATIONS = array( "Saved" => "Kaydedildi", "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Uyarı: \"smbclient\" kurulu değil. CIFS/SMB paylaşımlarını bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinize danışın.", "Warning: 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." => "Uyarı: PHP içerisinde FTP desteği etkin veya yüklü değil. FTP paylaşımlarını bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinize danışın.", -"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Uyarı: PHP içerisinde Curl desteği etkin veya yüklü değil. OwnCloud / WebDAV veya GoogleDrive bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinizde danışın.", +"Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Uyarı: PHP içerisinde Curl desteği etkin veya yüklü değil. ownCloud / WebDAV veya GoogleDrive bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinizde danışın.", "External Storage" => "Harici Depolama", -"Folder name" => "Dizin ismi", +"Folder name" => "Klasör ismi", "External storage" => "Harici depolama", "Configuration" => "Yapılandırma", "Options" => "Seçenekler", diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php index 0108cfcb0e..fa844b799c 100644 --- a/apps/user_ldap/l10n/sv.php +++ b/apps/user_ldap/l10n/sv.php @@ -33,12 +33,14 @@ $TRANSLATIONS = array( "Save" => "Spara", "Test Configuration" => "Testa konfigurationen", "Help" => "Hjälp", +"Groups meeting these criteria are available in %s:" => "Grupper som uppfyller dessa kriterier finns i %s:", "only those object classes:" => "Endast de objekt-klasserna:", "only from those groups:" => "endast ifrån de här grupperna:", "Edit raw filter instead" => "Redigera rått filter istället", "Raw LDAP filter" => "Rått LDAP-filter", "The filter specifies which LDAP groups shall have access to the %s instance." => "Filtret specifierar vilka LDAD-grupper som ska ha åtkomst till %s instans", "groups found" => "grupper hittade", +"Users login with this attribute:" => "Användare loggar in med detta attribut:", "LDAP Username:" => "LDAP användarnamn:", "LDAP Email Address:" => "LDAP e-postadress:", "Other Attributes:" => "Övriga attribut:", @@ -53,6 +55,7 @@ $TRANSLATIONS = array( "For anonymous access, leave DN and Password empty." => "För anonym åtkomst, lämna DN och lösenord tomt.", "One Base DN per line" => "Ett Start DN per rad", "You can specify Base DN for users and groups in the Advanced tab" => "Du kan ange start DN för användare och grupper under fliken Avancerat", +"Limit %s access to users meeting these criteria:" => "Begränsa %s tillgång till användare som uppfyller dessa kriterier:", "The filter specifies which LDAP users shall have access to the %s instance." => "Filtret specifierar vilka LDAP-användare som skall ha åtkomst till %s instans", "users found" => "användare funna", "Back" => "Tillbaka", @@ -85,6 +88,8 @@ $TRANSLATIONS = array( "One Group Base DN per line" => "En Grupp start DN per rad", "Group Search Attributes" => "Gruppsökningsattribut", "Group-Member association" => "Attribut för gruppmedlemmar", +"Nested Groups" => "Undergrupper", +"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" => "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DNs.)", "Special Attributes" => "Specialattribut", "Quota Field" => "Kvotfält", "Quota Default" => "Datakvot standard", diff --git a/core/l10n/ja.php b/core/l10n/ja.php index eb3e688257..5f8d6a05ae 100644 --- a/core/l10n/ja.php +++ b/core/l10n/ja.php @@ -1,5 +1,6 @@ "有効期限が切れています。", "Couldn't send mail to following users: %s " => "次のユーザーにメールを送信できませんでした: %s", "Turned on maintenance mode" => "メンテナンスモードがオンになりました", "Turned off maintenance mode" => "メンテナンスモードがオフになりました", @@ -121,6 +122,8 @@ $TRANSLATIONS = array( "To login page" => "ログインページへ戻る", "New password" => "新しいパスワードを入力", "Reset password" => "パスワードをリセット", +"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。", +"For the best results, please consider using a GNU/Linux server instead." => "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。", "Personal" => "個人", "Users" => "ユーザー", "Apps" => "アプリ", diff --git a/core/l10n/tr.php b/core/l10n/tr.php index cb9a98a8fa..9d211bd057 100644 --- a/core/l10n/tr.php +++ b/core/l10n/tr.php @@ -31,7 +31,7 @@ $TRANSLATIONS = array( "December" => "Aralık", "Settings" => "Ayarlar", "Saving..." => "Kaydediliyor...", -"seconds ago" => "saniye önce", +"seconds ago" => "saniyeler önce", "_%n minute ago_::_%n minutes ago_" => array("%n dakika önce","%n dakika önce"), "_%n hour ago_::_%n hours ago_" => array("%n saat önce","%n saat önce"), "today" => "bugün", @@ -51,7 +51,7 @@ $TRANSLATIONS = array( "_{count} file conflict_::_{count} file conflicts_" => array("{count} dosya çakışması","{count} dosya çakışması"), "One file conflict" => "Bir dosya çakışması", "Which files do you want to keep?" => "Hangi dosyaları saklamak istiyorsunuz?", -"If you select both versions, the copied file will have a number added to its name." => "Eğer iki sürümü de seçerseniz, kopyalanan dosya ismine eklenmiş bir sayı içerecektir.", +"If you select both versions, the copied file will have a number added to its name." => "İki sürümü de seçerseniz, kopyalanan dosyanın ismine bir sayı ilave edilecektir.", "Cancel" => "İptal", "Continue" => "Devam et", "(all selected)" => "(tümü seçildi)", diff --git a/l10n/ja/core.po b/l10n/ja/core.po index 3876516000..da079b0afb 100644 --- a/l10n/ja/core.po +++ b/l10n/ja/core.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-22 01:55-0400\n" -"PO-Revision-Date: 2014-03-22 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 09:40+0000\n" +"Last-Translator: tt yn \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,24 +23,24 @@ msgstr "" "Language: ja_JP\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: ajax/share.php:88 +#: ajax/share.php:87 msgid "Expiration date is in the past." -msgstr "" +msgstr "有効期限が切れています。" -#: ajax/share.php:120 ajax/share.php:162 +#: ajax/share.php:119 ajax/share.php:161 #, php-format msgid "Couldn't send mail to following users: %s " msgstr "次のユーザーにメールを送信できませんでした: %s" -#: ajax/update.php:11 +#: ajax/update.php:10 msgid "Turned on maintenance mode" msgstr "メンテナンスモードがオンになりました" -#: ajax/update.php:14 +#: ajax/update.php:13 msgid "Turned off maintenance mode" msgstr "メンテナンスモードがオフになりました" -#: ajax/update.php:17 +#: ajax/update.php:16 msgid "Updated database" msgstr "データベース更新完了" @@ -140,59 +140,59 @@ msgstr "11月" msgid "December" msgstr "12月" -#: js/js.js:458 +#: js/js.js:479 msgid "Settings" msgstr "設定" -#: js/js.js:496 +#: js/js.js:564 msgid "Saving..." msgstr "保存中..." -#: js/js.js:995 +#: js/js.js:1124 msgid "seconds ago" msgstr "数秒前" -#: js/js.js:996 +#: js/js.js:1125 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "%n 分前" -#: js/js.js:997 +#: js/js.js:1126 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "%n 時間前" -#: js/js.js:998 +#: js/js.js:1127 msgid "today" msgstr "今日" -#: js/js.js:999 +#: js/js.js:1128 msgid "yesterday" msgstr "昨日" -#: js/js.js:1000 +#: js/js.js:1129 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "%n日前" -#: js/js.js:1001 +#: js/js.js:1130 msgid "last month" msgstr "1ヶ月前" -#: js/js.js:1002 +#: js/js.js:1131 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "%nヶ月前" -#: js/js.js:1003 +#: js/js.js:1132 msgid "months ago" msgstr "数ヶ月前" -#: js/js.js:1004 +#: js/js.js:1133 msgid "last year" msgstr "1年前" -#: js/js.js:1005 +#: js/js.js:1134 msgid "years ago" msgstr "数年前" @@ -534,17 +534,17 @@ msgstr "新しいパスワードを入力" msgid "Reset password" msgstr "パスワードをリセット" -#: setup/controller.php:138 +#: setup/controller.php:140 #, php-format msgid "" "Mac OS X is not supported and %s will not work properly on this platform. " "Use it at your own risk! " -msgstr "" +msgstr "Mac OS X では、サポートされていません。このOSでは、%sは正常に動作しないかもしれません。ご自身の責任においてご利用ください。" -#: setup/controller.php:142 +#: setup/controller.php:144 msgid "" "For the best results, please consider using a GNU/Linux server instead." -msgstr "" +msgstr "最も良い方法としては、代わりにGNU/Linuxサーバーを利用することをご検討ください。" #: strings.php:5 msgid "Personal" diff --git a/l10n/ja/files_external.po b/l10n/ja/files_external.po index 937aeede4d..4c071d8bff 100644 --- a/l10n/ja/files_external.po +++ b/l10n/ja/files_external.po @@ -5,13 +5,14 @@ # Translators: # plazmism , 2014 # kuromabo , 2014 +# tt yn , 2014 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:30+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 09:50+0000\n" +"Last-Translator: tt yn \n" "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -93,7 +94,7 @@ msgstr "ストレージを追加" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "ユーザーもしくはグループがありません" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/sv/files.po b/l10n/sv/files.po index 59e566d5de..bb8d42d051 100644 --- a/l10n/sv/files.po +++ b/l10n/sv/files.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # DanielMalmgren , 2013 # Daniel Sandman , 2013 # Gunnar Norin , 2013 @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:56+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 18:40+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -42,7 +43,7 @@ msgstr "Filnamn kan inte vara tomt." #: ajax/newfile.php:63 #, php-format msgid "\"%s\" is an invalid file name." -msgstr "" +msgstr "\"%s\" är ett ogiltigt filnamn." #: ajax/newfile.php:69 ajax/newfolder.php:28 js/files.js:105 msgid "" @@ -53,7 +54,7 @@ msgstr "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte #: ajax/newfile.php:76 ajax/newfolder.php:35 ajax/upload.php:145 #: lib/app.php:65 msgid "The target folder has been moved or deleted." -msgstr "" +msgstr "Målmappen har flyttats eller tagits bort." #: ajax/newfile.php:88 ajax/newfolder.php:47 lib/app.php:74 #, php-format @@ -69,7 +70,7 @@ msgstr "Inte en giltig källa" #: ajax/newfile.php:102 msgid "" "Server is not allowed to open URLs, please check the server configuration" -msgstr "" +msgstr "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen" #: ajax/newfile.php:118 #, php-format @@ -157,12 +158,12 @@ msgstr "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller ha #: js/file-upload.js:258 msgid "Total file size {size1} exceeds upload limit {size2}" -msgstr "" +msgstr "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}" #: js/file-upload.js:268 msgid "" "Not enough free space, you are uploading {size1} but only {size2} is left" -msgstr "" +msgstr "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar." #: js/file-upload.js:340 msgid "Upload cancelled." @@ -199,7 +200,7 @@ msgstr "Kunde ej skapa katalog" #: js/file-upload.js:653 msgid "Error fetching URL" -msgstr "" +msgstr "Fel vid hämtning av URL" #: js/fileactions.js:164 msgid "Share" @@ -257,7 +258,7 @@ msgstr[1] "Laddar upp %n filer" #: js/files.js:96 msgid "\"{name}\" is an invalid file name." -msgstr "" +msgstr "\"{name}\" är ett ogiltligt filnamn." #: js/files.js:117 msgid "Your storage is full, files can not be updated or synced anymore!" @@ -355,7 +356,7 @@ msgstr "Ny" #: templates/index.php:8 msgid "New text file" -msgstr "" +msgstr "Ny textfil" #: templates/index.php:9 msgid "Text file" diff --git a/l10n/sv/files_encryption.po b/l10n/sv/files_encryption.po index ef12db2aaf..eb0ddaf593 100644 --- a/l10n/sv/files_encryption.po +++ b/l10n/sv/files_encryption.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # Daniel Sandman , 2013 # Gustav Smedberg , 2013 # medialabs, 2013 @@ -14,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-11 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 18:30+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -104,11 +105,11 @@ msgstr "Följande användare har inte aktiverat kryptering:" #: js/detect-migration.js:21 msgid "Initial encryption started... This can take some time. Please wait." -msgstr "" +msgstr "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta." #: js/detect-migration.js:25 msgid "Initial encryption running... Please try again later." -msgstr "" +msgstr "Initiala krypteringen körs... Var god försök igen senare." #: templates/invalid_private_key.php:8 msgid "Go directly to your " @@ -118,91 +119,91 @@ msgstr "Gå direkt till din" msgid "personal settings" msgstr "personliga inställningar" -#: templates/settings-admin.php:4 templates/settings-personal.php:3 +#: templates/settings-admin.php:2 templates/settings-personal.php:2 msgid "Encryption" msgstr "Kryptering" -#: templates/settings-admin.php:7 +#: templates/settings-admin.php:5 msgid "" "Enable recovery key (allow to recover users files in case of password loss):" msgstr "Aktivera återställningsnyckel (för att kunna återfå användarens filer vid glömt eller förlorat lösenord):" -#: templates/settings-admin.php:11 +#: templates/settings-admin.php:9 msgid "Recovery key password" msgstr "Lösenord för återställningsnyckel" -#: templates/settings-admin.php:14 +#: templates/settings-admin.php:12 msgid "Repeat Recovery key password" msgstr "Upprepa återställningsnyckelns lösenord" -#: templates/settings-admin.php:21 templates/settings-personal.php:51 +#: templates/settings-admin.php:19 templates/settings-personal.php:50 msgid "Enabled" msgstr "Aktiverad" -#: templates/settings-admin.php:29 templates/settings-personal.php:59 +#: templates/settings-admin.php:27 templates/settings-personal.php:58 msgid "Disabled" msgstr "Inaktiverad" -#: templates/settings-admin.php:34 +#: templates/settings-admin.php:32 msgid "Change recovery key password:" msgstr "Ändra lösenord för återställningsnyckel:" -#: templates/settings-admin.php:40 +#: templates/settings-admin.php:38 msgid "Old Recovery key password" msgstr "Gammalt lösenord för återställningsnyckel" -#: templates/settings-admin.php:47 +#: templates/settings-admin.php:45 msgid "New Recovery key password" msgstr "Nytt lösenord för återställningsnyckel" -#: templates/settings-admin.php:53 +#: templates/settings-admin.php:51 msgid "Repeat New Recovery key password" msgstr "Upprepa lösenord för ny återställningsnyckel" -#: templates/settings-admin.php:58 +#: templates/settings-admin.php:56 msgid "Change Password" msgstr "Byt lösenord" -#: templates/settings-personal.php:9 +#: templates/settings-personal.php:8 msgid "Your private key password no longer match your log-in password:" msgstr "Lösenordet till din privata nyckel stämmer inte längre överens med ditt inloggningslösenord:" -#: templates/settings-personal.php:12 +#: templates/settings-personal.php:11 msgid "Set your old private key password to your current log-in password." msgstr "Använd din gamla privata nyckels lösenord som ditt aktuella inloggningslösenord." -#: templates/settings-personal.php:14 +#: templates/settings-personal.php:13 msgid "" " If you don't remember your old password you can ask your administrator to " "recover your files." msgstr "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer." -#: templates/settings-personal.php:22 +#: templates/settings-personal.php:21 msgid "Old log-in password" msgstr "Gammalt inloggningslösenord" -#: templates/settings-personal.php:28 +#: templates/settings-personal.php:27 msgid "Current log-in password" msgstr "Nuvarande inloggningslösenord" -#: templates/settings-personal.php:33 +#: templates/settings-personal.php:32 msgid "Update Private Key Password" msgstr "Uppdatera lösenordet för din privata nyckel" -#: templates/settings-personal.php:42 +#: templates/settings-personal.php:41 msgid "Enable password recovery:" msgstr "Aktivera lösenordsåterställning" -#: templates/settings-personal.php:44 +#: templates/settings-personal.php:43 msgid "" "Enabling this option will allow you to reobtain access to your encrypted " "files in case of password loss" msgstr "Genom att aktivera detta alternativ kommer du kunna återfå tillgång till dina krypterade filer om du skulle förlora/glömma ditt lösenord" -#: templates/settings-personal.php:60 +#: templates/settings-personal.php:59 msgid "File recovery settings updated" msgstr "Inställningarna för filåterställning har uppdaterats" -#: templates/settings-personal.php:61 +#: templates/settings-personal.php:60 msgid "Could not update file recovery" msgstr "Kunde inte uppdatera filåterställning" diff --git a/l10n/sv/user_ldap.po b/l10n/sv/user_ldap.po index 1b9e5d7a42..82b52acf7d 100644 --- a/l10n/sv/user_ldap.po +++ b/l10n/sv/user_ldap.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # DanielMalmgren , 2013 # Gustav Smedberg , 2013 # Jan Busk, 2013 @@ -15,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-27 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 06:01+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 21:00+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -171,7 +172,7 @@ msgstr "Hjälp" #: templates/part.wizard-groupfilter.php:4 #, php-format msgid "Groups meeting these criteria are available in %s:" -msgstr "" +msgstr "Grupper som uppfyller dessa kriterier finns i %s:" #: templates/part.wizard-groupfilter.php:8 #: templates/part.wizard-userfilter.php:8 @@ -207,7 +208,7 @@ msgstr "grupper hittade" #: templates/part.wizard-loginfilter.php:4 msgid "Users login with this attribute:" -msgstr "" +msgstr "Användare loggar in med detta attribut:" #: templates/part.wizard-loginfilter.php:8 msgid "LDAP Username:" @@ -275,7 +276,7 @@ msgstr "Du kan ange start DN för användare och grupper under fliken Avancerat" #: templates/part.wizard-userfilter.php:4 #, php-format msgid "Limit %s access to users meeting these criteria:" -msgstr "" +msgstr "Begränsa %s tillgång till användare som uppfyller dessa kriterier:" #: templates/part.wizard-userfilter.php:31 #, php-format @@ -419,13 +420,13 @@ msgstr "Attribut för gruppmedlemmar" #: templates/settings.php:39 msgid "Nested Groups" -msgstr "" +msgstr "Undergrupper" #: templates/settings.php:39 msgid "" "When switched on, groups that contain groups are supported. (Only works if " "the group member attribute contains DNs.)" -msgstr "" +msgstr "När den är påslagen, stöds grupper som innehåller grupper. (Fungerar endast om gruppmedlemmens attribut innehåller DNs.)" #: templates/settings.php:41 msgid "Special Attributes" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index 73ba9af571..e397522432 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index d886b45f28..bde7c871d2 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index a0d7379ced..d4eff40b75 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 7da098dc9b..6c600c62e4 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index b125954183..d8f0b9897e 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 7d32701ec6..5f8cdde491 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 1580e94cd5..8a287d91d9 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index 328e080722..df11086bc7 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot index 47c2ac04ea..6a5dace8d9 100644 --- a/l10n/templates/private.pot +++ b/l10n/templates/private.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index da74353ef1..d7c6e044a2 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index adaf525a10..a2a0f85851 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index 6e980ca8fb..f1653c13c4 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-05 01:55-0400\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/tr/core.po b/l10n/tr/core.po index 3257ce60c1..9853fc1dab 100644 --- a/l10n/tr/core.po +++ b/l10n/tr/core.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-03 01:55-0400\n" -"PO-Revision-Date: 2014-04-02 13:00+0000\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 00:10+0000\n" "Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -138,63 +138,63 @@ msgstr "Kasım" msgid "December" msgstr "Aralık" -#: js/js.js:458 +#: js/js.js:479 msgid "Settings" msgstr "Ayarlar" -#: js/js.js:543 +#: js/js.js:564 msgid "Saving..." msgstr "Kaydediliyor..." -#: js/js.js:1103 +#: js/js.js:1124 msgid "seconds ago" -msgstr "saniye önce" +msgstr "saniyeler önce" -#: js/js.js:1104 +#: js/js.js:1125 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "%n dakika önce" msgstr[1] "%n dakika önce" -#: js/js.js:1105 +#: js/js.js:1126 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "%n saat önce" msgstr[1] "%n saat önce" -#: js/js.js:1106 +#: js/js.js:1127 msgid "today" msgstr "bugün" -#: js/js.js:1107 +#: js/js.js:1128 msgid "yesterday" msgstr "dün" -#: js/js.js:1108 +#: js/js.js:1129 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "%n gün önce" msgstr[1] "%n gün önce" -#: js/js.js:1109 +#: js/js.js:1130 msgid "last month" msgstr "geçen ay" -#: js/js.js:1110 +#: js/js.js:1131 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "%n ay önce" msgstr[1] "%n ay önce" -#: js/js.js:1111 +#: js/js.js:1132 msgid "months ago" msgstr "ay önce" -#: js/js.js:1112 +#: js/js.js:1133 msgid "last year" msgstr "geçen yıl" -#: js/js.js:1113 +#: js/js.js:1134 msgid "years ago" msgstr "yıl önce" @@ -240,7 +240,7 @@ msgstr "Hangi dosyaları saklamak istiyorsunuz?" msgid "" "If you select both versions, the copied file will have a number added to its" " name." -msgstr "Eğer iki sürümü de seçerseniz, kopyalanan dosya ismine eklenmiş bir sayı içerecektir." +msgstr "İki sürümü de seçerseniz, kopyalanan dosyanın ismine bir sayı ilave edilecektir." #: js/oc-dialogs.js:376 msgid "Cancel" diff --git a/l10n/tr/files.po b/l10n/tr/files.po index c457d0acab..18b271aa1a 100644 --- a/l10n/tr/files.po +++ b/l10n/tr/files.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:56+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 14:30+0000\n" +"Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -302,7 +302,7 @@ msgstr "Değiştirilme" #: lib/app.php:60 msgid "Invalid folder name. Usage of 'Shared' is reserved." -msgstr "Geçersiz dizin adı. 'Shared' ismi ayrılmıştır." +msgstr "Geçersiz klasör adı. 'Shared' ismi ayrılmıştır." #: lib/app.php:93 #, php-format diff --git a/l10n/tr/files_external.po b/l10n/tr/files_external.po index 42d161b5c5..c7bb36b8d8 100644 --- a/l10n/tr/files_external.po +++ b/l10n/tr/files_external.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:30+0000\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-05 14:30+0000\n" "Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -60,7 +60,7 @@ msgid "" "Warning: The Curl support in PHP is not enabled or installed. " "Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask " "your system administrator to install it." -msgstr "Uyarı: PHP içerisinde Curl desteği etkin veya yüklü değil. OwnCloud / WebDAV veya GoogleDrive bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinizde danışın." +msgstr "Uyarı: PHP içerisinde Curl desteği etkin veya yüklü değil. ownCloud / WebDAV veya GoogleDrive bağlama işlemi mümkün olmadı. Lütfen kurulumu için sistem yöneticinizde danışın." #: templates/settings.php:2 msgid "External Storage" @@ -68,7 +68,7 @@ msgstr "Harici Depolama" #: templates/settings.php:8 templates/settings.php:27 msgid "Folder name" -msgstr "Dizin ismi" +msgstr "Klasör ismi" #: templates/settings.php:9 msgid "External storage" diff --git a/l10n/tr/lib.po b/l10n/tr/lib.po index 1f4e0197e5..95bb4b68b5 100644 --- a/l10n/tr/lib.po +++ b/l10n/tr/lib.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-02 01:55-0400\n" -"PO-Revision-Date: 2014-04-01 19:31+0000\n" +"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 00:10+0000\n" "Last-Translator: volkangezer \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n" "MIME-Version: 1.0\n" @@ -282,8 +282,8 @@ msgstr "Web sunucunuz dosya aktarımı için düzgün bir şekilde yapılandır msgid "Please double check the installation guides." msgstr "Lütfen kurulum kılavuzlarını iki kez kontrol edin." -#: private/share/mailnotifications.php:73 -#: private/share/mailnotifications.php:119 +#: private/share/mailnotifications.php:72 +#: private/share/mailnotifications.php:118 #, php-format msgid "%s shared »%s« with you" msgstr "%s sizinle »%s« paylaşımında bulundu" @@ -295,7 +295,7 @@ msgstr "\"%s\" kategorisi bulunamadı" #: private/template/functions.php:133 msgid "seconds ago" -msgstr "saniye önce" +msgstr "saniyeler önce" #: private/template/functions.php:134 msgid "%n minute ago" diff --git a/lib/l10n/tr.php b/lib/l10n/tr.php index 0473c2232d..80f1ade995 100644 --- a/lib/l10n/tr.php +++ b/lib/l10n/tr.php @@ -57,7 +57,7 @@ $TRANSLATIONS = array( "Please double check the installation guides." => "Lütfen kurulum kılavuzlarını iki kez kontrol edin.", "%s shared »%s« with you" => "%s sizinle »%s« paylaşımında bulundu", "Could not find category \"%s\"" => "\"%s\" kategorisi bulunamadı", -"seconds ago" => "saniye önce", +"seconds ago" => "saniyeler önce", "_%n minute ago_::_%n minutes ago_" => array("","%n dakika önce"), "_%n hour ago_::_%n hours ago_" => array("","%n saat önce"), "today" => "bugün", From 7f553ee26c3327040c3d87912c0302ea80832a9b Mon Sep 17 00:00:00 2001 From: Volkan Gezer Date: Sun, 6 Apr 2014 13:58:06 +0200 Subject: [PATCH 91/94] Update README.md Change version. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f76c1a477..bb11039f75 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/bad Quality: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/) ### Installation instructions -http://doc.owncloud.org/server/5.0/developer_manual/app/gettingstarted.html +http://doc.owncloud.org/server/6.0/developer_manual/app/gettingstarted.html ### Contribution Guidelines http://owncloud.org/dev/contribute/ From 9043fdd772e1b3427356d2d9cd591a9b251c9b05 Mon Sep 17 00:00:00 2001 From: Volkan Gezer Date: Sun, 6 Apr 2014 13:58:44 +0200 Subject: [PATCH 92/94] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb11039f75..3f76c1a477 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/bad Quality: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/) ### Installation instructions -http://doc.owncloud.org/server/6.0/developer_manual/app/gettingstarted.html +http://doc.owncloud.org/server/5.0/developer_manual/app/gettingstarted.html ### Contribution Guidelines http://owncloud.org/dev/contribute/ From d962f18e3f82ac1e65a67cee1054c02aafb7a388 Mon Sep 17 00:00:00 2001 From: Volkan Gezer Date: Sun, 6 Apr 2014 14:01:02 +0200 Subject: [PATCH 93/94] Update README.md Update to the correct link (version 6.0) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f76c1a477..032a7e987f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/bad Quality: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/) ### Installation instructions -http://doc.owncloud.org/server/5.0/developer_manual/app/gettingstarted.html +http://doc.owncloud.org/server/6.0/developer_manual/app/index.html ### Contribution Guidelines http://owncloud.org/dev/contribute/ From e295d48fd43e0aab8fe4120d1b4a302edab343b2 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 7 Apr 2014 01:56:11 -0400 Subject: [PATCH 94/94] [tx-robot] updated from transifex --- apps/files_external/l10n/fr.php | 2 + apps/files_external/l10n/nb_NO.php | 1 + apps/files_external/l10n/sv.php | 4 + apps/files_sharing/l10n/sv.php | 2 + core/l10n/fr.php | 3 + core/l10n/nb_NO.php | 5 + core/l10n/sv.php | 15 +++ l10n/fr/core.po | 52 ++++---- l10n/fr/files_external.po | 10 +- l10n/fr/settings.po | 96 +++++++------- l10n/nb_NO/core.po | 57 ++++----- l10n/nb_NO/files_external.po | 6 +- l10n/nb_NO/settings.po | 116 ++++++++--------- l10n/sv/core.po | 77 ++++++------ l10n/sv/files_external.po | 15 +-- l10n/sv/files_sharing.po | 13 +- l10n/sv/lib.po | 55 ++++---- l10n/sv/settings.po | 187 ++++++++++++++-------------- l10n/templates/core.pot | 2 +- l10n/templates/files.pot | 2 +- l10n/templates/files_encryption.pot | 2 +- l10n/templates/files_external.pot | 2 +- l10n/templates/files_sharing.pot | 2 +- l10n/templates/files_trashbin.pot | 2 +- l10n/templates/files_versions.pot | 2 +- l10n/templates/lib.pot | 2 +- l10n/templates/private.pot | 2 +- l10n/templates/settings.pot | 2 +- l10n/templates/user_ldap.pot | 2 +- l10n/templates/user_webdavauth.pot | 2 +- lib/l10n/sv.php | 6 + settings/l10n/fr.php | 3 + settings/l10n/nb_NO.php | 13 ++ settings/l10n/sv.php | 48 +++++++ 34 files changed, 459 insertions(+), 351 deletions(-) diff --git a/apps/files_external/l10n/fr.php b/apps/files_external/l10n/fr.php index d9e2dbfcae..1a306113f4 100644 --- a/apps/files_external/l10n/fr.php +++ b/apps/files_external/l10n/fr.php @@ -14,7 +14,9 @@ $TRANSLATIONS = array( "External storage" => "Stockage externe", "Configuration" => "Configuration", "Options" => "Options", +"Available for" => "Disponible pour", "Add storage" => "Ajouter un support de stockage", +"No user or group" => "Aucun utilisateur ou groupe", "All Users" => "Tous les utilisateurs", "Groups" => "Groupes", "Users" => "Utilisateurs", diff --git a/apps/files_external/l10n/nb_NO.php b/apps/files_external/l10n/nb_NO.php index 3426e5589d..d8149520ea 100644 --- a/apps/files_external/l10n/nb_NO.php +++ b/apps/files_external/l10n/nb_NO.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Grant access" => "Gi tilgang", "Please provide a valid Dropbox app key and secret." => "Vær vennlig å oppgi gyldig Dropbox appnøkkel og hemmelighet.", "Error configuring Google Drive storage" => "Feil med konfigurering av Google Drive", +"Saved" => "Lagret", "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Advarsel: \"smbclient\" er ikke installert. Kan ikke montere CIFS/SMB mapper. Ta kontakt med din systemadministrator for å installere det.", "Warning: 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." => "Advarsel: FTP støtte i PHP er ikke slått på eller innstallert. Kan ikke montere FTP mapper. Ta kontakt med din systemadministrator for å innstallere det.", "Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Advarsel: Curl støtte i PHP er ikke aktivert eller innstallert. Kan ikke montere owncloud/WebDAV eller Googledrive. Ta kontakt med din systemadministrator for å innstallerer det.", diff --git a/apps/files_external/l10n/sv.php b/apps/files_external/l10n/sv.php index 0a50fd2cc7..e2a4a0a806 100644 --- a/apps/files_external/l10n/sv.php +++ b/apps/files_external/l10n/sv.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Grant access" => "Bevilja åtkomst", "Please provide a valid Dropbox app key and secret." => "Ange en giltig Dropbox nyckel och hemlighet.", "Error configuring Google Drive storage" => "Fel vid konfigurering av Google Drive", +"Saved" => "Sparad", "Warning: \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "Varning: \"smb-klienten\" är inte installerad. Montering av CIFS/SMB delningar är inte möjligt. Kontakta din systemadministratör för att få den installerad.", "Warning: 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." => "Varning: Stöd för FTP i PHP är inte aktiverat eller installerat. Montering av FTP-delningar är inte möjligt. Kontakta din systemadministratör för att få det installerat.", "Warning: The Curl support in PHP is not enabled or installed. Mounting of ownCloud / WebDAV or GoogleDrive is not possible. Please ask your system administrator to install it." => "Varning: Curl-stöd i PHP är inte aktiverat eller installerat. Montering av ownCloud / WebDAV eller GoogleDrive är inte möjligt. Vänligen be din administratör att installera det.", @@ -13,12 +14,15 @@ $TRANSLATIONS = array( "External storage" => "Extern lagring", "Configuration" => "Konfiguration", "Options" => "Alternativ", +"Available for" => "Tillgänglig för", "Add storage" => "Lägg till lagring", +"No user or group" => "Ingen användare eller grupp", "All Users" => "Alla användare", "Groups" => "Grupper", "Users" => "Användare", "Delete" => "Radera", "Enable User External Storage" => "Aktivera extern lagring för användare", +"Allow users to mount the following external storage" => "Tillåt användare att montera följande extern lagring", "SSL root certificates" => "SSL rotcertifikat", "Import Root Certificate" => "Importera rotcertifikat" ); diff --git a/apps/files_sharing/l10n/sv.php b/apps/files_sharing/l10n/sv.php index 2d037f9186..94b7edf697 100644 --- a/apps/files_sharing/l10n/sv.php +++ b/apps/files_sharing/l10n/sv.php @@ -10,6 +10,8 @@ $TRANSLATIONS = array( "the link expired" => "giltighet för länken har gått ut", "sharing is disabled" => "delning är inaktiverat", "For more info, please ask the person who sent this link." => "För mer information, kontakta den person som skickade den här länken.", +"shared by %s" => "delad av %s", +"Download %s" => "Ladda ner %s", "Direct link" => "Direkt länk" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/core/l10n/fr.php b/core/l10n/fr.php index 3754e8c9e0..f5a1ecd42f 100644 --- a/core/l10n/fr.php +++ b/core/l10n/fr.php @@ -1,5 +1,6 @@ "La date d'expiration est dans le passé.", "Couldn't send mail to following users: %s " => "Impossible d'envoyer un mail aux utilisateurs suivant : %s", "Turned on maintenance mode" => "Basculé en mode maintenance", "Turned off maintenance mode" => "Basculé en mode production (non maintenance)", @@ -121,6 +122,8 @@ $TRANSLATIONS = array( "To login page" => "Retour à la page d'authentification", "New password" => "Nouveau mot de passe", "Reset password" => "Réinitialiser le mot de passe", +"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X n'est pas supporté et %s ne fonctionnera pas correctement sur cette plateforme. Son utilisation est à vos risques et périls !", +"For the best results, please consider using a GNU/Linux server instead." => "Pour des résultats meilleurs encore, pensez à utiliser un serveur GNU/Linux à la place.", "Personal" => "Personnel", "Users" => "Utilisateurs", "Apps" => "Applications", diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php index 43141bc431..c47599f5a1 100644 --- a/core/l10n/nb_NO.php +++ b/core/l10n/nb_NO.php @@ -56,6 +56,10 @@ $TRANSLATIONS = array( "(all selected)" => "(alle valgt)", "({count} selected)" => "({count} valgt)", "Error loading file exists template" => "Feil ved lasting av \"filen eksisterer\"-mal", +"Very weak password" => "Veldig svakt passord", +"Weak password" => "Svakt passord", +"Good password" => "Bra passord", +"Strong password" => "Sterkt passord", "Shared" => "Delt", "Share" => "Del", "Error" => "Feil", @@ -140,6 +144,7 @@ $TRANSLATIONS = array( "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.", "For information how to properly configure your server, please see the documentation." => "For informasjon om hvordan du setter opp serveren din riktig, se dokumentasjonen.", "Create an admin account" => "opprett en administrator-konto", +"Storage & database" => "Lagring og database", "Data folder" => "Datamappe", "Configure the database" => "Konfigurer databasen", "will be used" => "vil bli brukt", diff --git a/core/l10n/sv.php b/core/l10n/sv.php index c4e92e6217..7e72039df8 100644 --- a/core/l10n/sv.php +++ b/core/l10n/sv.php @@ -1,5 +1,6 @@ "Utgångsdatumet är i det förflutna.", "Couldn't send mail to following users: %s " => "Gick inte att skicka e-post till följande användare: %s", "Turned on maintenance mode" => "Aktiverade underhållsläge", "Turned off maintenance mode" => "Deaktiverade underhållsläge", @@ -56,6 +57,11 @@ $TRANSLATIONS = array( "(all selected)" => "(Alla valda)", "({count} selected)" => "({count} valda)", "Error loading file exists template" => "Fel uppstod filmall existerar", +"Very weak password" => "Väldigt svagt lösenord", +"Weak password" => "Svagt lösenord", +"So-so password" => "Okej lösenord", +"Good password" => "Bra lösenord", +"Strong password" => "Starkt lösenord", "Shared" => "Delad", "Share" => "Dela", "Error" => "Fel", @@ -99,9 +105,11 @@ $TRANSLATIONS = array( "Edit tags" => "Editera taggar", "Error loading dialog template: {error}" => "Fel under laddning utav dialog mall: {fel}", "No tags selected for deletion." => "Inga taggar valda för borttagning.", +"Please reload the page." => "Vänligen ladda om sidan.", "The update was unsuccessful. Please report this issue to the ownCloud community." => "Uppdateringen misslyckades. Rapportera detta problem till ownCloud Community.", "The update was successful. Redirecting you to ownCloud now." => "Uppdateringen lyckades. Du omdirigeras nu till OwnCloud.", "%s password reset" => "%s återställ lösenord", +"A problem has occurred whilst sending the email, please contact your administrator." => "Ett problem har uppstått under tiden e-post sändes, vänligen kontakta din administratör.", "Use the following link to reset your password: {link}" => "Använd följande länk för att återställa lösenordet: {link}", "The link to reset your password has been sent to your email.
    If you do not receive it within a reasonable amount of time, check your spam/junk folders.
    If it is not there ask your local administrator ." => "Länken för att återställa ditt lösenorden har skickats till din e-postadress
    Om du inte har erhållit meddelandet inom kort, vänligen kontrollera din skräppost-mapp
    Om den inte finns där, vänligen kontakta din administratör.", "Request failed!
    Did you make sure your email/username was right?" => "Begäran misslyckades!
    Är du helt säker på att din e-postadress/användarnamn är korrekt?", @@ -114,6 +122,8 @@ $TRANSLATIONS = array( "To login page" => "Till logginsidan", "New password" => "Nytt lösenord", "Reset password" => "Återställ lösenordet", +"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " => "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!", +"For the best results, please consider using a GNU/Linux server instead." => "För bästa resultat, överväg att använda en GNU/Linux server istället.", "Personal" => "Personligt", "Users" => "Användare", "Apps" => "Program", @@ -139,6 +149,7 @@ $TRANSLATIONS = array( "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.", "For information how to properly configure your server, please see the documentation." => "För information hur du korrekt konfigurerar din servern, se ownCloud dokumentationen.", "Create an admin account" => "Skapa ett administratörskonto", +"Storage & database" => "Lagring & databas", "Data folder" => "Datamapp", "Configure the database" => "Konfigurera databasen", "will be used" => "kommer att användas", @@ -149,6 +160,7 @@ $TRANSLATIONS = array( "Database host" => "Databasserver", "Finish setup" => "Avsluta installation", "Finishing …" => "Avslutar ...", +"This application requires JavaScript to be enabled for correct operation. Please enable JavaScript and re-load this interface." => "Denna applikation kräver JavaScript aktiverat för att fungera korrekt. Vänligen aktivera JavaScript och ladda om gränssnittet.", "%s is available. Get more information on how to update." => "%s är tillgänglig. Få mer information om hur du går tillväga för att uppdatera.", "Log out" => "Logga ut", "Automatic logon rejected!" => "Automatisk inloggning inte tillåten!", @@ -160,6 +172,9 @@ $TRANSLATIONS = array( "remember" => "kom ihåg", "Log in" => "Logga in", "Alternative Logins" => "Alternativa inloggningar", +"Hey there,

    just letting you know that %s shared %s with you.
    View it!

    " => "Hej där,

    ville bara informera dig om att %s delade %s med dig.
    Visa den!

    ", +"This ownCloud instance is currently in single user mode." => "Denna ownCloud instans är för närvarande i enanvändarläge", +"This means only administrators can use the instance." => "Detta betyder att endast administartörer kan använda instansen.", "Contact your system administrator if this message persists or appeared unexpectedly." => "Hör av dig till din system administratör ifall detta meddelande fortsätter eller visas oväntat.", "Thank you for your patience." => "Tack för ditt tålamod.", "Updating ownCloud to version %s, this may take a while." => "Uppdaterar ownCloud till version %s, detta kan ta en stund.", diff --git a/l10n/fr/core.po b/l10n/fr/core.po index ac43181e22..874c40d0d4 100644 --- a/l10n/fr/core.po +++ b/l10n/fr/core.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-22 01:55-0400\n" -"PO-Revision-Date: 2014-03-22 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 19:40+0000\n" +"Last-Translator: Christophe Lherieau \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,24 +25,24 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ajax/share.php:88 +#: ajax/share.php:87 msgid "Expiration date is in the past." -msgstr "" +msgstr "La date d'expiration est dans le passé." -#: ajax/share.php:120 ajax/share.php:162 +#: ajax/share.php:119 ajax/share.php:161 #, php-format msgid "Couldn't send mail to following users: %s " msgstr "Impossible d'envoyer un mail aux utilisateurs suivant : %s" -#: ajax/update.php:11 +#: ajax/update.php:10 msgid "Turned on maintenance mode" msgstr "Basculé en mode maintenance" -#: ajax/update.php:14 +#: ajax/update.php:13 msgid "Turned off maintenance mode" msgstr "Basculé en mode production (non maintenance)" -#: ajax/update.php:17 +#: ajax/update.php:16 msgid "Updated database" msgstr "Base de données mise à jour" @@ -142,63 +142,63 @@ msgstr "novembre" msgid "December" msgstr "décembre" -#: js/js.js:458 +#: js/js.js:479 msgid "Settings" msgstr "Paramètres" -#: js/js.js:496 +#: js/js.js:564 msgid "Saving..." msgstr "Enregistrement..." -#: js/js.js:995 +#: js/js.js:1124 msgid "seconds ago" msgstr "il y a quelques secondes" -#: js/js.js:996 +#: js/js.js:1125 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "il y a %n minute" msgstr[1] "il y a %n minutes" -#: js/js.js:997 +#: js/js.js:1126 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "Il y a %n heure" msgstr[1] "Il y a %n heures" -#: js/js.js:998 +#: js/js.js:1127 msgid "today" msgstr "aujourd'hui" -#: js/js.js:999 +#: js/js.js:1128 msgid "yesterday" msgstr "hier" -#: js/js.js:1000 +#: js/js.js:1129 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "il y a %n jour" msgstr[1] "il y a %n jours" -#: js/js.js:1001 +#: js/js.js:1130 msgid "last month" msgstr "le mois dernier" -#: js/js.js:1002 +#: js/js.js:1131 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "Il y a %n mois" msgstr[1] "Il y a %n mois" -#: js/js.js:1003 +#: js/js.js:1132 msgid "months ago" msgstr "il y a plusieurs mois" -#: js/js.js:1004 +#: js/js.js:1133 msgid "last year" msgstr "l'année dernière" -#: js/js.js:1005 +#: js/js.js:1134 msgid "years ago" msgstr "il y a plusieurs années" @@ -541,17 +541,17 @@ msgstr "Nouveau mot de passe" msgid "Reset password" msgstr "Réinitialiser le mot de passe" -#: setup/controller.php:138 +#: setup/controller.php:140 #, php-format msgid "" "Mac OS X is not supported and %s will not work properly on this platform. " "Use it at your own risk! " -msgstr "" +msgstr "Mac OS X n'est pas supporté et %s ne fonctionnera pas correctement sur cette plateforme. Son utilisation est à vos risques et périls !" -#: setup/controller.php:142 +#: setup/controller.php:144 msgid "" "For the best results, please consider using a GNU/Linux server instead." -msgstr "" +msgstr "Pour des résultats meilleurs encore, pensez à utiliser un serveur GNU/Linux à la place." #: strings.php:5 msgid "Personal" diff --git a/l10n/fr/files_external.po b/l10n/fr/files_external.po index 5cc86b42bd..76f1bf6e84 100644 --- a/l10n/fr/files_external.po +++ b/l10n/fr/files_external.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:30+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 20:00+0000\n" +"Last-Translator: Christophe Lherieau \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -84,7 +84,7 @@ msgstr "Options" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Disponible pour" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +92,7 @@ msgstr "Ajouter un support de stockage" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Aucun utilisateur ou groupe" #: templates/settings.php:95 msgid "All Users" diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po index 1b65d2d0a4..47f6fb2324 100644 --- a/l10n/fr/settings.po +++ b/l10n/fr/settings.po @@ -18,9 +18,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-26 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 20:00+0000\n" +"Last-Translator: Christophe Lherieau \n" "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -62,7 +62,7 @@ msgstr "Vous devez configurer votre e-mail d'utilisateur avant de pouvoir envoye msgid "Send mode" msgstr "Mode d'envoi" -#: admin/controller.php:118 templates/admin.php:312 templates/personal.php:159 +#: admin/controller.php:118 templates/admin.php:312 templates/personal.php:149 msgid "Encryption" msgstr "Chiffrement" @@ -75,7 +75,7 @@ msgid "Unable to load list from App Store" msgstr "Impossible de charger la liste depuis l'App Store" #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17 -#: ajax/togglegroups.php:20 changepassword/controller.php:55 +#: ajax/togglegroups.php:20 changepassword/controller.php:49 msgid "Authentication error" msgstr "Erreur d'authentification" @@ -137,32 +137,32 @@ msgstr "Impossible de supprimer l'utilisateur du groupe %s" msgid "Couldn't update app." msgstr "Impossible de mettre à jour l'application" -#: changepassword/controller.php:20 +#: changepassword/controller.php:17 msgid "Wrong password" msgstr "Mot de passe incorrect" -#: changepassword/controller.php:42 +#: changepassword/controller.php:36 msgid "No user supplied" msgstr "Aucun utilisateur fourni" -#: changepassword/controller.php:74 +#: changepassword/controller.php:68 msgid "" "Please provide an admin recovery password, otherwise all user data will be " "lost" msgstr "Veuillez fournir un mot de passe administrateur de récupération de données, sinon toutes les données de l'utilisateur seront perdues" -#: changepassword/controller.php:79 +#: changepassword/controller.php:73 msgid "" "Wrong admin recovery password. Please check the password and try again." msgstr "Mot de passe administrateur de récupération de données invalide. Veuillez vérifier le mot de passe et essayer à nouveau." -#: changepassword/controller.php:87 +#: changepassword/controller.php:81 msgid "" "Back-end doesn't support password change, but the users encryption key was " "successfully updated." msgstr "L'infrastructure d'arrière-plan ne supporte pas la modification de mot de passe, mais la clef de chiffrement des utilisateurs a été mise à jour avec succès." -#: changepassword/controller.php:92 changepassword/controller.php:103 +#: changepassword/controller.php:86 changepassword/controller.php:97 msgid "Unable to change password" msgstr "Impossible de modifier le mot de passe" @@ -214,7 +214,7 @@ msgstr "Erreur lors de la mise à jour de l'application" msgid "Error" msgstr "Erreur" -#: js/apps.js:153 templates/apps.php:54 +#: js/apps.js:153 templates/apps.php:55 msgid "Update" msgstr "Mettre à jour" @@ -295,7 +295,7 @@ msgstr "Un mot de passe valide doit être saisi" msgid "Warning: Home directory for user \"{user}\" already exists" msgstr "Attention : Le dossier Home pour l'utilisateur \"{user}\" existe déjà" -#: personal.php:49 personal.php:50 +#: personal.php:48 personal.php:49 msgid "__language_name__" msgstr "Français" @@ -440,18 +440,18 @@ msgstr "Cron" #: templates/admin.php:167 #, php-format msgid "Last cron was executed at %s." -msgstr "" +msgstr "Le dernier cron s'est exécuté à %s." #: templates/admin.php:170 #, php-format msgid "" "Last cron was executed at %s. This is more than an hour ago, something seems" " wrong." -msgstr "" +msgstr "Le dernier cron s'est exécuté à %s. Cela fait plus d'une heure, quelque chose a du mal se passer." #: templates/admin.php:174 msgid "Cron was not executed yet!" -msgstr "" +msgstr "Le cron n'a pas encore été exécuté !" #: templates/admin.php:184 msgid "Execute one task with each page loaded" @@ -600,11 +600,11 @@ msgstr "Plus" msgid "Less" msgstr "Moins" -#: templates/admin.php:416 templates/personal.php:181 +#: templates/admin.php:416 templates/personal.php:171 msgid "Version" msgstr "Version" -#: templates/admin.php:420 templates/personal.php:184 +#: templates/admin.php:420 templates/personal.php:174 msgid "" "Developed by the ownCloud community, the -licensed by " msgstr "Distribué sous licence , par " @@ -675,108 +675,108 @@ msgstr "Revoir le premier lancement de l'installeur" msgid "You have used %s of the available %s" msgstr "Vous avez utilisé %s des %s disponibles" -#: templates/personal.php:39 templates/users.php:21 templates/users.php:87 +#: templates/personal.php:38 templates/users.php:21 templates/users.php:87 msgid "Password" msgstr "Mot de passe" -#: templates/personal.php:40 +#: templates/personal.php:39 msgid "Your password was changed" msgstr "Votre mot de passe a été changé" -#: templates/personal.php:41 +#: templates/personal.php:40 msgid "Unable to change your password" msgstr "Impossible de changer votre mot de passe" -#: templates/personal.php:43 +#: templates/personal.php:42 msgid "Current password" msgstr "Mot de passe actuel" -#: templates/personal.php:46 +#: templates/personal.php:45 msgid "New password" msgstr "Nouveau mot de passe" -#: templates/personal.php:50 +#: templates/personal.php:49 msgid "Change password" msgstr "Changer de mot de passe" -#: templates/personal.php:64 templates/users.php:86 +#: templates/personal.php:61 templates/users.php:86 msgid "Full Name" msgstr "Nom complet" -#: templates/personal.php:81 +#: templates/personal.php:76 msgid "Email" msgstr "Adresse mail" -#: templates/personal.php:83 +#: templates/personal.php:78 msgid "Your email address" msgstr "Votre adresse e-mail" -#: templates/personal.php:86 +#: templates/personal.php:81 msgid "" "Fill in an email address to enable password recovery and receive " "notifications" msgstr "Saisir une adresse e-mail pour permettre la réinitialisation du mot de passe et la réception des notifications" -#: templates/personal.php:96 +#: templates/personal.php:89 msgid "Profile picture" msgstr "Photo de profil" -#: templates/personal.php:101 +#: templates/personal.php:94 msgid "Upload new" msgstr "Télécharger nouveau" -#: templates/personal.php:103 +#: templates/personal.php:96 msgid "Select new from Files" msgstr "Sélectionner un nouveau depuis les documents" -#: templates/personal.php:104 +#: templates/personal.php:97 msgid "Remove image" msgstr "Supprimer l'image" -#: templates/personal.php:105 +#: templates/personal.php:98 msgid "Either png or jpg. Ideally square but you will be able to crop it." msgstr "Soit png ou jpg. Idéalement carrée mais vous pourrez la recadrer." -#: templates/personal.php:107 +#: templates/personal.php:100 msgid "Your avatar is provided by your original account." msgstr "Votre avatar est fourni par votre compte original." -#: templates/personal.php:111 +#: templates/personal.php:104 msgid "Cancel" msgstr "Annuler" -#: templates/personal.php:112 +#: templates/personal.php:105 msgid "Choose as profile image" msgstr "Choisir en temps que photo de profil " -#: templates/personal.php:120 templates/personal.php:121 +#: templates/personal.php:111 templates/personal.php:112 msgid "Language" msgstr "Langue" -#: templates/personal.php:140 +#: templates/personal.php:131 msgid "Help translate" msgstr "Aidez à traduire" -#: templates/personal.php:147 +#: templates/personal.php:137 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:149 +#: templates/personal.php:139 #, php-format msgid "" "Use this address to access your Files via " "WebDAV" msgstr "Utiliser cette adresse pour accéder à vos fichiers par WebDAV" -#: templates/personal.php:161 +#: templates/personal.php:151 msgid "The encryption app is no longer enabled, please decrypt all your files" msgstr "L'app de chiffrement n’est plus activée, veuillez déchiffrer tous vos fichiers" -#: templates/personal.php:167 +#: templates/personal.php:157 msgid "Log-in password" msgstr "Mot de passe de connexion" -#: templates/personal.php:172 +#: templates/personal.php:162 msgid "Decrypt all Files" msgstr "Déchiffrer tous les fichiers" diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po index 7eb62b952f..8cce143dc2 100644 --- a/l10n/nb_NO/core.po +++ b/l10n/nb_NO/core.po @@ -4,15 +4,16 @@ # # Translators: # onionhead , 2013 +# espenbye , 2014 # vidaren , 2014 # Stein-Aksel Basma , 2013 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-22 01:55-0400\n" -"PO-Revision-Date: 2014-03-22 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 16:40+0000\n" +"Last-Translator: espenbye \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,24 +21,24 @@ msgstr "" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/share.php:88 +#: ajax/share.php:87 msgid "Expiration date is in the past." msgstr "" -#: ajax/share.php:120 ajax/share.php:162 +#: ajax/share.php:119 ajax/share.php:161 #, php-format msgid "Couldn't send mail to following users: %s " msgstr "Klarte ikke å sende mail til følgende brukere: %s" -#: ajax/update.php:11 +#: ajax/update.php:10 msgid "Turned on maintenance mode" msgstr "Slo på vedlikeholdsmodus" -#: ajax/update.php:14 +#: ajax/update.php:13 msgid "Turned off maintenance mode" msgstr "Slo av vedlikeholdsmodus" -#: ajax/update.php:17 +#: ajax/update.php:16 msgid "Updated database" msgstr "Oppdaterte databasen" @@ -137,63 +138,63 @@ msgstr "November" msgid "December" msgstr "Desember" -#: js/js.js:458 +#: js/js.js:479 msgid "Settings" msgstr "Innstillinger" -#: js/js.js:496 +#: js/js.js:564 msgid "Saving..." msgstr "Lagrer..." -#: js/js.js:995 +#: js/js.js:1124 msgid "seconds ago" msgstr "sekunder siden" -#: js/js.js:996 +#: js/js.js:1125 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "%n minutt siden" msgstr[1] "%n minutter siden" -#: js/js.js:997 +#: js/js.js:1126 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "%n time siden" msgstr[1] "%n timer siden" -#: js/js.js:998 +#: js/js.js:1127 msgid "today" msgstr "i dag" -#: js/js.js:999 +#: js/js.js:1128 msgid "yesterday" msgstr "i går" -#: js/js.js:1000 +#: js/js.js:1129 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "%n dag siden" msgstr[1] "%n dager siden" -#: js/js.js:1001 +#: js/js.js:1130 msgid "last month" msgstr "forrige måned" -#: js/js.js:1002 +#: js/js.js:1131 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "%n dag siden" msgstr[1] "%n dager siden" -#: js/js.js:1003 +#: js/js.js:1132 msgid "months ago" msgstr "måneder siden" -#: js/js.js:1004 +#: js/js.js:1133 msgid "last year" msgstr "i fjor" -#: js/js.js:1005 +#: js/js.js:1134 msgid "years ago" msgstr "år siden" @@ -263,11 +264,11 @@ msgstr "Feil ved lasting av \"filen eksisterer\"-mal" #: js/setup.js:84 msgid "Very weak password" -msgstr "" +msgstr "Veldig svakt passord" #: js/setup.js:85 msgid "Weak password" -msgstr "" +msgstr "Svakt passord" #: js/setup.js:86 msgid "So-so password" @@ -275,11 +276,11 @@ msgstr "" #: js/setup.js:87 msgid "Good password" -msgstr "" +msgstr "Bra passord" #: js/setup.js:88 msgid "Strong password" -msgstr "" +msgstr "Sterkt passord" #: js/share.js:51 js/share.js:66 js/share.js:106 msgid "Shared" @@ -536,14 +537,14 @@ msgstr "Nytt passord" msgid "Reset password" msgstr "Tilbakestill passord" -#: setup/controller.php:138 +#: setup/controller.php:140 #, php-format msgid "" "Mac OS X is not supported and %s will not work properly on this platform. " "Use it at your own risk! " msgstr "" -#: setup/controller.php:142 +#: setup/controller.php:144 msgid "" "For the best results, please consider using a GNU/Linux server instead." msgstr "" @@ -668,7 +669,7 @@ msgstr "opprett en administrator-konto" #: templates/installation.php:70 msgid "Storage & database" -msgstr "" +msgstr "Lagring og database" #: templates/installation.php:77 msgid "Data folder" diff --git a/l10n/nb_NO/files_external.po b/l10n/nb_NO/files_external.po index 9a0fce131c..67c39a3b2f 100644 --- a/l10n/nb_NO/files_external.po +++ b/l10n/nb_NO/files_external.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:30+0000\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 16:40+0000\n" "Last-Translator: I Robot\n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -40,7 +40,7 @@ msgstr "Feil med konfigurering av Google Drive" #: js/settings.js:318 js/settings.js:325 msgid "Saved" -msgstr "" +msgstr "Lagret" #: lib/config.php:654 msgid "" diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po index a5cfd121e3..80f2ab80a3 100644 --- a/l10n/nb_NO/settings.po +++ b/l10n/nb_NO/settings.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-26 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 16:40+0000\n" +"Last-Translator: espenbye \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,7 +28,7 @@ msgstr "" #: admin/controller.php:73 msgid "Saved" -msgstr "" +msgstr "Lagret" #: admin/controller.php:90 msgid "test email settings" @@ -55,7 +55,7 @@ msgstr "" msgid "Send mode" msgstr "" -#: admin/controller.php:118 templates/admin.php:312 templates/personal.php:159 +#: admin/controller.php:118 templates/admin.php:312 templates/personal.php:149 msgid "Encryption" msgstr "Kryptering" @@ -68,7 +68,7 @@ msgid "Unable to load list from App Store" msgstr "Lasting av liste fra App Store feilet." #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17 -#: ajax/togglegroups.php:20 changepassword/controller.php:55 +#: ajax/togglegroups.php:20 changepassword/controller.php:49 msgid "Authentication error" msgstr "Autentiseringsfeil" @@ -130,38 +130,38 @@ msgstr "Kan ikke slette bruker fra gruppen %s" msgid "Couldn't update app." msgstr "Kunne ikke oppdatere app." -#: changepassword/controller.php:20 +#: changepassword/controller.php:17 msgid "Wrong password" msgstr "Feil passord" -#: changepassword/controller.php:42 +#: changepassword/controller.php:36 msgid "No user supplied" msgstr "Ingen bruker angitt" -#: changepassword/controller.php:74 +#: changepassword/controller.php:68 msgid "" "Please provide an admin recovery password, otherwise all user data will be " "lost" msgstr "Vennligst oppgi et administrativt gjenopprettingspassord. Ellers vil alle brukerdata gå tapt" -#: changepassword/controller.php:79 +#: changepassword/controller.php:73 msgid "" "Wrong admin recovery password. Please check the password and try again." msgstr "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen." -#: changepassword/controller.php:87 +#: changepassword/controller.php:81 msgid "" "Back-end doesn't support password change, but the users encryption key was " "successfully updated." msgstr "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket." -#: changepassword/controller.php:92 changepassword/controller.php:103 +#: changepassword/controller.php:86 changepassword/controller.php:97 msgid "Unable to change password" msgstr "Kunne ikke endre passord" #: js/admin.js:73 msgid "Sending..." -msgstr "" +msgstr "Sender..." #: js/apps.js:45 templates/help.php:4 msgid "User Documentation" @@ -207,7 +207,7 @@ msgstr "Feil ved oppdatering av app" msgid "Error" msgstr "Feil" -#: js/apps.js:153 templates/apps.php:54 +#: js/apps.js:153 templates/apps.php:55 msgid "Update" msgstr "Oppdater" @@ -221,11 +221,11 @@ msgstr "Velg et profilbilde" #: js/personal.js:277 msgid "Very weak password" -msgstr "" +msgstr "Veldig svakt passord" #: js/personal.js:278 msgid "Weak password" -msgstr "" +msgstr "Svakt passord" #: js/personal.js:279 msgid "So-so password" @@ -233,11 +233,11 @@ msgstr "" #: js/personal.js:280 msgid "Good password" -msgstr "" +msgstr "Bra passord" #: js/personal.js:281 msgid "Strong password" -msgstr "" +msgstr "Sterkt passord" #: js/personal.js:316 msgid "Decrypting files... Please wait, this can take some time." @@ -288,7 +288,7 @@ msgstr "Oppgi et gyldig passord" msgid "Warning: Home directory for user \"{user}\" already exists" msgstr "Advarsel: Hjemmemappe for bruker \"{user}\" eksisterer allerede" -#: personal.php:49 personal.php:50 +#: personal.php:48 personal.php:49 msgid "__language_name__" msgstr "__language_name__" @@ -330,11 +330,11 @@ msgstr "" #: templates/admin.php:24 msgid "SSL" -msgstr "" +msgstr "SSL" #: templates/admin.php:25 msgid "TLS" -msgstr "" +msgstr "TLS" #: templates/admin.php:47 templates/admin.php:61 msgid "Security Warning" @@ -543,7 +543,7 @@ msgstr "" #: templates/admin.php:327 msgid "From address" -msgstr "" +msgstr "Fra adresse" #: templates/admin.php:349 msgid "Authentication required" @@ -563,11 +563,11 @@ msgstr "" #: templates/admin.php:363 msgid "SMTP Username" -msgstr "" +msgstr "SMTP-brukernavn" #: templates/admin.php:366 msgid "SMTP Password" -msgstr "" +msgstr "SMTP-passord" #: templates/admin.php:370 msgid "Test email settings" @@ -575,7 +575,7 @@ msgstr "" #: templates/admin.php:371 msgid "Send email" -msgstr "" +msgstr "Send e-post" #: templates/admin.php:376 msgid "Log" @@ -593,11 +593,11 @@ msgstr "Mer" msgid "Less" msgstr "Mindre" -#: templates/admin.php:416 templates/personal.php:181 +#: templates/admin.php:416 templates/personal.php:171 msgid "Version" msgstr "Versjon" -#: templates/admin.php:420 templates/personal.php:184 +#: templates/admin.php:420 templates/personal.php:174 msgid "" "Developed by the ownCloud community, the -licensed by " msgstr "-lisensiert av " @@ -668,108 +668,108 @@ msgstr "Vis \"Førstegangs veiveiseren\" på nytt" msgid "You have used %s of the available %s" msgstr "Du har brukt %s av tilgjengelig %s" -#: templates/personal.php:39 templates/users.php:21 templates/users.php:87 +#: templates/personal.php:38 templates/users.php:21 templates/users.php:87 msgid "Password" msgstr "Passord" -#: templates/personal.php:40 +#: templates/personal.php:39 msgid "Your password was changed" msgstr "Passord har blitt endret" -#: templates/personal.php:41 +#: templates/personal.php:40 msgid "Unable to change your password" msgstr "Kunne ikke endre passordet ditt" -#: templates/personal.php:43 +#: templates/personal.php:42 msgid "Current password" msgstr "Nåværende passord" -#: templates/personal.php:46 +#: templates/personal.php:45 msgid "New password" msgstr "Nytt passord" -#: templates/personal.php:50 +#: templates/personal.php:49 msgid "Change password" msgstr "Endre passord" -#: templates/personal.php:64 templates/users.php:86 +#: templates/personal.php:61 templates/users.php:86 msgid "Full Name" msgstr "Fullt navn" -#: templates/personal.php:81 +#: templates/personal.php:76 msgid "Email" msgstr "Epost" -#: templates/personal.php:83 +#: templates/personal.php:78 msgid "Your email address" msgstr "Din e-postadresse" -#: templates/personal.php:86 +#: templates/personal.php:81 msgid "" "Fill in an email address to enable password recovery and receive " "notifications" msgstr "" -#: templates/personal.php:96 +#: templates/personal.php:89 msgid "Profile picture" msgstr "Profilbilde" -#: templates/personal.php:101 +#: templates/personal.php:94 msgid "Upload new" msgstr "Last opp nytt" -#: templates/personal.php:103 +#: templates/personal.php:96 msgid "Select new from Files" msgstr "Velg nytt fra Filer" -#: templates/personal.php:104 +#: templates/personal.php:97 msgid "Remove image" msgstr "Fjern bilde" -#: templates/personal.php:105 +#: templates/personal.php:98 msgid "Either png or jpg. Ideally square but you will be able to crop it." msgstr "Enten png eller jpg. Helst kvadratisk men du kan beskjære det." -#: templates/personal.php:107 +#: templates/personal.php:100 msgid "Your avatar is provided by your original account." msgstr "Avataren din kommer fra din opprinnelige konto." -#: templates/personal.php:111 +#: templates/personal.php:104 msgid "Cancel" msgstr "Avbryt" -#: templates/personal.php:112 +#: templates/personal.php:105 msgid "Choose as profile image" msgstr "Velg som profilbilde" -#: templates/personal.php:120 templates/personal.php:121 +#: templates/personal.php:111 templates/personal.php:112 msgid "Language" msgstr "Språk" -#: templates/personal.php:140 +#: templates/personal.php:131 msgid "Help translate" msgstr "Bidra til oversettelsen" -#: templates/personal.php:147 +#: templates/personal.php:137 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:149 +#: templates/personal.php:139 #, php-format msgid "" "Use this address to access your Files via " "WebDAV" msgstr "Bruk denne adressen for å aksessere filene dine via WebDAV" -#: templates/personal.php:161 +#: templates/personal.php:151 msgid "The encryption app is no longer enabled, please decrypt all your files" msgstr "Krypterings-appen er ikke aktiv lenger. Vennligst dekrypter alle filene dine" -#: templates/personal.php:167 +#: templates/personal.php:157 msgid "Log-in password" msgstr "Innloggingspassord" -#: templates/personal.php:172 +#: templates/personal.php:162 msgid "Decrypt all Files" msgstr "Dekrypter alle filer" diff --git a/l10n/sv/core.po b/l10n/sv/core.po index 09583d597e..94929d6693 100644 --- a/l10n/sv/core.po +++ b/l10n/sv/core.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # Daniel Sandman , 2013 # Gunnar Norin , 2013 # Gustav Smedberg , 2013 @@ -14,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-22 01:55-0400\n" -"PO-Revision-Date: 2014-03-22 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 10:50+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,24 +25,24 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ajax/share.php:88 +#: ajax/share.php:87 msgid "Expiration date is in the past." -msgstr "" +msgstr "Utgångsdatumet är i det förflutna." -#: ajax/share.php:120 ajax/share.php:162 +#: ajax/share.php:119 ajax/share.php:161 #, php-format msgid "Couldn't send mail to following users: %s " msgstr "Gick inte att skicka e-post till följande användare: %s" -#: ajax/update.php:11 +#: ajax/update.php:10 msgid "Turned on maintenance mode" msgstr "Aktiverade underhållsläge" -#: ajax/update.php:14 +#: ajax/update.php:13 msgid "Turned off maintenance mode" msgstr "Deaktiverade underhållsläge" -#: ajax/update.php:17 +#: ajax/update.php:16 msgid "Updated database" msgstr "Uppdaterade databasen" @@ -141,63 +142,63 @@ msgstr "November" msgid "December" msgstr "December" -#: js/js.js:458 +#: js/js.js:479 msgid "Settings" msgstr "Inställningar" -#: js/js.js:496 +#: js/js.js:564 msgid "Saving..." msgstr "Sparar..." -#: js/js.js:995 +#: js/js.js:1124 msgid "seconds ago" msgstr "sekunder sedan" -#: js/js.js:996 +#: js/js.js:1125 msgid "%n minute ago" msgid_plural "%n minutes ago" msgstr[0] "%n minut sedan" msgstr[1] "%n minuter sedan" -#: js/js.js:997 +#: js/js.js:1126 msgid "%n hour ago" msgid_plural "%n hours ago" msgstr[0] "%n timme sedan" msgstr[1] "%n timmar sedan" -#: js/js.js:998 +#: js/js.js:1127 msgid "today" msgstr "i dag" -#: js/js.js:999 +#: js/js.js:1128 msgid "yesterday" msgstr "i går" -#: js/js.js:1000 +#: js/js.js:1129 msgid "%n day ago" msgid_plural "%n days ago" msgstr[0] "%n dag sedan" msgstr[1] "%n dagar sedan" -#: js/js.js:1001 +#: js/js.js:1130 msgid "last month" msgstr "förra månaden" -#: js/js.js:1002 +#: js/js.js:1131 msgid "%n month ago" msgid_plural "%n months ago" msgstr[0] "%n månad sedan" msgstr[1] "%n månader sedan" -#: js/js.js:1003 +#: js/js.js:1132 msgid "months ago" msgstr "månader sedan" -#: js/js.js:1004 +#: js/js.js:1133 msgid "last year" msgstr "förra året" -#: js/js.js:1005 +#: js/js.js:1134 msgid "years ago" msgstr "år sedan" @@ -267,23 +268,23 @@ msgstr "Fel uppstod filmall existerar" #: js/setup.js:84 msgid "Very weak password" -msgstr "" +msgstr "Väldigt svagt lösenord" #: js/setup.js:85 msgid "Weak password" -msgstr "" +msgstr "Svagt lösenord" #: js/setup.js:86 msgid "So-so password" -msgstr "" +msgstr "Okej lösenord" #: js/setup.js:87 msgid "Good password" -msgstr "" +msgstr "Bra lösenord" #: js/setup.js:88 msgid "Strong password" -msgstr "" +msgstr "Starkt lösenord" #: js/share.js:51 js/share.js:66 js/share.js:106 msgid "Shared" @@ -460,7 +461,7 @@ msgstr "Inga taggar valda för borttagning." #: js/update.js:8 msgid "Please reload the page." -msgstr "" +msgstr "Vänligen ladda om sidan." #: js/update.js:17 msgid "" @@ -482,7 +483,7 @@ msgstr "%s återställ lösenord" msgid "" "A problem has occurred whilst sending the email, please contact your " "administrator." -msgstr "" +msgstr "Ett problem har uppstått under tiden e-post sändes, vänligen kontakta din administratör." #: lostpassword/templates/email.php:2 msgid "Use the following link to reset your password: {link}" @@ -540,17 +541,17 @@ msgstr "Nytt lösenord" msgid "Reset password" msgstr "Återställ lösenordet" -#: setup/controller.php:138 +#: setup/controller.php:140 #, php-format msgid "" "Mac OS X is not supported and %s will not work properly on this platform. " "Use it at your own risk! " -msgstr "" +msgstr "Mac OS X stöds inte och %s kommer inte att fungera korrekt på denna plattform. Använd på egen risk!" -#: setup/controller.php:142 +#: setup/controller.php:144 msgid "" "For the best results, please consider using a GNU/Linux server instead." -msgstr "" +msgstr "För bästa resultat, överväg att använda en GNU/Linux server istället." #: strings.php:5 msgid "Personal" @@ -672,7 +673,7 @@ msgstr "Skapa ett administratörskonto" #: templates/installation.php:70 msgid "Storage & database" -msgstr "" +msgstr "Lagring & databas" #: templates/installation.php:77 msgid "Data folder" @@ -719,7 +720,7 @@ msgid "" "This application requires JavaScript to be enabled for correct operation. " "Please enable " "JavaScript and re-load this interface." -msgstr "" +msgstr "Denna applikation kräver JavaScript aktiverat för att fungera korrekt. Vänligen aktivera JavaScript och ladda om gränssnittet." #: templates/layout.user.php:44 #, php-format @@ -773,15 +774,15 @@ msgstr "Alternativa inloggningar" msgid "" "Hey there,

    just letting you know that %s shared %s " "with you.
    View it!

    " -msgstr "" +msgstr "Hej där,

    ville bara informera dig om att %s delade %s med dig.
    Visa den!

    " #: templates/singleuser.user.php:3 msgid "This ownCloud instance is currently in single user mode." -msgstr "" +msgstr "Denna ownCloud instans är för närvarande i enanvändarläge" #: templates/singleuser.user.php:4 msgid "This means only administrators can use the instance." -msgstr "" +msgstr "Detta betyder att endast administartörer kan använda instansen." #: templates/singleuser.user.php:5 templates/update.user.php:5 msgid "" diff --git a/l10n/sv/files_external.po b/l10n/sv/files_external.po index a21782b281..9b16af0431 100644 --- a/l10n/sv/files_external.po +++ b/l10n/sv/files_external.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # medialabs, 2013 msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-04 01:55-0400\n" -"PO-Revision-Date: 2014-04-04 05:30+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 11:00+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -40,7 +41,7 @@ msgstr "Fel vid konfigurering av Google Drive" #: js/settings.js:318 js/settings.js:325 msgid "Saved" -msgstr "" +msgstr "Sparad" #: lib/config.php:654 msgid "" @@ -84,7 +85,7 @@ msgstr "Alternativ" #: templates/settings.php:12 msgid "Available for" -msgstr "" +msgstr "Tillgänglig för" #: templates/settings.php:32 msgid "Add storage" @@ -92,7 +93,7 @@ msgstr "Lägg till lagring" #: templates/settings.php:92 msgid "No user or group" -msgstr "" +msgstr "Ingen användare eller grupp" #: templates/settings.php:95 msgid "All Users" @@ -117,7 +118,7 @@ msgstr "Aktivera extern lagring för användare" #: templates/settings.php:135 msgid "Allow users to mount the following external storage" -msgstr "" +msgstr "Tillåt användare att montera följande extern lagring" #: templates/settings.php:150 msgid "SSL root certificates" diff --git a/l10n/sv/files_sharing.po b/l10n/sv/files_sharing.po index d23ab4a6d3..003e9595bd 100644 --- a/l10n/sv/files_sharing.po +++ b/l10n/sv/files_sharing.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # Gustav Smedberg , 2013 # Magnus Höglund , 2013 # Stefan Gagner , 2013 @@ -10,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-12 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 06:12+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 10:50+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +21,7 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: js/share.js:13 +#: js/share.js:33 msgid "Shared by {owner}" msgstr "Delad av {owner}" @@ -63,12 +64,12 @@ msgstr "För mer information, kontakta den person som skickade den här länken. #: templates/public.php:17 #, php-format msgid "shared by %s" -msgstr "" +msgstr "delad av %s" #: templates/public.php:44 #, php-format msgid "Download %s" -msgstr "" +msgstr "Ladda ner %s" #: templates/public.php:48 msgid "Direct link" diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po index 34bfef2ce3..6ce09feeb1 100644 --- a/l10n/sv/lib.po +++ b/l10n/sv/lib.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # Daniel Sandman , 2013 # medialabs, 2013 # kallemooo , 2013 @@ -12,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-12 01:54-0400\n" -"PO-Revision-Date: 2014-03-11 06:12+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 10:10+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -70,23 +71,23 @@ msgstr "Ogiltig bild" msgid "web services under your control" msgstr "webbtjänster under din kontroll" -#: private/files.php:231 +#: private/files.php:232 msgid "ZIP download is turned off." msgstr "Nerladdning av ZIP är avstängd." -#: private/files.php:232 +#: private/files.php:233 msgid "Files need to be downloaded one by one." msgstr "Filer laddas ner en åt gången." -#: private/files.php:233 private/files.php:261 +#: private/files.php:234 private/files.php:262 msgid "Back to Files" msgstr "Tillbaka till Filer" -#: private/files.php:258 +#: private/files.php:259 msgid "Selected files too large to generate zip file." msgstr "Valda filer är för stora för att skapa zip-fil." -#: private/files.php:259 +#: private/files.php:260 msgid "" "Please download the files separately in smaller chunks or kindly ask your " "administrator." @@ -162,7 +163,7 @@ msgstr "Ogiltig token. Ladda om sidan." #: private/json.php:75 msgid "Unknown user" -msgstr "" +msgstr "Okänd användare" #: private/search/provider/file.php:18 private/search/provider/file.php:36 msgid "Files" @@ -197,23 +198,23 @@ msgid "MS SQL username and/or password not valid: %s" msgstr "MS SQL-användaren och/eller lösenordet var inte giltigt: %s" #: private/setup/mssql.php:21 private/setup/mysql.php:13 -#: private/setup/oci.php:114 private/setup/postgresql.php:24 -#: private/setup/postgresql.php:70 +#: private/setup/oci.php:114 private/setup/postgresql.php:31 +#: private/setup/postgresql.php:84 msgid "You need to enter either an existing account or the administrator." msgstr "Du måste antingen ange ett befintligt konto eller administratör." #: private/setup/mysql.php:12 msgid "MySQL/MariaDB username and/or password not valid" -msgstr "" +msgstr "MySQL/MariaDB användarnamn och/eller lösenord är felaktigt" #: private/setup/mysql.php:67 private/setup/oci.php:54 #: private/setup/oci.php:121 private/setup/oci.php:144 #: private/setup/oci.php:151 private/setup/oci.php:162 #: private/setup/oci.php:169 private/setup/oci.php:178 #: private/setup/oci.php:186 private/setup/oci.php:195 -#: private/setup/oci.php:201 private/setup/postgresql.php:89 -#: private/setup/postgresql.php:98 private/setup/postgresql.php:115 -#: private/setup/postgresql.php:125 private/setup/postgresql.php:134 +#: private/setup/oci.php:201 private/setup/postgresql.php:103 +#: private/setup/postgresql.php:112 private/setup/postgresql.php:129 +#: private/setup/postgresql.php:139 private/setup/postgresql.php:148 #, php-format msgid "DB Error: \"%s\"" msgstr "DB error: \"%s\"" @@ -222,9 +223,9 @@ msgstr "DB error: \"%s\"" #: private/setup/oci.php:122 private/setup/oci.php:145 #: private/setup/oci.php:152 private/setup/oci.php:163 #: private/setup/oci.php:179 private/setup/oci.php:187 -#: private/setup/oci.php:196 private/setup/postgresql.php:90 -#: private/setup/postgresql.php:99 private/setup/postgresql.php:116 -#: private/setup/postgresql.php:126 private/setup/postgresql.php:135 +#: private/setup/oci.php:196 private/setup/postgresql.php:104 +#: private/setup/postgresql.php:113 private/setup/postgresql.php:130 +#: private/setup/postgresql.php:140 private/setup/postgresql.php:149 #, php-format msgid "Offending command was: \"%s\"" msgstr "Det felaktiga kommandot var: \"%s\"" @@ -232,20 +233,20 @@ msgstr "Det felaktiga kommandot var: \"%s\"" #: private/setup/mysql.php:85 #, php-format msgid "MySQL/MariaDB user '%s'@'localhost' exists already." -msgstr "" +msgstr "MySQL/MariaDB användare '%s'@'localhost' existerar redan." #: private/setup/mysql.php:86 msgid "Drop this user from MySQL/MariaDB" -msgstr "" +msgstr "Radera denna användare från MySQL/MariaDB" #: private/setup/mysql.php:91 #, php-format msgid "MySQL/MariaDB user '%s'@'%%' already exists" -msgstr "" +msgstr "MySQL/MariaDB användare '%s'@'%%' existerar redan" #: private/setup/mysql.php:92 msgid "Drop this user from MySQL/MariaDB." -msgstr "" +msgstr "Radera denna användare från MySQL/MariaDB." #: private/setup/oci.php:34 msgid "Oracle connection could not be established" @@ -260,7 +261,7 @@ msgstr "Oracle-användarnamnet och/eller lösenordet är felaktigt" msgid "Offending command was: \"%s\", name: %s, password: %s" msgstr "Det felande kommandot var: \"%s\", name: %s, password: %s" -#: private/setup/postgresql.php:23 private/setup/postgresql.php:69 +#: private/setup/postgresql.php:30 private/setup/postgresql.php:83 msgid "PostgreSQL username and/or password not valid" msgstr "PostgreSQL-användarnamnet och/eller lösenordet är felaktigt" @@ -272,19 +273,19 @@ msgstr "Ange ett användarnamn för administratören." msgid "Set an admin password." msgstr "Ange ett administratörslösenord." -#: private/setup.php:198 +#: private/setup.php:202 msgid "" "Your web server is not yet properly setup to allow files synchronization " "because the WebDAV interface seems to be broken." msgstr "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera." -#: private/setup.php:199 +#: private/setup.php:203 #, php-format msgid "Please double check the installation guides." msgstr "Var god kontrollera installationsguiden." -#: private/share/mailnotifications.php:73 -#: private/share/mailnotifications.php:119 +#: private/share/mailnotifications.php:72 +#: private/share/mailnotifications.php:118 #, php-format msgid "%s shared »%s« with you" msgstr "%s delade »%s« med dig" diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po index 260b11a449..f3161f4053 100644 --- a/l10n/sv/settings.po +++ b/l10n/sv/settings.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# AsavarTzeth , 2014 # Daniel Sandman , 2013 # Gunnar Norin , 2013 # Gustav Smedberg , 2013 @@ -16,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-03-26 01:55-0400\n" -"PO-Revision-Date: 2014-03-26 05:55+0000\n" -"Last-Translator: I Robot\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" +"PO-Revision-Date: 2014-04-06 12:20+0000\n" +"Last-Translator: AsavarTzeth \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,24 +30,24 @@ msgstr "" #: admin/controller.php:66 #, php-format msgid "Invalid value supplied for %s" -msgstr "" +msgstr "Ogiltigt värde gavs för %s" #: admin/controller.php:73 msgid "Saved" -msgstr "" +msgstr "Sparad" #: admin/controller.php:90 msgid "test email settings" -msgstr "" +msgstr "testa e-post inställningar" #: admin/controller.php:91 msgid "If you received this email, the settings seem to be correct." -msgstr "" +msgstr "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta." #: admin/controller.php:94 msgid "" "A problem occurred while sending the e-mail. Please revisit your settings." -msgstr "" +msgstr "Ett problem har uppstått under tiden e-post sändes. Vänligen se över dina inställningar." #: admin/controller.php:99 msgid "Email sent" @@ -54,32 +55,32 @@ msgstr "E-post skickat" #: admin/controller.php:101 msgid "You need to set your user email before being able to send test emails." -msgstr "" +msgstr "Du behöver ställa in din användares e-postadress före du kan skicka test e-post." #: admin/controller.php:116 templates/admin.php:299 msgid "Send mode" -msgstr "" +msgstr "Sändningsläge" -#: admin/controller.php:118 templates/admin.php:312 templates/personal.php:159 +#: admin/controller.php:118 templates/admin.php:312 templates/personal.php:149 msgid "Encryption" msgstr "Kryptering" #: admin/controller.php:120 templates/admin.php:336 msgid "Authentication method" -msgstr "" +msgstr "Autentiseringsmetod" #: ajax/apps/ocs.php:20 msgid "Unable to load list from App Store" msgstr "Kan inte ladda listan från App Store" #: ajax/changedisplayname.php:25 ajax/removeuser.php:15 ajax/setquota.php:17 -#: ajax/togglegroups.php:20 changepassword/controller.php:55 +#: ajax/togglegroups.php:20 changepassword/controller.php:49 msgid "Authentication error" msgstr "Fel vid autentisering" #: ajax/changedisplayname.php:31 msgid "Your full name has been changed." -msgstr "" +msgstr "Ditt fulla namn har ändrats" #: ajax/changedisplayname.php:34 msgid "Unable to change full name" @@ -135,38 +136,38 @@ msgstr "Kan inte radera användare från gruppen %s" msgid "Couldn't update app." msgstr "Kunde inte uppdatera appen." -#: changepassword/controller.php:20 +#: changepassword/controller.php:17 msgid "Wrong password" msgstr "Fel lösenord" -#: changepassword/controller.php:42 +#: changepassword/controller.php:36 msgid "No user supplied" msgstr "Ingen användare angiven" -#: changepassword/controller.php:74 +#: changepassword/controller.php:68 msgid "" "Please provide an admin recovery password, otherwise all user data will be " "lost" msgstr "Ange ett återställningslösenord för administratören. Annars kommer all användardata förloras" -#: changepassword/controller.php:79 +#: changepassword/controller.php:73 msgid "" "Wrong admin recovery password. Please check the password and try again." msgstr "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen." -#: changepassword/controller.php:87 +#: changepassword/controller.php:81 msgid "" "Back-end doesn't support password change, but the users encryption key was " "successfully updated." msgstr "Gränssnittet stödjer inte byte av lösenord, men användarnas krypteringsnyckel blev uppdaterad." -#: changepassword/controller.php:92 changepassword/controller.php:103 +#: changepassword/controller.php:86 changepassword/controller.php:97 msgid "Unable to change password" msgstr "Kunde inte ändra lösenord" #: js/admin.js:73 msgid "Sending..." -msgstr "" +msgstr "Skickar..." #: js/apps.js:45 templates/help.php:4 msgid "User Documentation" @@ -174,7 +175,7 @@ msgstr "Användardokumentation" #: js/apps.js:50 msgid "Admin Documentation" -msgstr "" +msgstr "Administratörsdokumentation" #: js/apps.js:67 msgid "Update to {appversion}" @@ -212,7 +213,7 @@ msgstr "Fel uppstod vid uppdatering av appen" msgid "Error" msgstr "Fel" -#: js/apps.js:153 templates/apps.php:54 +#: js/apps.js:153 templates/apps.php:55 msgid "Update" msgstr "Uppdatera" @@ -226,23 +227,23 @@ msgstr "Välj en profilbild" #: js/personal.js:277 msgid "Very weak password" -msgstr "" +msgstr "Väldigt svagt lösenord" #: js/personal.js:278 msgid "Weak password" -msgstr "" +msgstr "Svagt lösenord" #: js/personal.js:279 msgid "So-so password" -msgstr "" +msgstr "Okej lösenord" #: js/personal.js:280 msgid "Good password" -msgstr "" +msgstr "Bra lösenord" #: js/personal.js:281 msgid "Strong password" -msgstr "" +msgstr "Starkt lösenord" #: js/personal.js:316 msgid "Decrypting files... Please wait, this can take some time." @@ -293,29 +294,29 @@ msgstr "Ett giltigt lösenord måste anges" msgid "Warning: Home directory for user \"{user}\" already exists" msgstr "Varning: Hem katalogen för varje användare \"{användare}\" finns redan" -#: personal.php:49 personal.php:50 +#: personal.php:48 personal.php:49 msgid "__language_name__" msgstr "__language_name__" #: templates/admin.php:8 msgid "Everything (fatal issues, errors, warnings, info, debug)" -msgstr "" +msgstr "Allting (allvarliga fel, fel, varningar, info, debug)" #: templates/admin.php:9 msgid "Info, warnings, errors and fatal issues" -msgstr "" +msgstr "Info, varningar och allvarliga fel" #: templates/admin.php:10 msgid "Warnings, errors and fatal issues" -msgstr "" +msgstr "Varningar, fel ocg allvarliga fel" #: templates/admin.php:11 msgid "Errors and fatal issues" -msgstr "" +msgstr "Fel och allvarliga fel" #: templates/admin.php:12 msgid "Fatal issues only" -msgstr "" +msgstr "Endast allvarliga fel" #: templates/admin.php:16 templates/admin.php:23 msgid "None" @@ -327,19 +328,19 @@ msgstr "Logga in" #: templates/admin.php:18 msgid "Plain" -msgstr "" +msgstr "Enkel" #: templates/admin.php:19 msgid "NT LAN Manager" -msgstr "" +msgstr "NT LAN Manager" #: templates/admin.php:24 msgid "SSL" -msgstr "" +msgstr "SSL" #: templates/admin.php:25 msgid "TLS" -msgstr "" +msgstr "TLS" #: templates/admin.php:47 templates/admin.php:61 msgid "Security Warning" @@ -350,7 +351,7 @@ msgstr "Säkerhetsvarning" msgid "" "You are accessing %s via HTTP. We strongly suggest you configure your server" " to require using HTTPS instead." -msgstr "" +msgstr "Du ansluter till %s via HTTP. Vi rekommenderar starkt att du konfigurerar din server att använda HTTPS istället." #: templates/admin.php:64 msgid "" @@ -388,14 +389,14 @@ msgstr "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den #: templates/admin.php:104 msgid "Your PHP version is outdated" -msgstr "" +msgstr "Din PHP version är föråldrad" #: templates/admin.php:107 msgid "" "Your PHP version is outdated. We strongly recommend to update to 5.3.8 or " "newer because older versions are known to be broken. It is possible that " "this installation is not working correctly." -msgstr "" +msgstr "Din PHP version är föråldrad. Vi rekommenderar starkt att uppdatera till 5.3.8 eller nyare eftersom äldre versioner är obrukbara. Det är möjligt att denna installation inte fungerar korrekt." #: templates/admin.php:118 msgid "Locale not working" @@ -403,20 +404,20 @@ msgstr "Locale fungerar inte" #: templates/admin.php:123 msgid "System locale can not be set to a one which supports UTF-8." -msgstr "" +msgstr "Systemspråk kan inte ställas in till ett som stödjer UTF-8." #: templates/admin.php:127 msgid "" "This means that there might be problems with certain characters in file " "names." -msgstr "" +msgstr "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn." #: templates/admin.php:131 #, php-format msgid "" "We strongly suggest to install the required packages on your system to " "support one of the following locales: %s." -msgstr "" +msgstr "Vi rekommenderar starkt att installera de paket som krävs på ditt system för att stödja en av följande systemspråk: %s." #: templates/admin.php:143 msgid "Internet connection not working" @@ -438,18 +439,18 @@ msgstr "Cron" #: templates/admin.php:167 #, php-format msgid "Last cron was executed at %s." -msgstr "" +msgstr "Sista cron kördes vid %s" #: templates/admin.php:170 #, php-format msgid "" "Last cron was executed at %s. This is more than an hour ago, something seems" " wrong." -msgstr "" +msgstr "Sista cron kördes vid %s. Detta är mer än en timme sedan, något verkar fel." #: templates/admin.php:174 msgid "Cron was not executed yet!" -msgstr "" +msgstr "Cron kördes inte ännu!" #: templates/admin.php:184 msgid "Execute one task with each page loaded" @@ -540,19 +541,19 @@ msgstr "Anslut till din %s via HTTPS för att aktivera/deaktivera SSL" #: templates/admin.php:294 msgid "Email Server" -msgstr "" +msgstr "E-postserver" #: templates/admin.php:296 msgid "This is used for sending out notifications." -msgstr "" +msgstr "Detta används för att skicka ut notifieringar." #: templates/admin.php:327 msgid "From address" -msgstr "" +msgstr "Från adress" #: templates/admin.php:349 msgid "Authentication required" -msgstr "" +msgstr "Autentisering krävs" #: templates/admin.php:353 msgid "Server address" @@ -568,19 +569,19 @@ msgstr "Inloggningsuppgifter" #: templates/admin.php:363 msgid "SMTP Username" -msgstr "" +msgstr "SMTP användarnamn" #: templates/admin.php:366 msgid "SMTP Password" -msgstr "" +msgstr "SMTP lösenord" #: templates/admin.php:370 msgid "Test email settings" -msgstr "" +msgstr "Testa e-post inställninggar" #: templates/admin.php:371 msgid "Send email" -msgstr "" +msgstr "Skicka e-post" #: templates/admin.php:376 msgid "Log" @@ -598,11 +599,11 @@ msgstr "Mer" msgid "Less" msgstr "Mindre" -#: templates/admin.php:416 templates/personal.php:181 +#: templates/admin.php:416 templates/personal.php:171 msgid "Version" msgstr "Version" -#: templates/admin.php:420 templates/personal.php:184 +#: templates/admin.php:420 templates/personal.php:174 msgid "" "Developed by the ownCloud community, the -licensed by " msgstr "-licensierad av " @@ -673,108 +674,108 @@ msgstr "Visa Första uppstarts-guiden igen" msgid "You have used %s of the available %s" msgstr "Du har använt %s av tillgängliga %s" -#: templates/personal.php:39 templates/users.php:21 templates/users.php:87 +#: templates/personal.php:38 templates/users.php:21 templates/users.php:87 msgid "Password" msgstr "Lösenord" -#: templates/personal.php:40 +#: templates/personal.php:39 msgid "Your password was changed" msgstr "Ditt lösenord har ändrats" -#: templates/personal.php:41 +#: templates/personal.php:40 msgid "Unable to change your password" msgstr "Kunde inte ändra ditt lösenord" -#: templates/personal.php:43 +#: templates/personal.php:42 msgid "Current password" msgstr "Nuvarande lösenord" -#: templates/personal.php:46 +#: templates/personal.php:45 msgid "New password" msgstr "Nytt lösenord" -#: templates/personal.php:50 +#: templates/personal.php:49 msgid "Change password" msgstr "Ändra lösenord" -#: templates/personal.php:64 templates/users.php:86 +#: templates/personal.php:61 templates/users.php:86 msgid "Full Name" msgstr "Hela namnet" -#: templates/personal.php:81 +#: templates/personal.php:76 msgid "Email" msgstr "E-post" -#: templates/personal.php:83 +#: templates/personal.php:78 msgid "Your email address" msgstr "Din e-postadress" -#: templates/personal.php:86 +#: templates/personal.php:81 msgid "" "Fill in an email address to enable password recovery and receive " "notifications" -msgstr "" +msgstr "Fyll i en e-postadress för att aktivera återställning av lösenord och mottagande av notifieringar" -#: templates/personal.php:96 +#: templates/personal.php:89 msgid "Profile picture" msgstr "Profilbild" -#: templates/personal.php:101 +#: templates/personal.php:94 msgid "Upload new" msgstr "Ladda upp ny" -#: templates/personal.php:103 +#: templates/personal.php:96 msgid "Select new from Files" msgstr "Välj ny från filer" -#: templates/personal.php:104 +#: templates/personal.php:97 msgid "Remove image" msgstr "Radera bild" -#: templates/personal.php:105 +#: templates/personal.php:98 msgid "Either png or jpg. Ideally square but you will be able to crop it." msgstr "Antingen png eller jpg. Helst fyrkantig, men du kommer att kunna beskära den." -#: templates/personal.php:107 +#: templates/personal.php:100 msgid "Your avatar is provided by your original account." -msgstr "" +msgstr "Din avatar tillhandahålls av ditt ursprungliga konto." -#: templates/personal.php:111 +#: templates/personal.php:104 msgid "Cancel" msgstr "Avbryt" -#: templates/personal.php:112 +#: templates/personal.php:105 msgid "Choose as profile image" msgstr "Välj som profilbild" -#: templates/personal.php:120 templates/personal.php:121 +#: templates/personal.php:111 templates/personal.php:112 msgid "Language" msgstr "Språk" -#: templates/personal.php:140 +#: templates/personal.php:131 msgid "Help translate" msgstr "Hjälp att översätta" -#: templates/personal.php:147 +#: templates/personal.php:137 msgid "WebDAV" msgstr "WebDAV" -#: templates/personal.php:149 +#: templates/personal.php:139 #, php-format msgid "" "Use this address to access your Files via " "WebDAV" msgstr "Använd denna adress till nå dina Filer via WebDAV" -#: templates/personal.php:161 +#: templates/personal.php:151 msgid "The encryption app is no longer enabled, please decrypt all your files" -msgstr "" +msgstr "Krypteringsapplikationen är inte längre aktiverad, vänligen dekryptera alla dina filer" -#: templates/personal.php:167 +#: templates/personal.php:157 msgid "Log-in password" msgstr "Inloggningslösenord" -#: templates/personal.php:172 +#: templates/personal.php:162 msgid "Decrypt all Files" msgstr "Dekryptera alla filer" @@ -802,7 +803,7 @@ msgstr "Förvald lagring" #: templates/users.php:42 templates/users.php:137 msgid "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" -msgstr "" +msgstr "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")" #: templates/users.php:46 templates/users.php:146 msgid "Unlimited" diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot index e397522432..dc2a86bb6c 100644 --- a/l10n/templates/core.pot +++ b/l10n/templates/core.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot index bde7c871d2..525b817c1a 100644 --- a/l10n/templates/files.pot +++ b/l10n/templates/files.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot index d4eff40b75..bddf4926cc 100644 --- a/l10n/templates/files_encryption.pot +++ b/l10n/templates/files_encryption.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot index 6c600c62e4..e6f5ae7a53 100644 --- a/l10n/templates/files_external.pot +++ b/l10n/templates/files_external.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot index d8f0b9897e..f694d95e78 100644 --- a/l10n/templates/files_sharing.pot +++ b/l10n/templates/files_sharing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot index 5f8cdde491..5a0e62b6fd 100644 --- a/l10n/templates/files_trashbin.pot +++ b/l10n/templates/files_trashbin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot index 8a287d91d9..6a7d094174 100644 --- a/l10n/templates/files_versions.pot +++ b/l10n/templates/files_versions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot index df11086bc7..0bb735ef27 100644 --- a/l10n/templates/lib.pot +++ b/l10n/templates/lib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/private.pot b/l10n/templates/private.pot index 6a5dace8d9..837b1f9161 100644 --- a/l10n/templates/private.pot +++ b/l10n/templates/private.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot index d7c6e044a2..631b8a0d73 100644 --- a/l10n/templates/settings.pot +++ b/l10n/templates/settings.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot index a2a0f85851..7004cf562d 100644 --- a/l10n/templates/user_ldap.pot +++ b/l10n/templates/user_ldap.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot index f1653c13c4..c0c22d8130 100644 --- a/l10n/templates/user_webdavauth.pot +++ b/l10n/templates/user_webdavauth.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ownCloud Core 6.0.0\n" "Report-Msgid-Bugs-To: translations@owncloud.org\n" -"POT-Creation-Date: 2014-04-06 01:55-0400\n" +"POT-Creation-Date: 2014-04-07 01:55-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/lib/l10n/sv.php b/lib/l10n/sv.php index a1f371210a..7053e09624 100644 --- a/lib/l10n/sv.php +++ b/lib/l10n/sv.php @@ -31,6 +31,7 @@ $TRANSLATIONS = array( "Application is not enabled" => "Applikationen är inte aktiverad", "Authentication error" => "Fel vid autentisering", "Token expired. Please reload page." => "Ogiltig token. Ladda om sidan.", +"Unknown user" => "Okänd användare", "Files" => "Filer", "Text" => "Text", "Images" => "Bilder", @@ -39,8 +40,13 @@ $TRANSLATIONS = array( "%s you may not use dots in the database name" => "%s du får inte använda punkter i databasnamnet", "MS SQL username and/or password not valid: %s" => "MS SQL-användaren och/eller lösenordet var inte giltigt: %s", "You need to enter either an existing account or the administrator." => "Du måste antingen ange ett befintligt konto eller administratör.", +"MySQL/MariaDB username and/or password not valid" => "MySQL/MariaDB användarnamn och/eller lösenord är felaktigt", "DB Error: \"%s\"" => "DB error: \"%s\"", "Offending command was: \"%s\"" => "Det felaktiga kommandot var: \"%s\"", +"MySQL/MariaDB user '%s'@'localhost' exists already." => "MySQL/MariaDB användare '%s'@'localhost' existerar redan.", +"Drop this user from MySQL/MariaDB" => "Radera denna användare från MySQL/MariaDB", +"MySQL/MariaDB user '%s'@'%%' already exists" => "MySQL/MariaDB användare '%s'@'%%' existerar redan", +"Drop this user from MySQL/MariaDB." => "Radera denna användare från MySQL/MariaDB.", "Oracle connection could not be established" => "Oracle-anslutning kunde inte etableras", "Oracle username and/or password not valid" => "Oracle-användarnamnet och/eller lösenordet är felaktigt", "Offending command was: \"%s\", name: %s, password: %s" => "Det felande kommandot var: \"%s\", name: %s, password: %s", diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php index 11c75ea1e0..5c48c7fd75 100644 --- a/settings/l10n/fr.php +++ b/settings/l10n/fr.php @@ -93,6 +93,9 @@ $TRANSLATIONS = array( "Internet connection not working" => "La connexion internet ne fonctionne pas", "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mails ne seront pas fonctionnels également. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "Cron" => "Cron", +"Last cron was executed at %s." => "Le dernier cron s'est exécuté à %s.", +"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Le dernier cron s'est exécuté à %s. Cela fait plus d'une heure, quelque chose a du mal se passer.", +"Cron was not executed yet!" => "Le cron n'a pas encore été exécuté !", "Execute one task with each page loaded" => "Exécute une tâche à chaque chargement de page", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "cron.php est enregistré en tant que service webcron pour appeler cron.php toutes les 15 minutes via http.", "Use systems cron service to call the cron.php file every 15 minutes." => "Utilise le service cron du système pour appeler le fichier cron.php toutes les 15 minutes.", diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php index 40cca41638..244881d306 100644 --- a/settings/l10n/nb_NO.php +++ b/settings/l10n/nb_NO.php @@ -1,5 +1,6 @@ "Lagret", "Email sent" => "E-post sendt", "Encryption" => "Kryptering", "Unable to load list from App Store" => "Lasting av liste fra App Store feilet.", @@ -24,6 +25,7 @@ $TRANSLATIONS = array( "Wrong admin recovery password. Please check the password and try again." => "Feil administrativt gjenopprettingspassord. Sjekk passordet og prøv igjen.", "Back-end doesn't support password change, but the users encryption key was successfully updated." => "Serveren støtter ikke endring av passord, men oppdatering av brukerens krypteringsnøkkel var vellykket.", "Unable to change password" => "Kunne ikke endre passord", +"Sending..." => "Sender...", "User Documentation" => "Brukerdokumentasjon", "Update to {appversion}" => "Oppdater til {appversion}", "Disable" => "Slå avBehandle ", @@ -37,6 +39,10 @@ $TRANSLATIONS = array( "Update" => "Oppdater", "Updated" => "Oppdatert", "Select a profile picture" => "Velg et profilbilde", +"Very weak password" => "Veldig svakt passord", +"Weak password" => "Svakt passord", +"Good password" => "Bra passord", +"Strong password" => "Sterkt passord", "Decrypting files... Please wait, this can take some time." => "Dekrypterer filer... Vennligst vent, dette kan ta litt tid.", "deleted" => "slettet", "undo" => "angre", @@ -57,6 +63,8 @@ $TRANSLATIONS = array( "Fatal issues only" => "Kun fatale problemer", "None" => "Ingen", "Login" => "Logg inn", +"SSL" => "SSL", +"TLS" => "TLS", "Security Warning" => "Sikkerhetsadvarsel", "You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." => "Du aksesserer %s via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve bruk av HTTPS i stedet.", "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer. Vi anbefaler på det sterkeste at du konfigurerer web-serveren din slik at datamappen ikke lenger er tilgjengelig eller at du flytter datamappen ut av web-serverens dokument-rotmappe.", @@ -94,8 +102,12 @@ $TRANSLATIONS = array( "Enforce HTTPS" => "Tving HTTPS", "Forces the clients to connect to %s via an encrypted connection." => "Tvinger klientene til å koble til %s via en kryptert forbindelse.", "Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Vennligst koble til din %s via HTTPS for å aktivere eller deaktivere tvungen SSL.", +"From address" => "Fra adresse", "Server address" => "Server-adresse", "Port" => "Port", +"SMTP Username" => "SMTP-brukernavn", +"SMTP Password" => "SMTP-passord", +"Send email" => "Send e-post", "Log" => "Logg", "Log level" => "Loggnivå", "More" => "Mer", @@ -105,6 +117,7 @@ $TRANSLATIONS = array( "Add your App" => "Legg til din App", "More Apps" => "Flere Apps", "Select an App" => "Velg en app", +"Documentation:" => "Dokumentasjon:", "See application page at apps.owncloud.com" => "Se applikasjonens side på apps.owncloud.org", "-licensed by " => "-lisensiert av ", "Administrator Documentation" => "Administratordokumentasjon", diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php index 43695d8b28..48f4428303 100644 --- a/settings/l10n/sv.php +++ b/settings/l10n/sv.php @@ -1,9 +1,18 @@ "Ogiltigt värde gavs för %s", +"Saved" => "Sparad", +"test email settings" => "testa e-post inställningar", +"If you received this email, the settings seem to be correct." => "Om du mottog detta e-postmeddelande, verkar dina inställningar vara korrekta.", +"A problem occurred while sending the e-mail. Please revisit your settings." => "Ett problem har uppstått under tiden e-post sändes. Vänligen se över dina inställningar.", "Email sent" => "E-post skickat", +"You need to set your user email before being able to send test emails." => "Du behöver ställa in din användares e-postadress före du kan skicka test e-post.", +"Send mode" => "Sändningsläge", "Encryption" => "Kryptering", +"Authentication method" => "Autentiseringsmetod", "Unable to load list from App Store" => "Kan inte ladda listan från App Store", "Authentication error" => "Fel vid autentisering", +"Your full name has been changed." => "Ditt fulla namn har ändrats", "Unable to change full name" => "Kunde inte ändra hela namnet", "Group already exists" => "Gruppen finns redan", "Unable to add group" => "Kan inte lägga till grupp", @@ -23,7 +32,9 @@ $TRANSLATIONS = array( "Wrong admin recovery password. Please check the password and try again." => "Felaktigt återställningslösenord för administratör. Kolla lösenordet och prova igen.", "Back-end doesn't support password change, but the users encryption key was successfully updated." => "Gränssnittet stödjer inte byte av lösenord, men användarnas krypteringsnyckel blev uppdaterad.", "Unable to change password" => "Kunde inte ändra lösenord", +"Sending..." => "Skickar...", "User Documentation" => "Användardokumentation", +"Admin Documentation" => "Administratörsdokumentation", "Update to {appversion}" => "Uppdatera till {appversion}", "Disable" => "Deaktivera", "Enable" => "Aktivera", @@ -36,6 +47,11 @@ $TRANSLATIONS = array( "Update" => "Uppdatera", "Updated" => "Uppdaterad", "Select a profile picture" => "Välj en profilbild", +"Very weak password" => "Väldigt svagt lösenord", +"Weak password" => "Svagt lösenord", +"So-so password" => "Okej lösenord", +"Good password" => "Bra lösenord", +"Strong password" => "Starkt lösenord", "Decrypting files... Please wait, this can take some time." => "Dekrypterar filer... Vänligen vänta, detta kan ta en stund.", "deleted" => "raderad", "undo" => "ångra", @@ -49,19 +65,37 @@ $TRANSLATIONS = array( "A valid password must be provided" => "Ett giltigt lösenord måste anges", "Warning: Home directory for user \"{user}\" already exists" => "Varning: Hem katalogen för varje användare \"{användare}\" finns redan", "__language_name__" => "__language_name__", +"Everything (fatal issues, errors, warnings, info, debug)" => "Allting (allvarliga fel, fel, varningar, info, debug)", +"Info, warnings, errors and fatal issues" => "Info, varningar och allvarliga fel", +"Warnings, errors and fatal issues" => "Varningar, fel ocg allvarliga fel", +"Errors and fatal issues" => "Fel och allvarliga fel", +"Fatal issues only" => "Endast allvarliga fel", "None" => "Ingen", "Login" => "Logga in", +"Plain" => "Enkel", +"NT LAN Manager" => "NT LAN Manager", +"SSL" => "SSL", +"TLS" => "TLS", "Security Warning" => "Säkerhetsvarning", +"You are accessing %s via HTTP. We strongly suggest you configure your server to require using HTTPS instead." => "Du ansluter till %s via HTTP. Vi rekommenderar starkt att du konfigurerar din server att använda HTTPS istället.", "Your data directory and your files are probably accessible from the internet. The .htaccess file is not working. We strongly suggest that you configure your webserver in a way that the data directory is no longer accessible or you move the data directory outside the webserver document root." => "Din datakatalog och dina filer är förmodligen åtkomliga från internet. Filen .htaccess fungerar inte. Vi rekommenderar starkt att du konfigurerar din webbserver så att datakatalogen inte längre är åtkomlig eller du flyttar datakatalogen utanför webbserverns rotkatalog.", "Setup Warning" => "Installationsvarning", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Din webbserver är inte korrekt konfigurerad för att tillåta filsynkronisering eftersom WebDAV inte verkar fungera.", "Please double check the installation guides." => "Vänligen dubbelkolla igenom installationsguiden.", "Module 'fileinfo' missing" => "Modulen \"fileinfo\" saknas", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." => "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.", +"Your PHP version is outdated" => "Din PHP version är föråldrad", +"Your PHP version is outdated. We strongly recommend to update to 5.3.8 or newer because older versions are known to be broken. It is possible that this installation is not working correctly." => "Din PHP version är föråldrad. Vi rekommenderar starkt att uppdatera till 5.3.8 eller nyare eftersom äldre versioner är obrukbara. Det är möjligt att denna installation inte fungerar korrekt.", "Locale not working" => "Locale fungerar inte", +"System locale can not be set to a one which supports UTF-8." => "Systemspråk kan inte ställas in till ett som stödjer UTF-8.", +"This means that there might be problems with certain characters in file names." => "Detta betyder att där kan komma att uppstå problem med vissa tecken i filnamn.", +"We strongly suggest to install the required packages on your system to support one of the following locales: %s." => "Vi rekommenderar starkt att installera de paket som krävs på ditt system för att stödja en av följande systemspråk: %s.", "Internet connection not working" => "Internetförbindelsen fungerar inte", "This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features." => "Servern har ingen fungerande internetanslutning. Detta innebär att en del av de funktioner som montering av extern lagring, notifieringar om uppdateringar eller installation av 3: e part appar inte fungerar. Åtkomst till filer och skicka e-postmeddelanden fungerar troligen inte heller. Vi rekommenderar starkt att aktivera en internetuppkoppling för denna server om du vill ha alla funktioner.", "Cron" => "Cron", +"Last cron was executed at %s." => "Sista cron kördes vid %s", +"Last cron was executed at %s. This is more than an hour ago, something seems wrong." => "Sista cron kördes vid %s. Detta är mer än en timme sedan, något verkar fel.", +"Cron was not executed yet!" => "Cron kördes inte ännu!", "Execute one task with each page loaded" => "Exekvera en uppgift vid varje sidladdning", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." => "cron.php är registrerad som en webcron service att ropa på cron.php varje 15 minuter över http.", "Use systems cron service to call the cron.php file every 15 minutes." => "Använd systemets cron service att ropa på cron.php filen varje 15 minuter.", @@ -82,9 +116,17 @@ $TRANSLATIONS = array( "Enforce HTTPS" => "Kräv HTTPS", "Forces the clients to connect to %s via an encrypted connection." => "Tvingar klienterna att ansluta till %s via en krypterad anslutning.", "Please connect to your %s via HTTPS to enable or disable the SSL enforcement." => "Anslut till din %s via HTTPS för att aktivera/deaktivera SSL", +"Email Server" => "E-postserver", +"This is used for sending out notifications." => "Detta används för att skicka ut notifieringar.", +"From address" => "Från adress", +"Authentication required" => "Autentisering krävs", "Server address" => "Serveradress", "Port" => "Port", "Credentials" => "Inloggningsuppgifter", +"SMTP Username" => "SMTP användarnamn", +"SMTP Password" => "SMTP lösenord", +"Test email settings" => "Testa e-post inställninggar", +"Send email" => "Skicka e-post", "Log" => "Logg", "Log level" => "Nivå på loggning", "More" => "Mer", @@ -94,7 +136,9 @@ $TRANSLATIONS = array( "Add your App" => "Lägg till din applikation", "More Apps" => "Fler Appar", "Select an App" => "Välj en App", +"Documentation:" => "Dokumentation:", "See application page at apps.owncloud.com" => "Se programsida på apps.owncloud.com", +"See application website" => "Se applikationens webbplats", "-licensed by " => "-licensierad av ", "Administrator Documentation" => "Administratörsdokumentation", "Online Documentation" => "Onlinedokumentation", @@ -113,17 +157,20 @@ $TRANSLATIONS = array( "Full Name" => "Hela namnet", "Email" => "E-post", "Your email address" => "Din e-postadress", +"Fill in an email address to enable password recovery and receive notifications" => "Fyll i en e-postadress för att aktivera återställning av lösenord och mottagande av notifieringar", "Profile picture" => "Profilbild", "Upload new" => "Ladda upp ny", "Select new from Files" => "Välj ny från filer", "Remove image" => "Radera bild", "Either png or jpg. Ideally square but you will be able to crop it." => "Antingen png eller jpg. Helst fyrkantig, men du kommer att kunna beskära den.", +"Your avatar is provided by your original account." => "Din avatar tillhandahålls av ditt ursprungliga konto.", "Cancel" => "Avbryt", "Choose as profile image" => "Välj som profilbild", "Language" => "Språk", "Help translate" => "Hjälp att översätta", "WebDAV" => "WebDAV", "Use this address to access your Files via WebDAV" => "Använd denna adress till nå dina Filer via WebDAV", +"The encryption app is no longer enabled, please decrypt all your files" => "Krypteringsapplikationen är inte längre aktiverad, vänligen dekryptera alla dina filer", "Log-in password" => "Inloggningslösenord", "Decrypt all Files" => "Dekryptera alla filer", "Login Name" => "Inloggningsnamn", @@ -131,6 +178,7 @@ $TRANSLATIONS = array( "Admin Recovery Password" => "Admin återställningslösenord", "Enter the recovery password in order to recover the users files during password change" => "Enter the recovery password in order to recover the users files during password change", "Default Storage" => "Förvald lagring", +"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" => "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")", "Unlimited" => "Obegränsad", "Other" => "Annat", "Username" => "Användarnamn",