diff --git a/.htaccess b/.htaccess index 5b0ec05825..c841f67861 100644 --- a/.htaccess +++ b/.htaccess @@ -1,4 +1,3 @@ -# Version: 9.0.0 @@ -51,9 +50,6 @@ # Rewrite rules for `front_controller_active` Options -MultiViews - - DirectorySlash off - RewriteRule ^core/js/oc.js$ index.php/core/js/oc.js [PT,E=PATH_INFO:$1] RewriteRule ^core/preview.png$ index.php/core/preview.png [PT,E=PATH_INFO:$1] RewriteCond %{REQUEST_FILENAME} !\.(css|js|svg|gif|png|html|ttf|woff)$ diff --git a/.mailmap b/.mailmap index ec69fc5318..7d6e6c7ee5 100644 --- a/.mailmap +++ b/.mailmap @@ -305,7 +305,8 @@ Robin Appelman Robin Robin Appelman Robin Appelman Robin Appelman Robin Appelman Robin Appelman Robin Appelman -Robin McCorkell Robin McCorkell +Robin McCorkell Robin McCorkell +Robin McCorkell Robin McCorkell Rodrigo Hjort Roeland Jago Douma Roeland Jago Douma rok diff --git a/.mention-bot b/.mention-bot index b342edbd21..c805917bee 100644 --- a/.mention-bot +++ b/.mention-bot @@ -5,7 +5,11 @@ { "name": "DeepDiver1975", "files": ["apps/dav/**"] + }, + { + "name": "Xenopathic", + "files": ["apps/files_external/**"] } ], - "userBlacklist": ["owncloud-bot"] + "userBlacklist": ["owncloud-bot", "scrutinizer-auto-fixer"] } diff --git a/.travis.yml b/.travis.yml index c599a0c192..4f79311c33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,22 +25,22 @@ before_install: install: - sh -c "if [ '$TEST_DAV' = '1' ]; then bash tests/travis/install.sh $DB; fi" + - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC/install.sh; fi" + script: - sh -c "if [ '$TEST_DAV' != '1' ]; then echo \"Not testing DAV\"; fi" - sh -c "if [ '$TEST_DAV' = '1' ]; then echo \"Testing DAV\"; fi" - - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC.sh; fi" + - sh -c "if [ '$TEST_DAV' = '1' ]; then bash apps/dav/tests/travis/$TC/script.sh; fi" matrix: include: - php: 5.4 env: DB=pgsql;TC=litmus-v1 - php: 5.4 - env: DB=sqlite;TC=carddavtester -# - php: 5.4 -# env: DB=pgsql;TC=carddavtester -# - php: 5.4 -# env: DB=mysql;TC=caldavtester + env: DB=sqlite;TC=carddav + - php: 5.4 + env: DB=sqlite;TC=caldav fast_finish: true diff --git a/3rdparty b/3rdparty index a7b34d6f83..a5b2a3cdb0 160000 --- a/3rdparty +++ b/3rdparty @@ -1 +1 @@ -Subproject commit a7b34d6f831c8fa363f389d27acd0150128fc0b9 +Subproject commit a5b2a3cdb03cbf5a7246c6185cd4d473f697803e diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ecd2b1e49e..66d54c61e9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,20 +18,8 @@ If you have questions about how to install or use ownCloud, please direct these - [iOS client](https://github.com/owncloud/ios/issues) - [Desktop client](https://github.com/owncloud/client/issues) - [Documentation](https://github.com/owncloud/documentation/issues) - - Apps: - - [Activity](https://github.com/owncloud/activity/issues) - - [Bookmarks](https://github.com/owncloud/bookmarks/issues) - - [Calendar](https://github.com/owncloud/calendar/issues) - - [Contacts](https://github.com/owncloud/contacts/issues) - - [Documents](https://github.com/owncloud/documents/issues) - - [Gallery](https://github.com/owncloud/gallery/issues) - - [Mail](https://github.com/owncloud/mail/issues) - - [Music](https://github.com/owncloud/music/issues) - - [News](https://github.com/owncloud/news/issues) - - [Notes](https://github.com/owncloud/notes/issues) - - [Shorty](https://github.com/owncloud/shorty/issues) - - [Tasks](https://github.com/owncloud/tasks/issues) - - [All other apps](https://github.com/owncloud/apps/issues) + - [ownCloud apps](https://github.com/owncloud/core/wiki/Maintainers#apps-repo) + * Report the issue using our [template][template], it includes all the information we need to track down the issue. Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues. diff --git a/README.md b/README.md index 1e8f6e828a..c1a9043ce7 100644 --- a/README.md +++ b/README.md @@ -27,10 +27,14 @@ https://doc.owncloud.org/server/9.0/developer_manual/app/index.html ## Contribution Guidelines https://owncloud.org/contribute/ +## Support +Learn about the diffrent ways you can get support for ownCloud: https://owncloud.org/support/ + ## Get in touch * :clipboard: [Forum](https://forum.owncloud.org) * :envelope: [Mailing list](https://mailman.owncloud.org/mailman/listinfo) -* :busts_in_silhouette: [IRC channel](https://webchat.freenode.net/?channels=owncloud) +* :hash: [IRC channel](https://webchat.freenode.net/?channels=owncloud) +* :busts_in_silhouette: [Facebook] (https://facebook.com/ownclouders) * :hatching_chick: [Twitter](https://twitter.com/ownClouders) ## Important notice on translations diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php new file mode 100644 index 0000000000..950754ee94 --- /dev/null +++ b/apps/dav/appinfo/app.php @@ -0,0 +1,42 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +$cm = \OC::$server->getContactsManager(); +$cm->register(function() use ($cm) { + $db = \OC::$server->getDatabaseConnection(); + $userId = \OC::$server->getUserSession()->getUser()->getUID(); + $principal = new \OCA\DAV\Connector\Sabre\Principal( + \OC::$server->getConfig(), + \OC::$server->getUserManager() + ); + $cardDav = new \OCA\DAV\CardDAV\CardDavBackend($db, $principal, \OC::$server->getLogger()); + $addressBooks = $cardDav->getAddressBooksForUser("principals/$userId"); + foreach ($addressBooks as $addressBookInfo) { + $addressBook = new \OCA\DAV\CardDAV\AddressBook($cardDav, $addressBookInfo); + $cm->registerAddressBook( + new OCA\DAV\CardDAV\AddressBookImpl( + $addressBook, + $addressBookInfo, + $cardDav + ) + ); + } +}); diff --git a/apps/dav/appinfo/database.xml b/apps/dav/appinfo/database.xml index 48641c2be6..50c8aa7d8c 100644 --- a/apps/dav/appinfo/database.xml +++ b/apps/dav/appinfo/database.xml @@ -571,6 +571,78 @@ CREATE TABLE calendarobjects ( + + *dbprefix*cards_properties + + + id + integer + 0 + true + 1 + true + 11 + + + addressbookid + integer + + true + 11 + + + cardid + integer + + true + true + 11 + + + name + text + + false + 64 + + + value + text + + false + 255 + + + preferred + integer + 1 + true + 4 + + + card_contactid_index + + cardid + ascending + + + + card_name_index + + name + ascending + + + + card_value_index + + value + ascending + + + +
+ *dbprefix*dav_shares diff --git a/apps/dav/appinfo/register_command.php b/apps/dav/appinfo/register_command.php index af41036cdd..603832e0c4 100644 --- a/apps/dav/appinfo/register_command.php +++ b/apps/dav/appinfo/register_command.php @@ -8,8 +8,9 @@ $config = \OC::$server->getConfig(); $dbConnection = \OC::$server->getDatabaseConnection(); $userManager = OC::$server->getUserManager(); $config = \OC::$server->getConfig(); +$logger = \OC::$server->getLogger(); /** @var Symfony\Component\Console\Application $application */ -$application->add(new CreateAddressBook($userManager, $dbConnection, $config)); +$application->add(new CreateAddressBook($userManager, $dbConnection, $config, $logger)); $application->add(new CreateCalendar($userManager, $dbConnection)); $application->add(new SyncSystemAddressBook($userManager, $dbConnection, $config)); diff --git a/apps/dav/command/createaddressbook.php b/apps/dav/command/createaddressbook.php index ea89e7aa0a..7b70cea7f8 100644 --- a/apps/dav/command/createaddressbook.php +++ b/apps/dav/command/createaddressbook.php @@ -6,6 +6,7 @@ use OCA\DAV\CardDAV\CardDavBackend; use OCA\DAV\Connector\Sabre\Principal; use OCP\IConfig; use OCP\IDBConnection; +use OCP\ILogger; use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; @@ -23,15 +24,25 @@ class CreateAddressBook extends Command { /** @var IConfig */ private $config; + /** @var ILogger */ + private $logger; + /** * @param IUserManager $userManager * @param IDBConnection $dbConnection + * @param IConfig $config + * @param ILogger $logger */ - function __construct(IUserManager $userManager, IDBConnection $dbConnection, IConfig $config) { + function __construct(IUserManager $userManager, + IDBConnection $dbConnection, + IConfig $config, + ILogger $logger + ) { parent::__construct(); $this->userManager = $userManager; $this->dbConnection = $dbConnection; $this->config = $config; + $this->logger = $logger; } protected function configure() { diff --git a/apps/dav/lib/carddav/addressbookimpl.php b/apps/dav/lib/carddav/addressbookimpl.php new file mode 100644 index 0000000000..838ef5aec6 --- /dev/null +++ b/apps/dav/lib/carddav/addressbookimpl.php @@ -0,0 +1,219 @@ + + * @author Björn Schießle + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\DAV\CardDAV; + +use OCP\Constants; +use OCP\IAddressBook; +use Sabre\VObject\Component\VCard; +use Sabre\VObject\Property\Text; +use Sabre\VObject\Reader; +use Sabre\VObject\UUIDUtil; + +class AddressBookImpl implements IAddressBook { + + /** @var CardDavBackend */ + private $backend; + + /** @var array */ + private $addressBookInfo; + + /** @var AddressBook */ + private $addressBook; + + /** + * AddressBookImpl constructor. + * + * @param AddressBook $addressBook + * @param array $addressBookInfo + * @param CardDavBackend $backend + */ + public function __construct( + AddressBook $addressBook, + array $addressBookInfo, + CardDavBackend $backend) { + + $this->addressBook = $addressBook; + $this->addressBookInfo = $addressBookInfo; + $this->backend = $backend; + } + + /** + * @return string defining the technical unique key + * @since 5.0.0 + */ + public function getKey() { + return $this->addressBookInfo['id']; + } + + /** + * In comparison to getKey() this function returns a human readable (maybe translated) name + * + * @return mixed + * @since 5.0.0 + */ + public function getDisplayName() { + return $this->addressBookInfo['{DAV:}displayname']; + } + + /** + * @param string $pattern which should match within the $searchProperties + * @param array $searchProperties defines the properties within the query pattern should match + * @param array $options - for future use. One should always have options! + * @return array an array of contacts which are arrays of key-value-pairs + * @since 5.0.0 + */ + public function search($pattern, $searchProperties, $options) { + $result = $this->backend->search($this->getKey(), $pattern, $searchProperties); + + $vCards = []; + foreach ($result as $cardData) { + $vCards[] = $this->vCard2Array($this->readCard($cardData)); + } + + return $vCards; + } + + /** + * @param array $properties this array if key-value-pairs defines a contact + * @return array an array representing the contact just created or updated + * @since 5.0.0 + */ + public function createOrUpdate($properties) { + $update = false; + if (!isset($properties['UID'])) { // create a new contact + $uid = $this->createUid(); + $uri = $uid . '.vcf'; + $vCard = $this->createEmptyVCard($uid); + } else { // update existing contact + $uid = $properties['UID']; + $uri = $uid . '.vcf'; + $vCardData = $this->backend->getCard($this->getKey(), $uri); + $vCard = $this->readCard($vCardData['carddata']); + $update = true; + } + + foreach ($properties as $key => $value) { + $vCard->$key = $vCard->createProperty($key, $value); + } + + if ($update) { + $this->backend->updateCard($this->getKey(), $uri, $vCard->serialize()); + } else { + $this->backend->createCard($this->getKey(), $uri, $vCard->serialize()); + } + + return $this->vCard2Array($vCard); + + } + + /** + * @return mixed + * @since 5.0.0 + */ + public function getPermissions() { + $permissions = $this->addressBook->getACL(); + $result = 0; + foreach ($permissions as $permission) { + switch($permission['privilege']) { + case '{DAV:}read': + $result |= Constants::PERMISSION_READ; + break; + case '{DAV:}write': + $result |= Constants::PERMISSION_CREATE; + $result |= Constants::PERMISSION_UPDATE; + break; + case '{DAV:}all': + $result |= Constants::PERMISSION_ALL; + break; + } + } + + return $result; + } + + /** + * @param object $id the unique identifier to a contact + * @return bool successful or not + * @since 5.0.0 + */ + public function delete($id) { + $uri = $this->backend->getCardUri($id); + return $this->backend->deleteCard($this->addressBookInfo['id'], $uri); + } + + /** + * read vCard data into a vCard object + * + * @param string $cardData + * @return VCard + */ + protected function readCard($cardData) { + return Reader::read($cardData); + } + + /** + * create UID for contact + * + * @return string + */ + protected function createUid() { + do { + $uid = $this->getUid(); + } while (!empty($this->backend->getContact($uid . '.vcf'))); + + return $uid; + } + + /** + * getUid is only there for testing, use createUid instead + */ + protected function getUid() { + return UUIDUtil::getUUID(); + } + + /** + * create empty vcard + * + * @param string $uid + * @return VCard + */ + protected function createEmptyVCard($uid) { + $vCard = new VCard(); + $vCard->add(new Text($vCard, 'UID', $uid)); + return $vCard; + } + + /** + * create array with all vCard properties + * + * @param VCard $vCard + * @return array + */ + protected function vCard2Array(VCard $vCard) { + $result = []; + foreach ($vCard->children as $property) { + $result[$property->name] = $property->getValue(); + } + return $result; + } +} diff --git a/apps/dav/lib/carddav/carddavbackend.php b/apps/dav/lib/carddav/carddavbackend.php index 29b056672b..95175b20d1 100644 --- a/apps/dav/lib/carddav/carddavbackend.php +++ b/apps/dav/lib/carddav/carddavbackend.php @@ -23,19 +23,48 @@ namespace OCA\DAV\CardDAV; use OCA\DAV\Connector\Sabre\Principal; +use OCP\IDBConnection; +use OCP\ILogger; use Sabre\CardDAV\Backend\BackendInterface; use Sabre\CardDAV\Backend\SyncSupport; use Sabre\CardDAV\Plugin; use Sabre\DAV\Exception\BadRequest; +use Sabre\VObject\Component\VCard; +use Sabre\VObject\Reader; class CardDavBackend implements BackendInterface, SyncSupport { /** @var Principal */ private $principalBackend; - public function __construct(\OCP\IDBConnection $db, Principal $principalBackend) { + /** @var ILogger */ + private $logger; + + /** @var string */ + private $dbCardsTable = 'cards'; + + /** @var string */ + private $dbCardsPropertiesTable = 'cards_properties'; + + /** @var IDBConnection */ + private $db; + + /** @var array properties to index */ + public static $indexProperties = array( + 'BDAY', 'UID', 'N', 'FN', 'TITLE', 'ROLE', 'NOTE', 'NICKNAME', + 'ORG', 'CATEGORIES', 'EMAIL', 'TEL', 'IMPP', 'ADR', 'URL', 'GEO', 'CLOUD'); + + /** + * CardDavBackend constructor. + * + * @param IDBConnection $db + * @param Principal $principalBackend + * @param ILogger $logger + */ + public function __construct(IDBConnection $db, Principal $principalBackend, ILogger $logger) { $this->db = $db; $this->principalBackend = $principalBackend; + $this->logger = $logger; } /** @@ -263,6 +292,11 @@ class CardDavBackend implements BackendInterface, SyncSupport { ->where($query->expr()->eq('resourceid', $query->createNamedParameter($addressBookId))) ->andWhere($query->expr()->eq('type', $query->createNamedParameter('addressbook'))) ->execute(); + + $query->delete($this->dbCardsPropertiesTable) + ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) + ->execute(); + } /** @@ -398,7 +432,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { $query = $this->db->getQueryBuilder(); $query->insert('cards') ->values([ - 'carddata' => $query->createNamedParameter($cardData), + 'carddata' => $query->createNamedParameter($cardData, \PDO::PARAM_LOB), 'uri' => $query->createNamedParameter($cardUri), 'lastmodified' => $query->createNamedParameter(time()), 'addressbookid' => $query->createNamedParameter($addressBookId), @@ -408,6 +442,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { ->execute(); $this->addChange($addressBookId, $cardUri, 1); + $this->updateProperties($addressBookId, $cardUri, $cardData); return '"' . $etag . '"'; } @@ -451,6 +486,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { ->execute(); $this->addChange($addressBookId, $cardUri, 2); + $this->updateProperties($addressBookId, $cardUri, $cardData); return '"' . $etag . '"'; } @@ -463,6 +499,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { * @return bool */ function deleteCard($addressBookId, $cardUri) { + $cardId = $this->getCardId($cardUri); $query = $this->db->getQueryBuilder(); $ret = $query->delete('cards') ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) @@ -471,7 +508,12 @@ class CardDavBackend implements BackendInterface, SyncSupport { $this->addChange($addressBookId, $cardUri, 3); - return $ret === 1; + if ($ret === 1) { + $this->purgeProperties($addressBookId, $cardId); + return true; + } + + return false; } /** @@ -637,6 +679,87 @@ class CardDavBackend implements BackendInterface, SyncSupport { } } + /** + * search contact + * + * @param int $addressBookId + * @param string $pattern which should match within the $searchProperties + * @param array $searchProperties defines the properties within the query pattern should match + * @return array an array of contacts which are arrays of key-value-pairs + */ + public function search($addressBookId, $pattern, $searchProperties) { + $query = $this->db->getQueryBuilder(); + $query2 = $this->db->getQueryBuilder(); + $query2->selectDistinct('cp.cardid')->from($this->dbCardsPropertiesTable, 'cp'); + foreach ($searchProperties as $property) { + $query2->orWhere( + $query2->expr()->andX( + $query2->expr()->eq('cp.name', $query->createNamedParameter($property)), + $query2->expr()->like('cp.value', $query->createNamedParameter('%' . $this->db->escapeLikeParameter($pattern) . '%')) + ) + ); + } + $query2->andWhere($query2->expr()->eq('cp.addressbookid', $query->createNamedParameter($addressBookId))); + + $query->select('c.carddata')->from($this->dbCardsTable, 'c') + ->where($query->expr()->in('c.id', $query->createFunction($query2->getSQL()))); + + $result = $query->execute(); + $cards = $result->fetchAll(); + + $result->closeCursor(); + + return array_map(function($array) {return $this->readBlob($array['carddata']);}, $cards); + + } + + /** + * get URI from a given contact + * + * @param int $id + * @return string + */ + public function getCardUri($id) { + $query = $this->db->getQueryBuilder(); + $query->select('uri')->from($this->dbCardsTable) + ->where($query->expr()->eq('id', $query->createParameter('id'))) + ->setParameter('id', $id); + + $result = $query->execute(); + $uri = $result->fetch(); + $result->closeCursor(); + + if (!isset($uri['uri'])) { + throw new \InvalidArgumentException('Card does not exists: ' . $id); + } + + return $uri['uri']; + } + + /** + * return contact with the given URI + * + * @param string $uri + * @returns array + */ + public function getContact($uri) { + $result = []; + $query = $this->db->getQueryBuilder(); + $query->select('*')->from($this->dbCardsTable) + ->where($query->expr()->eq('uri', $query->createParameter('uri'))) + ->setParameter('uri', $uri); + $queryResult = $query->execute(); + $contact = $queryResult->fetch(); + $queryResult->closeCursor(); + + if (is_array($contact)) { + $result = $contact; + } + + return $result; + } + + /** * @param string $addressBookUri * @param string $element @@ -658,7 +781,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { } // remove the share if it already exists - $this->unshare($addressBookUri, $element); + $this->unshare($addressBookUri, $element['href']); $query = $this->db->getQueryBuilder(); $query->insert('dav_shares') @@ -677,8 +800,7 @@ class CardDavBackend implements BackendInterface, SyncSupport { * @param string $element */ private function unshare($addressBookUri, $element) { - $user = $element['href']; - $parts = explode(':', $user, 2); + $parts = explode(':', $element, 2); if ($parts[0] !== 'principal') { return; } @@ -734,4 +856,93 @@ class CardDavBackend implements BackendInterface, SyncSupport { return $shares; } + + /** + * update properties table + * + * @param int $addressBookId + * @param string $cardUri + * @param string $vCardSerialized + */ + protected function updateProperties($addressBookId, $cardUri, $vCardSerialized) { + $cardId = $this->getCardId($cardUri); + $vCard = $this->readCard($vCardSerialized); + + $this->purgeProperties($addressBookId, $cardId); + + $query = $this->db->getQueryBuilder(); + $query->insert($this->dbCardsPropertiesTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter($addressBookId), + 'cardid' => $query->createNamedParameter($cardId), + 'name' => $query->createParameter('name'), + 'value' => $query->createParameter('value'), + 'preferred' => $query->createParameter('preferred') + ] + ); + + foreach ($vCard->children as $property) { + if(!in_array($property->name, self::$indexProperties)) { + continue; + } + $preferred = 0; + foreach($property->parameters as $parameter) { + if ($parameter->name == 'TYPE' && strtoupper($parameter->getValue()) == 'PREF') { + $preferred = 1; + break; + } + } + $query->setParameter('name', $property->name); + $query->setParameter('value', substr($property->getValue(), 0, 254)); + $query->setParameter('preferred', $preferred); + $query->execute(); + } + } + + /** + * read vCard data into a vCard object + * + * @param string $cardData + * @return VCard + */ + protected function readCard($cardData) { + return Reader::read($cardData); + } + + /** + * delete all properties from a given card + * + * @param int $addressBookId + * @param int $cardId + */ + protected function purgeProperties($addressBookId, $cardId) { + $query = $this->db->getQueryBuilder(); + $query->delete($this->dbCardsPropertiesTable) + ->where($query->expr()->eq('cardid', $query->createNamedParameter($cardId))) + ->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))); + $query->execute(); + } + + /** + * get ID from a given contact + * + * @param string $uri + * @return int + */ + protected function getCardId($uri) { + $query = $this->db->getQueryBuilder(); + $query->select('id')->from($this->dbCardsTable) + ->where($query->expr()->eq('uri', $query->createNamedParameter($uri))); + + $result = $query->execute(); + $cardIds = $result->fetch(); + $result->closeCursor(); + + if (!isset($cardIds['id'])) { + throw new \InvalidArgumentException('Card does not exists: ' . $uri); + } + + return (int)$cardIds['id']; + } } diff --git a/apps/dav/lib/carddav/sharing/plugin.php b/apps/dav/lib/carddav/sharing/plugin.php index 99c6f8f912..fd415b4566 100644 --- a/apps/dav/lib/carddav/sharing/plugin.php +++ b/apps/dav/lib/carddav/sharing/plugin.php @@ -9,11 +9,24 @@ use Sabre\DAV\Exception\NotFound; use Sabre\DAV\Server; use Sabre\DAV\ServerPlugin; use Sabre\DAV\XMLUtil; +use Sabre\DAVACL\IACL; use Sabre\HTTP\RequestInterface; use Sabre\HTTP\ResponseInterface; class Plugin extends ServerPlugin { + /** @var Auth */ + private $auth; + + /** @var IRequest */ + private $request; + + /** + * Plugin constructor. + * + * @param Auth $authBackEnd + * @param IRequest $request + */ public function __construct(Auth $authBackEnd, IRequest $request) { $this->auth = $authBackEnd; $this->request = $request; @@ -68,6 +81,7 @@ class Plugin extends ServerPlugin { function initialize(Server $server) { $this->server = $server; $server->resourceTypeMapping['OCA\\DAV\CardDAV\\ISharedAddressbook'] = '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}shared'; + $this->server->xml->elementMap['{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}share'] = 'OCA\\DAV\\CardDAV\\Sharing\\Xml\\ShareRequest'; $this->server->on('method:POST', [$this, 'httpPost']); } @@ -109,9 +123,7 @@ class Plugin extends ServerPlugin { // re-populated the request body with the existing data. $request->setBody($requestBody); - $dom = XMLUtil::loadDOMDocument($requestBody); - - $documentType = XMLUtil::toClarkNotation($dom->firstChild); + $message = $this->server->xml->parse($requestBody, $request->getUrl(), $documentType); switch ($documentType) { @@ -124,19 +136,18 @@ class Plugin extends ServerPlugin { return; } - $this->server->transactionType = 'post-calendar-share'; + $this->server->transactionType = 'post-oc-addressbook-share'; // Getting ACL info $acl = $this->server->getPlugin('acl'); // If there's no ACL support, we allow everything if ($acl) { + /** @var \Sabre\DAVACL\Plugin $acl */ $acl->checkPrivileges($path, '{DAV:}write'); } - $mutations = $this->parseShareRequest($dom); - - $node->updateShares($mutations[0], $mutations[1]); + $node->updateShares($message->set, $message->remove); $response->setStatus(200); // Adding this because sending a response body may cause issues, @@ -148,59 +159,6 @@ class Plugin extends ServerPlugin { } } - /** - * Parses the 'share' POST request. - * - * This method returns an array, containing two arrays. - * The first array is a list of new sharees. Every element is a struct - * containing a: - * * href element. (usually a mailto: address) - * * commonName element (often a first and lastname, but can also be - * false) - * * readOnly (true or false) - * * summary (A description of the share, can also be false) - * - * The second array is a list of sharees that are to be removed. This is - * just a simple array with 'hrefs'. - * - * @param \DOMDocument $dom - * @return array - */ - function parseShareRequest(\DOMDocument $dom) { - - $xpath = new \DOMXPath($dom); - $xpath->registerNamespace('cs', \Sabre\CardDAV\Plugin::NS_CARDDAV); - $xpath->registerNamespace('d', 'urn:DAV'); - - $set = []; - $elems = $xpath->query('cs:set'); - - for ($i = 0; $i < $elems->length; $i++) { - - $xset = $elems->item($i); - $set[] = [ - 'href' => $xpath->evaluate('string(d:href)', $xset), - 'commonName' => $xpath->evaluate('string(cs:common-name)', $xset), - 'summary' => $xpath->evaluate('string(cs:summary)', $xset), - 'readOnly' => $xpath->evaluate('boolean(cs:read)', $xset) !== false - ]; - - } - - $remove = []; - $elems = $xpath->query('cs:remove'); - - for ($i = 0; $i < $elems->length; $i++) { - - $xremove = $elems->item($i); - $remove[] = $xpath->evaluate('string(d:href)', $xremove); - - } - - return [$set, $remove]; - - } - private function protectAgainstCSRF() { $user = $this->auth->getCurrentUser(); if ($this->auth->isDavAuthenticated($user)) { diff --git a/apps/dav/lib/carddav/sharing/xml/sharerequest.php b/apps/dav/lib/carddav/sharing/xml/sharerequest.php new file mode 100644 index 0000000000..175c5ffc30 --- /dev/null +++ b/apps/dav/lib/carddav/sharing/xml/sharerequest.php @@ -0,0 +1,65 @@ +set = $set; + $this->remove = $remove; + + } + + static function xmlDeserialize(Reader $reader) { + + $elems = $reader->parseInnerTree([ + '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV. '}set' => 'Sabre\\Xml\\Element\\KeyValue', + '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}remove' => 'Sabre\\Xml\\Element\\KeyValue', + ]); + + $set = []; + $remove = []; + + foreach ($elems as $elem) { + switch ($elem['name']) { + + case '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}set' : + $sharee = $elem['value']; + + $sumElem = '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}summary'; + $commonName = '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}common-name'; + + $set[] = [ + 'href' => $sharee['{DAV:}href'], + 'commonName' => isset($sharee[$commonName]) ? $sharee[$commonName] : null, + 'summary' => isset($sharee[$sumElem]) ? $sharee[$sumElem] : null, + 'readOnly' => !array_key_exists('{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}read-write', $sharee), + ]; + break; + + case '{' . \Sabre\CardDAV\Plugin::NS_CARDDAV . '}remove' : + $remove[] = $elem['value']['{DAV:}href']; + break; + + } + } + + return new self($set, $remove); + + } + +} diff --git a/apps/dav/lib/connector/sabre/auth.php b/apps/dav/lib/connector/sabre/auth.php index 4f31977023..7f4f4a531b 100644 --- a/apps/dav/lib/connector/sabre/auth.php +++ b/apps/dav/lib/connector/sabre/auth.php @@ -160,7 +160,7 @@ class Auth extends AbstractBasic { return [true, $this->principalPrefix . $user]; } - if (!$this->userSession->isLoggedIn() && $request->getHeader('X-Requested-With') === 'XMLHttpRequest') { + if (!$this->userSession->isLoggedIn() && in_array('XMLHttpRequest', explode(',', $request->getHeader('X-Requested-With')))) { // do not re-authenticate over ajax, use dummy auth name to prevent browser popup $response->addHeader('WWW-Authenticate','DummyBasic realm="' . $this->realm . '"'); $response->setStatus(401); diff --git a/apps/dav/lib/connector/sabre/file.php b/apps/dav/lib/connector/sabre/file.php index c66f627c0a..6a0a39d04e 100644 --- a/apps/dav/lib/connector/sabre/file.php +++ b/apps/dav/lib/connector/sabre/file.php @@ -329,7 +329,7 @@ class File extends Node implements IFile { if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'PROPFIND') { return $mimeType; } - return \OC_Helper::getSecureMimeType($mimeType); + return \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType); } /** diff --git a/apps/dav/lib/connector/sabre/filesplugin.php b/apps/dav/lib/connector/sabre/filesplugin.php index 1c78e9dc84..aa75628174 100644 --- a/apps/dav/lib/connector/sabre/filesplugin.php +++ b/apps/dav/lib/connector/sabre/filesplugin.php @@ -31,6 +31,7 @@ use \Sabre\DAV\PropFind; use \Sabre\DAV\PropPatch; use \Sabre\HTTP\RequestInterface; use \Sabre\HTTP\ResponseInterface; +use OCP\Files\StorageNotAvailableException; class FilesPlugin extends \Sabre\DAV\ServerPlugin { @@ -225,9 +226,13 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { if ($node instanceof \OCA\DAV\Connector\Sabre\File) { $propFind->handle(self::DOWNLOADURL_PROPERTYNAME, function() use ($node) { /** @var $node \OCA\DAV\Connector\Sabre\File */ - $directDownloadUrl = $node->getDirectDownload(); - if (isset($directDownloadUrl['url'])) { - return $directDownloadUrl['url']; + try { + $directDownloadUrl = $node->getDirectDownload(); + if (isset($directDownloadUrl['url'])) { + return $directDownloadUrl['url']; + } + } catch (StorageNotAvailableException $e) { + return false; } return false; }); diff --git a/apps/dav/lib/connector/sabre/objecttree.php b/apps/dav/lib/connector/sabre/objecttree.php index 2e9c1b9916..809d202aea 100644 --- a/apps/dav/lib/connector/sabre/objecttree.php +++ b/apps/dav/lib/connector/sabre/objecttree.php @@ -190,7 +190,7 @@ class ObjectTree extends \Sabre\DAV\Tree { $targetNodeExists = $this->nodeExists($destinationPath); $sourceNode = $this->getNodeForPath($sourcePath); if ($sourceNode instanceof \Sabre\DAV\ICollection && $targetNodeExists) { - throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode . ', target exists'); + throw new \Sabre\DAV\Exception\Forbidden('Could not copy directory ' . $sourceNode->getName() . ', target exists'); } list($sourceDir,) = \Sabre\HTTP\URLUtil::splitPath($sourcePath); list($destinationDir,) = \Sabre\HTTP\URLUtil::splitPath($destinationPath); diff --git a/apps/dav/lib/rootcollection.php b/apps/dav/lib/rootcollection.php index 9ee32822bb..96cc2bbc46 100644 --- a/apps/dav/lib/rootcollection.php +++ b/apps/dav/lib/rootcollection.php @@ -41,11 +41,11 @@ class RootCollection extends SimpleCollection { \OC::$server->getSystemTagObjectMapper() ); - $usersCardDavBackend = new CardDavBackend($db, $principalBackend); + $usersCardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getLogger()); $usersAddressBookRoot = new AddressBookRoot($principalBackend, $usersCardDavBackend, 'principals/users'); $usersAddressBookRoot->disableListing = $disableListing; - $systemCardDavBackend = new CardDavBackend($db, $principalBackend); + $systemCardDavBackend = new CardDavBackend($db, $principalBackend, \OC::$server->getLogger()); $systemAddressBookRoot = new AddressBookRoot(new SystemPrincipalBackend(), $systemCardDavBackend, 'principals/system'); $systemAddressBookRoot->disableListing = $disableListing; diff --git a/apps/dav/lib/systemtag/systemtagsbyidcollection.php b/apps/dav/lib/systemtag/systemtagsbyidcollection.php index e7b7b6d0ac..974d04efa5 100644 --- a/apps/dav/lib/systemtag/systemtagsbyidcollection.php +++ b/apps/dav/lib/systemtag/systemtagsbyidcollection.php @@ -46,14 +46,25 @@ class SystemTagsByIdCollection implements ICollection { $this->tagManager = $tagManager; } + /** + * @param string $name + * @param resource|string $data Initial payload + * @throws Forbidden + */ function createFile($name, $data = null) { throw new Forbidden('Cannot create tags by id'); } + /** + * @param string $name + */ function createDirectory($name) { throw new Forbidden('Permission denied to create collections'); } + /** + * @param string $name + */ function getChild($name) { try { $tags = $this->tagManager->getTagsByIds([$name]); @@ -72,6 +83,9 @@ class SystemTagsByIdCollection implements ICollection { }, $tags); } + /** + * @param string $name + */ function childExists($name) { try { $this->tagManager->getTagsByIds([$name]); diff --git a/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php b/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php index e544073613..2a28b9c83a 100644 --- a/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php +++ b/apps/dav/lib/systemtag/systemtagsobjecttypecollection.php @@ -61,14 +61,25 @@ class SystemTagsObjectTypeCollection implements ICollection { $this->objectType = $objectType; } + /** + * @param string $name + * @param resource|string $data Initial payload + * @throws Forbidden + */ function createFile($name, $data = null) { throw new Forbidden('Permission denied to create nodes'); } + /** + * @param string $name + */ function createDirectory($name) { throw new Forbidden('Permission denied to create collections'); } + /** + * @param string $objectId + */ function getChild($objectId) { return new SystemTagsObjectMappingCollection( $objectId, @@ -83,6 +94,9 @@ class SystemTagsObjectTypeCollection implements ICollection { throw new MethodNotAllowed(); } + /** + * @param string $name + */ function childExists($name) { return true; } @@ -95,6 +109,9 @@ class SystemTagsObjectTypeCollection implements ICollection { return $this->objectType; } + /** + * @param string $name + */ function setName($name) { throw new Forbidden('Permission denied to rename this collection'); } diff --git a/apps/dav/tests/travis/caldav/install.sh b/apps/dav/tests/travis/caldav/install.sh new file mode 100644 index 0000000000..e836e37f86 --- /dev/null +++ b/apps/dav/tests/travis/caldav/install.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + + +if [ ! -f CalDAVTester/run.py ]; then + cd "$SCRIPTPATH" + git clone https://github.com/DeepDiver1975/CalDAVTester.git + cd "$SCRIPTPATH/CalDAVTester" + python run.py -s + cd "$SCRIPTPATH" +fi + +# create test user +cd "$SCRIPTPATH/../../../../../" +OC_PASS=user01 php occ user:add --password-from-env user01 +php occ dav:create-calendar user01 calendar +OC_PASS=user02 php occ user:add --password-from-env user02 +php occ dav:create-calendar user02 calendar +cd "$SCRIPTPATH/../../../../../" diff --git a/apps/dav/tests/travis/caldav/script.sh b/apps/dav/tests/travis/caldav/script.sh new file mode 100644 index 0000000000..9a818b553f --- /dev/null +++ b/apps/dav/tests/travis/caldav/script.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + +# start the server +php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." & + +sleep 30 + +# run the tests +cd "$SCRIPTPATH/CalDAVTester" +PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/../caldavtest/config/serverinfo.xml" -o cdt.txt \ + "$SCRIPTPATH/../caldavtest/tests/CalDAV/current-user-principal.xml" +RESULT=$? + +tail "$/../../../../../data-autotest/owncloud.log" + +exit $RESULT diff --git a/apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml b/apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml new file mode 100644 index 0000000000..d01058fee0 --- /dev/null +++ b/apps/dav/tests/travis/caldavtest/tests/CalDAV/current-user-principal.xml @@ -0,0 +1,151 @@ + + + + + + + + Test DAV:current-user-principal support + + + caldav + current-user-principal + + + + + + + own-root + + + Check for authenticated property on / + + PROPFIND + $root: +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/current-user-principal/1.xml + + + propfindItems + + okprops + $principaluri1:]]> + + +
+
+ + Check for authenticated property on / (user02) + + PROPFIND + $root: +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/current-user-principal/1.xml + + + propfindItems + + okprops + $principaluri2:]]> + + +
+
+
+ + + + Check for authenticated property on / + + PROPFIND + $principalcollection: +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/current-user-principal/1.xml + + + propfindItems + + okprops + $principaluri1:]]> + + +
+
+ + Check for unauthenticated property on / + + PROPFIND + $principals_users: +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/current-user-principal/1.xml + + + statusCode + + status + 401 + + +
+
+ + Check for authenticated property on / (user02) + + PROPFIND + $principalcollection: +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/current-user-principal/1.xml + + + propfindItems + + okprops + $principaluri2:]]> + + +
+
+
+ + +
diff --git a/apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml b/apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml new file mode 100644 index 0000000000..c675af8206 --- /dev/null +++ b/apps/dav/tests/travis/caldavtest/tests/CalDAV/sync-report.xml @@ -0,0 +1,3512 @@ + + + + + + + + + caldav + sync-report + + + + + MKCALENDAR + $calendarhome1:/synccalendar1/ + + + PUT + $calendarhome1:/synccalendar1/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/1.txt + + + + PUT + $calendarhome1:/synccalendar1/2.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/2.txt + + + + MKCALENDAR + $calendarhome1:/synccalendar2/ + + + PUT + $calendarhome1:/synccalendar2/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/4.txt + + + + PUT + $calendarhome1:/synccalendar2/2.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/5.txt + + + + + + + Not on calendars + + PROPFIND + $calendars:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/1.xml + + + xmlElementMatch + + notexists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + + + + propfindItems + + okprops + {DAV:}supported-report-set + + + badprops + {DAV:}sync-token + + +
+
+ + On calendar-home + + PROPFIND + $calendarhome1:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/1.xml + + + + sync-report-home + + xmlElementMatch + + exists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + $verify-property-prefix:/{DAV:}sync-token[+data:,] + + + + + sync-report-home + + propfindItems + + okprops + {DAV:}supported-report-set + {DAV:}sync-token + + + + + sync-report-home + + xmlElementMatch + + notexists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + + + + + sync-report-home + + propfindItems + + okprops + {DAV:}supported-report-set + + + badprops + {DAV:}sync-token + + +
+
+ + On calendar + + PROPFIND + $calendarhome1:/synccalendar1/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/1.xml + + + xmlElementMatch + + exists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + $verify-property-prefix:/{DAV:}sync-token[+data:,] + + + + propfindItems + + okprops + {DAV:}supported-report-set + {DAV:}sync-token + + +
+
+ + On inbox + + PROPFIND + $inboxpath1:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/1.xml + + + xmlElementMatch + + exists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + + + + propfindItems + + okprops + {DAV:}supported-report-set + {DAV:}sync-token + + +
+
+ + + sync-report-home + + Look for options header tag on principal + + OPTIONS + $principal1: + + header + + header + *DAV$.*calendarserver-home-sync[^-]* + + + + +
+ + + + + sync-report-home + + sync-level:1, depth:0 + + REPORT + $calendarhome1:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + sync-level:1, depth:1 + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + sync-level:1, depth:infinity + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + sync-level:infinity, depth:0 + + REPORT + $calendarhome1:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/9.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + sync-level:infinity, depth:1 + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/9.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + sync-level:infinity, depth:infinity + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/9.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+ + sync-level:1, depth:0 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + sync-level:1, depth:1 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + sync-level:1, depth:infinity + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + sync-level:infinity, depth:0 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/9.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + sync-level:infinity, depth:1 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/9.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + sync-level:infinity, depth:infinity + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/9.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + Bad sync-level + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/10.xml + + + statusCode + + status + 400 + + +
+
+
+ + + + initial query - calendar collection depth:1 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + initial query - home depth:1 + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + initial query - home depth:infinity + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+ + add new resource + + PUT + $calendarhome1:/synccalendar1/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/3.txt + + + statusCode + + + + + new resource - calendar collection depth:1 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + 3.ics + + +
+
+ + + sync-report-home + + new resource - home depth:1 + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + new resource - home depth:infinity + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar1/3.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+ + remove new resource + + DELETE + $calendarhome1:/synccalendar1/3.ics + + statusCode + + + + + remove new resource - calendar collection depth:1 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + remove new resource - home depth:1 + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + remove new resource - home depth:infinity + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar1/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/1.txt + + + statusCode + + + + + changed resource - calendar collection depth:1 + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + +
+
+ + + sync-report-home + + changed resource - home depth:1 + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar2/ + + + badhrefs + $dropbox:/ + + +
+
+ + + sync-report-home + + changed resource - home depth:infinity + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar1/ + synccalendar1/1.ics + synccalendar1/2.ics + synccalendar2/ + synccalendar2/1.ics + synccalendar2/2.ics + + + badhrefs + $dropbox:/ + + +
+
+
+ + + + initial query - grab token + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar1/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/3.txt + + + statusCode + + + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + 3.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + remove resource (treated as new) + + DELETE + $calendarhome1:/synccalendar1/3.ics + + statusCode + + + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + badhrefs + 3.ics + + +
+
+ + remove resource (treated as old) + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/4.xml + + + multistatusItems + + badhrefs + 3.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar1/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/1.txt + + + statusCode + + + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + 1.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + no change + + REPORT + $calendarhome1:/synccalendar1/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + initial query + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/5.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar2/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/6.txt + + + statusCode + + + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/5.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + 3.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + +
+
+ + remove resource new resource + + DELETE + $calendarhome1:/synccalendar2/3.ics + + statusCode + + + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/5.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar2/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/4.txt + + + statusCode + + + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/5.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + +
+
+
+ + + + initial query - grab token + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/5.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + 1.ics + 2.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar2/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/6.txt + + + statusCode + + + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + okhrefs + 3.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + remove resource (treated as new) + + DELETE + $calendarhome1:/synccalendar2/3.ics + + statusCode + + + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + badhrefs + 3.ics + + +
+
+ + remove resource (treated as old) + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/7.xml + + + multistatusItems + + badhrefs + 3.ics + + + + propfindItems + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar2/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/4.txt + + + statusCode + + + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + okhrefs + 1.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + no change + + REPORT + $calendarhome1:/synccalendar2/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + sync-report-home + + + Initialize + + DELETE + $calendarhome1:/synccalendar1/ + + + DELETE + $calendarhome1:/synccalendar2/ + + + MKCALENDAR + $calendarhome1:/synccalendar3/ + + + PUT + $calendarhome1:/synccalendar3/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/7.txt + + + + PUT + $calendarhome1:/synccalendar3/2.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/8.txt + + + + MKCALENDAR + $calendarhome1:/synccalendar4/ + + + PUT + $calendarhome1:/synccalendar4/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/10.txt + + + + PUT + $calendarhome1:/synccalendar4/2.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/11.txt + + + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar3/1.ics + synccalendar3/2.ics + synccalendar4/ + synccalendar4/1.ics + synccalendar4/2.ics + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar3/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/9.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + synccalendar3/ + synccalendar3/3.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + remove resource (treated as new) + + DELETE + $calendarhome1:/synccalendar3/3.ics + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + badhrefs + synccalendar3/3.ics + + +
+
+ + remove resource (treated as old) + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/4.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + badhrefs + synccalendar3/3.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar3/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/7.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + synccalendar3/ + synccalendar3/1.ics + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + no change + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/5.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar3/1.ics + synccalendar3/2.ics + synccalendar4/ + synccalendar4/1.ics + synccalendar4/2.ics + + + badhrefs + $dropbox:/ + + + + propfindItems + + ignore + $calendarhome1:/$outbox:/ + $calendarhome1:/$freebusy: + $calendarhome1:/$notification:/ + $calendarhome1:/$dropbox:/ + + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar4/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/12.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + okhrefs + synccalendar4/ + synccalendar4/3.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + remove resource (treated as new) + + DELETE + $calendarhome1:/synccalendar4/3.ics + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + okhrefs + synccalendar4/ + + + badhrefs + synccalendar4/3.ics + + +
+
+ + remove resource (treated as old) + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/7.xml + + + multistatusItems + + okhrefs + synccalendar4/ + + + badhrefs + synccalendar4/3.ics + + + + propfindItems + + count + 2 + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar4/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/10.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + okhrefs + synccalendar4/ + synccalendar4/1.ics + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + no change + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/6.xml + + + multistatusItems + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar3/1.ics + synccalendar3/2.ics + synccalendar4/ + synccalendar4/1.ics + synccalendar4/2.ics + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + remove resource then calendar + + DELETE + $calendarhome1:/synccalendar3/1.ics + + statusCode + + + + DELETE + $calendarhome1:/synccalendar3/ + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + badhrefs + synccalendar3/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + add calendar - test last sync + + MKCALENDAR + $calendarhome1:/synccalendar3/ + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/4.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + +
+
+ + add calendar - test previous sync + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + +
+
+
+ + + + sync-report-home + + + Initialize + + DELETE + $calendarhome1:/synccalendar1/ + + + DELETE + $calendarhome1:/synccalendar2/ + + + MKCALENDAR + $calendarhome1:/synccalendar3/ + + + PUT + $calendarhome1:/synccalendar3/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/7.txt + + + + PUT + $calendarhome1:/synccalendar3/2.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/8.txt + + + + MKCALENDAR + $calendarhome1:/synccalendar4/ + + + PUT + $calendarhome1:/synccalendar4/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/10.txt + + + + PUT + $calendarhome1:/synccalendar4/2.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/11.txt + + + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar3/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/9.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + remove resource (treated as new) + + DELETE + $calendarhome1:/synccalendar3/3.ics + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + +
+
+ + remove resource (treated as old) + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/13.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar3/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/7.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + no change + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/14.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + + + badhrefs + $dropbox:/ + + + + propfindItems + + ignore + $calendarhome1:/$outbox:/ + $calendarhome1:/$freebusy: + $calendarhome1:/$notification:/ + $calendarhome1:/$dropbox:/ + + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + new resource + + PUT + $calendarhome1:/synccalendar4/3.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/12.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/15.xml + + + multistatusItems + + okhrefs + synccalendar4/ + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + remove resource (treated as new) + + DELETE + $calendarhome1:/synccalendar4/3.ics + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/15.xml + + + multistatusItems + + okhrefs + synccalendar4/ + + +
+
+ + remove resource (treated as old) + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/16.xml + + + multistatusItems + + okhrefs + synccalendar4/ + + + + propfindItems + + count + 1 + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + changed resource + + PUT + $calendarhome1:/synccalendar4/1.ics + + text/calendar; charset=utf-8 + Resource/CalDAV/reports/put/10.txt + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/15.xml + + + multistatusItems + + okhrefs + synccalendar4/ + + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + no change + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/15.xml + + + multistatusItems + + + propfindItems + + okprops + {DAV:}getcontenttype + {DAV:}getetag + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + remove resource then calendar + + DELETE + $calendarhome1:/synccalendar3/1.ics + + statusCode + + + + DELETE + $calendarhome1:/synccalendar3/ + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + badhrefs + synccalendar3/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken2: + +
+
+ + add calendar - test last sync + + MKCALENDAR + $calendarhome1:/synccalendar3/ + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/13.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + +
+
+ + add calendar - test previous sync + + REPORT + $calendarhome1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + +
+
+
+ + + + initial query + + REPORT + $inboxpath1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_sync_extra_items: + + +
+
+
+ + + + initial query + + REPORT + $calendarpath1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/11.xml + + + prepostcondition + + error + {DAV:}valid-sync-token + + +
+
+
+ + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/2.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + synccalendar4/1.ics + synccalendar4/2.ics + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Change a property + + PROPPATCH + $calendarhome1:/synccalendar3/ + + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/17.xml + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Remove a property + + PROPPATCH + $calendarhome1:/synccalendar3/ + + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/18.xml + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/3.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Change a property + + PROPPATCH + $calendarhome1:/synccalendar3/ + + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/17.xml + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Remove a property + + PROPPATCH + $calendarhome1:/synccalendar3/ + + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/18.xml + + + statusCode + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + synccalendar3/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/8.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + + + badhrefs + $dropbox:/ + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Change property on Inbox + + PROPPATCH + $inboxpath1:/ + + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/19.xml + + + propfindItems + + okprops + {urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL + + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + $inbox:/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Reset the property + + PROPPATCH + $inboxpath1:/ + + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/20.xml + + + propfindItems + + okprops + {urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL + + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/12.xml + + + multistatusItems + + okhrefs + $inbox:/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + + sync-report-home + + + initial query - grab token + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/22.xml + + + multistatusItems + + okhrefs + $calendar_home_items_initial_sync: + synccalendar3/ + synccalendar4/ + + + badhrefs + $dropbox:/ + + + + dataString + + contains + opaque + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Change property on calendar + + PROPPATCH + $calendarpath1:/ + + text/xml; charset=utf-8 + Resource/Common/PROPPATCH/calendar-transp-transparent.xml + + + propfindItems + + okprops + {urn:ietf:params:xml:ns:caldav}schedule-calendar-transp + + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/23.xml + + + multistatusItems + + okhrefs + $calendar:/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + dataString + + contains + transparent + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+ + Reset the property + + PROPPATCH + $calendarpath1:/ + + text/xml; charset=utf-8 + Resource/Common/PROPPATCH/calendar-transp-opaque.xml + + + propfindItems + + okprops + {urn:ietf:params:xml:ns:caldav}schedule-calendar-transp + + + + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/23.xml + + + multistatusItems + + okhrefs + $calendar:/ + + + + xmlElementMatch + + exists + /{DAV:}multistatus/{DAV:}sync-token[!$synctoken1:] + + + + dataString + + contains + opaque + + + + /{DAV:}multistatus/{DAV:}sync-token + $synctoken1: + +
+
+
+ + + + + + sync-report-home + + + initial query - no minimal + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/24.xml + + + dataString + + contains + foobar + + +
+
+ + initial query - with minimal + + REPORT + $calendarhome1:/ +
+ Depth + infinity +
+
+ Prefer + return=minimal +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/24.xml + + + dataString + + notcontains + foobar + + +
+
+
+ + + + + + sync-report-limit + + Limit not allowed + + REPORT + $calendarhome1:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CalDAV/reports/sync/21.xml + + + prepostcondition + + error + {DAV:}number-of-matches-within-limits + + +
+
+
+ + + +
diff --git a/apps/dav/tests/travis/carddav/install.sh b/apps/dav/tests/travis/carddav/install.sh new file mode 100644 index 0000000000..fa5d141ce0 --- /dev/null +++ b/apps/dav/tests/travis/carddav/install.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + + +if [ ! -f CalDAVTester/run.py ]; then + cd "$SCRIPTPATH" + git clone https://github.com/DeepDiver1975/CalDAVTester.git + cd "$SCRIPTPATH/CalDAVTester" + python run.py -s + cd "$SCRIPTPATH" +fi + +# create test user +cd "$SCRIPTPATH/../../../../../" +OC_PASS=user01 php occ user:add --password-from-env user01 +php occ dav:create-addressbook user01 addressbook +OC_PASS=user02 php occ user:add --password-from-env user02 +php occ dav:create-addressbook user02 addressbook +cd "$SCRIPTPATH/../../../../../" diff --git a/apps/dav/tests/travis/carddav/script.sh b/apps/dav/tests/travis/carddav/script.sh new file mode 100644 index 0000000000..46a6a98e27 --- /dev/null +++ b/apps/dav/tests/travis/carddav/script.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + +# start the server +php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." & + +sleep 30 + +# run the tests +cd "$SCRIPTPATH/CalDAVTester" +PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/../caldavtest/config/serverinfo.xml" -o cdt.txt \ + "$SCRIPTPATH/../caldavtest/tests/CardDAV/current-user-principal.xml" \ + "$SCRIPTPATH/../caldavtest/tests/CardDAV/sync-report.xml" +RESULT=$? + +tail "$/../../../../../data-autotest/owncloud.log" + +exit $RESULT diff --git a/apps/dav/tests/travis/carddavtester.sh b/apps/dav/tests/travis/carddavtester.sh deleted file mode 100644 index 17f7e8eb4a..0000000000 --- a/apps/dav/tests/travis/carddavtester.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -SCRIPT=`realpath $0` -SCRIPTPATH=`dirname $SCRIPT` - - -# start the server -php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." & - - -if [ ! -f CalDAVTester/run.py ]; then - cd "$SCRIPTPATH" - git clone https://github.com/DeepDiver1975/CalDAVTester.git - cd "$SCRIPTPATH/CalDAVTester" - python run.py -s - cd "$SCRIPTPATH" -fi - -# create test user -cd "$SCRIPTPATH/../../../../" -OC_PASS=user01 php occ user:add --password-from-env user01 -php occ dav:create-addressbook user01 addressbook -OC_PASS=user02 php occ user:add --password-from-env user02 -php occ dav:create-addressbook user02 addressbook -cd "$SCRIPTPATH/../../../../" - -# run the tests -cd "$SCRIPTPATH/CalDAVTester" -PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/caldavtest/config/serverinfo.xml" -o cdt.txt \ - "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml" \ - "$SCRIPTPATH/caldavtest/tests/CardDAV/sync-report.xml" -RESULT=$? - -tail "$SCRIPTPATH/../../../../data-autotest/owncloud.log" - -exit $RESULT diff --git a/apps/dav/tests/travis/litmus-v1.sh b/apps/dav/tests/travis/litmus-v1/install.sh similarity index 52% rename from apps/dav/tests/travis/litmus-v1.sh rename to apps/dav/tests/travis/litmus-v1/install.sh index ab0690f392..0ee2cb08d8 100644 --- a/apps/dav/tests/travis/litmus-v1.sh +++ b/apps/dav/tests/travis/litmus-v1/install.sh @@ -1,11 +1,4 @@ #!/usr/bin/env bash -SCRIPT=`realpath $0` -SCRIPTPATH=`dirname $SCRIPT` - - -# start the server -php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." & - # compile litmus if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then @@ -17,7 +10,3 @@ if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then ./configure make fi - -# run the tests -cd /tmp/litmus/litmus-0.13 -make URL=http://127.0.0.1:8888/remote.php/webdav CREDS="admin admin" TESTS="basic copymove props locks" check diff --git a/apps/dav/tests/travis/litmus-v1/script.sh b/apps/dav/tests/travis/litmus-v1/script.sh new file mode 100644 index 0000000000..cba305683b --- /dev/null +++ b/apps/dav/tests/travis/litmus-v1/script.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + + +# start the server +php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." & + +sleep 30 + +# run the tests +cd /tmp/litmus/litmus-0.13 +make URL=http://127.0.0.1:8888/remote.php/webdav CREDS="admin admin" TESTS="basic copymove props locks" check diff --git a/apps/dav/tests/travis/litmus-v2.sh b/apps/dav/tests/travis/litmus-v2/install.sh similarity index 51% rename from apps/dav/tests/travis/litmus-v2.sh rename to apps/dav/tests/travis/litmus-v2/install.sh index 892ad327d3..0ee2cb08d8 100644 --- a/apps/dav/tests/travis/litmus-v2.sh +++ b/apps/dav/tests/travis/litmus-v2/install.sh @@ -1,11 +1,4 @@ #!/usr/bin/env bash -SCRIPT=`realpath $0` -SCRIPTPATH=`dirname $SCRIPT` - - -# start the server -php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../.." & - # compile litmus if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then @@ -17,7 +10,3 @@ if [ ! -f /tmp/litmus/litmus-0.13.tar.gz ]; then ./configure make fi - -# run the tests -cd /tmp/litmus/litmus-0.13 -make URL=http://127.0.0.1:8888/remote.php/dav/files/admin CREDS="admin admin" TESTS="basic copymove props locks" check diff --git a/apps/dav/tests/travis/litmus-v2/script.sh b/apps/dav/tests/travis/litmus-v2/script.sh new file mode 100644 index 0000000000..966ed5a205 --- /dev/null +++ b/apps/dav/tests/travis/litmus-v2/script.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +SCRIPT=`realpath $0` +SCRIPTPATH=`dirname $SCRIPT` + + +# start the server +php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." & + +sleep 30 + +# run the tests +cd /tmp/litmus/litmus-0.13 +make URL=http://127.0.0.1:8888/remote.php/dav/files/admin CREDS="admin admin" TESTS="basic copymove props locks" check diff --git a/apps/dav/tests/unit/carddav/addressbookimpltest.php b/apps/dav/tests/unit/carddav/addressbookimpltest.php new file mode 100644 index 0000000000..73053888b9 --- /dev/null +++ b/apps/dav/tests/unit/carddav/addressbookimpltest.php @@ -0,0 +1,287 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + + +namespace OCA\DAV\Tests\Unit\CardDAV; + + +use OCA\DAV\CardDAV\AddressBook; +use OCA\DAV\CardDAV\AddressBookImpl; +use OCA\DAV\CardDAV\CardDavBackend; +use Sabre\VObject\Component\VCard; +use Sabre\VObject\Property\Text; +use Test\TestCase; + +class AddressBookImplTest extends TestCase { + + /** @var AddressBookImpl */ + private $addressBookImpl; + + /** @var array */ + private $addressBookInfo; + + /** @var AddressBook | \PHPUnit_Framework_MockObject_MockObject */ + private $addressBook; + + /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject */ + private $backend; + + /** @var VCard | \PHPUnit_Framework_MockObject_MockObject */ + private $vCard; + + public function setUp() { + parent::setUp(); + + $this->addressBookInfo = [ + 'id' => 42, + '{DAV:}displayname' => 'display name' + ]; + $this->addressBook = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBook') + ->disableOriginalConstructor()->getMock(); + $this->backend = $this->getMockBuilder('\OCA\DAV\CardDAV\CardDavBackend') + ->disableOriginalConstructor()->getMock(); + $this->vCard = $this->getMock('Sabre\VObject\Component\VCard'); + + $this->addressBookImpl = new AddressBookImpl( + $this->addressBook, + $this->addressBookInfo, + $this->backend + ); + } + + public function testGetKey() { + $this->assertSame($this->addressBookInfo['id'], + $this->addressBookImpl->getKey()); + } + + public function testGetDisplayName() { + $this->assertSame($this->addressBookInfo['{DAV:}displayname'], + $this->addressBookImpl->getDisplayName()); + } + + public function testSearch() { + + /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */ + $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl') + ->setConstructorArgs( + [ + $this->addressBook, + $this->addressBookInfo, + $this->backend + ] + ) + ->setMethods(['vCard2Array', 'readCard']) + ->getMock(); + + $pattern = 'pattern'; + $searchProperties = 'properties'; + + $this->backend->expects($this->once())->method('search') + ->with($this->addressBookInfo['id'], $pattern, $searchProperties) + ->willReturn( + [ + 'cardData1', + 'cardData2' + ] + ); + + $addressBookImpl->expects($this->exactly(2))->method('readCard') + ->willReturn($this->vCard); + $addressBookImpl->expects($this->exactly(2))->method('vCard2Array') + ->with($this->vCard)->willReturn('vCard'); + + $result = $addressBookImpl->search($pattern, $searchProperties, []); + $this->assertTrue((is_array($result))); + $this->assertSame(2, count($result)); + } + + /** + * @dataProvider dataTestCreate + * + * @param array $properties + */ + public function testCreate($properties) { + + $uid = 'uid'; + + /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */ + $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl') + ->setConstructorArgs( + [ + $this->addressBook, + $this->addressBookInfo, + $this->backend + ] + ) + ->setMethods(['vCard2Array', 'createUid', 'createEmptyVCard']) + ->getMock(); + + $addressBookImpl->expects($this->once())->method('createUid') + ->willReturn($uid); + $addressBookImpl->expects($this->once())->method('createEmptyVCard') + ->with($uid)->willReturn($this->vCard); + $this->vCard->expects($this->exactly(count($properties))) + ->method('createProperty'); + $this->backend->expects($this->once())->method('createCard'); + $this->backend->expects($this->never())->method('updateCard'); + $this->backend->expects($this->never())->method('getCard'); + $addressBookImpl->expects($this->once())->method('vCard2Array') + ->with($this->vCard)->willReturn(true); + + $this->assertTrue($addressBookImpl->createOrUpdate($properties)); + } + + public function dataTestCreate() { + return [ + [[]], + [['FN' => 'John Doe']] + ]; + } + + public function testUpdate() { + + $uid = 'uid'; + $properties = ['UID' => $uid, 'FN' => 'John Doe']; + + /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */ + $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl') + ->setConstructorArgs( + [ + $this->addressBook, + $this->addressBookInfo, + $this->backend + ] + ) + ->setMethods(['vCard2Array', 'createUid', 'createEmptyVCard', 'readCard']) + ->getMock(); + + $addressBookImpl->expects($this->never())->method('createUid'); + $addressBookImpl->expects($this->never())->method('createEmptyVCard'); + $this->backend->expects($this->once())->method('getCard') + ->with($this->addressBookInfo['id'], $uid . '.vcf') + ->willReturn(['carddata' => 'data']); + $addressBookImpl->expects($this->once())->method('readCard') + ->with('data')->willReturn($this->vCard); + $this->vCard->expects($this->exactly(count($properties))) + ->method('createProperty'); + $this->backend->expects($this->never())->method('createCard'); + $this->backend->expects($this->once())->method('updateCard'); + $addressBookImpl->expects($this->once())->method('vCard2Array') + ->with($this->vCard)->willReturn(true); + + $this->assertTrue($addressBookImpl->createOrUpdate($properties)); + } + + /** + * @dataProvider dataTestGetPermissions + * + * @param array $permissions + * @param int $expected + */ + public function testGetPermissions($permissions, $expected) { + $this->addressBook->expects($this->once())->method('getACL') + ->willReturn($permissions); + + $this->assertSame($expected, + $this->addressBookImpl->getPermissions() + ); + } + + public function dataTestGetPermissions() { + return [ + [[], 0], + [[['privilege' => '{DAV:}read']], 1], + [[['privilege' => '{DAV:}write']], 6], + [[['privilege' => '{DAV:}all']], 31], + [[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write']], 7], + [[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}all']], 31], + [[['privilege' => '{DAV:}all'],['privilege' => '{DAV:}write']], 31], + [[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write'],['privilege' => '{DAV:}all']], 31], + [[['privilege' => '{DAV:}all'],['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write']], 31], + ]; + } + + public function testDelete() { + $cardId = 1; + $cardUri = 'cardUri'; + $this->backend->expects($this->once())->method('getCardUri') + ->with($cardId)->willReturn($cardUri); + $this->backend->expects($this->once())->method('deleteCard') + ->with($this->addressBookInfo['id'], $cardUri) + ->willReturn(true); + + $this->assertTrue($this->addressBookImpl->delete($cardId)); + } + + public function testReadCard() { + $vCard = new VCard(); + $vCard->add(new Text($vCard, 'UID', 'uid')); + $vCardSerialized = $vCard->serialize(); + + $result = $this->invokePrivate($this->addressBookImpl, 'readCard', [$vCardSerialized]); + $resultSerialized = $result->serialize(); + + $this->assertSame($vCardSerialized, $resultSerialized); + } + + public function testCreateUid() { + /** @var \PHPUnit_Framework_MockObject_MockObject | AddressBookImpl $addressBookImpl */ + $addressBookImpl = $this->getMockBuilder('OCA\DAV\CardDAV\AddressBookImpl') + ->setConstructorArgs( + [ + $this->addressBook, + $this->addressBookInfo, + $this->backend + ] + ) + ->setMethods(['getUid']) + ->getMock(); + + $addressBookImpl->expects($this->at(0))->method('getUid')->willReturn('uid0'); + $addressBookImpl->expects($this->at(1))->method('getUid')->willReturn('uid1'); + + // simulate that 'uid0' already exists, so the second uid will be returned + $this->backend->expects($this->exactly(2))->method('getContact') + ->willReturnCallback( + function($uid) { + return ($uid === 'uid0.vcf'); + } + ); + + $this->assertSame('uid1', + $this->invokePrivate($addressBookImpl, 'createUid', []) + ); + + } + + public function testCreateEmptyVCard() { + $uid = 'uid'; + $expectedVCard = new VCard(); + $expectedVCard->add(new Text($expectedVCard, 'UID', $uid)); + $expectedVCardSerialized = $expectedVCard->serialize(); + + $result = $this->invokePrivate($this->addressBookImpl, 'createEmptyVCard', [$uid]); + $resultSerialized = $result->serialize(); + + $this->assertSame($expectedVCardSerialized, $resultSerialized); + } + +} diff --git a/apps/dav/tests/unit/carddav/carddavbackendtest.php b/apps/dav/tests/unit/carddav/carddavbackendtest.php index dd5e205242..fe01aa65cc 100644 --- a/apps/dav/tests/unit/carddav/carddavbackendtest.php +++ b/apps/dav/tests/unit/carddav/carddavbackendtest.php @@ -20,8 +20,14 @@ */ namespace OCA\DAV\Tests\Unit\CardDAV; +use InvalidArgumentException; use OCA\DAV\CardDAV\CardDavBackend; +use OCA\DAV\Connector\Sabre\Principal; +use OCP\IDBConnection; +use OCP\ILogger; use Sabre\DAV\PropPatch; +use Sabre\VObject\Component\VCard; +use Sabre\VObject\Property\Text; use Test\TestCase; /** @@ -36,22 +42,46 @@ class CardDavBackendTest extends TestCase { /** @var CardDavBackend */ private $backend; + /** @var Principal | \PHPUnit_Framework_MockObject_MockObject */ + private $principal; + + /** @var ILogger | \PHPUnit_Framework_MockObject_MockObject */ + private $logger; + + /** @var IDBConnection */ + private $db; + + /** @var string */ + private $dbCardsTable = 'cards'; + + /** @var string */ + private $dbCardsPropertiesTable = 'cards_properties'; + const UNIT_TEST_USER = 'carddav-unit-test'; public function setUp() { parent::setUp(); - $principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') + $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal') ->disableOriginalConstructor() ->setMethods(['getPrincipalByPath']) ->getMock(); - $principal->method('getPrincipalByPath') + $this->principal->method('getPrincipalByPath') ->willReturn([ 'uri' => 'principals/best-friend' ]); + $this->logger = $this->getMock('\OCP\ILogger'); + + $this->db = \OC::$server->getDatabaseConnection(); + + $this->backend = new CardDavBackend($this->db, $this->principal, $this->logger); + + // start every test with a empty cards_properties and cards table + $query = $this->db->getQueryBuilder(); + $query->delete('cards_properties')->execute(); + $query = $this->db->getQueryBuilder(); + $query->delete('cards')->execute(); - $db = \OC::$server->getDatabaseConnection(); - $this->backend = new CardDavBackend($db, $principal); $this->tearDown(); } @@ -96,23 +126,32 @@ class CardDavBackendTest extends TestCase { } public function testCardOperations() { + + /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */ + $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') + ->setConstructorArgs([$this->db, $this->principal, $this->logger]) + ->setMethods(['updateProperties', 'purgeProperties'])->getMock(); + // create a new address book - $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); - $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); + $backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); + $books = $backend->getAddressBooksForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($books)); $bookId = $books[0]['id']; - // create a card $uri = $this->getUniqueID('card'); - $this->backend->createCard($bookId, $uri, ''); + // updateProperties is expected twice, once for createCard and once for updateCard + $backend->expects($this->at(0))->method('updateProperties')->with($bookId, $uri, ''); + $backend->expects($this->at(1))->method('updateProperties')->with($bookId, $uri, '***'); + // create a card + $backend->createCard($bookId, $uri, ''); // get all the cards - $cards = $this->backend->getCards($bookId); + $cards = $backend->getCards($bookId); $this->assertEquals(1, count($cards)); $this->assertEquals('', $cards[0]['carddata']); // get the cards - $card = $this->backend->getCard($bookId, $uri); + $card = $backend->getCard($bookId, $uri); $this->assertNotNull($card); $this->assertArrayHasKey('id', $card); $this->assertArrayHasKey('uri', $card); @@ -122,17 +161,23 @@ class CardDavBackendTest extends TestCase { $this->assertEquals('', $card['carddata']); // update the card - $this->backend->updateCard($bookId, $uri, '***'); - $card = $this->backend->getCard($bookId, $uri); + $backend->updateCard($bookId, $uri, '***'); + $card = $backend->getCard($bookId, $uri); $this->assertEquals('***', $card['carddata']); // delete the card - $this->backend->deleteCard($bookId, $uri); - $cards = $this->backend->getCards($bookId); + $backend->expects($this->once())->method('purgeProperties')->with($bookId, $card['id']); + $backend->deleteCard($bookId, $uri); + $cards = $backend->getCards($bookId); $this->assertEquals(0, count($cards)); } public function testMultiCard() { + + $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') + ->setConstructorArgs([$this->db, $this->principal, $this->logger]) + ->setMethods(['updateProperties'])->getMock(); + // create a new address book $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); @@ -175,6 +220,11 @@ class CardDavBackendTest extends TestCase { } public function testSyncSupport() { + + $this->backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') + ->setConstructorArgs([$this->db, $this->principal, $this->logger]) + ->setMethods(['updateProperties'])->getMock(); + // create a new address book $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []); $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER); @@ -213,7 +263,7 @@ class CardDavBackendTest extends TestCase { $books = $this->backend->getAddressBooksForUser('principals/best-friend'); $this->assertEquals(1, count($books)); - $this->backend->updateShares('Example', [], [['href' => 'principal:principals/best-friend']]); + $this->backend->updateShares('Example', [], ['principal:principals/best-friend']); $shares = $this->backend->getShares('Example'); $this->assertEquals(0, count($shares)); @@ -221,4 +271,273 @@ class CardDavBackendTest extends TestCase { $books = $this->backend->getAddressBooksForUser('principals/best-friend'); $this->assertEquals(0, count($books)); } + + public function testUpdateProperties() { + + $bookId = 42; + $cardUri = 'card-uri'; + $cardId = 2; + + $backend = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend') + ->setConstructorArgs([$this->db, $this->principal, $this->logger]) + ->setMethods(['getCardId'])->getMock(); + + $backend->expects($this->any())->method('getCardId')->willReturn($cardId); + + // add properties for new vCard + $vCard = new VCard(); + $vCard->add(new Text($vCard, 'UID', $cardUri)); + $vCard->add(new Text($vCard, 'FN', 'John Doe')); + $this->invokePrivate($backend, 'updateProperties', [$bookId, $cardUri, $vCard->serialize()]); + + $query = $this->db->getQueryBuilder(); + $result = $query->select('*')->from('cards_properties')->execute()->fetchAll(); + + $this->assertSame(2, count($result)); + + $this->assertSame('UID', $result[0]['name']); + $this->assertSame($cardUri, $result[0]['value']); + $this->assertSame($bookId, (int)$result[0]['addressbookid']); + $this->assertSame($cardId, (int)$result[0]['cardid']); + + $this->assertSame('FN', $result[1]['name']); + $this->assertSame('John Doe', $result[1]['value']); + $this->assertSame($bookId, (int)$result[1]['addressbookid']); + $this->assertSame($cardId, (int)$result[1]['cardid']); + + // update properties for existing vCard + $vCard = new VCard(); + $vCard->add(new Text($vCard, 'FN', 'John Doe')); + $this->invokePrivate($backend, 'updateProperties', [$bookId, $cardUri, $vCard->serialize()]); + + $query = $this->db->getQueryBuilder(); + $result = $query->select('*')->from('cards_properties')->execute()->fetchAll(); + + $this->assertSame(1, count($result)); + + $this->assertSame('FN', $result[0]['name']); + $this->assertSame('John Doe', $result[0]['value']); + $this->assertSame($bookId, (int)$result[0]['addressbookid']); + $this->assertSame($cardId, (int)$result[0]['cardid']); + } + + public function testPurgeProperties() { + + $query = $this->db->getQueryBuilder(); + $query->insert('cards_properties') + ->values( + [ + 'addressbookid' => $query->createNamedParameter(1), + 'cardid' => $query->createNamedParameter(1), + 'name' => $query->createNamedParameter('name1'), + 'value' => $query->createNamedParameter('value1'), + 'preferred' => $query->createNamedParameter(0) + ] + ); + $query->execute(); + + $query = $this->db->getQueryBuilder(); + $query->insert('cards_properties') + ->values( + [ + 'addressbookid' => $query->createNamedParameter(1), + 'cardid' => $query->createNamedParameter(2), + 'name' => $query->createNamedParameter('name2'), + 'value' => $query->createNamedParameter('value2'), + 'preferred' => $query->createNamedParameter(0) + ] + ); + $query->execute(); + + $this->invokePrivate($this->backend, 'purgeProperties', [1, 1]); + + $query = $this->db->getQueryBuilder(); + $result = $query->select('*')->from('cards_properties')->execute()->fetchAll(); + $this->assertSame(1, count($result)); + $this->assertSame(1 ,(int)$result[0]['addressbookid']); + $this->assertSame(2 ,(int)$result[0]['cardid']); + + } + + public function testGetCardId() { + $query = $this->db->getQueryBuilder(); + + $query->insert('cards') + ->values( + [ + 'addressbookid' => $query->createNamedParameter(1), + 'carddata' => $query->createNamedParameter(''), + 'uri' => $query->createNamedParameter('uri'), + 'lastmodified' => $query->createNamedParameter(4738743), + 'etag' => $query->createNamedParameter('etag'), + 'size' => $query->createNamedParameter(120) + ] + ); + $query->execute(); + $id = $query->getLastInsertId(); + + $this->assertSame($id, + $this->invokePrivate($this->backend, 'getCardId', ['uri'])); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testGetCardIdFailed() { + $this->invokePrivate($this->backend, 'getCardId', ['uri']); + } + + /** + * @dataProvider dataTestSearch + * + * @param string $pattern + * @param array $expected + */ + public function testSearch($pattern, $properties, $expected) { + /** @var VCard $vCards */ + $vCards = []; + $vCards[0] = new VCard(); + $vCards[0]->add(new Text($vCards[0], 'UID', 'uid')); + $vCards[0]->add(new Text($vCards[0], 'FN', 'John Doe')); + $vCards[0]->add(new Text($vCards[0], 'CLOUD', 'john@owncloud.org')); + $vCards[1] = new VCard(); + $vCards[1]->add(new Text($vCards[1], 'UID', 'uid')); + $vCards[1]->add(new Text($vCards[1], 'FN', 'John M. Doe')); + + $vCardIds = []; + $query = $this->db->getQueryBuilder(); + for($i=0; $i<2; $i++) { + $query->insert($this->dbCardsTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter(0), + 'carddata' => $query->createNamedParameter($vCards[$i]->serialize(), \PDO::PARAM_LOB), + 'uri' => $query->createNamedParameter('uri' . $i), + 'lastmodified' => $query->createNamedParameter(time()), + 'etag' => $query->createNamedParameter('etag' . $i), + 'size' => $query->createNamedParameter(120), + ] + ); + $query->execute(); + $vCardIds[] = $query->getLastInsertId(); + } + + $query->insert($this->dbCardsPropertiesTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter(0), + 'cardid' => $query->createNamedParameter($vCardIds[0]), + 'name' => $query->createNamedParameter('FN'), + 'value' => $query->createNamedParameter('John Doe'), + 'preferred' => $query->createNamedParameter(0) + ] + ); + $query->execute(); + $query->insert($this->dbCardsPropertiesTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter(0), + 'cardid' => $query->createNamedParameter($vCardIds[0]), + 'name' => $query->createNamedParameter('CLOUD'), + 'value' => $query->createNamedParameter('John@owncloud.org'), + 'preferred' => $query->createNamedParameter(0) + ] + ); + $query->execute(); + $query->insert($this->dbCardsPropertiesTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter(0), + 'cardid' => $query->createNamedParameter($vCardIds[1]), + 'name' => $query->createNamedParameter('FN'), + 'value' => $query->createNamedParameter('John M. Doe'), + 'preferred' => $query->createNamedParameter(0) + ] + ); + $query->execute(); + + $result = $this->backend->search(0, $pattern, $properties); + + // check result + $this->assertSame(count($expected), count($result)); + $found = []; + foreach ($result as $r) { + foreach ($expected as $exp) { + if (strpos($r, $exp) > 0) { + $found[$exp] = true; + break; + } + } + } + + $this->assertSame(count($expected), count($found)); + } + + public function dataTestSearch() { + return [ + ['John', ['FN'], ['John Doe', 'John M. Doe']], + ['M. Doe', ['FN'], ['John M. Doe']], + ['Do', ['FN'], ['John Doe', 'John M. Doe']], + // check if duplicates are handled correctly + ['John', ['FN', 'CLOUD'], ['John Doe', 'John M. Doe']], + ]; + } + + public function testGetCardUri() { + $query = $this->db->getQueryBuilder(); + $query->insert($this->dbCardsTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter(1), + 'carddata' => $query->createNamedParameter('carddata', \PDO::PARAM_LOB), + 'uri' => $query->createNamedParameter('uri'), + 'lastmodified' => $query->createNamedParameter(5489543), + 'etag' => $query->createNamedParameter('etag'), + 'size' => $query->createNamedParameter(120), + ] + ); + $query->execute(); + + $id = $query->getLastInsertId(); + + $this->assertSame('uri', $this->backend->getCardUri($id)); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testGetCardUriFailed() { + $this->backend->getCardUri(1); + } + + public function testGetContact() { + $query = $this->db->getQueryBuilder(); + for($i=0; $i<2; $i++) { + $query->insert($this->dbCardsTable) + ->values( + [ + 'addressbookid' => $query->createNamedParameter($i), + 'carddata' => $query->createNamedParameter('carddata' . $i, \PDO::PARAM_LOB), + 'uri' => $query->createNamedParameter('uri' . $i), + 'lastmodified' => $query->createNamedParameter(5489543), + 'etag' => $query->createNamedParameter('etag' . $i), + 'size' => $query->createNamedParameter(120), + ] + ); + $query->execute(); + } + + $result = $this->backend->getContact('uri0'); + $this->assertSame(7, count($result)); + $this->assertSame(0, (int)$result['addressbookid']); + $this->assertSame('uri0', $result['uri']); + $this->assertSame(5489543, (int)$result['lastmodified']); + $this->assertSame('etag0', $result['etag']); + $this->assertSame(120, (int)$result['size']); + } + + public function testGetContactFail() { + $this->assertEmpty($this->backend->getContact('uri')); + } + } diff --git a/apps/dav/tests/unit/carddav/sharing/plugintest.php b/apps/dav/tests/unit/carddav/sharing/plugintest.php new file mode 100644 index 0000000000..e9532acbe3 --- /dev/null +++ b/apps/dav/tests/unit/carddav/sharing/plugintest.php @@ -0,0 +1,81 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\DAV\Tests\Unit\CardDAV; + + +use OCA\DAV\CardDAV\Sharing\IShareableAddressBook; +use OCA\DAV\CardDAV\Sharing\Plugin; +use OCA\DAV\Connector\Sabre\Auth; +use OCP\IRequest; +use Sabre\DAV\Server; +use Sabre\DAV\SimpleCollection; +use Sabre\HTTP\Request; +use Sabre\HTTP\Response; +use Test\TestCase; + +class PluginTest extends TestCase { + + /** @var Plugin */ + private $plugin; + /** @var Server */ + private $server; + /** @var IShareableAddressBook | \PHPUnit_Framework_MockObject_MockObject */ + private $book; + + public function setUp() { + parent::setUp(); + + /** @var Auth | \PHPUnit_Framework_MockObject_MockObject $authBackend */ + $authBackend = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Auth')->disableOriginalConstructor()->getMock(); + $authBackend->method('isDavAuthenticated')->willReturn(true); + + /** @var IRequest $request */ + $request = $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(); + $this->plugin = new Plugin($authBackend, $request); + + $root = new SimpleCollection('root'); + $this->server = new \Sabre\DAV\Server($root); + /** @var SimpleCollection $node */ + $this->book = $this->getMockBuilder('OCA\DAV\CardDAV\Sharing\IShareableAddressBook')->disableOriginalConstructor()->getMock(); + $this->book->method('getName')->willReturn('addressbook1.vcf'); + $root->addChild($this->book); + $this->plugin->initialize($this->server); + } + + public function testSharing() { + + $this->book->expects($this->once())->method('updateShares')->with([[ + 'href' => 'principal:principals/admin', + 'commonName' => null, + 'summary' => null, + 'readOnly' => false + ]], ['mailto:wilfredo@example.com']); + + // setup request + $request = new Request(); + $request->addHeader('Content-Type', 'application/xml'); + $request->setUrl('addressbook1.vcf'); + $request->setBody('principal:principals/admin mailto:wilfredo@example.com'); + $response = new Response(); + $this->plugin->httpPost($request, $response); + } +} diff --git a/apps/dav/tests/unit/connector/sabre/file.php b/apps/dav/tests/unit/connector/sabre/file.php index 2a6cf46ef1..ad4c1d29ed 100644 --- a/apps/dav/tests/unit/connector/sabre/file.php +++ b/apps/dav/tests/unit/connector/sabre/file.php @@ -48,6 +48,14 @@ class File extends \Test\TestCase { parent::tearDown(); } + private function getMockStorage() { + $storage = $this->getMock('\OCP\Files\Storage'); + $storage->expects($this->any()) + ->method('getId') + ->will($this->returnValue('home::someuser')); + return $storage; + } + /** * @param string $string */ @@ -149,7 +157,7 @@ class File extends \Test\TestCase { ->method('getRelativePath') ->will($this->returnArgument(0)); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -209,7 +217,7 @@ class File extends \Test\TestCase { $_SERVER['HTTP_OC_CHUNKED'] = true; - $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-0', null, null, [ + $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-0', $this->getMockStorage(), null, [ 'permissions' => \OCP\Constants::PERMISSION_ALL ], null); $file = new \OCA\DAV\Connector\Sabre\File($view, $info); @@ -219,7 +227,7 @@ class File extends \Test\TestCase { $this->assertNull($file->put('test data one')); $file->releaseLock(ILockingProvider::LOCK_SHARED); - $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-1', null, null, [ + $info = new \OC\Files\FileInfo('/test.txt-chunking-12345-2-1', $this->getMockStorage(), null, [ 'permissions' => \OCP\Constants::PERMISSION_ALL ], null); $file = new \OCA\DAV\Connector\Sabre\File($view, $info); @@ -261,7 +269,7 @@ class File extends \Test\TestCase { $info = new \OC\Files\FileInfo( $viewRoot . '/' . ltrim($path, '/'), - null, + $this->getMockStorage(), null, ['permissions' => \OCP\Constants::PERMISSION_ALL], null @@ -450,7 +458,7 @@ class File extends \Test\TestCase { $_SERVER['CONTENT_LENGTH'] = 123456; $_SERVER['REQUEST_METHOD'] = 'PUT'; - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -483,7 +491,7 @@ class File extends \Test\TestCase { // simulate situation where the target file is locked $view->lockFile('/test.txt', ILockingProvider::LOCK_EXCLUSIVE); - $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -518,7 +526,7 @@ class File extends \Test\TestCase { $_SERVER['HTTP_OC_CHUNKED'] = true; - $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-0', null, null, [ + $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-0', $this->getMockStorage(), null, [ 'permissions' => \OCP\Constants::PERMISSION_ALL ], null); $file = new \OCA\DAV\Connector\Sabre\File($view, $info); @@ -526,7 +534,7 @@ class File extends \Test\TestCase { $this->assertNull($file->put('test data one')); $file->releaseLock(ILockingProvider::LOCK_SHARED); - $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-1', null, null, [ + $info = new \OC\Files\FileInfo('/' . $this->user . '/files/test.txt-chunking-12345-2-1', $this->getMockStorage(), null, [ 'permissions' => \OCP\Constants::PERMISSION_ALL ], null); $file = new \OCA\DAV\Connector\Sabre\File($view, $info); @@ -555,7 +563,7 @@ class File extends \Test\TestCase { ->method('getRelativePath') ->will($this->returnArgument(0)); - $info = new \OC\Files\FileInfo('/*', null, null, array( + $info = new \OC\Files\FileInfo('/*', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); $file = new \OCA\DAV\Connector\Sabre\File($view, $info); @@ -591,7 +599,7 @@ class File extends \Test\TestCase { ->method('getRelativePath') ->will($this->returnArgument(0)); - $info = new \OC\Files\FileInfo('/*', null, null, array( + $info = new \OC\Files\FileInfo('/*', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); $file = new \OCA\DAV\Connector\Sabre\File($view, $info); @@ -618,7 +626,7 @@ class File extends \Test\TestCase { $_SERVER['CONTENT_LENGTH'] = 12345; $_SERVER['REQUEST_METHOD'] = 'PUT'; - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -654,7 +662,7 @@ class File extends \Test\TestCase { ->method('unlink') ->will($this->returnValue(true)); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -672,7 +680,7 @@ class File extends \Test\TestCase { $view = $this->getMock('\OC\Files\View', array()); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => 0 ), null); @@ -695,7 +703,7 @@ class File extends \Test\TestCase { ->method('unlink') ->will($this->returnValue(false)); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -718,7 +726,7 @@ class File extends \Test\TestCase { ->method('unlink') ->willThrowException(new ForbiddenException('', true)); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -753,7 +761,7 @@ class File extends \Test\TestCase { $path = 'test-locking.txt'; $info = new \OC\Files\FileInfo( '/' . $this->user . '/files/' . $path, - null, + $this->getMockStorage(), null, ['permissions' => \OCP\Constants::PERMISSION_ALL], null @@ -865,7 +873,7 @@ class File extends \Test\TestCase { ->method('fopen') ->will($this->returnValue(false)); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); @@ -883,7 +891,7 @@ class File extends \Test\TestCase { ->method('fopen') ->willThrowException(new ForbiddenException('', true)); - $info = new \OC\Files\FileInfo('/test.txt', null, null, array( + $info = new \OC\Files\FileInfo('/test.txt', $this->getMockStorage(), null, array( 'permissions' => \OCP\Constants::PERMISSION_ALL ), null); diff --git a/apps/dav/tests/unit/connector/sabre/filesplugin.php b/apps/dav/tests/unit/connector/sabre/filesplugin.php index b33c8340f7..642fc3258c 100644 --- a/apps/dav/tests/unit/connector/sabre/filesplugin.php +++ b/apps/dav/tests/unit/connector/sabre/filesplugin.php @@ -2,6 +2,8 @@ namespace OCA\DAV\Tests\Unit\Connector\Sabre; +use OCP\Files\StorageNotAvailableException; + /** * Copyright (c) 2015 Vincent Petry * This file is licensed under the Affero General Public License version 3 or @@ -143,6 +145,29 @@ class FilesPlugin extends \Test\TestCase { $this->assertEquals(array(self::SIZE_PROPERTYNAME), $propFind->get404Properties()); } + public function testGetPropertiesStorageNotAvailable() { + $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File'); + + $propFind = new \Sabre\DAV\PropFind( + '/dummyPath', + array( + self::DOWNLOADURL_PROPERTYNAME, + ), + 0 + ); + + $node->expects($this->once()) + ->method('getDirectDownload') + ->will($this->throwException(new StorageNotAvailableException())); + + $this->plugin->handleGetProperties( + $propFind, + $node + ); + + $this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME)); + } + public function testGetPublicPermissions() { $this->plugin = new \OCA\DAV\Connector\Sabre\FilesPlugin($this->tree, $this->view, true); $this->plugin->initialize($this->server); diff --git a/apps/dav/tests/unit/connector/sabre/objecttree.php b/apps/dav/tests/unit/connector/sabre/objecttree.php index 1cea4ff0b6..6164b96c98 100644 --- a/apps/dav/tests/unit/connector/sabre/objecttree.php +++ b/apps/dav/tests/unit/connector/sabre/objecttree.php @@ -294,4 +294,45 @@ class ObjectTree extends \Test\TestCase { $this->assertInstanceOf('\Sabre\DAV\INode', $tree->getNodeForPath($path)); } + + /** + * @expectedException \Sabre\DAV\Exception\Forbidden + * @expectedExceptionMessage Could not copy directory nameOfSourceNode, target exists + */ + public function testFailingMove() { + $source = 'a/b'; + $destination = 'b/b'; + $updatables = array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false); + $deletables = array('a/b' => true); + + $view = new TestDoubleFileView($updatables, $deletables); + + $info = new FileInfo('', null, null, array(), null); + + $rootDir = new \OCA\DAV\Connector\Sabre\Directory($view, $info); + $objectTree = $this->getMock('\OCA\DAV\Connector\Sabre\ObjectTree', + array('nodeExists', 'getNodeForPath'), + array($rootDir, $view)); + + $sourceNode = $this->getMockBuilder('\Sabre\DAV\ICollection') + ->disableOriginalConstructor() + ->getMock(); + $sourceNode->expects($this->once()) + ->method('getName') + ->will($this->returnValue('nameOfSourceNode')); + + $objectTree->expects($this->once()) + ->method('nodeExists') + ->with($this->identicalTo($destination)) + ->will($this->returnValue(true)); + $objectTree->expects($this->once()) + ->method('getNodeForPath') + ->with($this->identicalTo($source)) + ->will($this->returnValue($sourceNode)); + + /** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */ + $mountManager = \OC\Files\Filesystem::getMountManager(); + $objectTree->init($rootDir, $view, $mountManager); + $objectTree->move($source, $destination); + } } diff --git a/apps/dav/tests/unit/systemtag/systemtagmappingnode.php b/apps/dav/tests/unit/systemtag/systemtagmappingnode.php index 849f7c2fa5..aef62a1acb 100644 --- a/apps/dav/tests/unit/systemtag/systemtagmappingnode.php +++ b/apps/dav/tests/unit/systemtag/systemtagmappingnode.php @@ -9,12 +9,8 @@ namespace OCA\DAV\Tests\Unit\SystemTag; use Sabre\DAV\Exception\NotFound; -use Sabre\DAV\Exception\MethodNotAllowed; -use Sabre\DAV\Exception\Conflict; - use OC\SystemTag\SystemTag; use OCP\SystemTag\TagNotFoundException; -use OCP\SystemTag\TagAlreadyExistsException; class SystemTagMappingNode extends SystemTagNode { diff --git a/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php b/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php index 104ce36603..fa9e42d04f 100644 --- a/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php +++ b/apps/dav/tests/unit/systemtag/systemtagsbyidcollection.php @@ -11,7 +11,6 @@ namespace OCA\DAV\Tests\Unit\SystemTag; use OC\SystemTag\SystemTag; use OCP\SystemTag\TagNotFoundException; -use OCP\SystemTag\TagAlreadyExistsException; class SystemTagsByIdCollection extends \Test\TestCase { diff --git a/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php b/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php index 6e15bb78e7..a9b34f5ae1 100644 --- a/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php +++ b/apps/dav/tests/unit/systemtag/systemtagsobjectmappingcollection.php @@ -11,7 +11,6 @@ namespace OCA\DAV\Tests\Unit\SystemTag; use OC\SystemTag\SystemTag; use OCP\SystemTag\TagNotFoundException; -use OCP\SystemTag\TagAlreadyExistsException; class SystemTagsObjectMappingCollection extends \Test\TestCase { diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js index 6b49b3917f..1dadb88064 100644 --- a/apps/encryption/l10n/es.js +++ b/apps/encryption/l10n/es.js @@ -32,6 +32,7 @@ OC.L10N.register( "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", "Cheers!" : "¡Saludos!", "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hola,\n

\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: %s\n

\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.

", + "Encrypt the home storage" : "Encriptar el almacenamiento personal", "Enable recovery key" : "Activa la clave de recuperación", "Disable recovery key" : "Desactiva la clave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.", diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json index 3f21b4c09a..5cf2b12ce5 100644 --- a/apps/encryption/l10n/es.json +++ b/apps/encryption/l10n/es.json @@ -30,6 +30,7 @@ "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", "Cheers!" : "¡Saludos!", "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Hola,\n

\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: %s\n

\nPor favor, identifíquese en la interfaz web, vaya a la sección 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la nueva en su correspondiente campo.

", + "Encrypt the home storage" : "Encriptar el almacenamiento personal", "Enable recovery key" : "Activa la clave de recuperación", "Disable recovery key" : "Desactiva la clave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.", diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js index 501772c280..3a29b24cc5 100644 --- a/apps/encryption/l10n/et_EE.js +++ b/apps/encryption/l10n/et_EE.js @@ -34,6 +34,7 @@ OC.L10N.register( "New recovery key password" : "Uus taastevõtme parool", "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", + "ownCloud basic encryption module" : "ownCloud peamine küpteerimismoodul", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", " If you don't remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.", diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json index 14d4c59f9f..916bc0667a 100644 --- a/apps/encryption/l10n/et_EE.json +++ b/apps/encryption/l10n/et_EE.json @@ -32,6 +32,7 @@ "New recovery key password" : "Uus taastevõtme parool", "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", + "ownCloud basic encryption module" : "ownCloud peamine küpteerimismoodul", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", " If you don't remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.", diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js index 334bbf0528..80c35dea49 100644 --- a/apps/encryption/l10n/pt_BR.js +++ b/apps/encryption/l10n/pt_BR.js @@ -30,7 +30,7 @@ OC.L10N.register( "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.", "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Olá,

o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha %s.

Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..

", "Encrypt the home storage" : "Criptografar a pasta de armazenamento home", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados", diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json index 794eb478c7..b3ce8c7238 100644 --- a/apps/encryption/l10n/pt_BR.json +++ b/apps/encryption/l10n/pt_BR.json @@ -28,7 +28,7 @@ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.", "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,

the admin enabled server-side-encryption. Your files were encrypted using the password %s.

Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.

" : "Olá,

o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha %s.

Por favor faça o login para a interface da Web, vá para a seção 'ownCloud módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login..

", "Encrypt the home storage" : "Criptografar a pasta de armazenamento home", "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados", diff --git a/apps/encryption/lib/crypto/crypt.php b/apps/encryption/lib/crypto/crypt.php index dbc0364a15..12e9008545 100644 --- a/apps/encryption/lib/crypto/crypt.php +++ b/apps/encryption/lib/crypto/crypt.php @@ -30,7 +30,6 @@ use OC\Encryption\Exceptions\DecryptionFailedException; use OC\Encryption\Exceptions\EncryptionFailedException; use OCA\Encryption\Exceptions\MultiKeyDecryptException; use OCA\Encryption\Exceptions\MultiKeyEncryptException; -use OCA\Encryption\Vendor\PBKDF2Fallback; use OCP\Encryption\Exceptions\GenericEncryptionException; use OCP\IConfig; use OCP\ILogger; @@ -293,28 +292,14 @@ class Crypt { $salt = hash('sha256', $uid . $instanceId . $instanceSecret, true); $keySize = $this->getKeySize($cipher); - if (function_exists('hash_pbkdf2')) { - $hash = hash_pbkdf2( - 'sha256', - $password, - $salt, - 100000, - $keySize, - true - ); - } else { - // fallback to 3rdparty lib for PHP <= 5.4. - // FIXME: Can be removed as soon as support for PHP 5.4 was dropped - $fallback = new PBKDF2Fallback(); - $hash = $fallback->pbkdf2( - 'sha256', - $password, - $salt, - 100000, - $keySize, - true - ); - } + $hash = hash_pbkdf2( + 'sha256', + $password, + $salt, + 100000, + $keySize, + true + ); return $hash; } diff --git a/apps/encryption/tests/lib/MigrationTest.php b/apps/encryption/tests/lib/MigrationTest.php index fc3d014345..6df72ac1bf 100644 --- a/apps/encryption/tests/lib/MigrationTest.php +++ b/apps/encryption/tests/lib/MigrationTest.php @@ -43,15 +43,18 @@ class MigrationTest extends \Test\TestCase { public static function setUpBeforeClass() { parent::setUpBeforeClass(); - \OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER1, 'foo'); - \OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER2, 'foo'); - \OC_User::createUser(self::TEST_ENCRYPTION_MIGRATION_USER3, 'foo'); + \OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_MIGRATION_USER1, 'foo'); + \OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_MIGRATION_USER2, 'foo'); + \OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_MIGRATION_USER3, 'foo'); } public static function tearDownAfterClass() { - \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER1); - \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER2); - \OC_User::deleteUser(self::TEST_ENCRYPTION_MIGRATION_USER3); + $user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_MIGRATION_USER1); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_MIGRATION_USER2); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_MIGRATION_USER3); + if ($user !== null) { $user->delete(); } parent::tearDownAfterClass(); } diff --git a/apps/encryption/vendor/pbkdf2fallback.php b/apps/encryption/vendor/pbkdf2fallback.php deleted file mode 100644 index ca579f8e7d..0000000000 --- a/apps/encryption/vendor/pbkdf2fallback.php +++ /dev/null @@ -1,87 +0,0 @@ -request = $request; $this->secureRandom = $secureRandom; $this->jobList = $jobList; $this->trustedServers = $trustedServers; $this->dbHandler = $dbHandler; + $this->logger = $logger; } /** @@ -88,6 +95,7 @@ class OCSAuthAPI { $token = $this->request->getParam('token'); if ($this->trustedServers->isTrustedServer($url) === false) { + $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while requesting shared secret'); return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); } @@ -95,6 +103,7 @@ class OCSAuthAPI { // token wins $localToken = $this->dbHandler->getToken($url); if (strcmp($localToken, $token) > 0) { + $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') presented lower token'); return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); } @@ -120,10 +129,13 @@ class OCSAuthAPI { $url = $this->request->getParam('url'); $token = $this->request->getParam('token'); - if ( - $this->trustedServers->isTrustedServer($url) === false - || $this->isValidToken($url, $token) === false - ) { + if ($this->trustedServers->isTrustedServer($url) === false) { + $this->logger->log(\OCP\Util::ERROR, 'remote server not trusted (' . $url . ') while getting shared secret'); + return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); + } + + if ($this->isValidToken($url, $token) === false) { + $this->logger->log(\OCP\Util::ERROR, 'remote server (' . $url . ') didn\'t send a valid token (got ' . $token . ') while getting shared secret'); return new \OC_OCS_Result(null, HTTP::STATUS_FORBIDDEN); } @@ -139,7 +151,7 @@ class OCSAuthAPI { protected function isValidToken($url, $token) { $storedToken = $this->dbHandler->getToken($url); - return StringUtils::equals($storedToken, $token); + return hash_equals($storedToken, $token); } } diff --git a/apps/federation/appinfo/application.php b/apps/federation/appinfo/application.php index 172283536b..45d88548b7 100644 --- a/apps/federation/appinfo/application.php +++ b/apps/federation/appinfo/application.php @@ -108,7 +108,8 @@ class Application extends \OCP\AppFramework\App { $server->getSecureRandom(), $server->getJobList(), $container->query('TrustedServers'), - $container->query('DbHandler') + $container->query('DbHandler'), + $server->getLogger() ); diff --git a/apps/federation/backgroundjob/getsharedsecret.php b/apps/federation/backgroundjob/getsharedsecret.php index eb55fa2d6a..8aa8a08e07 100644 --- a/apps/federation/backgroundjob/getsharedsecret.php +++ b/apps/federation/backgroundjob/getsharedsecret.php @@ -91,7 +91,7 @@ class GetSharedSecret extends QueuedJob{ $this->trustedServers = new TrustedServers( $this->dbHandler, \OC::$server->getHTTPClientService(), - \OC::$server->getLogger(), + $this->logger, $this->jobList, \OC::$server->getSecureRandom(), \OC::$server->getConfig() @@ -148,6 +148,7 @@ class GetSharedSecret extends QueuedJob{ } catch (ClientException $e) { $status = $e->getCode(); + $this->logger->logException($e); } // if we received a unexpected response we try again later diff --git a/apps/federation/backgroundjob/requestsharedsecret.php b/apps/federation/backgroundjob/requestsharedsecret.php index 24d8adada1..a1906d2082 100644 --- a/apps/federation/backgroundjob/requestsharedsecret.php +++ b/apps/federation/backgroundjob/requestsharedsecret.php @@ -60,6 +60,9 @@ class RequestSharedSecret extends QueuedJob { private $endPoint = '/ocs/v2.php/apps/federation/api/v1/request-shared-secret?format=json'; + /** @var ILogger */ + private $logger; + /** * RequestSharedSecret constructor. * @@ -80,13 +83,14 @@ class RequestSharedSecret extends QueuedJob { $this->jobList = $jobList ? $jobList : \OC::$server->getJobList(); $this->urlGenerator = $urlGenerator ? $urlGenerator : \OC::$server->getURLGenerator(); $this->dbHandler = $dbHandler ? $dbHandler : new DbHandler(\OC::$server->getDatabaseConnection(), \OC::$server->getL10N('federation')); + $this->logger = \OC::$server->getLogger(); if ($trustedServers) { $this->trustedServers = $trustedServers; } else { $this->trustedServers = new TrustedServers( $this->dbHandler, \OC::$server->getHTTPClientService(), - \OC::$server->getLogger(), + $this->logger, $this->jobList, \OC::$server->getSecureRandom(), \OC::$server->getConfig() @@ -142,6 +146,7 @@ class RequestSharedSecret extends QueuedJob { } catch (ClientException $e) { $status = $e->getCode(); + $this->logger->logException($e); } // if we received a unexpected response we try again later diff --git a/apps/federation/tests/api/ocsauthapitest.php b/apps/federation/tests/api/ocsauthapitest.php index a334686c24..e6a95af858 100644 --- a/apps/federation/tests/api/ocsauthapitest.php +++ b/apps/federation/tests/api/ocsauthapitest.php @@ -28,6 +28,7 @@ use OCA\Federation\API\OCSAuthAPI; use OCA\Federation\DbHandler; use OCA\Federation\TrustedServers; use OCP\AppFramework\Http; +use OCP\ILogger; use OCP\IRequest; use OCP\Security\ISecureRandom; use Test\TestCase; @@ -49,6 +50,9 @@ class OCSAuthAPITest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject | DbHandler */ private $dbHandler; + /** @var \PHPUnit_Framework_MockObject_MockObject | ILogger */ + private $logger; + /** @var OCSAuthApi */ private $ocsAuthApi; @@ -63,13 +67,16 @@ class OCSAuthAPITest extends TestCase { ->disableOriginalConstructor()->getMock(); $this->jobList = $this->getMockBuilder('OC\BackgroundJob\JobList') ->disableOriginalConstructor()->getMock(); + $this->logger = $this->getMockBuilder('OCP\ILogger') + ->disableOriginalConstructor()->getMock(); $this->ocsAuthApi = new OCSAuthAPI( $this->request, $this->secureRandom, $this->jobList, $this->trustedServers, - $this->dbHandler + $this->dbHandler, + $this->logger ); } @@ -136,7 +143,8 @@ class OCSAuthAPITest extends TestCase { $this->secureRandom, $this->jobList, $this->trustedServers, - $this->dbHandler + $this->dbHandler, + $this->logger ] )->setMethods(['isValidToken'])->getMock(); diff --git a/apps/files/admin.php b/apps/files/admin.php index f23f9b5269..a2092c600a 100644 --- a/apps/files/admin.php +++ b/apps/files/admin.php @@ -33,7 +33,7 @@ $htaccessWorking=(getenv('htaccessWorking')=='true'); $upload_max_filesize = OC::$server->getIniWrapper()->getBytes('upload_max_filesize'); $post_max_size = OC::$server->getIniWrapper()->getBytes('post_max_size'); $maxUploadFilesize = OCP\Util::humanFileSize(min($upload_max_filesize, $post_max_size)); -if($_POST && OC_Util::isCallRegistered()) { +if($_POST && \OC::$server->getRequest()->passesCSRFCheck()) { if(isset($_POST['maxUploadSize'])) { if(($setMaxSize = OC_Files::setUploadLimit(OCP\Util::computerFileSize($_POST['maxUploadSize']))) !== false) { $maxUploadFilesize = OCP\Util::humanFileSize($setMaxSize); diff --git a/apps/files/appinfo/register_command.php b/apps/files/appinfo/register_command.php index 3042c25987..7e541ca26f 100644 --- a/apps/files/appinfo/register_command.php +++ b/apps/files/appinfo/register_command.php @@ -20,5 +20,5 @@ * */ -$application->add(new OCA\Files\Command\Scan(OC_User::getManager())); +$application->add(new OCA\Files\Command\Scan(\OC::$server->getUserManager())); $application->add(new OCA\Files\Command\DeleteOrphanedFiles(\OC::$server->getDatabaseConnection())); diff --git a/apps/files/command/scan.php b/apps/files/command/scan.php index 31ae555e04..7e00d8a231 100644 --- a/apps/files/command/scan.php +++ b/apps/files/command/scan.php @@ -32,6 +32,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Helper\Table; class Scan extends Command { @@ -39,6 +40,15 @@ class Scan extends Command { * @var \OC\User\Manager $userManager */ private $userManager; + /** @var float */ + protected $execTime = 0; + /** @var int */ + protected $foldersCounter = 0; + /** @var int */ + protected $filesCounter = 0; + /** @var bool */ + protected $interrupted = false; + public function __construct(\OC\User\Manager $userManager) { $this->userManager = $userManager; @@ -64,7 +74,13 @@ class Scan extends Command { 'quiet', 'q', InputOption::VALUE_NONE, - 'suppress output' + 'suppress any output' + ) + ->addOption( + 'verbose', + '-v|vv|vvv', + InputOption::VALUE_NONE, + 'verbose the output' ) ->addOption( 'all', @@ -74,19 +90,31 @@ class Scan extends Command { ); } - protected function scanFiles($user, $path, $quiet, OutputInterface $output) { + protected function scanFiles($user, $path, $verbose, OutputInterface $output) { $scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger()); - if (!$quiet) { + # printout and count + if ($verbose) { $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) { $output->writeln("Scanning file $path"); + $this->filesCounter += 1; }); $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) { $output->writeln("Scanning folder $path"); + $this->foldersCounter += 1; }); $scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) { $output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")"); }); + # count only + } else { + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) { + $this->filesCounter += 1; + }); + $scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) { + $this->foldersCounter += 1; + }); } + try { $scanner->scan($path); } catch (ForbiddenException $e) { @@ -95,6 +123,7 @@ class Scan extends Command { } } + protected function execute(InputInterface $input, OutputInterface $output) { $inputPath = $input->getOption('path'); if ($inputPath) { @@ -106,24 +135,173 @@ class Scan extends Command { } else { $users = $input->getArgument('user_id'); } - $quiet = $input->getOption('quiet'); - if (count($users) === 0) { $output->writeln("Please specify the user id to scan, \"--all\" to scan for all users or \"--path=...\""); return; } + # no messaging level option means: no full printout but statistics + # $quiet means no print at all + # $verbose means full printout including statistics + # -q -v full stat + # 0 0 no yes + # 0 1 yes yes + # 1 -- no no (quiet overrules verbose) + $verbose = $input->getOption('verbose'); + $quiet = $input->getOption('quiet'); + # restrict the verbosity level to VERBOSITY_VERBOSE + if ($output->getVerbosity()>OutputInterface::VERBOSITY_VERBOSE) { + $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); + } + if ($quiet) { + $verbose = false; + } + + $this->initTools(); + foreach ($users as $user) { if (is_object($user)) { $user = $user->getUID(); } $path = $inputPath ? $inputPath : '/' . $user; if ($this->userManager->userExists($user)) { - $this->scanFiles($user, $path, $quiet, $output); + # full: printout data if $verbose was set + $this->scanFiles($user, $path, $verbose, $output); } else { $output->writeln("Unknown user $user"); } } + + # stat: printout statistics if $quiet was not set + if (!$quiet) { + $this->presentStats($output); + } + } + + + /** + * Checks if the command was interrupted by ctrl-c + */ + protected function checkForInterruption($output) { + if ($this->hasBeenInterrupted()) { + $this->presentResults($output); + exit; + } + } + + + /** + * Initialises some useful tools for the Command + */ + protected function initTools() { + // Start the timer + $this->execTime = -microtime(true); + // Convert PHP errors to exceptions + set_error_handler([$this, 'exceptionErrorHandler'], E_ALL); + + // Collect interrupts and notify the running command + pcntl_signal(SIGTERM, [$this, 'cancelOperation']); + pcntl_signal(SIGINT, [$this, 'cancelOperation']); + } + + + /** + * Changes the status of the command to "interrupted" + * + * Gives a chance to the command to properly terminate what it's doing + */ + private function cancelOperation() { + $this->interrupted = true; + } + + + /** + * Processes PHP errors as exceptions in order to be able to keep track of problems + * + * @see https://secure.php.net/manual/en/function.set-error-handler.php + * + * @param int $severity the level of the error raised + * @param string $message + * @param string $file the filename that the error was raised in + * @param int $line the line number the error was raised + * + * @throws \ErrorException + */ + public function exceptionErrorHandler($severity, $message, $file, $line) { + if (!(error_reporting() & $severity)) { + // This error code is not included in error_reporting + return; + } + throw new \ErrorException($message, 0, $severity, $file, $line); + } + + + /** + * @return bool + */ + protected function hasBeenInterrupted() { + $cancelled = false; + pcntl_signal_dispatch(); + if ($this->interrupted) { + $cancelled = true; + } + + return $cancelled; + } + + + /** + * @param OutputInterface $output + */ + protected function presentStats(OutputInterface $output) { + // Stop the timer + $this->execTime += microtime(true); + $output->writeln(""); + + $headers = [ + 'Folders', 'Files', 'Elapsed time' + ]; + + $this->showSummary($headers, null, $output); + } + + + /** + * Shows a summary of operations + * + * @param string[] $headers + * @param string[] $rows + * @param OutputInterface $output + */ + protected function showSummary($headers, $rows, OutputInterface $output) { + $niceDate = $this->formatExecTime(); + if (!$rows) { + $rows = [ + $this->foldersCounter, + $this->filesCounter, + $niceDate, + ]; + } + $table = new Table($output); + $table + ->setHeaders($headers) + ->setRows([$rows]); + $table->render(); + } + + + /** + * Formats microtime into a human readable format + * + * @return string + */ + protected function formatExecTime() { + list($secs, $tens) = explode('.', sprintf("%.1f", ($this->execTime))); + $niceDate = date('H:i:s', $secs) . '.' . $tens; + + return $niceDate; + } + } diff --git a/apps/files/download.php b/apps/files/download.php index b0628e394b..b058f0ebf5 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -39,7 +39,7 @@ if(!\OC\Files\Filesystem::file_exists($filename)) { exit; } -$ftype=\OC_Helper::getSecureMimeType(\OC\Files\Filesystem::getMimeType( $filename )); +$ftype=\OC::$server->getMimeTypeDetector()->getSecureMimeType(\OC\Files\Filesystem::getMimeType( $filename )); header('Content-Type:'.$ftype); OCP\Response::setContentDispositionHeader(basename($filename), 'attachment'); diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js index 871a2149c8..67125f1570 100644 --- a/apps/files/js/fileactions.js +++ b/apps/files/js/fileactions.js @@ -617,7 +617,16 @@ this.registerAction({ name: 'Delete', - displayName: t('files', 'Delete'), + displayName: function(context) { + var mountType = context.$file.attr('data-mounttype'); + var deleteTitle = t('files', 'Delete'); + if (mountType === 'external-root') { + deleteTitle = t('files', 'Disconnect storage'); + } else if (mountType === 'shared-root') { + deleteTitle = t('files', 'Unshare'); + } + return deleteTitle; + }, mime: 'all', order: 1000, // permission is READ because we show a hint instead if there is no permission @@ -668,8 +677,9 @@ * @typedef {Object} OCA.Files.FileAction * * @property {String} name identifier of the action - * @property {String} displayName display name of the action, defaults - * to the name given in name property + * @property {(String|OCA.Files.FileActions~displayNameFunction)} displayName + * display name string for the action, or function that returns the display name. + * Defaults to the name given in name property * @property {String} mime mime type * @property {int} permissions permissions * @property {(Function|String)} icon icon path to the icon or function @@ -702,6 +712,16 @@ * @return {Object} jQuery link object */ + /** + * Display name function for actions. + * The function returns the display name of the action using + * the given context information.. + * + * @callback OCA.Files.FileActions~displayNameFunction + * @param {OCA.Files.FileActionContext} context action context + * @return {String} display name + */ + /** * Action handler function for file actions * diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js index 67cbb48c96..9e51d8f1f1 100644 --- a/apps/files/js/fileactionsmenu.js +++ b/apps/files/js/fileactionsmenu.js @@ -81,6 +81,7 @@ * Renders the menu with the currently set items */ render: function() { + var self = this; var fileActions = this._context.fileActions; var actions = fileActions.getActions( fileActions.getCurrentMimeType(), @@ -100,6 +101,13 @@ (!defaultAction || actionSpec.name !== defaultAction.name) ); }); + items = _.map(items, function(item) { + if (_.isFunction(item.displayName)) { + item = _.extend({}, item); + item.displayName = item.displayName(self._context); + } + return item; + }); items = items.sort(function(actionA, actionB) { var orderA = actionA.order || 0; var orderB = actionB.order || 0; diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 672c39a8bb..0dbf4f938b 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -990,13 +990,16 @@ } if (fileData.mountType) { - // FIXME: HACK: detect shared-root - if (fileData.mountType === 'shared' && this.dirInfo.mountType !== 'shared') { - // if parent folder isn't share, assume the displayed folder is a share root - fileData.mountType = 'shared-root'; - } else if (fileData.mountType === 'external' && this.dirInfo.mountType !== 'external') { - // if parent folder isn't external, assume the displayed folder is the external storage root - fileData.mountType = 'external-root'; + // dirInfo (parent) only exist for the "real" file list + if (this.dirInfo.id) { + // FIXME: HACK: detect shared-root + if (fileData.mountType === 'shared' && this.dirInfo.mountType !== 'shared' && this.dirInfo.mountType !== 'shared-root') { + // if parent folder isn't share, assume the displayed folder is a share root + fileData.mountType = 'shared-root'; + } else if (fileData.mountType === 'external' && this.dirInfo.mountType !== 'external' && this.dirInfo.mountType !== 'external-root') { + // if parent folder isn't external, assume the displayed folder is the external storage root + fileData.mountType = 'external-root'; + } } tr.attr('data-mounttype', fileData.mountType); } @@ -1065,7 +1068,7 @@ nameSpan.tooltip({placement: 'right'}); } // dirs can show the number of uploaded files - if (mime !== 'httpd/unix-directory') { + if (mime === 'httpd/unix-directory') { linkElem.append($('').attr({ 'class': 'uploadtext', 'currentUploads': 0 @@ -1380,7 +1383,7 @@ * Returns list of webdav properties to request */ _getWebdavProperties: function() { - return this.filesClient.getPropfindProperties(); + return [].concat(this.filesClient.getPropfindProperties()); }, /** @@ -2069,7 +2072,7 @@ */ showFileBusyState: function(files, state) { var self = this; - if (!_.isArray(files)) { + if (!_.isArray(files) && !files.is) { files = [files]; } @@ -2077,10 +2080,13 @@ state = true; } - _.each(files, function($tr) { + _.each(files, function(fileName) { // jquery element already ? - if (!$tr.is) { - $tr = self.findFileEl($tr); + var $tr; + if (_.isString(fileName)) { + $tr = self.findFileEl(fileName); + } else { + $tr = $(fileName); } var $thumbEl = $tr.find('.thumbnail'); @@ -2465,6 +2471,7 @@ } }); fileUploadStart.on('fileuploadadd', function(e, data) { + console.log('XXXXXXX'); OC.Upload.log('filelist handle fileuploadadd', e, data); //finish delete if we are uploading a deleted file @@ -2484,8 +2491,7 @@ var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads); if (currentUploads === 1) { - var img = OC.imagePath('core', 'loading.gif'); - data.context.find('.thumbnail').css('background-image', 'url(' + img + ')'); + self.showFileBusyState(uploadText.closest('tr'), true); uploadText.text(translatedText); uploadText.show(); } else { @@ -2523,8 +2529,7 @@ uploadText.attr('currentUploads', currentUploads); var translatedText = n('files', 'Uploading %n file', 'Uploading %n files', currentUploads); if (currentUploads === 0) { - var img = OC.imagePath('core', 'filetypes/folder'); - data.context.find('.thumbnail').css('background-image', 'url(' + img + ')'); + self.showFileBusyState(uploadText.closest('tr'), false); uploadText.text(translatedText); uploadText.hide(); } else { @@ -2601,18 +2606,15 @@ } } }); - fileUploadStart.on('fileuploadstop', function(e, data) { - OC.Upload.log('filelist handle fileuploadstop', e, data); + fileUploadStart.on('fileuploadstop', function() { + OC.Upload.log('filelist handle fileuploadstop'); + + //cleanup uploading to a dir + var uploadText = self.$fileList.find('tr .uploadtext'); + self.showFileBusyState(uploadText.closest('tr'), false); + uploadText.fadeOut(); + uploadText.attr('currentUploads', 0); - //if user pressed cancel hide upload chrome - if (data.errorThrown === 'abort') { - //cleanup uploading to a dir - var uploadText = $('tr .uploadtext'); - var img = OC.imagePath('core', 'filetypes/folder'); - uploadText.parents('td.filename').find('.thumbnail').css('background-image', 'url(' + img + ')'); - uploadText.fadeOut(); - uploadText.attr('currentUploads', 0); - } self.updateStorageStatistics(); }); fileUploadStart.on('fileuploadfail', function(e, data) { @@ -2621,9 +2623,8 @@ //if user pressed cancel hide upload chrome if (data.errorThrown === 'abort') { //cleanup uploading to a dir - var uploadText = $('tr .uploadtext'); - var img = OC.imagePath('core', 'filetypes/folder'); - uploadText.parents('td.filename').find('.thumbnail').css('background-image', 'url(' + img + ')'); + var uploadText = self.$fileList.find('tr .uploadtext'); + self.showFileBusyState(uploadText.closest('tr'), false); uploadText.fadeOut(); uploadText.attr('currentUploads', 0); } diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index 953267393b..021c6b52b3 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -34,6 +34,7 @@ OC.L10N.register( "Download" : "تحميل", "Rename" : "إعادة التسمية", "Delete" : "حذف ", + "Unshare" : "إلغاء المشاركة", "Details" : "تفاصيل", "Select" : "اختار", "Pending" : "قيد الانتظار", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index 245fe9a0b9..53385598c2 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -32,6 +32,7 @@ "Download" : "تحميل", "Rename" : "إعادة التسمية", "Delete" : "حذف ", + "Unshare" : "إلغاء المشاركة", "Details" : "تفاصيل", "Select" : "اختار", "Pending" : "قيد الانتظار", diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js index 8fc63c1ac3..637adcebc7 100644 --- a/apps/files/l10n/ast.js +++ b/apps/files/l10n/ast.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Descargar", "Rename" : "Renomar", "Delete" : "Desaniciar", + "Disconnect storage" : "Desconeutar almacenamientu", + "Unshare" : "Dexar de compartir", "Details" : "Detalles", "Select" : "Esbillar", "Pending" : "Pendiente", diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json index 33c119771f..352fbd9fac 100644 --- a/apps/files/l10n/ast.json +++ b/apps/files/l10n/ast.json @@ -32,6 +32,8 @@ "Download" : "Descargar", "Rename" : "Renomar", "Delete" : "Desaniciar", + "Disconnect storage" : "Desconeutar almacenamientu", + "Unshare" : "Dexar de compartir", "Details" : "Detalles", "Select" : "Esbillar", "Pending" : "Pendiente", diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js index cf7d81063c..302bb05140 100644 --- a/apps/files/l10n/az.js +++ b/apps/files/l10n/az.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Yüklə", "Rename" : "Adı dəyiş", "Delete" : "Sil", + "Disconnect storage" : "Daşıyıcını ayır", + "Unshare" : "Paylaşımı durdur", "Details" : "Detallar", "Select" : "Seç", "Pending" : "Gözləmə", diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json index f2c45fda2f..b213c86cb2 100644 --- a/apps/files/l10n/az.json +++ b/apps/files/l10n/az.json @@ -32,6 +32,8 @@ "Download" : "Yüklə", "Rename" : "Adı dəyiş", "Delete" : "Sil", + "Disconnect storage" : "Daşıyıcını ayır", + "Unshare" : "Paylaşımı durdur", "Details" : "Detallar", "Select" : "Seç", "Pending" : "Gözləmə", diff --git a/apps/files/l10n/bn_BD.js b/apps/files/l10n/bn_BD.js index b968a225da..0ee56888df 100644 --- a/apps/files/l10n/bn_BD.js +++ b/apps/files/l10n/bn_BD.js @@ -26,6 +26,7 @@ OC.L10N.register( "Download" : "ডাউনলোড", "Rename" : "পূনঃনামকরণ", "Delete" : "মুছে", + "Unshare" : "ভাগাভাগি বাতিল ", "Details" : "বিস্তারিত", "Pending" : "মুলতুবি", "Name" : "রাম", diff --git a/apps/files/l10n/bn_BD.json b/apps/files/l10n/bn_BD.json index bed559330a..15ec2b4b82 100644 --- a/apps/files/l10n/bn_BD.json +++ b/apps/files/l10n/bn_BD.json @@ -24,6 +24,7 @@ "Download" : "ডাউনলোড", "Rename" : "পূনঃনামকরণ", "Delete" : "মুছে", + "Unshare" : "ভাগাভাগি বাতিল ", "Details" : "বিস্তারিত", "Pending" : "মুলতুবি", "Name" : "রাম", diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js index 9da51ece87..278b637177 100644 --- a/apps/files/l10n/bs.js +++ b/apps/files/l10n/bs.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Preuzmi", "Rename" : "Preimenuj", "Delete" : "Izbriši", + "Disconnect storage" : "Diskonektuj pohranu", + "Unshare" : "Prestani dijeliti", "Select" : "Izaberi", "Pending" : "Na čekanju", "Unable to determine date" : "Nemoguće odrediti datum", diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json index 095fe47048..678bedcbe3 100644 --- a/apps/files/l10n/bs.json +++ b/apps/files/l10n/bs.json @@ -32,6 +32,8 @@ "Download" : "Preuzmi", "Rename" : "Preimenuj", "Delete" : "Izbriši", + "Disconnect storage" : "Diskonektuj pohranu", + "Unshare" : "Prestani dijeliti", "Select" : "Izaberi", "Pending" : "Na čekanju", "Unable to determine date" : "Nemoguće odrediti datum", diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js index d7a77f9ee4..783ff4aaa6 100644 --- a/apps/files/l10n/de_AT.js +++ b/apps/files/l10n/de_AT.js @@ -5,6 +5,7 @@ OC.L10N.register( "Files" : "Dateien", "Download" : "Herunterladen", "Delete" : "Löschen", + "Unshare" : "Teilung zurücknehmen", "Details" : "Details", "New folder" : "Neuer Ordner", "Upload" : "Hochladen", diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json index 7381a96665..2d54751bdf 100644 --- a/apps/files/l10n/de_AT.json +++ b/apps/files/l10n/de_AT.json @@ -3,6 +3,7 @@ "Files" : "Dateien", "Download" : "Herunterladen", "Delete" : "Löschen", + "Unshare" : "Teilung zurücknehmen", "Details" : "Details", "New folder" : "Neuer Ordner", "Upload" : "Hochladen", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index d65d062c75..517799c1bc 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Herunterladen", "Rename" : "Umbenennen", "Delete" : "Löschen", + "Disconnect storage" : "Speicher trennen", + "Unshare" : "Freigabe aufheben", "Details" : "Details", "Select" : "Auswählen", "Pending" : "Ausstehend", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 79467fc764..90e499bec2 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -32,6 +32,8 @@ "Download" : "Herunterladen", "Rename" : "Umbenennen", "Delete" : "Löschen", + "Disconnect storage" : "Speicher trennen", + "Unshare" : "Freigabe aufheben", "Details" : "Details", "Select" : "Auswählen", "Pending" : "Ausstehend", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index f60e842199..265381cd67 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Λήψη", "Rename" : "Μετονομασία", "Delete" : "Διαγραφή", + "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", + "Unshare" : "Διακοπή διαμοιρασμού", "Details" : "Λεπτομέρειες", "Select" : "Επιλογή", "Pending" : "Εκκρεμεί", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index 15cb56c87d..1f0d997b3d 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -32,6 +32,8 @@ "Download" : "Λήψη", "Rename" : "Μετονομασία", "Delete" : "Διαγραφή", + "Disconnect storage" : "Αποσυνδεδεμένος αποθηκευτικός χώρος", + "Unshare" : "Διακοπή διαμοιρασμού", "Details" : "Λεπτομέρειες", "Select" : "Επιλογή", "Pending" : "Εκκρεμεί", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index a190c45e84..96c5acf917 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Download", "Rename" : "Rename", "Delete" : "Delete", + "Disconnect storage" : "Disconnect storage", + "Unshare" : "Unshare", "Details" : "Details", "Select" : "Select", "Pending" : "Pending", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index ca8a60ec73..4b0762f8b7 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -32,6 +32,8 @@ "Download" : "Download", "Rename" : "Rename", "Delete" : "Delete", + "Disconnect storage" : "Disconnect storage", + "Unshare" : "Unshare", "Details" : "Details", "Select" : "Select", "Pending" : "Pending", diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js index dbdd042291..398d2f669b 100644 --- a/apps/files/l10n/eo.js +++ b/apps/files/l10n/eo.js @@ -28,6 +28,7 @@ OC.L10N.register( "Download" : "Elŝuti", "Rename" : "Alinomigi", "Delete" : "Forigi", + "Unshare" : "Malkunhavigi", "Details" : "Detaloj", "Select" : "Elekti", "Pending" : "Traktotaj", diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json index b858ccece4..2a76d0ab2c 100644 --- a/apps/files/l10n/eo.json +++ b/apps/files/l10n/eo.json @@ -26,6 +26,7 @@ "Download" : "Elŝuti", "Rename" : "Alinomigi", "Delete" : "Forigi", + "Unshare" : "Malkunhavigi", "Details" : "Detaloj", "Select" : "Elekti", "Pending" : "Traktotaj", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 7bc628b8f9..4b0ddbb726 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Descargar", "Rename" : "Renombrar", "Delete" : "Eliminar", + "Disconnect storage" : "Desconectar almacenamiento", + "Unshare" : "Dejar de compartir", "Details" : "Detalles", "Select" : "Seleccionar", "Pending" : "Pendiente", @@ -97,6 +99,7 @@ OC.L10N.register( "Maximum upload size" : "Tamaño máximo de subida", "max. possible: " : "máx. posible:", "Save" : "Guardar", + "Missing permissions to edit from here." : "Faltan permisos para poder editar desde aquí.", "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to access your Files via WebDAV" : "Use esta URL para acceder via WebDAV", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 27ebcb1da4..09411bc5b2 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -32,6 +32,8 @@ "Download" : "Descargar", "Rename" : "Renombrar", "Delete" : "Eliminar", + "Disconnect storage" : "Desconectar almacenamiento", + "Unshare" : "Dejar de compartir", "Details" : "Detalles", "Select" : "Seleccionar", "Pending" : "Pendiente", @@ -95,6 +97,7 @@ "Maximum upload size" : "Tamaño máximo de subida", "max. possible: " : "máx. posible:", "Save" : "Guardar", + "Missing permissions to edit from here." : "Faltan permisos para poder editar desde aquí.", "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to access your Files via WebDAV" : "Use esta URL para acceder via WebDAV", diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index 0e4dbddeda..9d4924d1d5 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -28,6 +28,7 @@ OC.L10N.register( "Download" : "Descargar", "Rename" : "Renombrar", "Delete" : "Eliminar", + "Unshare" : "Dejar de compartir", "Details" : "Detalles", "Pending" : "Pendiente", "Name" : "Nombre", diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index cb903ddd9d..9abf30f0c7 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -26,6 +26,7 @@ "Download" : "Descargar", "Rename" : "Renombrar", "Delete" : "Eliminar", + "Unshare" : "Dejar de compartir", "Details" : "Detalles", "Pending" : "Pendiente", "Name" : "Nombre", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index f136bd300b..f577fa663f 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -34,12 +34,19 @@ OC.L10N.register( "Download" : "Lae alla", "Rename" : "Nimeta ümber", "Delete" : "Kustuta", + "Disconnect storage" : "Ühenda andmehoidla lahti.", + "Unshare" : "Lõpeta jagamine", "Details" : "Üksikasjad", "Select" : "Vali", "Pending" : "Ootel", "Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud", "This operation is forbidden" : "See toiming on keelatud", "This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga", + "Could not move \"{file}\"" : "\"{file}\" liigutamine ebaõnnestus", + "{newName} already exists" : "{newName} on juba olemas", + "Could not rename \"{fileName}\"" : "\"{fileName}\" ümbernimetamine ebaõnnestus", + "Could not create file \"{file}\"" : "Faili \"{file}\" loomine ebaõnnestus", + "Error deleting file \"{fileName}\"." : "Tõrge faili \"{fileName}\" kustutamisel.", "No entries in this folder match '{filter}'" : "Ükski sissekanne ei kattu filtriga '{filter}'", "Name" : "Nimi", "Size" : "Suurus", @@ -62,6 +69,7 @@ OC.L10N.register( "Favorite" : "Lemmik", "Folder" : "Kaust", "New folder" : "Uus kaust", + "{newname} already exists" : "{newname} on juba olemas", "Upload" : "Lae üles", "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", "A new file or folder has been created" : "Uus fail või kataloog on loodud", @@ -96,6 +104,7 @@ OC.L10N.register( "Currently scanning" : "Praegu skännimisel", "No favorites" : "Lemmikuid pole", "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks", - "Text file" : "Tekstifail" + "Text file" : "Tekstifail", + "New text file.txt" : "Uus tekstifail.txt" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index 6e1961770c..078b8d2d6d 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -32,12 +32,19 @@ "Download" : "Lae alla", "Rename" : "Nimeta ümber", "Delete" : "Kustuta", + "Disconnect storage" : "Ühenda andmehoidla lahti.", + "Unshare" : "Lõpeta jagamine", "Details" : "Üksikasjad", "Select" : "Vali", "Pending" : "Ootel", "Unable to determine date" : "Kuupäeva tuvastamine ei õnnestunud", "This operation is forbidden" : "See toiming on keelatud", "This directory is unavailable, please check the logs or contact the administrator" : "See kaust pole saadaval. Palun kontrolli logifaile või võta ühendust administraatoriga", + "Could not move \"{file}\"" : "\"{file}\" liigutamine ebaõnnestus", + "{newName} already exists" : "{newName} on juba olemas", + "Could not rename \"{fileName}\"" : "\"{fileName}\" ümbernimetamine ebaõnnestus", + "Could not create file \"{file}\"" : "Faili \"{file}\" loomine ebaõnnestus", + "Error deleting file \"{fileName}\"." : "Tõrge faili \"{fileName}\" kustutamisel.", "No entries in this folder match '{filter}'" : "Ükski sissekanne ei kattu filtriga '{filter}'", "Name" : "Nimi", "Size" : "Suurus", @@ -60,6 +67,7 @@ "Favorite" : "Lemmik", "Folder" : "Kaust", "New folder" : "Uus kaust", + "{newname} already exists" : "{newname} on juba olemas", "Upload" : "Lae üles", "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", "A new file or folder has been created" : "Uus fail või kataloog on loodud", @@ -94,6 +102,7 @@ "Currently scanning" : "Praegu skännimisel", "No favorites" : "Lemmikuid pole", "Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks", - "Text file" : "Tekstifail" + "Text file" : "Tekstifail", + "New text file.txt" : "Uus tekstifail.txt" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index 9add1516c4..d7b9935ac5 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Deskargatu", "Rename" : "Berrizendatu", "Delete" : "Ezabatu", + "Disconnect storage" : "Deskonektatu biltegia", + "Unshare" : "Ez elkarbanatu", "Details" : "Xehetasunak", "Select" : "hautatu", "Pending" : "Zain", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index 96943f33a9..71dc13b574 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -32,6 +32,8 @@ "Download" : "Deskargatu", "Rename" : "Berrizendatu", "Delete" : "Ezabatu", + "Disconnect storage" : "Deskonektatu biltegia", + "Unshare" : "Ez elkarbanatu", "Details" : "Xehetasunak", "Select" : "hautatu", "Pending" : "Zain", diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index 46cbbc376a..5f6c49e742 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -34,6 +34,7 @@ OC.L10N.register( "Download" : "دانلود", "Rename" : "تغییرنام", "Delete" : "حذف", + "Unshare" : "لغو اشتراک", "Details" : "جزئیات", "Select" : "انتخاب", "Pending" : "در انتظار", diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index b9e32d69e3..a4d0add25b 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -32,6 +32,7 @@ "Download" : "دانلود", "Rename" : "تغییرنام", "Delete" : "حذف", + "Unshare" : "لغو اشتراک", "Details" : "جزئیات", "Select" : "انتخاب", "Pending" : "در انتظار", diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js index 8bebb81fd3..5e1327f755 100644 --- a/apps/files/l10n/fi_FI.js +++ b/apps/files/l10n/fi_FI.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Lataa", "Rename" : "Nimeä uudelleen", "Delete" : "Poista", + "Disconnect storage" : "Katkaise yhteys tallennustilaan", + "Unshare" : "Peru jakaminen", "Details" : "Tiedot", "Select" : "Valitse", "Pending" : "Odottaa", diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json index 64b0a886b7..baf6c5d449 100644 --- a/apps/files/l10n/fi_FI.json +++ b/apps/files/l10n/fi_FI.json @@ -32,6 +32,8 @@ "Download" : "Lataa", "Rename" : "Nimeä uudelleen", "Delete" : "Poista", + "Disconnect storage" : "Katkaise yhteys tallennustilaan", + "Unshare" : "Peru jakaminen", "Details" : "Tiedot", "Select" : "Valitse", "Pending" : "Odottaa", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 6af58e9309..16f9557293 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Télécharger", "Rename" : "Renommer", "Delete" : "Supprimer", + "Disconnect storage" : "Déconnecter ce support de stockage", + "Unshare" : "Ne plus partager", "Details" : "Détails", "Select" : "Sélectionner", "Pending" : "En attente", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index ba25b77e3d..3f8cdf9553 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -32,6 +32,8 @@ "Download" : "Télécharger", "Rename" : "Renommer", "Delete" : "Supprimer", + "Disconnect storage" : "Déconnecter ce support de stockage", + "Unshare" : "Ne plus partager", "Details" : "Détails", "Select" : "Sélectionner", "Pending" : "En attente", diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js index a1548e6b73..8310334287 100644 --- a/apps/files/l10n/ia.js +++ b/apps/files/l10n/ia.js @@ -10,6 +10,7 @@ OC.L10N.register( "Close" : "Clauder", "Download" : "Discargar", "Delete" : "Deler", + "Unshare" : "Leva compartir", "Name" : "Nomine", "Size" : "Dimension", "Modified" : "Modificate", diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json index bbc3f4bc02..eee4980e34 100644 --- a/apps/files/l10n/ia.json +++ b/apps/files/l10n/ia.json @@ -8,6 +8,7 @@ "Close" : "Clauder", "Download" : "Discargar", "Delete" : "Deler", + "Unshare" : "Leva compartir", "Name" : "Nomine", "Size" : "Dimension", "Modified" : "Modificate", diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index 93ec698cfa..07b33195d4 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Unduh", "Rename" : "Ubah nama", "Delete" : "Hapus", + "Disconnect storage" : "Memutuskan penyimpaan", + "Unshare" : "Batalkan berbagi", "Details" : "Rincian", "Select" : "Pilih", "Pending" : "Tertunda", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index dca3e7bd16..efe7c4559e 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -32,6 +32,8 @@ "Download" : "Unduh", "Rename" : "Ubah nama", "Delete" : "Hapus", + "Disconnect storage" : "Memutuskan penyimpaan", + "Unshare" : "Batalkan berbagi", "Details" : "Rincian", "Select" : "Pilih", "Pending" : "Tertunda", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index 967e205145..68b0ad573a 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -17,6 +17,7 @@ OC.L10N.register( "Download" : "Niðurhal", "Rename" : "Endurskýra", "Delete" : "Eyða", + "Unshare" : "Hætta deilingu", "Select" : "Velja", "Pending" : "Bíður", "Name" : "Nafn", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index caff3b037d..44153e9410 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -15,6 +15,7 @@ "Download" : "Niðurhal", "Rename" : "Endurskýra", "Delete" : "Eyða", + "Unshare" : "Hætta deilingu", "Select" : "Velja", "Pending" : "Bíður", "Name" : "Nafn", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 93a013492a..d3a567e1d1 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Scarica", "Rename" : "Rinomina", "Delete" : "Elimina", + "Disconnect storage" : "Disconnetti archiviazione", + "Unshare" : "Rimuovi condivisione", "Details" : "Dettagli", "Select" : "Seleziona", "Pending" : "In corso", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 25d3834b0a..611de29514 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -32,6 +32,8 @@ "Download" : "Scarica", "Rename" : "Rinomina", "Delete" : "Elimina", + "Disconnect storage" : "Disconnetti archiviazione", + "Unshare" : "Rimuovi condivisione", "Details" : "Dettagli", "Select" : "Seleziona", "Pending" : "In corso", diff --git a/apps/files/l10n/km.js b/apps/files/l10n/km.js index f03aa9c469..55080926fc 100644 --- a/apps/files/l10n/km.js +++ b/apps/files/l10n/km.js @@ -10,6 +10,7 @@ OC.L10N.register( "Download" : "ទាញយក", "Rename" : "ប្ដូរ​ឈ្មោះ", "Delete" : "លុប", + "Unshare" : "លែង​ចែក​រំលែក", "Details" : "ព័ត៌មាន​លម្អិត", "Pending" : "កំពុង​រង់ចាំ", "Name" : "ឈ្មោះ", diff --git a/apps/files/l10n/km.json b/apps/files/l10n/km.json index f050b00b79..c1e9159ee8 100644 --- a/apps/files/l10n/km.json +++ b/apps/files/l10n/km.json @@ -8,6 +8,7 @@ "Download" : "ទាញយក", "Rename" : "ប្ដូរ​ឈ្មោះ", "Delete" : "លុប", + "Unshare" : "លែង​ចែក​រំលែក", "Details" : "ព័ត៌មាន​លម្អិត", "Pending" : "កំពុង​រង់ចាំ", "Name" : "ឈ្មោះ", diff --git a/apps/files/l10n/kn.js b/apps/files/l10n/kn.js index 840837bdad..f9fb8977f9 100644 --- a/apps/files/l10n/kn.js +++ b/apps/files/l10n/kn.js @@ -25,6 +25,8 @@ OC.L10N.register( "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ", "Rename" : "ಮರುಹೆಸರಿಸು", "Delete" : "ಅಳಿಸಿ", + "Disconnect storage" : "ಸಂಗ್ರಹ ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಿ", + "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", "Select" : "ಆಯ್ಕೆ ಮಾಡಿ", "Pending" : "ಬಾಕಿ ಇದೆ", "Unable to determine date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", diff --git a/apps/files/l10n/kn.json b/apps/files/l10n/kn.json index d6345be732..12446a3f8b 100644 --- a/apps/files/l10n/kn.json +++ b/apps/files/l10n/kn.json @@ -23,6 +23,8 @@ "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ", "Rename" : "ಮರುಹೆಸರಿಸು", "Delete" : "ಅಳಿಸಿ", + "Disconnect storage" : "ಸಂಗ್ರಹ ಸಾಧನವನ್ನು ತೆಗೆದುಹಾಕಿ", + "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", "Select" : "ಆಯ್ಕೆ ಮಾಡಿ", "Pending" : "ಬಾಕಿ ಇದೆ", "Unable to determine date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index 13e917e3cf..e6d0f0a1b8 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "다운로드", "Rename" : "이름 바꾸기", "Delete" : "삭제", + "Disconnect storage" : "저장소 연결 해제", + "Unshare" : "공유 해제", "Details" : "자세한 정보", "Select" : "선택", "Pending" : "대기 중", diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index 1e77ab1b9b..e695b9cd42 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -32,6 +32,8 @@ "Download" : "다운로드", "Rename" : "이름 바꾸기", "Delete" : "삭제", + "Disconnect storage" : "저장소 연결 해제", + "Unshare" : "공유 해제", "Details" : "자세한 정보", "Select" : "선택", "Pending" : "대기 중", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index b4001e0c8e..e93fb079d5 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -40,6 +40,17 @@ OC.L10N.register( "Unable to determine date" : "Nepavyksta nustatyti datos", "This operation is forbidden" : "Ši operacija yra uždrausta", "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi", + "Could not move \"{file}\", target exists" : "Nepavyko perkelti \"{file}\", toks jau egzistuoja", + "Could not move \"{file}\"" : "Nepavyko perkelti \"{file}\"", + "{newName} already exists" : "{newName} jau egzistuoja", + "Could not rename \"{fileName}\", it does not exist any more" : "Nepavyko pervadinti failo \"{fileName}\", nes jis jau nebeegzistuoja", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Pavadinimas \"{targetName}\" jau naudojamas aplanke \"{dir}\". Prašome pasirinkti kitokį pavadinimą.", + "Could not rename \"{fileName}\"" : "Nepavyko pervadinti failo \"{fileName}\"", + "Could not create file \"{file}\"" : "Nepavyko sukurti failo \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Nepavyko sukurti failo \"{file}\" - failas su tokiu pavadinimu jau egzistuoja", + "Could not create folder \"{dir}\"" : "Nepavyko sukurti aplanko \"{dir}\"", + "Could not create folder \"{dir}\" because it already exists" : "Nepavyko sukurti aplanko \"{dir}\"- aplankas su tokiu pavadinimu jau egzistuoja", + "Error deleting file \"{fileName}\"." : "Klaida trinant failą \"{fileName}\".", "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Name" : "Pavadinimas", "Size" : "Dydis", diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index ba8610da86..e6724be98c 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -38,6 +38,17 @@ "Unable to determine date" : "Nepavyksta nustatyti datos", "This operation is forbidden" : "Ši operacija yra uždrausta", "This directory is unavailable, please check the logs or contact the administrator" : "Katalogas nepasiekiamas, prašome peržiūrėti žurnalo įrašus arba susisiekti su administratoriumi", + "Could not move \"{file}\", target exists" : "Nepavyko perkelti \"{file}\", toks jau egzistuoja", + "Could not move \"{file}\"" : "Nepavyko perkelti \"{file}\"", + "{newName} already exists" : "{newName} jau egzistuoja", + "Could not rename \"{fileName}\", it does not exist any more" : "Nepavyko pervadinti failo \"{fileName}\", nes jis jau nebeegzistuoja", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Pavadinimas \"{targetName}\" jau naudojamas aplanke \"{dir}\". Prašome pasirinkti kitokį pavadinimą.", + "Could not rename \"{fileName}\"" : "Nepavyko pervadinti failo \"{fileName}\"", + "Could not create file \"{file}\"" : "Nepavyko sukurti failo \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Nepavyko sukurti failo \"{file}\" - failas su tokiu pavadinimu jau egzistuoja", + "Could not create folder \"{dir}\"" : "Nepavyko sukurti aplanko \"{dir}\"", + "Could not create folder \"{dir}\" because it already exists" : "Nepavyko sukurti aplanko \"{dir}\"- aplankas su tokiu pavadinimu jau egzistuoja", + "Error deleting file \"{fileName}\"." : "Klaida trinant failą \"{fileName}\".", "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Name" : "Pavadinimas", "Size" : "Dydis", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 92616a372a..7a387afee6 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -54,6 +54,7 @@ OC.L10N.register( "Settings" : "Подесувања", "WebDAV" : "WebDAV", "Cancel upload" : "Откажи прикачување", + "No entries found in this folder" : "Нема ништо во оваа папка", "Upload too large" : "Фајлот кој се вчитува е преголем", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.", "Files are being scanned, please wait." : "Се скенираат датотеки, ве молам почекајте.", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index 147707256c..acf8f546d7 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -52,6 +52,7 @@ "Settings" : "Подесувања", "WebDAV" : "WebDAV", "Cancel upload" : "Откажи прикачување", + "No entries found in this folder" : "Нема ништо во оваа папка", "Upload too large" : "Фајлот кој се вчитува е преголем", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.", "Files are being scanned, please wait." : "Се скенираат датотеки, ве молам почекајте.", diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js index 9d01ad626b..7f933c2e6a 100644 --- a/apps/files/l10n/nb_NO.js +++ b/apps/files/l10n/nb_NO.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Last ned", "Rename" : "Gi nytt navn", "Delete" : "Slett", + "Disconnect storage" : "Koble fra lagring", + "Unshare" : "Avslutt deling", "Details" : "Detaljer", "Select" : "Velg", "Pending" : "Ventende", diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json index 32eb320296..ca895007f6 100644 --- a/apps/files/l10n/nb_NO.json +++ b/apps/files/l10n/nb_NO.json @@ -32,6 +32,8 @@ "Download" : "Last ned", "Rename" : "Gi nytt navn", "Delete" : "Slett", + "Disconnect storage" : "Koble fra lagring", + "Unshare" : "Avslutt deling", "Details" : "Detaljer", "Select" : "Velg", "Pending" : "Ventende", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 4169c05326..d64dc68c47 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Downloaden", "Rename" : "Naam wijzigen", "Delete" : "Verwijderen", + "Disconnect storage" : "Verbinding met opslag verbreken", + "Unshare" : "Stop met delen", "Details" : "Details", "Select" : "Selecteer", "Pending" : "In behandeling", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 07210b1382..1268cc1086 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -32,6 +32,8 @@ "Download" : "Downloaden", "Rename" : "Naam wijzigen", "Delete" : "Verwijderen", + "Disconnect storage" : "Verbinding met opslag verbreken", + "Unshare" : "Stop met delen", "Details" : "Details", "Select" : "Selecteer", "Pending" : "In behandeling", diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js index efe3707c21..519387d6ba 100644 --- a/apps/files/l10n/nn_NO.js +++ b/apps/files/l10n/nn_NO.js @@ -28,6 +28,7 @@ OC.L10N.register( "Download" : "Last ned", "Rename" : "Endra namn", "Delete" : "Slett", + "Unshare" : "Udel", "Details" : "Detaljar", "Pending" : "Under vegs", "Name" : "Namn", diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json index 929f8c0d7f..a29e272eba 100644 --- a/apps/files/l10n/nn_NO.json +++ b/apps/files/l10n/nn_NO.json @@ -26,6 +26,7 @@ "Download" : "Last ned", "Rename" : "Endra namn", "Delete" : "Slett", + "Unshare" : "Udel", "Details" : "Detaljar", "Pending" : "Under vegs", "Name" : "Namn", diff --git a/apps/files/l10n/oc.js b/apps/files/l10n/oc.js index a3088b663f..a6f59679a1 100644 --- a/apps/files/l10n/oc.js +++ b/apps/files/l10n/oc.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Telecargar", "Rename" : "Renomenar", "Delete" : "Suprimir", + "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge", + "Unshare" : "Partejar pas", "Details" : "Detalhs", "Select" : "Seleccionar", "Pending" : "En espèra", diff --git a/apps/files/l10n/oc.json b/apps/files/l10n/oc.json index c604860569..61caa1724b 100644 --- a/apps/files/l10n/oc.json +++ b/apps/files/l10n/oc.json @@ -32,6 +32,8 @@ "Download" : "Telecargar", "Rename" : "Renomenar", "Delete" : "Suprimir", + "Disconnect storage" : "Desconnectar aqueste supòrt d'emmagazinatge", + "Unshare" : "Partejar pas", "Details" : "Detalhs", "Select" : "Seleccionar", "Pending" : "En espèra", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 6478fbe5eb..de1d858124 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Pobierz", "Rename" : "Zmień nazwę", "Delete" : "Usuń", + "Disconnect storage" : "Odłącz magazyn", + "Unshare" : "Zatrzymaj współdzielenie", "Details" : "Szczegóły", "Select" : "Wybierz", "Pending" : "Oczekujące", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 98a0592cc7..491991c6f6 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -32,6 +32,8 @@ "Download" : "Pobierz", "Rename" : "Zmień nazwę", "Delete" : "Usuń", + "Disconnect storage" : "Odłącz magazyn", + "Unshare" : "Zatrzymaj współdzielenie", "Details" : "Szczegóły", "Select" : "Wybierz", "Pending" : "Oczekujące", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 6619da366e..2cf4a3dbc8 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -34,12 +34,25 @@ OC.L10N.register( "Download" : "Baixar", "Rename" : "Renomear", "Delete" : "Excluir", + "Disconnect storage" : "Desconectar armazenamento", + "Unshare" : "Descompartilhar", "Details" : "Detalhes", "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", "This operation is forbidden" : "Esta operação é proibida", "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador", + "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o alvo já existe", + "Could not move \"{file}\"" : "Não foi possível mover \"{file}\"", + "{newName} already exists" : "{newName} já existe", + "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele já não existe", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta \"{dir}\". Por favor escolha um outro nome.", + "Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"", + "Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe", + "Could not create folder \"{dir}\"" : "Não foi possível criar a pasta \"{dir}\"", + "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe", + "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao apagar o arquivo \"{fileName}\".", "No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'", "Name" : "Nome", "Size" : "Tamanho", @@ -68,7 +81,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas", "A new file or folder has been created" : "Um novo arquivo ou pasta foi criado", "A file or folder has been changed" : "Um arquivo ou pasta foi modificado", - "Limit notifications about creation and changes to your favorite files (Stream only)" : "Limite de notificações sobre a criação e alterações em seus arquivos favoritos (Stream apenas)", + "Limit notifications about creation and changes to your favorite files (Stream only)" : "Limite de notificações sobre a criação e alterações em seus arquivos favoritos (apenas Stream)", "A file or folder has been deleted" : "Um arquivo ou pasta foi excluído", "A file or folder has been restored" : "Um arquivo ou pasta foi restautado", "You created %1$s" : "Você criou %1$s", @@ -103,7 +116,7 @@ OC.L10N.register( "Files are being scanned, please wait." : "Arquivos sendo escaneados, por favor aguarde.", "Currently scanning" : "Atualmente escaneando", "No favorites" : "Sem favoritos", - "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favorito são mostrados aqui", + "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui", "Text file" : "Arquivo texto", "New text file.txt" : "Novo texto file.txt" }, diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index e656d9e007..be96373df6 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -32,12 +32,25 @@ "Download" : "Baixar", "Rename" : "Renomear", "Delete" : "Excluir", + "Disconnect storage" : "Desconectar armazenamento", + "Unshare" : "Descompartilhar", "Details" : "Detalhes", "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", "This operation is forbidden" : "Esta operação é proibida", "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador", + "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o alvo já existe", + "Could not move \"{file}\"" : "Não foi possível mover \"{file}\"", + "{newName} already exists" : "{newName} já existe", + "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele já não existe", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta \"{dir}\". Por favor escolha um outro nome.", + "Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"", + "Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe", + "Could not create folder \"{dir}\"" : "Não foi possível criar a pasta \"{dir}\"", + "Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe", + "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao apagar o arquivo \"{fileName}\".", "No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'", "Name" : "Nome", "Size" : "Tamanho", @@ -66,7 +79,7 @@ "An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas", "A new file or folder has been created" : "Um novo arquivo ou pasta foi criado", "A file or folder has been changed" : "Um arquivo ou pasta foi modificado", - "Limit notifications about creation and changes to your favorite files (Stream only)" : "Limite de notificações sobre a criação e alterações em seus arquivos favoritos (Stream apenas)", + "Limit notifications about creation and changes to your favorite files (Stream only)" : "Limite de notificações sobre a criação e alterações em seus arquivos favoritos (apenas Stream)", "A file or folder has been deleted" : "Um arquivo ou pasta foi excluído", "A file or folder has been restored" : "Um arquivo ou pasta foi restautado", "You created %1$s" : "Você criou %1$s", @@ -101,7 +114,7 @@ "Files are being scanned, please wait." : "Arquivos sendo escaneados, por favor aguarde.", "Currently scanning" : "Atualmente escaneando", "No favorites" : "Sem favoritos", - "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favorito são mostrados aqui", + "Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui", "Text file" : "Arquivo texto", "New text file.txt" : "Novo texto file.txt" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js index 54e7c505c9..e9114f5531 100644 --- a/apps/files/l10n/ro.js +++ b/apps/files/l10n/ro.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Descarcă", "Rename" : "Redenumește", "Delete" : "Șterge", + "Disconnect storage" : "Deconectează stocarea", + "Unshare" : "Nu mai partaja", "Details" : "Detalii", "Select" : "Alege", "Pending" : "În așteptare", diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json index 3fe8ba180b..ed4bf8e385 100644 --- a/apps/files/l10n/ro.json +++ b/apps/files/l10n/ro.json @@ -32,6 +32,8 @@ "Download" : "Descarcă", "Rename" : "Redenumește", "Delete" : "Șterge", + "Disconnect storage" : "Deconectează stocarea", + "Unshare" : "Nu mai partaja", "Details" : "Detalii", "Select" : "Alege", "Pending" : "În așteptare", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index f4b71563e6..a6fb70944e 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Скачать", "Rename" : "Переименовать", "Delete" : "Удалить", + "Disconnect storage" : "Отсоединить хранилище", + "Unshare" : "Закрыть доступ", "Details" : "Подробно", "Select" : "Выбрать", "Pending" : "Ожидание", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 81dbf53184..964a819535 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -32,6 +32,8 @@ "Download" : "Скачать", "Rename" : "Переименовать", "Delete" : "Удалить", + "Disconnect storage" : "Отсоединить хранилище", + "Unshare" : "Закрыть доступ", "Details" : "Подробно", "Select" : "Выбрать", "Pending" : "Ожидание", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 240bce73af..103b486120 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Prejmi", "Rename" : "Preimenuj", "Delete" : "Izbriši", + "Disconnect storage" : "Odklopi shrambo", + "Unshare" : "Prekini souporabo", "Details" : "Podrobnosti", "Select" : "Izberi", "Pending" : "V čakanju ...", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index 64ad90f56b..ef5720b8be 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -32,6 +32,8 @@ "Download" : "Prejmi", "Rename" : "Preimenuj", "Delete" : "Izbriši", + "Disconnect storage" : "Odklopi shrambo", + "Unshare" : "Prekini souporabo", "Details" : "Podrobnosti", "Select" : "Izberi", "Pending" : "V čakanju ...", diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js index 6811dc5791..5a95ea92e3 100644 --- a/apps/files/l10n/sq.js +++ b/apps/files/l10n/sq.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Shkarkoje", "Rename" : "Riemërtojeni", "Delete" : "Fshije", + "Disconnect storage" : "Shkëput hapësirën e memorizimit", + "Unshare" : "Hiqe ndarjen", "Details" : "Hollësi", "Select" : "Përzgjidhe", "Pending" : "Në pritje", diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json index 45b9d6acb6..e70fffe8e5 100644 --- a/apps/files/l10n/sq.json +++ b/apps/files/l10n/sq.json @@ -32,6 +32,8 @@ "Download" : "Shkarkoje", "Rename" : "Riemërtojeni", "Delete" : "Fshije", + "Disconnect storage" : "Shkëput hapësirën e memorizimit", + "Unshare" : "Hiqe ndarjen", "Details" : "Hollësi", "Select" : "Përzgjidhe", "Pending" : "Në pritje", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 80f81b1e02..6a97b5f282 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Преузми", "Rename" : "Преименуј", "Delete" : "Обриши", + "Disconnect storage" : "Искључи складиште", + "Unshare" : "Не дели", "Details" : "Подаци", "Select" : "Изабери", "Pending" : "На чекању", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index f878b9c14d..7f319f6ab4 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -32,6 +32,8 @@ "Download" : "Преузми", "Rename" : "Преименуј", "Delete" : "Обриши", + "Disconnect storage" : "Искључи складиште", + "Unshare" : "Не дели", "Details" : "Подаци", "Select" : "Изабери", "Pending" : "На чекању", diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js index d7017005a1..ed166f5ee8 100644 --- a/apps/files/l10n/sr@latin.js +++ b/apps/files/l10n/sr@latin.js @@ -33,6 +33,8 @@ OC.L10N.register( "Download" : "Preuzmi", "Rename" : "Preimenuj", "Delete" : "Obriši", + "Disconnect storage" : "Isključi skladište", + "Unshare" : "Ne deli", "Details" : "Detaljnije", "Select" : "Izaberi", "Pending" : "Na čekanju", diff --git a/apps/files/l10n/sr@latin.json b/apps/files/l10n/sr@latin.json index 98356e441d..a58df8712a 100644 --- a/apps/files/l10n/sr@latin.json +++ b/apps/files/l10n/sr@latin.json @@ -31,6 +31,8 @@ "Download" : "Preuzmi", "Rename" : "Preimenuj", "Delete" : "Obriši", + "Disconnect storage" : "Isključi skladište", + "Unshare" : "Ne deli", "Details" : "Detaljnije", "Select" : "Izaberi", "Pending" : "Na čekanju", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index f5e81760b0..f6df4ee16d 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Ladda ner", "Rename" : "Byt namn", "Delete" : "Radera", + "Disconnect storage" : "Koppla bort lagring", + "Unshare" : "Sluta dela", "Details" : "Detaljer", "Select" : "Välj", "Pending" : "Väntar", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index c624c34029..143e35a1e0 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -32,6 +32,8 @@ "Download" : "Ladda ner", "Rename" : "Byt namn", "Delete" : "Radera", + "Disconnect storage" : "Koppla bort lagring", + "Unshare" : "Sluta dela", "Details" : "Detaljer", "Select" : "Välj", "Pending" : "Väntar", diff --git a/apps/files/l10n/ug.js b/apps/files/l10n/ug.js index 55985f6a65..b587b59063 100644 --- a/apps/files/l10n/ug.js +++ b/apps/files/l10n/ug.js @@ -17,6 +17,7 @@ OC.L10N.register( "Download" : "چۈشۈر", "Rename" : "ئات ئۆزگەرت", "Delete" : "ئۆچۈر", + "Unshare" : "ھەمبەھىرلىمە", "Pending" : "كۈتۈۋاتىدۇ", "Name" : "ئاتى", "Size" : "چوڭلۇقى", diff --git a/apps/files/l10n/ug.json b/apps/files/l10n/ug.json index 716bf62afb..dd2e9c98ee 100644 --- a/apps/files/l10n/ug.json +++ b/apps/files/l10n/ug.json @@ -15,6 +15,7 @@ "Download" : "چۈشۈر", "Rename" : "ئات ئۆزگەرت", "Delete" : "ئۆچۈر", + "Unshare" : "ھەمبەھىرلىمە", "Pending" : "كۈتۈۋاتىدۇ", "Name" : "ئاتى", "Size" : "چوڭلۇقى", diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index 8d43949d8f..7da8b160af 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "Завантажити", "Rename" : "Перейменувати", "Delete" : "Видалити", + "Disconnect storage" : "Від’єднати сховище", + "Unshare" : "Закрити спільний доступ", "Details" : "Деталі", "Select" : "Оберіть", "Pending" : "Очікування", diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index d7381e0cfa..15dabf456f 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -32,6 +32,8 @@ "Download" : "Завантажити", "Rename" : "Перейменувати", "Delete" : "Видалити", + "Disconnect storage" : "Від’єднати сховище", + "Unshare" : "Закрити спільний доступ", "Details" : "Деталі", "Select" : "Оберіть", "Pending" : "Очікування", diff --git a/apps/files/l10n/ur_PK.js b/apps/files/l10n/ur_PK.js index bac2c3b614..094511db42 100644 --- a/apps/files/l10n/ur_PK.js +++ b/apps/files/l10n/ur_PK.js @@ -5,6 +5,7 @@ OC.L10N.register( "Close" : "بند ", "Download" : "ڈاؤن لوڈ،", "Delete" : "حذف کریں", + "Unshare" : "شئیرنگ ختم کریں", "Name" : "اسم", "Save" : "حفظ", "Settings" : "ترتیبات" diff --git a/apps/files/l10n/ur_PK.json b/apps/files/l10n/ur_PK.json index be36293b91..3c859bb452 100644 --- a/apps/files/l10n/ur_PK.json +++ b/apps/files/l10n/ur_PK.json @@ -3,6 +3,7 @@ "Close" : "بند ", "Download" : "ڈاؤن لوڈ،", "Delete" : "حذف کریں", + "Unshare" : "شئیرنگ ختم کریں", "Name" : "اسم", "Save" : "حفظ", "Settings" : "ترتیبات" diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js index 4af893ab66..83dd03f48f 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -30,6 +30,7 @@ OC.L10N.register( "Download" : "Tải về", "Rename" : "Sửa tên", "Delete" : "Xóa", + "Unshare" : "Bỏ chia sẻ", "Details" : "Chi tiết", "Select" : "Chọn", "Pending" : "Đang chờ", diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json index ebffb82752..abc8396387 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -28,6 +28,7 @@ "Download" : "Tải về", "Rename" : "Sửa tên", "Delete" : "Xóa", + "Unshare" : "Bỏ chia sẻ", "Details" : "Chi tiết", "Select" : "Chọn", "Pending" : "Đang chờ", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 09829db3bc..0283c91b65 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -34,6 +34,8 @@ OC.L10N.register( "Download" : "下載", "Rename" : "重新命名", "Delete" : "刪除", + "Disconnect storage" : "斷開儲存空間連接", + "Unshare" : "取消分享", "Details" : "詳細資料", "Select" : "選擇", "Pending" : "等候中", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 6f2c396ad1..4969b3d5bf 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -32,6 +32,8 @@ "Download" : "下載", "Rename" : "重新命名", "Delete" : "刪除", + "Disconnect storage" : "斷開儲存空間連接", + "Unshare" : "取消分享", "Details" : "詳細資料", "Select" : "選擇", "Pending" : "等候中", diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index 9a4e8d5978..4f96051883 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -66,15 +66,15 @@ class Helper { */ public static function determineIcon($file) { if($file['type'] === 'dir') { - $icon = \OC_Helper::mimetypeIcon('dir'); + $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir'); // TODO: move this part to the client side, using mountType if ($file->isShared()) { - $icon = \OC_Helper::mimetypeIcon('dir-shared'); + $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-shared'); } elseif ($file->isMounted()) { - $icon = \OC_Helper::mimetypeIcon('dir-external'); + $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon('dir-external'); } }else{ - $icon = \OC_Helper::mimetypeIcon($file->getMimetype()); + $icon = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($file->getMimetype()); } return substr($icon, 0, -3) . 'svg'; diff --git a/apps/files/tests/backgroundjob/ScanFilesTest.php b/apps/files/tests/backgroundjob/ScanFilesTest.php index 907cad64f9..087696f0cf 100644 --- a/apps/files/tests/backgroundjob/ScanFilesTest.php +++ b/apps/files/tests/backgroundjob/ScanFilesTest.php @@ -24,7 +24,6 @@ use Test\TestCase; use OCP\IConfig; use OCP\IUserManager; use OCA\Files\BackgroundJob\ScanFiles; -use OCP\ILogger; /** * Class ScanFilesTest diff --git a/apps/files/tests/controller/apicontrollertest.php b/apps/files/tests/controller/apicontrollertest.php index fb728d5eff..bc66e4641b 100644 --- a/apps/files/tests/controller/apicontrollertest.php +++ b/apps/files/tests/controller/apicontrollertest.php @@ -92,6 +92,7 @@ class ApiControllerTest extends TestCase { [ 'mtime' => 55, 'mimetype' => 'application/pdf', + 'permissions' => 31, 'size' => 1234, 'etag' => 'MyEtag', ], @@ -111,7 +112,7 @@ class ApiControllerTest extends TestCase { 'parentId' => null, 'mtime' => 55000, 'name' => 'root.txt', - 'permissions' => null, + 'permissions' => 31, 'mimetype' => 'application/pdf', 'size' => 1234, 'type' => 'file', @@ -139,6 +140,7 @@ class ApiControllerTest extends TestCase { [ 'mtime' => 55, 'mimetype' => 'application/pdf', + 'permissions' => 31, 'size' => 1234, 'etag' => 'MyEtag', ], @@ -155,6 +157,7 @@ class ApiControllerTest extends TestCase { [ 'mtime' => 999, 'mimetype' => 'application/binary', + 'permissions' => 31, 'size' => 9876, 'etag' => 'SubEtag', ], @@ -174,7 +177,7 @@ class ApiControllerTest extends TestCase { 'parentId' => null, 'mtime' => 55000, 'name' => 'root.txt', - 'permissions' => null, + 'permissions' => 31, 'mimetype' => 'application/pdf', 'size' => 1234, 'type' => 'file', @@ -191,7 +194,7 @@ class ApiControllerTest extends TestCase { 'parentId' => null, 'mtime' => 999000, 'name' => 'root.txt', - 'permissions' => null, + 'permissions' => 31, 'mimetype' => 'application/binary', 'size' => 9876, 'type' => 'file', diff --git a/apps/files/tests/js/fileactionsmenuSpec.js b/apps/files/tests/js/fileactionsmenuSpec.js index 747a746a60..3028db2b3a 100644 --- a/apps/files/tests/js/fileactionsmenuSpec.js +++ b/apps/files/tests/js/fileactionsmenuSpec.js @@ -20,7 +20,7 @@ */ describe('OCA.Files.FileActionsMenu tests', function() { - var fileList, fileActions, menu, actionStub, $tr; + var fileList, fileActions, menu, actionStub, menuContext, $tr; beforeEach(function() { // init horrible parameters @@ -80,7 +80,7 @@ describe('OCA.Files.FileActionsMenu tests', function() { }; $tr = fileList.add(fileData); - var menuContext = { + menuContext = { $file: $tr, fileList: fileList, fileActions: fileActions, @@ -189,6 +189,22 @@ describe('OCA.Files.FileActionsMenu tests', function() { var yactionIndex = menu.$el.find('a[data-action=Yaction]').closest('li').index(); expect(wactionIndex).toBeLessThan(yactionIndex); }); + it('calls displayName function', function() { + var displayNameStub = sinon.stub().returns('Test'); + + fileActions.registerAction({ + name: 'Something', + displayName: displayNameStub, + mime: 'text/plain', + permissions: OC.PERMISSION_ALL + }); + + menu.render(); + + expect(displayNameStub.calledOnce).toEqual(true); + expect(displayNameStub.calledWith(menuContext)).toEqual(true); + expect(menu.$el.find('a[data-action=Something]').text()).toEqual('Test'); + }); }); describe('action handler', function() { diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 9f7ad50bc6..9dfcdfead7 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -2402,6 +2402,21 @@ describe('OCA.Files.FileList tests', function() { expect(ev.result).not.toEqual(false); expect(uploadData.targetDir).toEqual('/a/b'); }); + it('renders upload indicator element for folders only', function() { + fileList.add({ + name: 'afolder', + type: 'dir', + mime: 'httpd/unix-directory' + }); + fileList.add({ + name: 'afile.txt', + type: 'file', + mime: 'text/plain' + }); + + expect(fileList.findFileEl('afolder').find('.uploadtext').length).toEqual(1); + expect(fileList.findFileEl('afile.txt').find('.uploadtext').length).toEqual(0); + }); }); }); describe('Handling errors', function () { @@ -2534,4 +2549,34 @@ describe('OCA.Files.FileList tests', function() { expect(newFileMenuStub.notCalled).toEqual(true); }); }); + describe('mount type detection', function() { + function testMountType(dirInfoId, dirInfoMountType, inputMountType, expectedMountType) { + var $tr; + fileList.dirInfo.id = dirInfoId; + fileList.dirInfo.mountType = dirInfoMountType; + $tr = fileList.add({ + type: 'dir', + mimetype: 'httpd/unix-directory', + name: 'test dir', + mountType: inputMountType + }); + + expect($tr.attr('data-mounttype')).toEqual(expectedMountType); + } + + it('leaves mount type as is if no parent exists', function() { + testMountType(null, null, 'external', 'external'); + testMountType(null, null, 'shared', 'shared'); + }); + it('detects share root if parent exists', function() { + testMountType(123, null, 'shared', 'shared-root'); + testMountType(123, 'shared', 'shared', 'shared'); + testMountType(123, 'shared-root', 'shared', 'shared'); + }); + it('detects external storage root if parent exists', function() { + testMountType(123, null, 'external', 'external-root'); + testMountType(123, 'external', 'external', 'external'); + testMountType(123, 'external-root', 'external', 'external'); + }); + }); }); diff --git a/apps/files/tests/service/tagservice.php b/apps/files/tests/service/tagservice.php index 36da3edc61..b93dedd0ef 100644 --- a/apps/files/tests/service/tagservice.php +++ b/apps/files/tests/service/tagservice.php @@ -54,7 +54,7 @@ class TagServiceTest extends \Test\TestCase { protected function setUp() { parent::setUp(); $this->user = $this->getUniqueId('user'); - \OC_User::createUser($this->user, 'test'); + \OC::$server->getUserManager()->createUser($this->user, 'test'); \OC_User::setUserId($this->user); \OC_Util::setupFS($this->user); /** @@ -82,7 +82,8 @@ class TagServiceTest extends \Test\TestCase { protected function tearDown() { \OC_User::setUserId(''); - \OC_User::deleteUser($this->user); + $user = \OC::$server->getUserManager()->get($this->user); + if ($user !== null) { $user->delete(); } } public function testUpdateFileTags() { diff --git a/apps/files_external/appinfo/database.xml b/apps/files_external/appinfo/database.xml index 27918bf981..2c3615a4d4 100644 --- a/apps/files_external/appinfo/database.xml +++ b/apps/files_external/appinfo/database.xml @@ -80,14 +80,12 @@ 64 - mount_id_app_index mount_id ascending - applicable_value_index type ascending @@ -98,7 +96,6 @@ - applicable_value_mount_index true type @@ -147,14 +144,12 @@ - config_mount_id mount_id ascending - config_mount_key true mount_id @@ -199,7 +194,6 @@ - option_mount_id mount_id ascending diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml index f6d583d0a5..355d9feb4b 100644 --- a/apps/files_external/appinfo/info.xml +++ b/apps/files_external/appinfo/info.xml @@ -14,7 +14,7 @@ admin-external-storage false - 0.5.0 + 0.5.1 diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js index 94c8194e32..13ca22abcc 100644 --- a/apps/files_external/l10n/cs_CZ.js +++ b/apps/files_external/l10n/cs_CZ.js @@ -36,6 +36,14 @@ OC.L10N.register( "(group)" : "(skupina)", "Admin defined" : "Nastaveno administrátorem", "Saved" : "Uloženo", + "Empty response from the server" : "Prázdná odpověď serveru", + "Couldn't access. Please logout and login to activate this mount point" : "Nelze připojit. Pro aktivaci tohoto přípojného bodu se prosím odhlašte a znovu přihlašte", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Nelze obdržet seznam vzdálených přípojných bodů: {type}", + "There was an error with message: " : "Došlo k chybě s tímto hlášením:", + "External mount error" : "Chyba vzdáleného úložiště", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nelze obdržet seznam síťových úložišť systému Windows: prázdná odpověď serveru", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Některá z nastavených vzdálených úložišť nejsou připojena. Pro více informací prosím klikněte na červenou šipku(y)", "Access key" : "Přístupový klíč", "Secret key" : "Tajný klíč", "Builtin" : "Zabudované", diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json index 4adba2f4d0..bfcd3a30f4 100644 --- a/apps/files_external/l10n/cs_CZ.json +++ b/apps/files_external/l10n/cs_CZ.json @@ -34,6 +34,14 @@ "(group)" : "(skupina)", "Admin defined" : "Nastaveno administrátorem", "Saved" : "Uloženo", + "Empty response from the server" : "Prázdná odpověď serveru", + "Couldn't access. Please logout and login to activate this mount point" : "Nelze připojit. Pro aktivaci tohoto přípojného bodu se prosím odhlašte a znovu přihlašte", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Nelze obdržet informaci z ownCloud serveru: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Nelze obdržet seznam vzdálených přípojných bodů: {type}", + "There was an error with message: " : "Došlo k chybě s tímto hlášením:", + "External mount error" : "Chyba vzdáleného úložiště", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nelze obdržet seznam síťových úložišť systému Windows: prázdná odpověď serveru", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Některá z nastavených vzdálených úložišť nejsou připojena. Pro více informací prosím klikněte na červenou šipku(y)", "Access key" : "Přístupový klíč", "Secret key" : "Tajný klíč", "Builtin" : "Zabudované", diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index d4d00e7f83..18f67db420 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -10,10 +10,12 @@ OC.L10N.register( "Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden", "Invalid mount point" : "Ungültiger mount point", "Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“", + "%s" : "%s", "Personal" : "Persönlich", "System" : "System", "Grant access" : "Zugriff gestatten", "Access granted" : "Zugriff gestattet", + "Error configuring OAuth1" : "Fehler beim konfigurieren von OAuth1", "Error configuring OAuth2" : "Fehler beim Einrichten von OAuth2", "Generate keys" : "Schlüssel erzeugen", "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", @@ -25,7 +27,9 @@ OC.L10N.register( "Every time the filesystem is used" : "Immer, wenn das Dateisystem benutzt wird", "All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.", "(group)" : "(group)", + "Admin defined" : "Administrator festlegen", "Saved" : "Gespeichert", + "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:", "Access key" : "Zugangsschlüssel", "Secret key" : "Geheimer Schlüssel", "None" : "Keine", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index a65f58b0fd..cae7672260 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -8,10 +8,12 @@ "Storage with id \"%i\" not found" : "Der Speicher mit der ID „%i“ wurde nicht gefunden", "Invalid mount point" : "Ungültiger mount point", "Invalid storage backend \"%s\"" : "Ungültiges Speicher-Backend „%s“", + "%s" : "%s", "Personal" : "Persönlich", "System" : "System", "Grant access" : "Zugriff gestatten", "Access granted" : "Zugriff gestattet", + "Error configuring OAuth1" : "Fehler beim konfigurieren von OAuth1", "Error configuring OAuth2" : "Fehler beim Einrichten von OAuth2", "Generate keys" : "Schlüssel erzeugen", "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", @@ -23,7 +25,9 @@ "Every time the filesystem is used" : "Immer, wenn das Dateisystem benutzt wird", "All users. Type to select user or group." : "Alle Benutzer. Benutzer oder Gruppe zur Auswahl eingeben.", "(group)" : "(group)", + "Admin defined" : "Administrator festlegen", "Saved" : "Gespeichert", + "There was an error with message: " : "Es ist ein Fehler mit folgender Meldung aufgetreten:", "Access key" : "Zugangsschlüssel", "Secret key" : "Geheimer Schlüssel", "None" : "Keine", diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js index 294ec9da6f..6de2ebb210 100644 --- a/apps/files_external/l10n/el.js +++ b/apps/files_external/l10n/el.js @@ -17,6 +17,7 @@ OC.L10N.register( "Unsatisfied backend parameters" : "Ελλιπείς παράμετροι συστήματος", "Unsatisfied authentication mechanism parameters" : "Ελλιπείς παράμετροι μηχανισμού πιστοποίησης", "Insufficient data: %s" : "Μη επαρκή δεδομένα: %s", + "%s" : "%s", "Personal" : "Προσωπικά", "System" : "Σύστημα", "Grant access" : "Παροχή πρόσβασης", diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json index 431e81c3d7..1c5d7fb6df 100644 --- a/apps/files_external/l10n/el.json +++ b/apps/files_external/l10n/el.json @@ -15,6 +15,7 @@ "Unsatisfied backend parameters" : "Ελλιπείς παράμετροι συστήματος", "Unsatisfied authentication mechanism parameters" : "Ελλιπείς παράμετροι μηχανισμού πιστοποίησης", "Insufficient data: %s" : "Μη επαρκή δεδομένα: %s", + "%s" : "%s", "Personal" : "Προσωπικά", "System" : "Σύστημα", "Grant access" : "Παροχή πρόσβασης", diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js index 6d8bf0d313..5aaa3884fd 100644 --- a/apps/files_external/l10n/es.js +++ b/apps/files_external/l10n/es.js @@ -1,8 +1,8 @@ OC.L10N.register( "files_external", { - "Fetching request tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.", - "Fetching access tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.", + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.", "Please provide a valid app key and secret." : "Por favor facilite una clave de app y una clave secreta válidas.", "Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s", "Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s", @@ -36,6 +36,7 @@ OC.L10N.register( "(group)" : "(grupo)", "Admin defined" : "Admin definido", "Saved" : "Guardado", + "There was an error with message: " : "Hubo un error con el mensaje:", "Access key" : "Clave de acceso", "Secret key" : "Clave secreta", "None" : "Ninguno", @@ -100,6 +101,7 @@ OC.L10N.register( "Add storage" : "Añadir almacenamiento", "Advanced settings" : "Configuración avanzada", "Delete" : "Eliminar", + "Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo", "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json index bf0624e96d..60722de1f4 100644 --- a/apps/files_external/l10n/es.json +++ b/apps/files_external/l10n/es.json @@ -1,6 +1,6 @@ { "translations": { - "Fetching request tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.", - "Fetching access tokens failed. Verify that your app key and secret are correct." : "Fallo al acceder a los tokens solicitados. Verfique que su clave de app y la clave secreta son correctas.", + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Falló al acceder a los tokens solicitados. Verifique que su clave de app y la clave secreta sean correctas.", "Please provide a valid app key and secret." : "Por favor facilite una clave de app y una clave secreta válidas.", "Step 1 failed. Exception: %s" : "El paso 1 falló. Excepción: %s", "Step 2 failed. Exception: %s" : "El paso 2 falló. Excepción: %s", @@ -34,6 +34,7 @@ "(group)" : "(grupo)", "Admin defined" : "Admin definido", "Saved" : "Guardado", + "There was an error with message: " : "Hubo un error con el mensaje:", "Access key" : "Clave de acceso", "Secret key" : "Clave secreta", "None" : "Ninguno", @@ -98,6 +99,7 @@ "Add storage" : "Añadir almacenamiento", "Advanced settings" : "Configuración avanzada", "Delete" : "Eliminar", + "Allow users to mount external storage" : "Permitir a los usuarios montar un almacenamiento externo", "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/apps/files_external/l10n/et_EE.js b/apps/files_external/l10n/et_EE.js index fa22b4c659..e21ce7e39a 100644 --- a/apps/files_external/l10n/et_EE.js +++ b/apps/files_external/l10n/et_EE.js @@ -7,10 +7,14 @@ OC.L10N.register( "Storage with id \"%i\" not found" : "Salvestuskohta ID-ga \"%i\" ei leitud", "Invalid mount point" : "Vigane ühenduspunkt", "Invalid storage backend \"%s\"" : "Vigane salvestuskoha taustsüsteem \"%s\"", + "Unsatisfied backend parameters" : "Rahuldamata taustarakenduse parameetrid", + "%s" : "%s", "Personal" : "Isiklik", "System" : "Süsteem", "Grant access" : "Anna ligipääs", "Access granted" : "Ligipääs on antud", + "Error configuring OAuth1" : "OAuth1 seadistamise tõrge", + "Error configuring OAuth2" : "OAuth2 seadistamise tõrge", "Generate keys" : "Loo võtmed", "Error generating key pair" : "Viga võtmepaari loomisel", "Enable encryption" : "Luba krüpteerimine", @@ -21,18 +25,26 @@ OC.L10N.register( "Every time the filesystem is used" : "Iga kord, kui failisüsteemi kasutatakse", "All users. Type to select user or group." : "Kõik kasutajad. Kirjuta, et valida kasutaja või grupp.", "(group)" : "(grupp)", + "Admin defined" : "Admini poolt määratud", "Saved" : "Salvestatud", + "Couldn't get the list of external mount points: {type}" : "Välise ühenduspunkti hankimine ebaõnnestus: {type}", + "There was an error with message: " : "Sõnumiga tekkis tõrge:", + "External mount error" : "Välise seostamise tõrge", + "Access key" : "Ligipääsuvõti", + "Secret key" : "Salavõti", "Builtin" : "Sisseehitatud", "None" : "Pole", "OAuth1" : "OAuth1", "App key" : "Rakenduse võti", "App secret" : "Rakenduse salasõna", + "OAuth2" : "OAuth2", "Client ID" : "Kliendi ID", "Client secret" : "Kliendi salasõna", "OpenStack" : "OpenStack", "Username" : "Kasutajanimi", "Password" : "Parool", "API key" : "API võti", + "RSA public key" : "RSA avalik võti", "Public key" : "Avalik võti", "Amazon S3" : "Amazon S3", "Bucket" : "Korv", diff --git a/apps/files_external/l10n/et_EE.json b/apps/files_external/l10n/et_EE.json index 37e7cc282c..ad7b8622be 100644 --- a/apps/files_external/l10n/et_EE.json +++ b/apps/files_external/l10n/et_EE.json @@ -5,10 +5,14 @@ "Storage with id \"%i\" not found" : "Salvestuskohta ID-ga \"%i\" ei leitud", "Invalid mount point" : "Vigane ühenduspunkt", "Invalid storage backend \"%s\"" : "Vigane salvestuskoha taustsüsteem \"%s\"", + "Unsatisfied backend parameters" : "Rahuldamata taustarakenduse parameetrid", + "%s" : "%s", "Personal" : "Isiklik", "System" : "Süsteem", "Grant access" : "Anna ligipääs", "Access granted" : "Ligipääs on antud", + "Error configuring OAuth1" : "OAuth1 seadistamise tõrge", + "Error configuring OAuth2" : "OAuth2 seadistamise tõrge", "Generate keys" : "Loo võtmed", "Error generating key pair" : "Viga võtmepaari loomisel", "Enable encryption" : "Luba krüpteerimine", @@ -19,18 +23,26 @@ "Every time the filesystem is used" : "Iga kord, kui failisüsteemi kasutatakse", "All users. Type to select user or group." : "Kõik kasutajad. Kirjuta, et valida kasutaja või grupp.", "(group)" : "(grupp)", + "Admin defined" : "Admini poolt määratud", "Saved" : "Salvestatud", + "Couldn't get the list of external mount points: {type}" : "Välise ühenduspunkti hankimine ebaõnnestus: {type}", + "There was an error with message: " : "Sõnumiga tekkis tõrge:", + "External mount error" : "Välise seostamise tõrge", + "Access key" : "Ligipääsuvõti", + "Secret key" : "Salavõti", "Builtin" : "Sisseehitatud", "None" : "Pole", "OAuth1" : "OAuth1", "App key" : "Rakenduse võti", "App secret" : "Rakenduse salasõna", + "OAuth2" : "OAuth2", "Client ID" : "Kliendi ID", "Client secret" : "Kliendi salasõna", "OpenStack" : "OpenStack", "Username" : "Kasutajanimi", "Password" : "Parool", "API key" : "API võti", + "RSA public key" : "RSA avalik võti", "Public key" : "Avalik võti", "Amazon S3" : "Amazon S3", "Bucket" : "Korv", diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js index b56ad195ce..c358a2b326 100644 --- a/apps/files_external/l10n/fi_FI.js +++ b/apps/files_external/l10n/fi_FI.js @@ -25,6 +25,8 @@ OC.L10N.register( "(group)" : "(ryhmä)", "Admin defined" : "Ylläpitäjän määrittämä", "Saved" : "Tallennettu", + "Empty response from the server" : "Tyhjä vastaus palvelimelta", + "There was an error with message: " : "Tapahtui virhe viestillä:", "Builtin" : "Sisäänrakennettu", "None" : "Ei mitään", "OAuth1" : "OAuth1", @@ -39,6 +41,7 @@ OC.L10N.register( "Rackspace" : "Rackspace", "API key" : "API-avain", "Username and password" : "Käyttäjätunnus ja salasana", + "Session credentials" : "Istunnon tunnistetiedot", "RSA public key" : "Julkinen RSA-avain", "Public key" : "Julkinen avain", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json index 9ff2748b7f..4e72d861d6 100644 --- a/apps/files_external/l10n/fi_FI.json +++ b/apps/files_external/l10n/fi_FI.json @@ -23,6 +23,8 @@ "(group)" : "(ryhmä)", "Admin defined" : "Ylläpitäjän määrittämä", "Saved" : "Tallennettu", + "Empty response from the server" : "Tyhjä vastaus palvelimelta", + "There was an error with message: " : "Tapahtui virhe viestillä:", "Builtin" : "Sisäänrakennettu", "None" : "Ei mitään", "OAuth1" : "OAuth1", @@ -37,6 +39,7 @@ "Rackspace" : "Rackspace", "API key" : "API-avain", "Username and password" : "Käyttäjätunnus ja salasana", + "Session credentials" : "Istunnon tunnistetiedot", "RSA public key" : "Julkinen RSA-avain", "Public key" : "Julkinen avain", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 8d5f7e911b..eb99f0aaeb 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -36,6 +36,14 @@ OC.L10N.register( "(group)" : "(groupe)", "Admin defined" : "Défini par l'administrateur", "Saved" : "Sauvegardé", + "Empty response from the server" : "Réponse vide du serveur", + "Couldn't access. Please logout and login to activate this mount point" : "Impossible d'accéder. Veuillez vous déconnecter et vous reconnecter pour activer ce point de montage.", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur ownCloud : {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Impossible de récupérer la liste des points de montage externes : {type}", + "There was an error with message: " : "Il y a eu une erreur avec le message :", + "External mount error" : "Erreur de montage externe", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossible d'obtenir la liste des points de montage des disques réseaux Windows : Réponse vide du serveur", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Certains points de montage externes configurés ne sont pas connectés. Veuillez cliquer sur la(les) ligne(s) rouge(s) pour plus d'informations", "Access key" : "Clé d'accès", "Secret key" : "Clé secrète", "Builtin" : "Intégré", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index cae66119a4..a399872c20 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -34,6 +34,14 @@ "(group)" : "(groupe)", "Admin defined" : "Défini par l'administrateur", "Saved" : "Sauvegardé", + "Empty response from the server" : "Réponse vide du serveur", + "Couldn't access. Please logout and login to activate this mount point" : "Impossible d'accéder. Veuillez vous déconnecter et vous reconnecter pour activer ce point de montage.", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossible d'obtenir l'information depuis le serveur ownCloud : {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Impossible de récupérer la liste des points de montage externes : {type}", + "There was an error with message: " : "Il y a eu une erreur avec le message :", + "External mount error" : "Erreur de montage externe", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossible d'obtenir la liste des points de montage des disques réseaux Windows : Réponse vide du serveur", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Certains points de montage externes configurés ne sont pas connectés. Veuillez cliquer sur la(les) ligne(s) rouge(s) pour plus d'informations", "Access key" : "Clé d'accès", "Secret key" : "Clé secrète", "Builtin" : "Intégré", diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index daca1d3a89..85fb70cf1a 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -36,6 +36,15 @@ OC.L10N.register( "(group)" : "(gruppo)", "Admin defined" : "Definito dall'amministratore", "Saved" : "Salvato", + "Empty response from the server" : "Risposta vuota dal server", + "Couldn't access. Please logout and login to activate this mount point" : "Impossibile accedere. Termina la sessione e accedi nuovamente per attivare questo punto di mount", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Impossibile ottenere l'elenco dei punti di mount esterni: {type}", + "There was an error with message: " : "Si è verificato un errore con il messaggio:", + "External mount error" : "Errore di mount esterno", + "goto-external-storage" : "goto-external-storage", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossibile ottenere l'elenco dei punti di mount delle unità di rete Windows: risposta vuota dal server", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alcuni dei punti di mount esterni configurati non sono connessi. Fai clic sulle righe rosse per ulteriori informazioni", "Access key" : "Chiave di accesso", "Secret key" : "Chiave segreta", "Builtin" : "Integrata", diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index 67f7fe3595..08da52362d 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -34,6 +34,15 @@ "(group)" : "(gruppo)", "Admin defined" : "Definito dall'amministratore", "Saved" : "Salvato", + "Empty response from the server" : "Risposta vuota dal server", + "Couldn't access. Please logout and login to activate this mount point" : "Impossibile accedere. Termina la sessione e accedi nuovamente per attivare questo punto di mount", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Impossibile ottenere le informazioni dal server ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Impossibile ottenere l'elenco dei punti di mount esterni: {type}", + "There was an error with message: " : "Si è verificato un errore con il messaggio:", + "External mount error" : "Errore di mount esterno", + "goto-external-storage" : "goto-external-storage", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Impossibile ottenere l'elenco dei punti di mount delle unità di rete Windows: risposta vuota dal server", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alcuni dei punti di mount esterni configurati non sono connessi. Fai clic sulle righe rosse per ulteriori informazioni", "Access key" : "Chiave di accesso", "Secret key" : "Chiave segreta", "Builtin" : "Integrata", diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js index 5518f6afa7..d99eca69d2 100644 --- a/apps/files_external/l10n/ja.js +++ b/apps/files_external/l10n/ja.js @@ -17,6 +17,7 @@ OC.L10N.register( "Unsatisfied backend parameters" : "バックエンドのためのパラメーターが不十分です。", "Unsatisfied authentication mechanism parameters" : "認証のためのパラメータが不十分です", "Insufficient data: %s" : "データが不足しています: %s", + "%s" : "%s", "Personal" : "個人", "System" : "システム", "Grant access" : "アクセスを許可", @@ -35,6 +36,13 @@ OC.L10N.register( "(group)" : "(グループ)", "Admin defined" : "管理者設定済", "Saved" : "保存されました", + "Empty response from the server" : "サーバーから空の応答がありました", + "Couldn't access. Please logout and login to activate this mount point" : "アクセス出来ませんでした。このマウントポイントを有効にするには一度ログアウトしてからログインしてください。", + "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "外部マウントポイントのリストを取得出来ませんでした。: {type}", + "There was an error with message: " : "メッセージ付きのエラーが発生しました:", + "External mount error" : "外部マウントエラー", + "goto-external-storage" : "外部ストレージに行く", "Access key" : "アクセスキー", "Secret key" : "シークレットキー", "Builtin" : "ビルトイン", diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json index 8134ed16cd..2675c3e18e 100644 --- a/apps/files_external/l10n/ja.json +++ b/apps/files_external/l10n/ja.json @@ -15,6 +15,7 @@ "Unsatisfied backend parameters" : "バックエンドのためのパラメーターが不十分です。", "Unsatisfied authentication mechanism parameters" : "認証のためのパラメータが不十分です", "Insufficient data: %s" : "データが不足しています: %s", + "%s" : "%s", "Personal" : "個人", "System" : "システム", "Grant access" : "アクセスを許可", @@ -33,6 +34,13 @@ "(group)" : "(グループ)", "Admin defined" : "管理者設定済", "Saved" : "保存されました", + "Empty response from the server" : "サーバーから空の応答がありました", + "Couldn't access. Please logout and login to activate this mount point" : "アクセス出来ませんでした。このマウントポイントを有効にするには一度ログアウトしてからログインしてください。", + "Couldn't get the information from the ownCloud server: {code} {type}" : "ownCloud サーバーから情報を取得出来ませんでした。: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "外部マウントポイントのリストを取得出来ませんでした。: {type}", + "There was an error with message: " : "メッセージ付きのエラーが発生しました:", + "External mount error" : "外部マウントエラー", + "goto-external-storage" : "外部ストレージに行く", "Access key" : "アクセスキー", "Secret key" : "シークレットキー", "Builtin" : "ビルトイン", diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index 5051689216..3200988ec2 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -36,6 +36,15 @@ OC.L10N.register( "(group)" : "(groep)", "Admin defined" : "Beheerder gedefinieerd", "Saved" : "Bewaard", + "Empty response from the server" : "Lege reactie van de server", + "Couldn't access. Please logout and login to activate this mount point" : "Geen toegang. Log uit en opnieuw in om dit koppelpunt te activeren", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Kon geen overzicht met externe koppelpunten krijgen: {type}", + "There was an error with message: " : "Er was een fout met de volgende melding:", + "External mount error" : "Extern koppelpunt fout", + "goto-external-storage" : "goto-external-storage", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kon geen overzicht met Windows netwerk koppelpunten krijgen: lege reactie van de server", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Sommige van de geconfigureerde koppelpunten zijn niet verbonden. Klok op de rode rij(en) voor meer informatie", "Access key" : "Access Key", "Secret key" : "Geheime sleutel", "Builtin" : "Ingebouwd", diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index d8a254bad1..09b912445c 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -34,6 +34,15 @@ "(group)" : "(groep)", "Admin defined" : "Beheerder gedefinieerd", "Saved" : "Bewaard", + "Empty response from the server" : "Lege reactie van de server", + "Couldn't access. Please logout and login to activate this mount point" : "Geen toegang. Log uit en opnieuw in om dit koppelpunt te activeren", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Kon geen informatie van de ownCloud server krijgen: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Kon geen overzicht met externe koppelpunten krijgen: {type}", + "There was an error with message: " : "Er was een fout met de volgende melding:", + "External mount error" : "Extern koppelpunt fout", + "goto-external-storage" : "goto-external-storage", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kon geen overzicht met Windows netwerk koppelpunten krijgen: lege reactie van de server", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Sommige van de geconfigureerde koppelpunten zijn niet verbonden. Klok op de rode rij(en) voor meer informatie", "Access key" : "Access Key", "Secret key" : "Geheime sleutel", "Builtin" : "Ingebouwd", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index 0d4f04ae22..296d51836c 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -17,6 +17,7 @@ OC.L10N.register( "Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos", "Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos", "Insufficient data: %s" : "Dados insuficientes: %s", + "%s" : "%s", "Personal" : "Pessoal", "System" : "Sistema", "Grant access" : "Permitir acesso", @@ -35,6 +36,15 @@ OC.L10N.register( "(group)" : "(grupo)", "Admin defined" : "Definido pelo administrador", "Saved" : "Salvo", + "Empty response from the server" : "Resposta vazia a partir do servidor", + "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconectar e conectar novamente para ativar este ponto de montagem", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}", + "There was an error with message: " : "Houve um erro com a mensagem:", + "External mount error" : "Erro de montagem externa", + "goto-external-storage" : "ir-montagem-externa", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações", "Access key" : "Chave da acesso", "Secret key" : "Chave secreta", "Builtin" : "Construídas em", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index d49e818ea0..5e4aed0b19 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -15,6 +15,7 @@ "Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos", "Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos", "Insufficient data: %s" : "Dados insuficientes: %s", + "%s" : "%s", "Personal" : "Pessoal", "System" : "Sistema", "Grant access" : "Permitir acesso", @@ -33,6 +34,15 @@ "(group)" : "(grupo)", "Admin defined" : "Definido pelo administrador", "Saved" : "Salvo", + "Empty response from the server" : "Resposta vazia a partir do servidor", + "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconectar e conectar novamente para ativar este ponto de montagem", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Não foi possível obter as informações do servidor ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}", + "There was an error with message: " : "Houve um erro com a mensagem:", + "External mount error" : "Erro de montagem externa", + "goto-external-storage" : "ir-montagem-externa", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações", "Access key" : "Chave da acesso", "Secret key" : "Chave secreta", "Builtin" : "Construídas em", diff --git a/apps/files_external/l10n/sq.js b/apps/files_external/l10n/sq.js index a708bca92d..3e2de744b1 100644 --- a/apps/files_external/l10n/sq.js +++ b/apps/files_external/l10n/sq.js @@ -36,6 +36,14 @@ OC.L10N.register( "(group)" : "(grup)", "Admin defined" : "Përcaktuar nga përgjegjësi", "Saved" : "U ruajt", + "Empty response from the server" : "Përgjigje e zbrazët prej shërbyesit", + "Couldn't access. Please logout and login to activate this mount point" : "S’fut dot. Ju lutemi, dilni dhe hyni që të aktivizohet kjo pikë montimi", + "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "S’u mor dot lista e pikave të jashtme të montimit: {type}", + "There was an error with message: " : "Pati një gabim me këtë mesazh:", + "External mount error" : "Gabim i jashtëm montimi", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "S’u mor dot lista e pikave të montimit Windows network drive: përgjigje e zbrazët nga shërbyesi", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Disa nga pikat e jashtme të formësuara të montimit s’janë të lidhura. Ju lutemi, klikoni në shigjetën(at) e kuqe për më tepër të dhëna", "Access key" : "Kyç hyrjesh", "Secret key" : "Kyç i fshehtë", "Builtin" : "I brendshëm", diff --git a/apps/files_external/l10n/sq.json b/apps/files_external/l10n/sq.json index 655a419c38..f184caf061 100644 --- a/apps/files_external/l10n/sq.json +++ b/apps/files_external/l10n/sq.json @@ -34,6 +34,14 @@ "(group)" : "(grup)", "Admin defined" : "Përcaktuar nga përgjegjësi", "Saved" : "U ruajt", + "Empty response from the server" : "Përgjigje e zbrazët prej shërbyesit", + "Couldn't access. Please logout and login to activate this mount point" : "S’fut dot. Ju lutemi, dilni dhe hyni që të aktivizohet kjo pikë montimi", + "Couldn't get the information from the ownCloud server: {code} {type}" : "S’u morën dot të dhëna nga shërbyesi ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "S’u mor dot lista e pikave të jashtme të montimit: {type}", + "There was an error with message: " : "Pati një gabim me këtë mesazh:", + "External mount error" : "Gabim i jashtëm montimi", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "S’u mor dot lista e pikave të montimit Windows network drive: përgjigje e zbrazët nga shërbyesi", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Disa nga pikat e jashtme të formësuara të montimit s’janë të lidhura. Ju lutemi, klikoni në shigjetën(at) e kuqe për më tepër të dhëna", "Access key" : "Kyç hyrjesh", "Secret key" : "Kyç i fshehtë", "Builtin" : "I brendshëm", diff --git a/apps/files_external/l10n/th_TH.js b/apps/files_external/l10n/th_TH.js index bb9c2dc909..97a64e78e4 100644 --- a/apps/files_external/l10n/th_TH.js +++ b/apps/files_external/l10n/th_TH.js @@ -36,6 +36,13 @@ OC.L10N.register( "(group)" : "(กลุ่ม)", "Admin defined" : "ถูกกำหนดโดยผู้ดูแลระบบ", "Saved" : "บันทึกแล้ว", + "Empty response from the server" : "ไม่มีการตอบสนองจากเซิร์ฟเวอร์", + "Couldn't access. Please logout and login to activate this mount point" : "ไม่สามารถเข้าถึง กรุณออกจากระบบและาเข้าสู่ระบบใหม่เพื่อเปิดใช้งานจุดเชื่อมต่อนี้", + "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "ไม่สามารถรับรายชื่อของจุดเชื่อมต่อภายนอก: {type}", + "There was an error with message: " : "มีข้อความแสดงข้อผิดพลาด", + "External mount error" : "การติดจากตั้งภายนอกเกิดข้อผิดพลาด", + "goto-external-storage" : "ไปยังพื้นที่จัดเก็บข้อมูลภายนอก", "Access key" : "คีย์การเข้าถึง", "Secret key" : "คีย์ลับ", "Builtin" : "ในตัว", diff --git a/apps/files_external/l10n/th_TH.json b/apps/files_external/l10n/th_TH.json index f38d99ae88..de569c9d61 100644 --- a/apps/files_external/l10n/th_TH.json +++ b/apps/files_external/l10n/th_TH.json @@ -34,6 +34,13 @@ "(group)" : "(กลุ่ม)", "Admin defined" : "ถูกกำหนดโดยผู้ดูแลระบบ", "Saved" : "บันทึกแล้ว", + "Empty response from the server" : "ไม่มีการตอบสนองจากเซิร์ฟเวอร์", + "Couldn't access. Please logout and login to activate this mount point" : "ไม่สามารถเข้าถึง กรุณออกจากระบบและาเข้าสู่ระบบใหม่เพื่อเปิดใช้งานจุดเชื่อมต่อนี้", + "Couldn't get the information from the ownCloud server: {code} {type}" : "ไม่สามารถรับข้อมูลจากเซิร์ฟเวอร์ ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "ไม่สามารถรับรายชื่อของจุดเชื่อมต่อภายนอก: {type}", + "There was an error with message: " : "มีข้อความแสดงข้อผิดพลาด", + "External mount error" : "การติดจากตั้งภายนอกเกิดข้อผิดพลาด", + "goto-external-storage" : "ไปยังพื้นที่จัดเก็บข้อมูลภายนอก", "Access key" : "คีย์การเข้าถึง", "Secret key" : "คีย์ลับ", "Builtin" : "ในตัว", diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php index 7a869847a6..f29e08dad2 100644 --- a/apps/files_external/lib/config.php +++ b/apps/files_external/lib/config.php @@ -90,6 +90,7 @@ class OC_Mount_Config { $userStoragesService->setUser($user); foreach ($userGlobalStoragesService->getStorages() as $storage) { + /** @var \OCA\Files_external\Lib\StorageConfig $storage */ $mountPoint = '/'.$uid.'/files'.$storage->getMountPoint(); $mountEntry = self::prepareMountPointEntry($storage, false); foreach ($mountEntry['options'] as &$option) { @@ -266,26 +267,6 @@ class OC_Mount_Config { return array(); } - /** - * Write the mount points to the config file - * - * @param string|null $user If not null, personal for $user, otherwise system - * @param array $data Mount points - */ - public static function writeData($user, $data) { - if (isset($user)) { - $file = \OC::$server->getUserManager()->get($user)->getHome() . '/mount.json'; - } else { - $config = \OC::$server->getConfig(); - $datadir = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/'); - $file = $config->getSystemValue('mount_file', $datadir . '/mount.json'); - } - - $content = json_encode($data, JSON_PRETTY_PRINT); - @file_put_contents($file, $content); - @chmod($file, 0640); - } - /** * Get backend dependency message * TODO: move into AppFramework along with templates @@ -396,40 +377,10 @@ class OC_Mount_Config { return $cipher->decrypt($binaryPassword); } - /** - * Merges mount points - * - * @param array $data Existing mount points - * @param array $mountPoint New mount point - * @param string $mountType - * @return array - */ - private static function mergeMountPoints($data, $mountPoint, $mountType) { - $applicable = key($mountPoint); - $mountPath = key($mountPoint[$applicable]); - if (isset($data[$mountType])) { - if (isset($data[$mountType][$applicable])) { - // Merge priorities - if (isset($data[$mountType][$applicable][$mountPath]) - && isset($data[$mountType][$applicable][$mountPath]['priority']) - && !isset($mountPoint[$applicable][$mountPath]['priority']) - ) { - $mountPoint[$applicable][$mountPath]['priority'] - = $data[$mountType][$applicable][$mountPath]['priority']; - } - $data[$mountType][$applicable] - = array_merge($data[$mountType][$applicable], $mountPoint[$applicable]); - } else { - $data[$mountType] = array_merge($data[$mountType], $mountPoint); - } - } else { - $data[$mountType] = $mountPoint; - } - return $data; - } - /** * Returns the encryption cipher + * + * @return AES */ private static function getCipher() { $cipher = new AES(AES::MODE_CBC); @@ -441,6 +392,9 @@ class OC_Mount_Config { * Computes a hash based on the given configuration. * This is mostly used to find out whether configurations * are the same. + * + * @param array $config + * @return string */ public static function makeConfigHash($config) { $data = json_encode( diff --git a/apps/files_external/lib/config/configadapter.php b/apps/files_external/lib/config/configadapter.php index 4e37e6a400..4f68c3c7fd 100644 --- a/apps/files_external/lib/config/configadapter.php +++ b/apps/files_external/lib/config/configadapter.php @@ -114,7 +114,7 @@ class ConfigAdapter implements IMountProvider { * @return \OCP\Files\Mount\IMountPoint[] */ public function getMountsForUser(IUser $user, IStorageFactory $loader) { - $this->migrator->migrateUser(); + $this->migrator->migrateUser($user); $mounts = []; diff --git a/apps/files_external/lib/personalmount.php b/apps/files_external/lib/personalmount.php index 26f68ba32d..34ae516ea5 100644 --- a/apps/files_external/lib/personalmount.php +++ b/apps/files_external/lib/personalmount.php @@ -35,12 +35,12 @@ class PersonalMount extends MountPoint implements MoveableMount { protected $storagesService; /** @var int */ - protected $storageId; + protected $numericStorageId; /** * @param UserStoragesService $storagesService * @param int $storageId - * @param string|\OC\Files\Storage\Storage $storage + * @param \OCP\Files\Storage $storage * @param string $mountpoint * @param array $arguments (optional) configuration for the storage backend * @param \OCP\Files\Storage\IStorageFactory $loader @@ -57,7 +57,7 @@ class PersonalMount extends MountPoint implements MoveableMount { ) { parent::__construct($storage, $mountpoint, $arguments, $loader, $mountOptions); $this->storagesService = $storagesService; - $this->storageId = $storageId; + $this->numericStorageId = $storageId; } /** @@ -67,7 +67,7 @@ class PersonalMount extends MountPoint implements MoveableMount { * @return bool */ public function moveMount($target) { - $storage = $this->storagesService->getStorage($this->storageId); + $storage = $this->storagesService->getStorage($this->numericStorageId); // remove "/$user/files" prefix $targetParts = explode('/', trim($target, '/'), 3); $storage->setMountPoint($targetParts[2]); @@ -82,7 +82,7 @@ class PersonalMount extends MountPoint implements MoveableMount { * @return bool */ public function removeMount() { - $this->storagesService->removeStorage($this->storageId); + $this->storagesService->removeStorage($this->numericStorageId); return true; } } diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index a94840ead5..80b44a4cbd 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -33,6 +33,7 @@ use Icewind\SMB\Exception\Exception; use Icewind\SMB\Exception\NotFoundException; use Icewind\SMB\NativeServer; use Icewind\SMB\Server; +use Icewind\Streams\CallbackWrapper; use Icewind\Streams\IteratorDirectory; use OC\Files\Filesystem; @@ -189,7 +190,10 @@ class SMB extends Common { return $this->share->read($fullPath); case 'w': case 'wb': - return $this->share->write($fullPath); + $source = $this->share->write($fullPath); + return CallBackWrapper::wrap($source, null, null, function () use ($fullPath) { + unset($this->statCache[$fullPath]); + }); case 'a': case 'ab': case 'r+': @@ -219,7 +223,8 @@ class SMB extends Common { } $source = fopen($tmpFile, $mode); $share = $this->share; - return CallBackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) { + return CallbackWrapper::wrap($source, null, null, function () use ($tmpFile, $fullPath, $share) { + unset($this->statCache[$fullPath]); $share->put($tmpFile, $fullPath); unlink($tmpFile); }); diff --git a/apps/files_external/migration/dummyusersession.php b/apps/files_external/migration/dummyusersession.php new file mode 100644 index 0000000000..9ffbfd6309 --- /dev/null +++ b/apps/files_external/migration/dummyusersession.php @@ -0,0 +1,51 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\Files_external\Migration; + +use OCP\IUser; +use OCP\IUserSession; + +class DummyUserSession implements IUserSession { + + /** + * @var IUser + */ + private $user; + + public function login($user, $password) { + } + + public function logout() { + } + + public function setUser($user) { + $this->user = $user; + } + + public function getUser() { + return $this->user; + } + + public function isLoggedIn() { + return !is_null($this->user); + } +} diff --git a/apps/files_external/migration/storagemigrator.php b/apps/files_external/migration/storagemigrator.php index c8e323121e..b469205ac5 100644 --- a/apps/files_external/migration/storagemigrator.php +++ b/apps/files_external/migration/storagemigrator.php @@ -32,6 +32,7 @@ use OCA\Files_external\Service\UserStoragesService; use OCP\IConfig; use OCP\IDBConnection; use OCP\ILogger; +use OCP\IUser; use OCP\IUserSession; /** @@ -48,11 +49,6 @@ class StorageMigrator { */ private $dbConfig; - /** - * @var IUserSession - */ - private $userSession; - /** * @var IConfig */ @@ -73,7 +69,6 @@ class StorageMigrator { * * @param BackendService $backendService * @param DBConfigService $dbConfig - * @param IUserSession $userSession * @param IConfig $config * @param IDBConnection $connection * @param ILogger $logger @@ -81,14 +76,12 @@ class StorageMigrator { public function __construct( BackendService $backendService, DBConfigService $dbConfig, - IUserSession $userSession, IConfig $config, IDBConnection $connection, ILogger $logger ) { $this->backendService = $backendService; $this->dbConfig = $dbConfig; - $this->userSession = $userSession; $this->config = $config; $this->connection = $connection; $this->logger = $logger; @@ -121,14 +114,18 @@ class StorageMigrator { /** * Migrate personal storages configured by the current user + * + * @param IUser $user */ - public function migrateUser() { - $userId = $this->userSession->getUser()->getUID(); + public function migrateUser(IUser $user) { + $dummySession = new DummyUserSession(); + $dummySession->setUser($user); + $userId = $user->getUID(); $userVersion = $this->config->getUserValue($userId, 'files_external', 'config_version', '0.0.0'); if (version_compare($userVersion, '0.5.0', '<')) { $this->config->setUserValue($userId, 'files_external', 'config_version', '0.5.0'); - $legacyService = new UserLegacyStoragesService($this->backendService, $this->userSession); - $storageService = new UserStoragesService($this->backendService, $this->dbConfig, $this->userSession); + $legacyService = new UserLegacyStoragesService($this->backendService, $dummySession); + $storageService = new UserStoragesService($this->backendService, $this->dbConfig, $dummySession); $this->migrate($legacyService, $storageService); } diff --git a/apps/files_external/service/storagesservice.php b/apps/files_external/service/storagesservice.php index 9be6498435..97f79c1332 100644 --- a/apps/files_external/service/storagesservice.php +++ b/apps/files_external/service/storagesservice.php @@ -185,6 +185,9 @@ abstract class StoragesService { */ abstract public function getVisibilityType(); + /** + * @return integer + */ protected function getType() { return DBConfigService::MOUNT_TYPE_ADMIN; } diff --git a/apps/files_external/service/userglobalstoragesservice.php b/apps/files_external/service/userglobalstoragesservice.php index cb49f0f672..e58815f8a7 100644 --- a/apps/files_external/service/userglobalstoragesservice.php +++ b/apps/files_external/service/userglobalstoragesservice.php @@ -89,6 +89,9 @@ class UserGlobalStoragesService extends GlobalStoragesService { throw new \DomainException('UserGlobalStoragesService writing disallowed'); } + /** + * @param integer $id + */ public function removeStorage($id) { throw new \DomainException('UserGlobalStoragesService writing disallowed'); } diff --git a/apps/files_external/tests/env/entrypoint.sh b/apps/files_external/tests/env/entrypoint.sh new file mode 100755 index 0000000000..6dd6ef23fb --- /dev/null +++ b/apps/files_external/tests/env/entrypoint.sh @@ -0,0 +1,274 @@ +#!/bin/bash +set -e + +: ${CLUSTER:=ceph} +: ${RGW_NAME:=$(hostname -s)} +: ${MON_NAME:=$(hostname -s)} +: ${RGW_CIVETWEB_PORT:=80} +: ${OSD_SIZE:=100} + +: ${KEYSTONE_ADMIN_TOKEN:=admin} +: ${KEYSTONE_ADMIN_PORT:=35357} +: ${KEYSTONE_PUBLIC_PORT:=5001} + +: ${KEYSTONE_SERVICE:=${CLUSTER}} +: ${KEYSTONE_ENDPOINT_REGION:=region} + +: ${KEYSTONE_ADMIN_USER:=admin} +: ${KEYSTONE_ADMIN_TENANT:=admin} +: ${KEYSTONE_ADMIN_PASS:=admin} + +ip_address=$(head -n1 /etc/hosts | cut -d" " -f1) +: ${MON_IP:=${ip_address}} +subnet=$(ip route | grep "src ${ip_address}" | cut -d" " -f1) +: ${CEPH_NETWORK:=${subnet}} + +####### +# MON # +####### + +if [ ! -n "$CEPH_NETWORK" ]; then + echo "ERROR- CEPH_NETWORK must be defined as the name of the network for the OSDs" + exit 1 +fi + +if [ ! -n "$MON_IP" ]; then + echo "ERROR- MON_IP must be defined as the IP address of the monitor" + exit 1 +fi + +# bootstrap MON +if [ ! -e /etc/ceph/ceph.conf ]; then + fsid=$(uuidgen) + cat </etc/ceph/${CLUSTER}.conf +[global] +fsid = $fsid +mon initial members = ${MON_NAME} +mon host = ${MON_IP} +auth cluster required = cephx +auth service required = cephx +auth client required = cephx +osd crush chooseleaf type = 0 +osd journal size = 100 +osd pool default pg num = 8 +osd pool default pgp num = 8 +osd pool default size = 1 +public network = ${CEPH_NETWORK} +cluster network = ${CEPH_NETWORK} +debug ms = 1 + +[mon] +debug mon = 20 +debug paxos = 20 +debug auth = 20 + +[osd] +debug osd = 20 +debug filestore = 20 +debug journal = 20 +debug monc = 20 + +[mds] +debug mds = 20 +debug mds balancer = 20 +debug mds log = 20 +debug mds migrator = 20 + +[client.radosgw.gateway] +rgw keystone url = http://${MON_IP}:${KEYSTONE_ADMIN_PORT} +rgw keystone admin token = ${KEYSTONE_ADMIN_TOKEN} +rgw keystone accepted roles = _member_ +ENDHERE + + # Generate administrator key + ceph-authtool /etc/ceph/${CLUSTER}.client.admin.keyring --create-keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' + + # Generate the mon. key + ceph-authtool /etc/ceph/${CLUSTER}.mon.keyring --create-keyring --gen-key -n mon. --cap mon 'allow *' + + # Generate initial monitor map + monmaptool --create --add ${MON_NAME} ${MON_IP} --fsid ${fsid} /etc/ceph/monmap +fi + +# If we don't have a monitor keyring, this is a new monitor +if [ ! -e /var/lib/ceph/mon/${CLUSTER}-${MON_NAME}/keyring ]; then + + if [ ! -e /etc/ceph/${CLUSTER}.client.admin.keyring ]; then + echo "ERROR- /etc/ceph/${CLUSTER}.client.admin.keyring must exist; get it from your existing mon" + exit 2 + fi + + if [ ! -e /etc/ceph/${CLUSTER}.mon.keyring ]; then + echo "ERROR- /etc/ceph/${CLUSTER}.mon.keyring must exist. You can extract it from your current monitor by running 'ceph auth get mon. -o /tmp/${CLUSTER}.mon.keyring'" + exit 3 + fi + + if [ ! -e /etc/ceph/monmap ]; then + echo "ERROR- /etc/ceph/monmap must exist. You can extract it from your current monitor by running 'ceph mon getmap -o /tmp/monmap'" + exit 4 + fi + + # Import the client.admin keyring and the monitor keyring into a new, temporary one + ceph-authtool /tmp/${CLUSTER}.mon.keyring --create-keyring --import-keyring /etc/ceph/${CLUSTER}.client.admin.keyring + ceph-authtool /tmp/${CLUSTER}.mon.keyring --import-keyring /etc/ceph/${CLUSTER}.mon.keyring + + # Make the monitor directory + mkdir -p /var/lib/ceph/mon/${CLUSTER}-${MON_NAME} + + # Prepare the monitor daemon's directory with the map and keyring + ceph-mon --mkfs -i ${MON_NAME} --monmap /etc/ceph/monmap --keyring /tmp/${CLUSTER}.mon.keyring + + # Clean up the temporary key + rm /tmp/${CLUSTER}.mon.keyring +fi + +# start MON +ceph-mon -i ${MON_NAME} --public-addr ${MON_IP}:6789 + +# change replica size +ceph osd pool set rbd size 1 + + +####### +# OSD # +####### + +if [ ! -e /var/lib/ceph/osd/${CLUSTER}-0/keyring ]; then + # bootstrap OSD + mkdir -p /var/lib/ceph/osd/${CLUSTER}-0 + # skip btrfs HACK if btrfs is already in place + if [ "$(stat -f /var/lib/ceph/osd/${CLUSTER}-0 2>/dev/null | grep btrfs | wc -l)" == "0" ]; then + # HACK create btrfs loopback device + echo "creating osd storage image" + dd if=/dev/zero of=/tmp/osddata bs=1M count=${OSD_SIZE} + mkfs.btrfs /tmp/osddata + echo "mounting via loopback" + mount -o loop /tmp/osddata /var/lib/ceph/osd/${CLUSTER}-0 + echo "now mounted:" + mount + # end HACK + fi + echo "creating osd" + ceph osd create + echo "creating osd filesystem" + ceph-osd -i 0 --mkfs + echo "creating osd keyring" + ceph auth get-or-create osd.0 osd 'allow *' mon 'allow profile osd' -o /var/lib/ceph/osd/${CLUSTER}-0/keyring + echo "configuring osd crush" + ceph osd crush add 0 1 root=default host=$(hostname -s) + echo "adding osd keyring" + ceph-osd -i 0 -k /var/lib/ceph/osd/${CLUSTER}-0/keyring +fi + +# start OSD +echo "starting osd" +ceph-osd --cluster=${CLUSTER} -i 0 + +#sleep 10 + +####### +# MDS # +####### + +if [ ! -e /var/lib/ceph/mds/${CLUSTER}-0/keyring ]; then + # create ceph filesystem + echo "creating osd pool" + ceph osd pool create cephfs_data 8 + echo "creating osd pool metadata" + ceph osd pool create cephfs_metadata 8 + echo "creating cephfs" + ceph fs new cephfs cephfs_metadata cephfs_data + + # bootstrap MDS + mkdir -p /var/lib/ceph/mds/${CLUSTER}-0 + echo "creating mds auth" + ceph auth get-or-create mds.0 mds 'allow' osd 'allow *' mon 'allow profile mds' > /var/lib/ceph/mds/${CLUSTER}-0/keyring +fi + +# start MDS +echo "starting mds" +ceph-mds --cluster=${CLUSTER} -i 0 + +#sleep 10 + + +####### +# RGW # +####### + +if [ ! -e /var/lib/ceph/radosgw/${RGW_NAME}/keyring ]; then + # bootstrap RGW + mkdir -p /var/lib/ceph/radosgw/${RGW_NAME} + echo "creating rgw auth" + ceph auth get-or-create client.radosgw.gateway osd 'allow rwx' mon 'allow rw' -o /var/lib/ceph/radosgw/${RGW_NAME}/keyring +fi + +# start RGW +echo "starting rgw" +radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway -k /var/lib/ceph/radosgw/${RGW_NAME}/keyring --rgw-socket-path="" --rgw-frontends="civetweb port=${RGW_CIVETWEB_PORT}" + + +####### +# API # +####### + +# start ceph-rest-api +echo "starting rest api" +ceph-rest-api -n client.admin & + +############ +# Keystone # +############ + +if [ ! -e /etc/keystone/${CLUSTER}.conf ]; then + cat < /etc/keystone/${CLUSTER}.conf +[DEFAULT] +admin_token=${KEYSTONE_ADMIN_TOKEN} +admin_port=${KEYSTONE_ADMIN_PORT} +public_port=${KEYSTONE_PUBLIC_PORT} + +[database] +connection = sqlite:////var/lib/keystone/keystone.db +ENDHERE + + # start Keystone + echo "starting keystone" + keystone-all --config-file /etc/keystone/${CLUSTER}.conf & + + # wait until up + while ! nc ${MON_IP} ${KEYSTONE_ADMIN_PORT} &2 exit 1 fi diff --git a/apps/files_external/tests/env/start-swift-ceph.sh b/apps/files_external/tests/env/start-swift-ceph.sh index 936bb667e9..f3707aa39f 100755 --- a/apps/files_external/tests/env/start-swift-ceph.sh +++ b/apps/files_external/tests/env/start-swift-ceph.sh @@ -25,7 +25,7 @@ echo "Fetch recent ${docker_image} docker image" docker pull ${docker_image} # retrieve current folder to place the config in the parent folder -thisFolder=`echo $0 | replace "env/start-swift-ceph.sh" ""` +thisFolder=`echo $0 | sed 's#env/start-swift-ceph\.sh##'` if [ -z "$thisFolder" ]; then thisFolder="." @@ -38,6 +38,7 @@ pass=testing tenant=testenant region=testregion service=testceph +endpointFolder="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" container=`docker run -d \ -e KEYSTONE_PUBLIC_PORT=${port} \ @@ -46,7 +47,10 @@ container=`docker run -d \ -e KEYSTONE_ADMIN_TENANT=${tenant} \ -e KEYSTONE_ENDPOINT_REGION=${region} \ -e KEYSTONE_SERVICE=${service} \ - ${docker_image}` + -e OSD_SIZE=300 \ + -v ${endpointFolder}/entrypoint.sh:/entrypoint.sh \ + --privileged \ + --entrypoint /entrypoint.sh ${docker_image}` host=`docker inspect --format="{{.NetworkSettings.IPAddress}}" $container` @@ -57,8 +61,9 @@ echo "${docker_image} container: $container" echo $container >> $thisFolder/dockerContainerCeph.$EXECUTOR_NUMBER.swift echo -n "Waiting for ceph initialization" -if ! "$thisFolder"/env/wait-for-connection ${host} 80 60; then - echo "[ERROR] Waited 60 seconds, no response" >&2 +if ! "$thisFolder"/env/wait-for-connection ${host} 80 600; then + echo "[ERROR] Waited 600 seconds, no response" >&2 + docker logs $container exit 1 fi sleep 1 diff --git a/apps/files_external/tests/personalmounttest.php b/apps/files_external/tests/personalmounttest.php new file mode 100644 index 0000000000..b56d69aa9b --- /dev/null +++ b/apps/files_external/tests/personalmounttest.php @@ -0,0 +1,50 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\Files_external\Tests; + +use OC\Files\Mount\Manager; +use OCA\Files_External\Lib\PersonalMount; +use Test\TestCase; + +class PersonalMountTest extends TestCase { + public function testFindByStorageId() { + /** @var \OCA\Files_External\Service\UserStoragesService $storageService */ + $storageService = $this->getMockBuilder('\OCA\Files_External\Service\UserStoragesService') + ->disableOriginalConstructor() + ->getMock(); + + $storage = $this->getMockBuilder('\OC\Files\Storage\Storage') + ->disableOriginalConstructor() + ->getMock(); + + $storage->expects($this->any()) + ->method('getId') + ->will($this->returnValue('dummy')); + + $mount = new PersonalMount($storageService, 10, $storage, '/foo'); + + $mountManager = new Manager(); + $mountManager->addMount($mount); + + $this->assertEquals([$mount], $mountManager->findByStorageId('dummy')); + } +} diff --git a/apps/files_external/tests/service/globalstoragesservicetest.php b/apps/files_external/tests/service/globalstoragesservicetest.php index 7c77616563..e620b05a51 100644 --- a/apps/files_external/tests/service/globalstoragesservicetest.php +++ b/apps/files_external/tests/service/globalstoragesservicetest.php @@ -23,7 +23,6 @@ namespace OCA\Files_external\Tests\Service; use \OC\Files\Filesystem; -use OCA\Files_External\Service\DBConfigService; use \OCA\Files_external\Service\GlobalStoragesService; use \OCA\Files_external\NotFoundException; use \OCA\Files_external\Lib\StorageConfig; diff --git a/apps/files_sharing/ajax/external.php b/apps/files_sharing/ajax/external.php index 0f8a3d56cf..2ba1cb470c 100644 --- a/apps/files_sharing/ajax/external.php +++ b/apps/files_sharing/ajax/external.php @@ -40,6 +40,7 @@ if (OCA\Files_Sharing\Helper::isIncomingServer2serverShareEnabled() === false) { $token = $_POST['token']; $remote = $_POST['remote']; $owner = $_POST['owner']; +$ownerDisplayName = $_POST['ownerDisplayName']; $name = $_POST['name']; $password = $_POST['password']; @@ -49,6 +50,14 @@ if(!\OCP\Util::isValidFileName($name)) { exit(); } +$currentUser = \OC::$server->getUserSession()->getUser()->getUID(); +$currentServer = \OC::$server->getURLGenerator()->getAbsoluteURL('/'); +if (\OC\Share\Helper::isSameUserOnSameServer($owner, $remote, $currentUser, $currentServer )) { + \OCP\JSON::error(array('data' => array('message' => $l->t('Not allowed to create a federated share with the same user server')))); + exit(); +} + + $externalManager = new \OCA\Files_Sharing\External\Manager( \OC::$server->getDatabaseConnection(), \OC\Files\Filesystem::getMountManager(), @@ -68,7 +77,7 @@ if (substr($remote, 0, 5) === 'https') { } } -$mount = $externalManager->addShare($remote, $token, $password, $name, $owner, true); +$mount = $externalManager->addShare($remote, $token, $password, $name, $ownerDisplayName, true); /** * @var \OCA\Files_Sharing\External\Storage $storage diff --git a/apps/files_sharing/api/local.php b/apps/files_sharing/api/local.php index aaafafb269..5b2f2e06e7 100644 --- a/apps/files_sharing/api/local.php +++ b/apps/files_sharing/api/local.php @@ -64,9 +64,10 @@ class Local { if ($shares === false) { return new \OC_OCS_Result(null, 404, 'could not get shares'); } else { + $mimetypeDetector = \OC::$server->getMimeTypeDetector(); foreach ($shares as &$share) { if ($share['item_type'] === 'file' && isset($share['path'])) { - $share['mimetype'] = \OC_Helper::getFileNameMimeType($share['path']); + $share['mimetype'] = $mimetypeDetector->detectPath($share['path']); if (\OC::$server->getPreviewManager()->isMimeSupported($share['mimetype'])) { $share['isPreviewAvailable'] = true; } @@ -227,9 +228,10 @@ class Local { private static function getFilesSharedWithMe() { try { $shares = \OCP\Share::getItemsSharedWith('file'); + $mimetypeDetector = \OC::$server->getMimeTypeDetector(); foreach ($shares as &$share) { if ($share['item_type'] === 'file') { - $share['mimetype'] = \OC_Helper::getFileNameMimeType($share['file_target']); + $share['mimetype'] = $mimetypeDetector->detectPath($share['file_target']); if (\OC::$server->getPreviewManager()->isMimeSupported($share['mimetype'])) { $share['isPreviewAvailable'] = true; } diff --git a/apps/files_sharing/js/external.js b/apps/files_sharing/js/external.js index f658de307a..45a6ef0275 100644 --- a/apps/files_sharing/js/external.js +++ b/apps/files_sharing/js/external.js @@ -19,7 +19,7 @@ */ OCA.Sharing.showAddExternalDialog = function (share, passwordProtected, callback) { var remote = share.remote; - var owner = share.owner; + var owner = share.ownerDisplayName || share.owner; var name = share.name; var remoteClean = (remote.substr(0, 8) === 'https://') ? remote.substr(8) : remote.substr(7); @@ -92,6 +92,7 @@ remote: share.remote, token: share.token, owner: share.owner, + ownerDisplayName: share.ownerDisplayName || share.owner, name: share.name, password: password}, function(result) { if (result.status === 'error') { diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js index 70c1ba5c0c..af80844738 100644 --- a/apps/files_sharing/js/public.js +++ b/apps/files_sharing/js/public.js @@ -242,9 +242,10 @@ OCA.Sharing.PublicApp = { var remote = $(this).find('input[type="text"]').val(); var token = $('#sharingToken').val(); var owner = $('#save').data('owner'); + var ownerDisplayName = $('#save').data('owner-display-name'); var name = $('#save').data('name'); var isProtected = $('#save').data('protected') ? 1 : 0; - OCA.Sharing.PublicApp._saveToOwnCloud(remote, token, owner, name, isProtected); + OCA.Sharing.PublicApp._saveToOwnCloud(remote, token, owner, ownerDisplayName, name, isProtected); }); $('#remote_address').on("keyup paste", function() { @@ -291,7 +292,7 @@ OCA.Sharing.PublicApp = { this.fileList.changeDirectory(params.path || params.dir, false, true); }, - _saveToOwnCloud: function (remote, token, owner, name, isProtected) { + _saveToOwnCloud: function (remote, token, owner, ownerDisplayName, name, isProtected) { var location = window.location.protocol + '//' + window.location.host + OC.webroot; if(remote.substr(-1) !== '/') { @@ -299,7 +300,7 @@ OCA.Sharing.PublicApp = { }; var url = remote + 'index.php/apps/files#' + 'remote=' + encodeURIComponent(location) // our location is the remote for the other server - + "&token=" + encodeURIComponent(token) + "&owner=" + encodeURIComponent(owner) + "&name=" + encodeURIComponent(name) + "&protected=" + isProtected; + + "&token=" + encodeURIComponent(token) + "&owner=" + encodeURIComponent(owner) +"&ownerDisplayName=" + encodeURIComponent(ownerDisplayName) + "&name=" + encodeURIComponent(name) + "&protected=" + isProtected; if (remote.indexOf('://') > 0) { diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index 3d105f283d..f8d89828f4 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -45,6 +45,9 @@ if (fileData.type === 'file') { // files can't be shared with delete permissions sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE; + + // create permissions don't mean anything for files + sharePermissions = sharePermissions & ~OC.PERMISSION_CREATE; } tr.attr('data-share-permissions', sharePermissions); if (fileData.shareOwner) { diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index 650fb5c524..e77c4b974f 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -52,6 +52,7 @@ OC.L10N.register( "Shared by %2$s" : "Compartido por %2$s", "Shared via public link" : "Compartido vía enlace público", "Shares" : "Compartidos", + "You received %2$s as a remote share from %1$s" : "Ha recibido %2$s como un recurso compartido de %1$s", "Accept" : "Aceptar", "Decline" : "Denegar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud, ver %s", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 6f963ab8fe..96fb368f76 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -50,6 +50,7 @@ "Shared by %2$s" : "Compartido por %2$s", "Shared via public link" : "Compartido vía enlace público", "Shares" : "Compartidos", + "You received %2$s as a remote share from %1$s" : "Ha recibido %2$s como un recurso compartido de %1$s", "Accept" : "Aceptar", "Decline" : "Denegar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud, ver %s", diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index 6d02bdd6ce..2fcce25140 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -30,6 +30,8 @@ OC.L10N.register( "You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga", "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", "You shared %1$s via link" : "Jagasid %1$s lingiga", + "Downloaded via public link" : "Alla laetud avalikult lingilt", + "Shared with %2$s" : "Jagatud kasutajaga %2$s", "Shares" : "Jagamised", "Accept" : "Nõustu", "Decline" : "Lükka tagasi", diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index 481a75210e..34ddd9f1b1 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -28,6 +28,8 @@ "You shared %1$s with group %2$s" : "Jagasid %1$s %2$s grupiga", "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", "You shared %1$s via link" : "Jagasid %1$s lingiga", + "Downloaded via public link" : "Alla laetud avalikult lingilt", + "Shared with %2$s" : "Jagatud kasutajaga %2$s", "Shares" : "Jagamised", "Accept" : "Nõustu", "Decline" : "Lükka tagasi", diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js index a87d6156d4..accd43020f 100644 --- a/apps/files_sharing/l10n/fi_FI.js +++ b/apps/files_sharing/l10n/fi_FI.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "Palvelimelta-palvelimelle-jakaminen ei ole käytössä tällä palvelimella", "The mountpoint name contains invalid characters." : "Liitospisteen nimi sisältää virheellisiä merkkejä.", + "Not allowed to create a federated share with the same user server" : "Saman käyttäjäpalvelimen kanssa ei ole sallittua luoda federoitua jakoa", "Invalid or untrusted SSL certificate" : "Virheellinen tai ei-luotettu SSL-varmenne", "Could not authenticate to remote share, password might be wrong" : "Tunnistautuminen etäjakoa kohtaan epäonnistui. Salasana saattaa olla väärä", "Storage not valid" : "Tallennustila ei ole kelvollinen", diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json index 172b847609..e321d64732 100644 --- a/apps/files_sharing/l10n/fi_FI.json +++ b/apps/files_sharing/l10n/fi_FI.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Palvelimelta-palvelimelle-jakaminen ei ole käytössä tällä palvelimella", "The mountpoint name contains invalid characters." : "Liitospisteen nimi sisältää virheellisiä merkkejä.", + "Not allowed to create a federated share with the same user server" : "Saman käyttäjäpalvelimen kanssa ei ole sallittua luoda federoitua jakoa", "Invalid or untrusted SSL certificate" : "Virheellinen tai ei-luotettu SSL-varmenne", "Could not authenticate to remote share, password might be wrong" : "Tunnistautuminen etäjakoa kohtaan epäonnistui. Salasana saattaa olla väärä", "Storage not valid" : "Tallennustila ei ole kelvollinen", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 8cd66b34d2..39f7ced4bb 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server", "The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.", + "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente", "Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile", "Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata", "Storage not valid" : "Archiviazione non valida", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index b93dafd755..f40fbb4b23 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "La condivisione tra server non è abilitata su questo server", "The mountpoint name contains invalid characters." : "Il nome del punto di mount contiene caratteri non validi.", + "Not allowed to create a federated share with the same user server" : "Non è consentito creare una condivisione federata con lo stesso server dell'utente", "Invalid or untrusted SSL certificate" : "Certificato SSL non valido o non attendibile", "Could not authenticate to remote share, password might be wrong" : "Impossibile autenticarsi sulla condivisione remota, la password potrebbe essere errata", "Storage not valid" : "Archiviazione non valida", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index e40acc0104..e3427ea1f7 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "このサーバーでは、サーバー間の共有が有効ではありません", "The mountpoint name contains invalid characters." : "マウントポイント名 に不正な文字列が含まれています。", + "Not allowed to create a federated share with the same user server" : "同じユーザーのサーバーでフェデレーション共有を作成することは出来ません", "Invalid or untrusted SSL certificate" : "無効または信頼できないSSL証明書", "Could not authenticate to remote share, password might be wrong" : "リモート共有が認証できませんでした,パスワードが間違っているかもしれません", "Storage not valid" : "ストレージが無効です", diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 989a723b2a..9dc64e2b3e 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "このサーバーでは、サーバー間の共有が有効ではありません", "The mountpoint name contains invalid characters." : "マウントポイント名 に不正な文字列が含まれています。", + "Not allowed to create a federated share with the same user server" : "同じユーザーのサーバーでフェデレーション共有を作成することは出来ません", "Invalid or untrusted SSL certificate" : "無効または信頼できないSSL証明書", "Could not authenticate to remote share, password might be wrong" : "リモート共有が認証できませんでした,パスワードが間違っているかもしれません", "Storage not valid" : "ストレージが無効です", diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js index 9384832660..517cc0915b 100644 --- a/apps/files_sharing/l10n/lt_LT.js +++ b/apps/files_sharing/l10n/lt_LT.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "Serveris - serveris dalinimasis neįjungtas šiame serveryje", "The mountpoint name contains invalid characters." : "Prijungimo taškas su neleistinais simboliais.", + "Not allowed to create a federated share with the same user server" : "Neleidžiama dalintis tarp serverių, nes vartotojas tame pačiame serveryje.", "Invalid or untrusted SSL certificate" : "Netinkamas arba nepatikimas SSL sertifikatas", "Could not authenticate to remote share, password might be wrong" : "Nepavyko identifikuotis serveryje, gal netinkamas slaptažodis", "Storage not valid" : "Talpykla negalioja", diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json index 6d77702405..923971c336 100644 --- a/apps/files_sharing/l10n/lt_LT.json +++ b/apps/files_sharing/l10n/lt_LT.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Serveris - serveris dalinimasis neįjungtas šiame serveryje", "The mountpoint name contains invalid characters." : "Prijungimo taškas su neleistinais simboliais.", + "Not allowed to create a federated share with the same user server" : "Neleidžiama dalintis tarp serverių, nes vartotojas tame pačiame serveryje.", "Invalid or untrusted SSL certificate" : "Netinkamas arba nepatikimas SSL sertifikatas", "Could not authenticate to remote share, password might be wrong" : "Nepavyko identifikuotis serveryje, gal netinkamas slaptažodis", "Storage not valid" : "Talpykla negalioja", diff --git a/apps/files_sharing/l10n/mk.js b/apps/files_sharing/l10n/mk.js index a5de7fb5c0..5be22894b9 100644 --- a/apps/files_sharing/l10n/mk.js +++ b/apps/files_sharing/l10n/mk.js @@ -1,20 +1,44 @@ OC.L10N.register( "files_sharing", { + "Server to server sharing is not enabled on this server" : "Не е овозможено споделувањето од сервер на сервер на вашиот сервер", + "Invalid or untrusted SSL certificate" : "SSL сертификат кој е невалиден или недоверлив", + "Could not authenticate to remote share, password might be wrong" : "Не можам да се автентицирам на оддалеченото споделевање, веројатно лозинката не е исправна", + "Storage not valid" : "Сториџот не е валиден", + "Couldn't add remote share" : "Не можам да додадам оддалечено споделување", "Shared with you" : "Споделено со тебе", "Shared with others" : "Сподели со останатите", "Shared by link" : "Споделено со врска", + "Nothing shared with you yet" : "Сеуште ништо не е споделено со вас", + "Nothing shared yet" : "Уште ништо не е споделено", + "No shared links" : "Нема споделени врски/линкови", + "Remote share" : "Оддалечено споделување", + "Remote share password" : "Лозинка за оддалечаното споделување", "Cancel" : "Откажи", + "Add remote share" : "Додади оддалечно споделување", + "You can upload into this folder" : "Можете да прикачите во оваа папка", + "Invalid ownCloud url" : "Неисправен ownCloud url", "Shared by" : "Споделено од", "Sharing" : "Споделување", "A file or folder has been shared" : "Датотека или фолдер беше споделен", "You shared %1$s with %2$s" : "Вие споделивте %1$s со %2$s", "You shared %1$s with group %2$s" : "Вие споделивте %1$s со групата %2$s", "%2$s shared %1$s with you" : "%2$s споделено %1$s со вас", + "Downloaded via public link" : "Преземи преку јавен линк", + "Shared with %2$s" : "Споделено со %2$s", + "Shared with group %2$s" : "Споделено со група %2$s", + "Shared with %3$s by %2$s" : "Споделено со %3$s од %2$s", + "Shared with group %3$s by %2$s" : "Споделено со група %3$s од %2$s", + "Shared via link by %2$s" : "Споделено со врска/линк од %2$s", + "Shared by %2$s" : "Споделено од %2$s", + "Shared via public link" : "Споделено со јавна врска/линк", "Shares" : "Споделувања", + "Accept" : "Прифати", + "Decline" : "Одбиј", "This share is password-protected" : "Ова споделување е заштитено со лозинка", "The password is wrong. Try again." : "Лозинката е грешна. Обиди се повторно.", "Password" : "Лозинка", + "No entries found in this folder" : "Нема ништо во оваа папка", "Name" : "Име", "Share time" : "Сподели време", "Sorry, this link doesn’t seem to work anymore." : "Извенете, но овој линк изгледа дека повеќе не функционира.", @@ -23,8 +47,17 @@ OC.L10N.register( "the link expired" : "времетраењето на линкот е изминато", "sharing is disabled" : "споделувањето не е дозволено", "For more info, please ask the person who sent this link." : "За повеќе информации, прашајте го лицето кое ви ја испратила врската.", + "Add to your ownCloud" : "Додади во вашиот ownCloud", "Download" : "Преземи", "Download %s" : "Преземи %s", - "Direct link" : "Директна врска" + "Direct link" : "Директна врска", + "Federated Cloud Sharing" : "Федерирано клауд споделување", + "Open documentation" : "Отвори ја документацијата", + "Federated Cloud" : "Федериран клауд", + "Your Federated Cloud ID:" : "Вашиот федериран Cloud ID:", + "Share it:" : "Сподели го:", + "Add to your website" : "Додади на твојот веб сајт", + "Share with me via ownCloud" : "Сподели со мене преку ownCloud", + "HTML Code:" : "HTML код:" }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/files_sharing/l10n/mk.json b/apps/files_sharing/l10n/mk.json index ad7eff6078..40bcf9f8bd 100644 --- a/apps/files_sharing/l10n/mk.json +++ b/apps/files_sharing/l10n/mk.json @@ -1,18 +1,42 @@ { "translations": { + "Server to server sharing is not enabled on this server" : "Не е овозможено споделувањето од сервер на сервер на вашиот сервер", + "Invalid or untrusted SSL certificate" : "SSL сертификат кој е невалиден или недоверлив", + "Could not authenticate to remote share, password might be wrong" : "Не можам да се автентицирам на оддалеченото споделевање, веројатно лозинката не е исправна", + "Storage not valid" : "Сториџот не е валиден", + "Couldn't add remote share" : "Не можам да додадам оддалечено споделување", "Shared with you" : "Споделено со тебе", "Shared with others" : "Сподели со останатите", "Shared by link" : "Споделено со врска", + "Nothing shared with you yet" : "Сеуште ништо не е споделено со вас", + "Nothing shared yet" : "Уште ништо не е споделено", + "No shared links" : "Нема споделени врски/линкови", + "Remote share" : "Оддалечено споделување", + "Remote share password" : "Лозинка за оддалечаното споделување", "Cancel" : "Откажи", + "Add remote share" : "Додади оддалечно споделување", + "You can upload into this folder" : "Можете да прикачите во оваа папка", + "Invalid ownCloud url" : "Неисправен ownCloud url", "Shared by" : "Споделено од", "Sharing" : "Споделување", "A file or folder has been shared" : "Датотека или фолдер беше споделен", "You shared %1$s with %2$s" : "Вие споделивте %1$s со %2$s", "You shared %1$s with group %2$s" : "Вие споделивте %1$s со групата %2$s", "%2$s shared %1$s with you" : "%2$s споделено %1$s со вас", + "Downloaded via public link" : "Преземи преку јавен линк", + "Shared with %2$s" : "Споделено со %2$s", + "Shared with group %2$s" : "Споделено со група %2$s", + "Shared with %3$s by %2$s" : "Споделено со %3$s од %2$s", + "Shared with group %3$s by %2$s" : "Споделено со група %3$s од %2$s", + "Shared via link by %2$s" : "Споделено со врска/линк од %2$s", + "Shared by %2$s" : "Споделено од %2$s", + "Shared via public link" : "Споделено со јавна врска/линк", "Shares" : "Споделувања", + "Accept" : "Прифати", + "Decline" : "Одбиј", "This share is password-protected" : "Ова споделување е заштитено со лозинка", "The password is wrong. Try again." : "Лозинката е грешна. Обиди се повторно.", "Password" : "Лозинка", + "No entries found in this folder" : "Нема ништо во оваа папка", "Name" : "Име", "Share time" : "Сподели време", "Sorry, this link doesn’t seem to work anymore." : "Извенете, но овој линк изгледа дека повеќе не функционира.", @@ -21,8 +45,17 @@ "the link expired" : "времетраењето на линкот е изминато", "sharing is disabled" : "споделувањето не е дозволено", "For more info, please ask the person who sent this link." : "За повеќе информации, прашајте го лицето кое ви ја испратила врската.", + "Add to your ownCloud" : "Додади во вашиот ownCloud", "Download" : "Преземи", "Download %s" : "Преземи %s", - "Direct link" : "Директна врска" + "Direct link" : "Директна врска", + "Federated Cloud Sharing" : "Федерирано клауд споделување", + "Open documentation" : "Отвори ја документацијата", + "Federated Cloud" : "Федериран клауд", + "Your Federated Cloud ID:" : "Вашиот федериран Cloud ID:", + "Share it:" : "Сподели го:", + "Add to your website" : "Додади на твојот веб сајт", + "Share with me via ownCloud" : "Сподели со мене преку ownCloud", + "HTML Code:" : "HTML код:" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" } \ No newline at end of file diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 7b31b7c73e..523213f6d9 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "Server met server delen is niet geactiveerd op deze server", "The mountpoint name contains invalid characters." : "De naam van het mountpoint bevat ongeldige karakters.", + "Not allowed to create a federated share with the same user server" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken", "Invalid or untrusted SSL certificate" : "Ongeldig of onvertrouwd SSL-certificaat", "Could not authenticate to remote share, password might be wrong" : "Kon niet authenticeren bij externe share, misschien verkeerd wachtwoord", "Storage not valid" : "Opslag ongeldig", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 92ba1c0426..e6501e874e 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Server met server delen is niet geactiveerd op deze server", "The mountpoint name contains invalid characters." : "De naam van het mountpoint bevat ongeldige karakters.", + "Not allowed to create a federated share with the same user server" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken", "Invalid or untrusted SSL certificate" : "Ongeldig of onvertrouwd SSL-certificaat", "Could not authenticate to remote share, password might be wrong" : "Kon niet authenticeren bij externe share, misschien verkeerd wachtwoord", "Storage not valid" : "Opslag ongeldig", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index d2dac6d595..2faf145548 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "Compartilhamento de servidor para servidor não está habilitado no servidor", "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém caracteres inválidos.", + "Not allowed to create a federated share with the same user server" : "Não permitido para criar um compartilhamento associado com o mesmo servidor do usuário", "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável", "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticação com o compartilhamento remoto, a senha deve estar errada", "Storage not valid" : "Armazenamento não válido", @@ -27,8 +28,8 @@ OC.L10N.register( "Shared by" : "Compartilhado por", "Sharing" : "Compartilhamento", "A file or folder has been shared" : "Um arquivo ou pasta foi compartilhado ", - "A file or folder was shared from another server" : "Um arquivo ou pasta foi compartilhada a partir de outro servidor", - "A public shared file or folder was downloaded" : "Um arquivo ou pasta compartilhada publicamente foi baixado", + "A file or folder was shared from another server" : "Um arquivo ou pasta foi compartilhado a partir de outro servidor", + "A public shared file or folder was downloaded" : "Um arquivo ou pasta compartilhado publicamente foi baixado", "You received a new remote share %2$s from %1$s" : "Você recebeu um novo conpartilhamento remoto %2$s de %1$s", "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s", "%1$s accepted remote share %2$s" : "%1$s aceitou o compartilhamento remoto %2$s", @@ -55,14 +56,14 @@ OC.L10N.register( "You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s", "Accept" : "Aceitar", "Decline" : "Rejeitar", - "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s", - "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada, veja %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada", "This share is password-protected" : "Este compartilhamento esta protegido por senha", "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", "Password" : "Senha", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Name" : "Nome", - "Share time" : "Tempo de compartilhamento", + "Share time" : "Data compartilhado", "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.", "Reasons might be:" : "As razões podem ser:", "the item was removed" : "o item foi removido", @@ -73,12 +74,12 @@ OC.L10N.register( "Download" : "Baixar", "Download %s" : "Baixar %s", "Direct link" : "Link direto", - "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada", + "Federated Cloud Sharing" : "Compartilhamento de Nuvem Associada", "Open documentation" : "Abrir documentação", "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que os usuários nesse servidor recebam compartilhamentos de outros servidores", - "Federated Cloud" : "Nuvem Conglomerada", - "Your Federated Cloud ID:" : "Seu Federados Nuvem ID:", + "Federated Cloud" : "Nuvem Associada", + "Your Federated Cloud ID:" : "Sua ID na Nuvem Associada:", "Share it:" : "Compartilhe:", "Add to your website" : "Adicione ao seu website", "Share with me via ownCloud" : "Compartilhe comigo via ownCloud", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index e64c07ff8e..51e6e9e6f0 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Compartilhamento de servidor para servidor não está habilitado no servidor", "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém caracteres inválidos.", + "Not allowed to create a federated share with the same user server" : "Não permitido para criar um compartilhamento associado com o mesmo servidor do usuário", "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável", "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticação com o compartilhamento remoto, a senha deve estar errada", "Storage not valid" : "Armazenamento não válido", @@ -25,8 +26,8 @@ "Shared by" : "Compartilhado por", "Sharing" : "Compartilhamento", "A file or folder has been shared" : "Um arquivo ou pasta foi compartilhado ", - "A file or folder was shared from another server" : "Um arquivo ou pasta foi compartilhada a partir de outro servidor", - "A public shared file or folder was downloaded" : "Um arquivo ou pasta compartilhada publicamente foi baixado", + "A file or folder was shared from another server" : "Um arquivo ou pasta foi compartilhado a partir de outro servidor", + "A public shared file or folder was downloaded" : "Um arquivo ou pasta compartilhado publicamente foi baixado", "You received a new remote share %2$s from %1$s" : "Você recebeu um novo conpartilhamento remoto %2$s de %1$s", "You received a new remote share from %s" : "Você recebeu um novo compartilhamento remoto de %s", "%1$s accepted remote share %2$s" : "%1$s aceitou o compartilhamento remoto %2$s", @@ -53,14 +54,14 @@ "You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s", "Accept" : "Aceitar", "Decline" : "Rejeitar", - "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s", - "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada, veja %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem ID Associada", "This share is password-protected" : "Este compartilhamento esta protegido por senha", "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", "Password" : "Senha", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Name" : "Nome", - "Share time" : "Tempo de compartilhamento", + "Share time" : "Data compartilhado", "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.", "Reasons might be:" : "As razões podem ser:", "the item was removed" : "o item foi removido", @@ -71,12 +72,12 @@ "Download" : "Baixar", "Download %s" : "Baixar %s", "Direct link" : "Link direto", - "Federated Cloud Sharing" : "Compartilhamento de Nuvem Conglomerada", + "Federated Cloud Sharing" : "Compartilhamento de Nuvem Associada", "Open documentation" : "Abrir documentação", "Allow users on this server to send shares to other servers" : "Permitir que os usuários deste servidor enviem compartilhamentos para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir que os usuários nesse servidor recebam compartilhamentos de outros servidores", - "Federated Cloud" : "Nuvem Conglomerada", - "Your Federated Cloud ID:" : "Seu Federados Nuvem ID:", + "Federated Cloud" : "Nuvem Associada", + "Your Federated Cloud ID:" : "Sua ID na Nuvem Associada:", "Share it:" : "Compartilhe:", "Add to your website" : "Adicione ao seu website", "Share with me via ownCloud" : "Compartilhe comigo via ownCloud", diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js index 413214d58d..e25c170df9 100644 --- a/apps/files_sharing/l10n/sq.js +++ b/apps/files_sharing/l10n/sq.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "Ndarja mes shërbyesish s’është e aktivizuar në këtë shërbyes", "The mountpoint name contains invalid characters." : "Emri i pikës së montimit përmban shenja të pavlefshme.", + "Not allowed to create a federated share with the same user server" : "Nuk i lejohet të krijojë një ndarje të federuar me të njëjtin shërbyes përdoruesi", "Invalid or untrusted SSL certificate" : "Dëshmi SSL e pavlefshme ose e pabesuar", "Could not authenticate to remote share, password might be wrong" : "S’bëri dot mirëfilltësimin te ndarja e largët, fjalëkalimi mund të jetë i gabuar", "Storage not valid" : "Depozitë jo e vlefshme", @@ -33,6 +34,7 @@ OC.L10N.register( "You received a new remote share from %s" : "Morët një ndarje të largët nga %s", "%1$s accepted remote share %2$s" : "%1$s pranoi ndarjen e largët %2$s", "%1$s declined remote share %2$s" : "%1$s hodhi tej ndarjen e largët %2$s", + "%1$s unshared %2$s from you" : "%1$s shndau me ju %2$s", "Public shared folder %1$s was downloaded" : "U shkarkua dosja e ndarë publikisht %1$s", "Public shared file %1$s was downloaded" : "U shkarkua kartela e ndarë publikisht %1$s", "You shared %1$s with %2$s" : "Ndatë %1$s me %2$s", @@ -72,9 +74,11 @@ OC.L10N.register( "Download" : "Shkarko", "Download %s" : "Shkarko %s", "Direct link" : "Lidhje e drejtpërdrejtë", + "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ", "Open documentation" : "Hap dokumentimin", "Allow users on this server to send shares to other servers" : "Lejoju përdoruesve në këtë shërbyes të dërgojnë ndarje në shërbyes të tjerë", "Allow users on this server to receive shares from other servers" : "Lejoju përdoruesve në këtë shërbyes të marrin ndarje nga shërbyes të tjerë", + "Federated Cloud" : "Ndarje e Federuar", "Your Federated Cloud ID:" : "ID-ja juaj Federated Cloud:", "Share it:" : "Ndajeni:", "Add to your website" : "Shtojeni te sajti juaj", diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json index 8722966f5d..d16d1710a5 100644 --- a/apps/files_sharing/l10n/sq.json +++ b/apps/files_sharing/l10n/sq.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "Ndarja mes shërbyesish s’është e aktivizuar në këtë shërbyes", "The mountpoint name contains invalid characters." : "Emri i pikës së montimit përmban shenja të pavlefshme.", + "Not allowed to create a federated share with the same user server" : "Nuk i lejohet të krijojë një ndarje të federuar me të njëjtin shërbyes përdoruesi", "Invalid or untrusted SSL certificate" : "Dëshmi SSL e pavlefshme ose e pabesuar", "Could not authenticate to remote share, password might be wrong" : "S’bëri dot mirëfilltësimin te ndarja e largët, fjalëkalimi mund të jetë i gabuar", "Storage not valid" : "Depozitë jo e vlefshme", @@ -31,6 +32,7 @@ "You received a new remote share from %s" : "Morët një ndarje të largët nga %s", "%1$s accepted remote share %2$s" : "%1$s pranoi ndarjen e largët %2$s", "%1$s declined remote share %2$s" : "%1$s hodhi tej ndarjen e largët %2$s", + "%1$s unshared %2$s from you" : "%1$s shndau me ju %2$s", "Public shared folder %1$s was downloaded" : "U shkarkua dosja e ndarë publikisht %1$s", "Public shared file %1$s was downloaded" : "U shkarkua kartela e ndarë publikisht %1$s", "You shared %1$s with %2$s" : "Ndatë %1$s me %2$s", @@ -70,9 +72,11 @@ "Download" : "Shkarko", "Download %s" : "Shkarko %s", "Direct link" : "Lidhje e drejtpërdrejtë", + "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ", "Open documentation" : "Hap dokumentimin", "Allow users on this server to send shares to other servers" : "Lejoju përdoruesve në këtë shërbyes të dërgojnë ndarje në shërbyes të tjerë", "Allow users on this server to receive shares from other servers" : "Lejoju përdoruesve në këtë shërbyes të marrin ndarje nga shërbyes të tjerë", + "Federated Cloud" : "Ndarje e Federuar", "Your Federated Cloud ID:" : "ID-ja juaj Federated Cloud:", "Share it:" : "Ndajeni:", "Add to your website" : "Shtojeni te sajti juaj", diff --git a/apps/files_sharing/l10n/th_TH.js b/apps/files_sharing/l10n/th_TH.js index b1400469af..b0022e9d95 100644 --- a/apps/files_sharing/l10n/th_TH.js +++ b/apps/files_sharing/l10n/th_TH.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Server to server sharing is not enabled on this server" : "เซิร์ฟเวอร์ไปยังแชร์เซิร์ฟเวอร์ไม่ได้เปิดใช้งานบนเซิร์ฟเวอร์นี้", "The mountpoint name contains invalid characters." : "ชื่อจุดเชื่อมต่อมีตัวอักษรที่ไม่ถูกต้อง", + "Not allowed to create a federated share with the same user server" : "ไม่อนุญาตให้สร้างแชร์ในเครือกับเซิร์ฟเวอร์ที่มีผู้ใช้เดียวกัน", "Invalid or untrusted SSL certificate" : "ใบรับรอง SSL ไม่ถูกต้องหรือไม่น่าเชื่อถือ", "Could not authenticate to remote share, password might be wrong" : "ไม่สามารถรับรองความถูกต้องจากการแชร์ระยะไกลรหัสผ่านอาจจะผิด", "Storage not valid" : "การจัดเก็บข้อมูลไม่ถูกต้อง", diff --git a/apps/files_sharing/l10n/th_TH.json b/apps/files_sharing/l10n/th_TH.json index a9ee8d6eb5..d973ad6ba1 100644 --- a/apps/files_sharing/l10n/th_TH.json +++ b/apps/files_sharing/l10n/th_TH.json @@ -1,6 +1,7 @@ { "translations": { "Server to server sharing is not enabled on this server" : "เซิร์ฟเวอร์ไปยังแชร์เซิร์ฟเวอร์ไม่ได้เปิดใช้งานบนเซิร์ฟเวอร์นี้", "The mountpoint name contains invalid characters." : "ชื่อจุดเชื่อมต่อมีตัวอักษรที่ไม่ถูกต้อง", + "Not allowed to create a federated share with the same user server" : "ไม่อนุญาตให้สร้างแชร์ในเครือกับเซิร์ฟเวอร์ที่มีผู้ใช้เดียวกัน", "Invalid or untrusted SSL certificate" : "ใบรับรอง SSL ไม่ถูกต้องหรือไม่น่าเชื่อถือ", "Could not authenticate to remote share, password might be wrong" : "ไม่สามารถรับรองความถูกต้องจากการแชร์ระยะไกลรหัสผ่านอาจจะผิด", "Storage not valid" : "การจัดเก็บข้อมูลไม่ถูกต้อง", diff --git a/apps/files_sharing/lib/controllers/sharecontroller.php b/apps/files_sharing/lib/controllers/sharecontroller.php index fe7b159449..e28019c358 100644 --- a/apps/files_sharing/lib/controllers/sharecontroller.php +++ b/apps/files_sharing/lib/controllers/sharecontroller.php @@ -181,6 +181,7 @@ class ShareController extends Controller { $shareTmpl = []; $shareTmpl['displayName'] = User::getDisplayName($shareOwner); + $shareTmpl['owner'] = $shareOwner; $shareTmpl['filename'] = $file; $shareTmpl['directory_path'] = $linkItem['file_target']; $shareTmpl['mimetype'] = Filesystem::getMimeType($originalSharePath); diff --git a/apps/files_sharing/lib/external/storage.php b/apps/files_sharing/lib/external/storage.php index 2a0d827e06..36ff4f0c22 100644 --- a/apps/files_sharing/lib/external/storage.php +++ b/apps/files_sharing/lib/external/storage.php @@ -265,4 +265,12 @@ class Storage extends DAV implements ISharedStorage { list(, $remote) = explode('://', $this->remote, 2); return $this->remoteUser . '@' . $remote; } + + public function isSharable($path) { + if (\OCP\Util::isSharingDisabledForUser() || !\OC\Share\Share::isResharingAllowed()) { + return false; + } + return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE); + } + } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index cda3f564d5..38f79762dc 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -257,7 +257,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { } public function isSharable($path) { - if (\OCP\Util::isSharingDisabledForUser()) { + if (\OCP\Util::isSharingDisabledForUser() || !\OC\Share\Share::isResharingAllowed()) { return false; } return ($this->getPermissions($path) & \OCP\Constants::PERMISSION_SHARE); diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php index 26044cc1c8..2d165a5df0 100644 --- a/apps/files_sharing/lib/updater.php +++ b/apps/files_sharing/lib/updater.php @@ -58,6 +58,47 @@ class Shared_Updater { */ static public function renameHook($params) { self::renameChildren($params['oldpath'], $params['newpath']); + self::moveShareToShare($params['newpath']); + } + + /** + * Fix for https://github.com/owncloud/core/issues/20769 + * + * The owner is allowed to move their files (if they are shared) into a receiving folder + * In this case we need to update the parent of the moved share. Since they are + * effectively handing over ownership of the file the rest of the code needs to know + * they need to build up the reshare tree. + * + * @param string $path + */ + static private function moveShareToShare($path) { + $userFolder = \OC::$server->getUserFolder(); + $src = $userFolder->get($path); + + $type = $src instanceof \OCP\Files\File ? 'file' : 'folder'; + $shares = \OCP\Share::getItemShared($type, $src->getId()); + + // If the path we move is not a share we don't care + if (empty($shares)) { + return; + } + + // Check if the destination is inside a share + $mountManager = \OC::$server->getMountManager(); + $dstMount = $mountManager->find($src->getPath()); + if (!($dstMount instanceof \OCA\Files_Sharing\SharedMount)) { + return; + } + + $parenShare = $dstMount->getShare(); + + foreach ($shares as $share) { + $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $qb->update('share') + ->set('parent', $qb->createNamedParameter($parenShare['id'])) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($share['id']))) + ->execute(); + } } /** diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index b5dd653d71..aa1f926ea3 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -41,7 +41,7 @@ $thumbSize = 1024; - + @@ -72,7 +72,7 @@ $thumbSize = 1024; if ($_['server2serversharing']) { ?> + data-owner-display-name="" data-owner="" data-name=""> diff --git a/apps/files_sharing/tests/controller/sharecontroller.php b/apps/files_sharing/tests/controller/sharecontroller.php index ccef4263c2..398538f094 100644 --- a/apps/files_sharing/tests/controller/sharecontroller.php +++ b/apps/files_sharing/tests/controller/sharecontroller.php @@ -78,7 +78,7 @@ class ShareControllerTest extends \Test\TestCase { // Create a dummy user $this->user = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(12, ISecureRandom::CHAR_LOWER); - \OC_User::createUser($this->user, $this->user); + \OC::$server->getUserManager()->createUser($this->user, $this->user); \OC_Util::tearDownFS(); $this->loginAsUser($this->user); @@ -98,7 +98,8 @@ class ShareControllerTest extends \Test\TestCase { \OC_Util::tearDownFS(); \OC_User::setUserId(''); Filesystem::tearDown(); - \OC_User::deleteUser($this->user); + $user = \OC::$server->getUserManager()->get($this->user); + if ($user !== null) { $user->delete(); } \OC_User::setIncognitoMode(false); \OC::$server->getSession()->set('public_link_authenticated', ''); @@ -168,6 +169,7 @@ class ShareControllerTest extends \Test\TestCase { $response = $this->shareController->showShare($this->token); $sharedTmplParams = array( 'displayName' => $this->user, + 'owner' => $this->user, 'filename' => 'file1.txt', 'directory_path' => '/file1.txt', 'mimetype' => 'text/plain', diff --git a/apps/files_sharing/tests/etagpropagation.php b/apps/files_sharing/tests/etagpropagation.php index de9ce56539..5a917fd1c6 100644 --- a/apps/files_sharing/tests/etagpropagation.php +++ b/apps/files_sharing/tests/etagpropagation.php @@ -34,31 +34,7 @@ use OC\Files\View; * * @package OCA\Files_sharing\Tests */ -class EtagPropagation extends TestCase { - /** - * @var \OC\Files\View - */ - private $rootView; - protected $fileIds = []; // [$user=>[$path=>$id]] - protected $fileEtags = []; // [$id=>$etag] - - public static function setUpBeforeClass() { - parent::setUpBeforeClass(); - \OCA\Files_Sharing\Helper::registerHooks(); - } - - protected function setUp() { - parent::setUp(); - $this->setUpShares(); - } - - protected function tearDown() { - \OC_Hook::clear('OC_Filesystem', 'post_write'); - \OC_Hook::clear('OC_Filesystem', 'post_delete'); - \OC_Hook::clear('OC_Filesystem', 'post_rename'); - \OC_Hook::clear('OCP\Share', 'post_update_permissions'); - parent::tearDown(); - } +class EtagPropagation extends PropagationTestCase { /** * "user1" is the admin who shares a folder "sub1/sub2/folder" with "user2" and "user3" @@ -67,7 +43,7 @@ class EtagPropagation extends TestCase { * "user2" reshares the subdir "sub1/sub2/folder/inside" with "user4" * "user4" puts the received "inside" folder into "sub1/sub2/inside" (this is to check if it propagates across multiple subfolders) */ - private function setUpShares() { + protected function setUpShares() { $this->fileIds[self::TEST_FILES_SHARING_API_USER1] = []; $this->fileIds[self::TEST_FILES_SHARING_API_USER2] = []; $this->fileIds[self::TEST_FILES_SHARING_API_USER3] = []; @@ -136,58 +112,6 @@ class EtagPropagation extends TestCase { } } - /** - * @param string[] $users - * @param string $subPath - */ - private function assertEtagsChanged($users, $subPath = '') { - $oldUser = \OC::$server->getUserSession()->getUser(); - foreach ($users as $user) { - $this->loginAsUser($user); - $id = $this->fileIds[$user][$subPath]; - $path = $this->rootView->getPath($id); - $etag = $this->rootView->getFileInfo($path)->getEtag(); - $this->assertNotEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has changed'); - $this->fileEtags[$id] = $etag; - } - $this->loginAsUser($oldUser->getUID()); - } - - /** - * @param string[] $users - * @param string $subPath - */ - private function assertEtagsNotChanged($users, $subPath = '') { - $oldUser = \OC::$server->getUserSession()->getUser(); - foreach ($users as $user) { - $this->loginAsUser($user); - $id = $this->fileIds[$user][$subPath]; - $path = $this->rootView->getPath($id); - $etag = $this->rootView->getFileInfo($path)->getEtag(); - $this->assertEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has not changed'); - $this->fileEtags[$id] = $etag; - } - $this->loginAsUser($oldUser->getUID()); - } - - /** - * Assert that the etags for the root, /sub1 and /sub1/sub2 have changed - * - * @param string[] $users - */ - private function assertEtagsForFoldersChanged($users) { - $this->assertEtagsChanged($users); - - $this->assertEtagsChanged($users, 'sub1'); - $this->assertEtagsChanged($users, 'sub1/sub2'); - } - - private function assertAllUnchanged() { - $users = [self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2, - self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4]; - $this->assertEtagsNotChanged($users); - } - public function testOwnerWritesToShare() { $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); Filesystem::file_put_contents('/sub1/sub2/folder/asd.txt', 'bar'); diff --git a/apps/files_sharing/tests/groupetagpropagation.php b/apps/files_sharing/tests/groupetagpropagation.php new file mode 100644 index 0000000000..804d064ead --- /dev/null +++ b/apps/files_sharing/tests/groupetagpropagation.php @@ -0,0 +1,104 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\Files_sharing\Tests; + +use OC\Files\Filesystem; +use OC\Files\View; + +/** + * @group DB + * + * @package OCA\Files_sharing\Tests + */ +class GroupEtagPropagation extends PropagationTestCase { + /** + * "user1" creates /test, /test/sub and shares with group1 + * "user2" (in group1) reshares /test with group2 and reshared /test/sub with group3 + * "user3" (in group 2) + * "user4" (in group 3) + */ + protected function setUpShares() { + $this->fileIds[self::TEST_FILES_SHARING_API_USER1] = []; + $this->fileIds[self::TEST_FILES_SHARING_API_USER2] = []; + $this->fileIds[self::TEST_FILES_SHARING_API_USER3] = []; + $this->fileIds[self::TEST_FILES_SHARING_API_USER4] = []; + + $this->rootView = new View(''); + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); + $view1 = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); + $view1->mkdir('/test/sub'); + $folderInfo = $view1->getFileInfo('/test'); + \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_GROUP, 'group1', 31); + $this->fileIds[self::TEST_FILES_SHARING_API_USER1][''] = $view1->getFileInfo('')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['test'] = $view1->getFileInfo('test')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['test/sub'] = $view1->getFileInfo('test/sub')->getId(); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); + $view2 = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); + $folderInfo = $view2->getFileInfo('/test'); + $subFolderInfo = $view2->getFileInfo('/test/sub'); + \OCP\Share::shareItem('folder', $folderInfo->getId(), \OCP\Share::SHARE_TYPE_GROUP, 'group2', 31); + \OCP\Share::shareItem('folder', $subFolderInfo->getId(), \OCP\Share::SHARE_TYPE_GROUP, 'group3', 31); + $this->fileIds[self::TEST_FILES_SHARING_API_USER2][''] = $view2->getFileInfo('')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['test'] = $view2->getFileInfo('test')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['test/sub'] = $view2->getFileInfo('test/sub')->getId(); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER3); + $view3 = new View('/' . self::TEST_FILES_SHARING_API_USER3 . '/files'); + $this->fileIds[self::TEST_FILES_SHARING_API_USER3][''] = $view3->getFileInfo('')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['test'] = $view3->getFileInfo('test')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['test/sub'] = $view3->getFileInfo('test/sub')->getId(); + + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER4); + $view4 = new View('/' . self::TEST_FILES_SHARING_API_USER4 . '/files'); + $this->fileIds[self::TEST_FILES_SHARING_API_USER4][''] = $view4->getFileInfo('')->getId(); + $this->fileIds[self::TEST_FILES_SHARING_API_USER4]['sub'] = $view4->getFileInfo('sub')->getId(); + + foreach ($this->fileIds as $user => $ids) { + $this->loginAsUser($user); + foreach ($ids as $id) { + $path = $this->rootView->getPath($id); + $this->fileEtags[$id] = $this->rootView->getFileInfo($path)->getEtag(); + } + } + } + + public function testGroupReShareRecipientWrites() { + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER3); + + Filesystem::file_put_contents('/test/sub/file.txt', 'asd'); + + $this->assertEtagsChanged([self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4]); + + $this->assertAllUnchanged(); + } + + public function testGroupReShareSubFolderRecipientWrites() { + $this->loginAsUser(self::TEST_FILES_SHARING_API_USER4); + + Filesystem::file_put_contents('/sub/file.txt', 'asd'); + + $this->assertEtagsChanged([self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4]); + + $this->assertAllUnchanged(); + } +} diff --git a/apps/files_sharing/tests/js/externalSpec.js b/apps/files_sharing/tests/js/externalSpec.js index 255f0fc3a4..362df49252 100644 --- a/apps/files_sharing/tests/js/externalSpec.js +++ b/apps/files_sharing/tests/js/externalSpec.js @@ -67,6 +67,7 @@ describe('OCA.Sharing external tests', function() { remote: 'http://example.com/owncloud', token: 'abcdefg', owner: 'theowner', + ownerDisplayName: 'The Generous Owner', name: 'the share name' }; }); @@ -88,6 +89,7 @@ describe('OCA.Sharing external tests', function() { remote: 'http://example.com/owncloud', token: 'abcdefg', owner: 'theowner', + ownerDisplayName: 'The Generous Owner', name: 'the share name', password: '' }); @@ -104,6 +106,7 @@ describe('OCA.Sharing external tests', function() { remote: 'http://example.com/owncloud', token: 'abcdefg', owner: 'theowner', + ownerDisplayName: 'The Generous Owner', name: 'the share name', password: 'thepassword' }); @@ -148,6 +151,7 @@ describe('OCA.Sharing external tests', function() { remote: 'http://example.com/owncloud', token: 'abcdefg', owner: 'theowner', + ownerDisplayName: 'The Generous Owner', name: 'the share name' }; }); diff --git a/apps/files_sharing/tests/js/publicAppSpec.js b/apps/files_sharing/tests/js/publicAppSpec.js index 74f008025e..2aaf758f3e 100644 --- a/apps/files_sharing/tests/js/publicAppSpec.js +++ b/apps/files_sharing/tests/js/publicAppSpec.js @@ -89,7 +89,8 @@ describe('OCA.Sharing.PublicApp tests', function() { it('Uses public webdav endpoint', function() { expect(fakeServer.requests.length).toEqual(1); expect(fakeServer.requests[0].method).toEqual('PROPFIND'); - expect(fakeServer.requests[0].url).toEqual('https://sh4tok@example.com/owncloud/public.php/webdav/subdir'); + expect(fakeServer.requests[0].url).toEqual('https://example.com/owncloud/public.php/webdav/subdir'); + expect(fakeServer.requests[0].requestHeaders.Authorization).toEqual('Basic c2g0dG9rOm51bGw='); }); describe('Download Url', function() { diff --git a/apps/files_sharing/tests/js/sharedfilelistSpec.js b/apps/files_sharing/tests/js/sharedfilelistSpec.js index fdc9de49c1..0b0676a19e 100644 --- a/apps/files_sharing/tests/js/sharedfilelistSpec.js +++ b/apps/files_sharing/tests/js/sharedfilelistSpec.js @@ -712,7 +712,7 @@ describe('OCA.Sharing.FileList tests', function() { $tr = fileList.$el.find('tr:first'); expect(parseInt($tr.attr('data-share-permissions'), 10)) - .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE); + .toEqual(OC.PERMISSION_ALL - OC.PERMISSION_SHARE - OC.PERMISSION_DELETE - OC.PERMISSION_CREATE); }); }); }); diff --git a/apps/files_sharing/tests/propagationtestcase.php b/apps/files_sharing/tests/propagationtestcase.php new file mode 100644 index 0000000000..f397c1fb7a --- /dev/null +++ b/apps/files_sharing/tests/propagationtestcase.php @@ -0,0 +1,103 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\Files_sharing\Tests; + +abstract class PropagationTestCase extends TestCase { + /** + * @var \OC\Files\View + */ + protected $rootView; + protected $fileIds = []; // [$user=>[$path=>$id]] + protected $fileEtags = []; // [$id=>$etag] + + public static function setUpBeforeClass() { + parent::setUpBeforeClass(); + \OCA\Files_Sharing\Helper::registerHooks(); + } + + protected function setUp() { + parent::setUp(); + $this->setUpShares(); + } + + protected function tearDown() { + \OC_Hook::clear('OC_Filesystem', 'post_write'); + \OC_Hook::clear('OC_Filesystem', 'post_delete'); + \OC_Hook::clear('OC_Filesystem', 'post_rename'); + \OC_Hook::clear('OCP\Share', 'post_update_permissions'); + parent::tearDown(); + } + + abstract protected function setUpShares(); + + /** + * @param string[] $users + * @param string $subPath + */ + protected function assertEtagsChanged($users, $subPath = '') { + $oldUser = \OC::$server->getUserSession()->getUser(); + foreach ($users as $user) { + $this->loginAsUser($user); + $id = $this->fileIds[$user][$subPath]; + $path = $this->rootView->getPath($id); + $etag = $this->rootView->getFileInfo($path)->getEtag(); + $this->assertNotEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has changed'); + $this->fileEtags[$id] = $etag; + } + $this->loginAsUser($oldUser->getUID()); + } + + /** + * @param string[] $users + * @param string $subPath + */ + protected function assertEtagsNotChanged($users, $subPath = '') { + $oldUser = \OC::$server->getUserSession()->getUser(); + foreach ($users as $user) { + $this->loginAsUser($user); + $id = $this->fileIds[$user][$subPath]; + $path = $this->rootView->getPath($id); + $etag = $this->rootView->getFileInfo($path)->getEtag(); + $this->assertEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has not changed'); + $this->fileEtags[$id] = $etag; + } + $this->loginAsUser($oldUser->getUID()); + } + + /** + * Assert that the etags for the root, /sub1 and /sub1/sub2 have changed + * + * @param string[] $users + */ + protected function assertEtagsForFoldersChanged($users) { + $this->assertEtagsChanged($users); + + $this->assertEtagsChanged($users, 'sub1'); + $this->assertEtagsChanged($users, 'sub1/sub2'); + } + + protected function assertAllUnchanged() { + $users = [self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER2, + self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER4]; + $this->assertEtagsNotChanged($users); + } +} diff --git a/apps/files_sharing/tests/testcase.php b/apps/files_sharing/tests/testcase.php index dc5b8ed79d..c4037c7c42 100644 --- a/apps/files_sharing/tests/testcase.php +++ b/apps/files_sharing/tests/testcase.php @@ -84,9 +84,15 @@ abstract class TestCase extends \Test\TestCase { $groupBackend = new \OC_Group_Dummy(); $groupBackend->createGroup(self::TEST_FILES_SHARING_API_GROUP1); $groupBackend->createGroup('group'); + $groupBackend->createGroup('group1'); + $groupBackend->createGroup('group2'); + $groupBackend->createGroup('group3'); $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER1, 'group'); $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group'); $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group'); + $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group1'); + $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group2'); + $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER4, 'group3'); $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1); \OC_Group::useBackend($groupBackend); @@ -111,9 +117,12 @@ abstract class TestCase extends \Test\TestCase { public static function tearDownAfterClass() { // cleanup users - \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1); - \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2); - \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER3); + $user = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER1); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER2); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get(self::TEST_FILES_SHARING_API_USER3); + if ($user !== null) { $user->delete(); } // delete group \OC_Group::deleteGroup(self::TEST_FILES_SHARING_API_GROUP1); @@ -143,7 +152,7 @@ abstract class TestCase extends \Test\TestCase { } if ($create) { - \OC_User::createUser($user, $password); + \OC::$server->getUserManager()->createUser($user, $password); \OC_Group::createGroup('group'); \OC_Group::addToGroup($user, 'group'); } diff --git a/apps/files_trashbin/ajax/preview.php b/apps/files_trashbin/ajax/preview.php index 49d6d93f57..ecb4971253 100644 --- a/apps/files_trashbin/ajax/preview.php +++ b/apps/files_trashbin/ajax/preview.php @@ -62,7 +62,7 @@ try{ $fileName = substr($fileName, 0, $i); } } - $mimetype = \OC_Helper::getFileNameMimeType($fileName); + $mimetype = \OC::$server->getMimeTypeDetector()->detectPath($fileName); } $preview->setMimetype($mimetype); $preview->setMaxX($maxX); diff --git a/apps/files_trashbin/l10n/mk.js b/apps/files_trashbin/l10n/mk.js index 6acb933aa8..8a4b16c52d 100644 --- a/apps/files_trashbin/l10n/mk.js +++ b/apps/files_trashbin/l10n/mk.js @@ -9,6 +9,7 @@ OC.L10N.register( "Delete permanently" : "Трајно избришани", "Error" : "Грешка", "restored" : "повратени", + "No entries found in this folder" : "Нема ништо во оваа папка", "Name" : "Име", "Deleted" : "Избришан" }, diff --git a/apps/files_trashbin/l10n/mk.json b/apps/files_trashbin/l10n/mk.json index a9948f49ff..2ec0b3c950 100644 --- a/apps/files_trashbin/l10n/mk.json +++ b/apps/files_trashbin/l10n/mk.json @@ -7,6 +7,7 @@ "Delete permanently" : "Трајно избришани", "Error" : "Грешка", "restored" : "повратени", + "No entries found in this folder" : "Нема ништо во оваа папка", "Name" : "Име", "Deleted" : "Избришан" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" diff --git a/apps/files_trashbin/l10n/pt_BR.js b/apps/files_trashbin/l10n/pt_BR.js index b1a3768a3b..806200ea65 100644 --- a/apps/files_trashbin/l10n/pt_BR.js +++ b/apps/files_trashbin/l10n/pt_BR.js @@ -11,8 +11,8 @@ OC.L10N.register( "This operation is forbidden" : "Esta operação é proibida", "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador", "restored" : "restaurado", - "No deleted files" : "Aquivos não removidos", - "You will be able to recover deleted files from here" : "Você pode recuperar arquivos removidos daqui", + "No deleted files" : "Nenhum arquivo excluído", + "You will be able to recover deleted files from here" : "Neste local, você será capaz de recuperar arquivos excluídos", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Select all" : "Selecionar tudo", "Name" : "Nome", diff --git a/apps/files_trashbin/l10n/pt_BR.json b/apps/files_trashbin/l10n/pt_BR.json index db2dc331d5..177a377bdf 100644 --- a/apps/files_trashbin/l10n/pt_BR.json +++ b/apps/files_trashbin/l10n/pt_BR.json @@ -9,8 +9,8 @@ "This operation is forbidden" : "Esta operação é proibida", "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador", "restored" : "restaurado", - "No deleted files" : "Aquivos não removidos", - "You will be able to recover deleted files from here" : "Você pode recuperar arquivos removidos daqui", + "No deleted files" : "Nenhum arquivo excluído", + "You will be able to recover deleted files from here" : "Neste local, você será capaz de recuperar arquivos excluídos", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", "Select all" : "Selecionar tudo", "Name" : "Nome", diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php index d14e97285c..0ccf15cd2b 100644 --- a/apps/files_trashbin/lib/helper.php +++ b/apps/files_trashbin/lib/helper.php @@ -87,7 +87,7 @@ class Helper $i = array( 'name' => $id, 'mtime' => $timestamp, - 'mimetype' => $view->is_dir($dir . '/' . $entryName) ? 'httpd/unix-directory' : \OC_Helper::getFileNameMimeType($id), + 'mimetype' => $view->is_dir($dir . '/' . $entryName) ? 'httpd/unix-directory' : \OC::$server->getMimeTypeDetector()->detectPath($id), 'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file', 'directory' => ($dir === '/') ? '' : $dir, 'size' => $size, diff --git a/apps/files_trashbin/lib/storage.php b/apps/files_trashbin/lib/storage.php index 0e42df1e96..becde5e635 100644 --- a/apps/files_trashbin/lib/storage.php +++ b/apps/files_trashbin/lib/storage.php @@ -26,6 +26,7 @@ namespace OCA\Files_Trashbin; use OC\Files\Filesystem; use OC\Files\Storage\Wrapper\Wrapper; +use OC\Files\View; use OCP\IUserManager; class Storage extends Wrapper { @@ -151,8 +152,8 @@ class Storage extends Wrapper { $normalized = Filesystem::normalizePath($this->mountPoint . '/' . $path); $result = true; - if (!isset($this->deletedFiles[$normalized])) { - $view = Filesystem::getView(); + $view = Filesystem::getView(); + if (!isset($this->deletedFiles[$normalized]) && $view instanceof View) { $this->deletedFiles[$normalized] = $normalized; if ($filesPath = $view->getRelativePath($normalized)) { $filesPath = trim($filesPath, '/'); diff --git a/apps/files_trashbin/tests/storage.php b/apps/files_trashbin/tests/storage.php index 3ebbbc3ec9..30735fe7bc 100644 --- a/apps/files_trashbin/tests/storage.php +++ b/apps/files_trashbin/tests/storage.php @@ -75,7 +75,8 @@ class Storage extends \Test\TestCase { protected function tearDown() { \OC\Files\Filesystem::getLoader()->removeStorageWrapper('oc_trashbin'); $this->logout(); - \OC_User::deleteUser($this->user); + $user = \OC::$server->getUserManager()->get($this->user); + if ($user !== null) { $user->delete(); } \OC_Hook::clear(); parent::tearDown(); } @@ -531,4 +532,17 @@ class Storage extends \Test\TestCase { ['/schiesbn/', '/test.txt', false, false], ]; } + + /** + * Test that deleting a file doesn't error when nobody is logged in + */ + public function testSingleStorageDeleteFileLoggedOut() { + $this->logout(); + + if (!$this->userView->file_exists('test.txt')) { + $this->markTestSkipped('Skipping since the current home storage backend requires the user to logged in'); + } else { + $this->userView->unlink('test.txt'); + } + } } diff --git a/apps/files_trashbin/tests/trashbin.php b/apps/files_trashbin/tests/trashbin.php index db7e7e6e84..9c19b67a90 100644 --- a/apps/files_trashbin/tests/trashbin.php +++ b/apps/files_trashbin/tests/trashbin.php @@ -88,7 +88,8 @@ class Test_Trashbin extends \Test\TestCase { public static function tearDownAfterClass() { // cleanup test user - \OC_User::deleteUser(self::TEST_TRASHBIN_USER1); + $user = \OC::$server->getUserManager()->get(self::TEST_TRASHBIN_USER1); + if ($user !== null) { $user->delete(); } \OC::$server->getConfig()->setSystemValue('trashbin_retention_obligation', self::$rememberRetentionObligation); @@ -636,7 +637,7 @@ class Test_Trashbin extends \Test\TestCase { public static function loginHelper($user, $create = false) { if ($create) { try { - \OC_User::createUser($user, $user); + \OC::$server->getUserManager()->createUser($user, $user); } catch(\Exception $e) { // catch username is already being used from previous aborted runs } diff --git a/apps/files_versions/ajax/preview.php b/apps/files_versions/ajax/preview.php index 0da518f3ea..f21911abc9 100644 --- a/apps/files_versions/ajax/preview.php +++ b/apps/files_versions/ajax/preview.php @@ -48,7 +48,7 @@ if($maxX === 0 || $maxY === 0) { try { list($user, $file) = \OCA\Files_Versions\Storage::getUidAndFilename($file); $preview = new \OC\Preview($user, 'files_versions', $file.'.v'.$version); - $mimetype = \OC_Helper::getFileNameMimeType($file); + $mimetype = \OC::$server->getMimeTypeDetector()->detectPath($file); $preview->setMimetype($mimetype); $preview->setMaxX($maxX); $preview->setMaxY($maxY); diff --git a/apps/files_versions/command/expire.php b/apps/files_versions/command/expire.php index 5db33f3877..8872369060 100644 --- a/apps/files_versions/command/expire.php +++ b/apps/files_versions/command/expire.php @@ -34,16 +34,6 @@ class Expire implements ICommand { */ private $fileName; - /** - * @var int|null - */ - private $versionsSize; - - /** - * @var int - */ - private $neededSpace = 0; - /** * @var string */ @@ -52,14 +42,10 @@ class Expire implements ICommand { /** * @param string $user * @param string $fileName - * @param int|null $versionsSize - * @param int $neededSpace */ - function __construct($user, $fileName, $versionsSize = null, $neededSpace = 0) { + function __construct($user, $fileName) { $this->user = $user; $this->fileName = $fileName; - $this->versionsSize = $versionsSize; - $this->neededSpace = $neededSpace; } @@ -71,7 +57,7 @@ class Expire implements ICommand { } \OC_Util::setupFS($this->user); - Storage::expire($this->fileName, $this->versionsSize, $this->neededSpace); + Storage::expire($this->fileName); \OC_Util::tearDownFS(); } } diff --git a/apps/files_versions/download.php b/apps/files_versions/download.php index 22a218f472..d3c38f3d4e 100644 --- a/apps/files_versions/download.php +++ b/apps/files_versions/download.php @@ -35,7 +35,7 @@ $versionName = '/'.$uid.'/files_versions/'.$filename.'.v'.$revision; $view = new OC\Files\View('/'); -$ftype = \OC_Helper::getSecureMimeType($view->getMimeType('/'.$uid.'/files/'.$filename)); +$ftype = \OC::$server->getMimeTypeDetector()->getSecureMimeType($view->getMimeType('/'.$uid.'/files/'.$filename)); header('Content-Type:'.$ftype); OCP\Response::setContentDispositionHeader(basename($filename), 'attachment'); diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php index 29876b3e38..21b5e9e0e7 100644 --- a/apps/files_versions/lib/storage.php +++ b/apps/files_versions/lib/storage.php @@ -168,14 +168,7 @@ class Storage { // create all parent folders self::createMissingDirectories($filename, $users_view); - $versionsSize = self::getVersionsSize($uid); - - // assumption: we need filesize($filename) for the new version + - // some more free space for the modified file which might be - // 1.5 times as large as the current version -> 2.5 - $neededSpace = $files_view->filesize($filename) * 2.5; - - self::scheduleExpire($uid, $filename, $versionsSize, $neededSpace); + self::scheduleExpire($uid, $filename); // store a new version of a file $mtime = $users_view->filemtime('files/' . $filename); @@ -634,14 +627,12 @@ class Storage { * * @param string $uid owner of the file * @param string $fileName file/folder for which to schedule expiration - * @param int|null $versionsSize current versions size - * @param int $neededSpace requested versions size */ - private static function scheduleExpire($uid, $fileName, $versionsSize = null, $neededSpace = 0) { + private static function scheduleExpire($uid, $fileName) { // let the admin disable auto expire $expiration = self::getExpiration(); if ($expiration->isEnabled()) { - $command = new Expire($uid, $fileName, $versionsSize, $neededSpace); + $command = new Expire($uid, $fileName); \OC::$server->getCommandBus()->push($command); } } @@ -650,11 +641,9 @@ class Storage { * Expire versions which exceed the quota * * @param string $filename - * @param int|null $versionsSize - * @param int $offset * @return bool|int|null */ - public static function expire($filename, $versionsSize = null, $offset = 0) { + public static function expire($filename) { $config = \OC::$server->getConfig(); $expiration = self::getExpiration(); @@ -680,9 +669,7 @@ class Storage { } // make sure that we have the current size of the version history - if ( $versionsSize === null ) { - $versionsSize = self::getVersionsSize($uid); - } + $versionsSize = self::getVersionsSize($uid); // calculate available space for version history // subtract size of files and current versions size from quota @@ -692,12 +679,12 @@ class Storage { $rootInfo = $files_view->getFileInfo('/', false); $free = $quota - $rootInfo['size']; // remaining free space for user if ($free > 0) { - $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - ($versionsSize + $offset); // how much space can be used for versions + $availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $versionsSize; // how much space can be used for versions } else { - $availableSpace = $free - $versionsSize - $offset; + $availableSpace = $free - $versionsSize; } } else { - $availableSpace = $quota - $offset; + $availableSpace = $quota; } } else { $availableSpace = PHP_INT_MAX; diff --git a/apps/files_versions/tests/versions.php b/apps/files_versions/tests/versions.php index ffc98c2e98..ee4978ff78 100644 --- a/apps/files_versions/tests/versions.php +++ b/apps/files_versions/tests/versions.php @@ -61,8 +61,10 @@ class Test_Files_Versioning extends \Test\TestCase { public static function tearDownAfterClass() { // cleanup test user - \OC_User::deleteUser(self::TEST_VERSIONS_USER); - \OC_User::deleteUser(self::TEST_VERSIONS_USER2); + $user = \OC::$server->getUserManager()->get(self::TEST_VERSIONS_USER); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get(self::TEST_VERSIONS_USER2); + if ($user !== null) { $user->delete(); } parent::tearDownAfterClass(); } diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php index 7d358e5b26..7a61101f57 100644 --- a/apps/user_ldap/appinfo/update.php +++ b/apps/user_ldap/appinfo/update.php @@ -21,21 +21,5 @@ * */ -$installedVersion = \OC::$server->getConfig()->getAppValue('user_ldap', 'installed_version'); - -if (version_compare($installedVersion, '0.6.1', '<')) { - \OC::$server->getConfig()->setAppValue('user_ldap', 'enforce_home_folder_naming_rule', false); -} - -if(version_compare($installedVersion, '0.6.2', '<')) { - // Remove LDAP case insensitive setting from DB as it is no longer beeing used. - $helper = new \OCA\user_ldap\lib\Helper(); - $prefixes = $helper->getServerConfigurationPrefixes(); - - foreach($prefixes as $prefix) { - \OC::$server->getConfig()->deleteAppValue('user_ldap', $prefix . "ldap_nocase"); - } -} - OCP\Backgroundjob::registerJob('OCA\user_ldap\lib\Jobs'); OCP\Backgroundjob::registerJob('\OCA\User_LDAP\Jobs\CleanUp'); diff --git a/apps/user_ldap/js/wizard/wizardTabGeneric.js b/apps/user_ldap/js/wizard/wizardTabGeneric.js index 60e7cd2ad9..8940a8468a 100644 --- a/apps/user_ldap/js/wizard/wizardTabGeneric.js +++ b/apps/user_ldap/js/wizard/wizardTabGeneric.js @@ -198,9 +198,13 @@ OCA = OCA || {}; return; } - // deal with text area + // special cases: deal with text area and multiselect if ($element.is('textarea') && $.isArray(value)) { value = value.join("\n"); + } else if($element.hasClass(this.multiSelectPluginClass)) { + if(!_.isArray(value)) { + value = value.split("\n"); + } } if ($element.is('span')) { diff --git a/apps/user_ldap/l10n/et_EE.js b/apps/user_ldap/l10n/et_EE.js index aa0727c9bc..649950716b 100644 --- a/apps/user_ldap/l10n/et_EE.js +++ b/apps/user_ldap/l10n/et_EE.js @@ -18,18 +18,22 @@ OC.L10N.register( "Select groups" : "Vali grupid", "Select object classes" : "Vali objekti klassid", "Please check the credentials, they seem to be wrong." : "Palu nkontrolli kasutajaandmeid, need näivad olevat valed.", + "Could not detect Base DN, please enter it manually." : "BaasDN-i tuvastamine ebaõnnestus. Palun sisesta see käsitsi.", "{nthServer}. Server" : "{nthServer}. Server", "Do you really want to delete the current Server Configuration?" : "Oled kindel, et tahad kustutada praegust serveri seadistust?", "Confirm Deletion" : "Kinnita kustutamine", + "Error while clearing the mappings." : "Tõrgeseose eemaldamisel.", "Mode switch" : "Režiimi lüliti", "Select attributes" : "Vali atribuudid", "User found and settings verified." : "Kasutaja leiti ja seaded on kontrollitud.", + "Please provide a login name to test against" : "Palun sisesta kasutajanimi, mida testida", "_%s group found_::_%s groups found_" : ["%s grupp leitud","%s gruppi leitud"], "_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"], "Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust", "Invalid Host" : "Vigane server", "Server" : "Server", "Users" : "Kasutajad", + "Login Attributes" : "Sisselogimise andmed", "Groups" : "Grupid", "Test Configuration" : "Testi seadistust", "Help" : "Abiinfo", @@ -43,6 +47,8 @@ OC.L10N.register( "LDAP Filter:" : "LDAP filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.", "Verify settings and count groups" : "Kontrolli seadeid ja loe grupid üle", + "LDAP / AD Username:" : "LDAP / AD kasutajanimi:", + "LDAP / AD Email Address:" : "LDAP / AD e-posti aadress:", "Other Attributes:" : "Muud atribuudid:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime. Näide: \"uid=%%uid\"", "Test Loginname" : "Testi kasutajanime", diff --git a/apps/user_ldap/l10n/et_EE.json b/apps/user_ldap/l10n/et_EE.json index 5d8fbe2f81..04b22459b1 100644 --- a/apps/user_ldap/l10n/et_EE.json +++ b/apps/user_ldap/l10n/et_EE.json @@ -16,18 +16,22 @@ "Select groups" : "Vali grupid", "Select object classes" : "Vali objekti klassid", "Please check the credentials, they seem to be wrong." : "Palu nkontrolli kasutajaandmeid, need näivad olevat valed.", + "Could not detect Base DN, please enter it manually." : "BaasDN-i tuvastamine ebaõnnestus. Palun sisesta see käsitsi.", "{nthServer}. Server" : "{nthServer}. Server", "Do you really want to delete the current Server Configuration?" : "Oled kindel, et tahad kustutada praegust serveri seadistust?", "Confirm Deletion" : "Kinnita kustutamine", + "Error while clearing the mappings." : "Tõrgeseose eemaldamisel.", "Mode switch" : "Režiimi lüliti", "Select attributes" : "Vali atribuudid", "User found and settings verified." : "Kasutaja leiti ja seaded on kontrollitud.", + "Please provide a login name to test against" : "Palun sisesta kasutajanimi, mida testida", "_%s group found_::_%s groups found_" : ["%s grupp leitud","%s gruppi leitud"], "_%s user found_::_%s users found_" : ["%s kasutaja leitud","%s kasutajat leitud"], "Could not find the desired feature" : "Ei suuda leida soovitud funktsioonaalsust", "Invalid Host" : "Vigane server", "Server" : "Server", "Users" : "Kasutajad", + "Login Attributes" : "Sisselogimise andmed", "Groups" : "Grupid", "Test Configuration" : "Testi seadistust", "Help" : "Abiinfo", @@ -41,6 +45,8 @@ "LDAP Filter:" : "LDAP filter:", "The filter specifies which LDAP groups shall have access to the %s instance." : "Filter määrab millised LDAP grupid saavad ligipääsu sellele %s instantsile.", "Verify settings and count groups" : "Kontrolli seadeid ja loe grupid üle", + "LDAP / AD Username:" : "LDAP / AD kasutajanimi:", + "LDAP / AD Email Address:" : "LDAP / AD e-posti aadress:", "Other Attributes:" : "Muud atribuudid:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Määrab sisselogimisel kasutatava filtri. %%uid asendab sisselogimistegevuses kasutajanime. Näide: \"uid=%%uid\"", "Test Loginname" : "Testi kasutajanime", diff --git a/apps/user_ldap/l10n/ko.js b/apps/user_ldap/l10n/ko.js index c08dd0e2a9..0ed95377ac 100644 --- a/apps/user_ldap/l10n/ko.js +++ b/apps/user_ldap/l10n/ko.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "기본 DN을 자동으로 감지할 수 없습니다. 직접 입력하십시오.", "{nthServer}. Server" : "{nthServer}. 서버", "No object found in the given Base DN. Please revise." : "입력한 기본 DN에서 객체를 찾을 수 없습니다. 다시 입력하십시오.", + "More than 1,000 directory entries available." : "디렉터리 항목이 1,000개 이상 존재합니다.", " entries available within the provided Base DN" : "개(지정한 DN의 기본 항목 수)", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "오류가 발생했습니다. 기본 DN, 연결 설정, 인증 정보를 확인하십시오.", "Do you really want to delete the current Server Configuration?" : "현재 서버 설정을 지우시겠습니까?", diff --git a/apps/user_ldap/l10n/ko.json b/apps/user_ldap/l10n/ko.json index 59037ab0a2..3fccad0577 100644 --- a/apps/user_ldap/l10n/ko.json +++ b/apps/user_ldap/l10n/ko.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "기본 DN을 자동으로 감지할 수 없습니다. 직접 입력하십시오.", "{nthServer}. Server" : "{nthServer}. 서버", "No object found in the given Base DN. Please revise." : "입력한 기본 DN에서 객체를 찾을 수 없습니다. 다시 입력하십시오.", + "More than 1,000 directory entries available." : "디렉터리 항목이 1,000개 이상 존재합니다.", " entries available within the provided Base DN" : "개(지정한 DN의 기본 항목 수)", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "오류가 발생했습니다. 기본 DN, 연결 설정, 인증 정보를 확인하십시오.", "Do you really want to delete the current Server Configuration?" : "현재 서버 설정을 지우시겠습니까?", diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php index 667f107623..693a420a74 100644 --- a/apps/user_ldap/lib/access.php +++ b/apps/user_ldap/lib/access.php @@ -1276,6 +1276,54 @@ class Access extends LDAPUtility implements user\IUserTools { return $result; } + /** + * reverse lookup of a DN given a known UUID + * + * @param string $uuid + * @return string + * @throws \Exception + */ + public function getUserDnByUuid($uuid) { + $uuidOverride = $this->connection->ldapExpertUUIDUserAttr; + $filter = $this->connection->ldapUserFilter; + $base = $this->connection->ldapBaseUsers; + + if($this->connection->ldapUuidUserAttribute === 'auto' && empty($uuidOverride)) { + // Sacrebleu! The UUID attribute is unknown :( We need first an + // existing DN to be able to reliably detect it. + $result = $this->search($filter, $base, ['dn'], 1); + if(!isset($result[0]) || !isset($result[0]['dn'])) { + throw new \Exception('Cannot determine UUID attribute'); + } + $dn = $result[0]['dn'][0]; + if(!$this->detectUuidAttribute($dn, true)) { + throw new \Exception('Cannot determine UUID attribute'); + } + } else { + // The UUID attribute is either known or an override is given. + // By calling this method we ensure that $this->connection->$uuidAttr + // is definitely set + if(!$this->detectUuidAttribute('', true)) { + throw new \Exception('Cannot determine UUID attribute'); + } + } + + $uuidAttr = $this->connection->ldapUuidUserAttribute; + if($uuidAttr === 'guid' || $uuidAttr === 'objectguid') { + $uuid = $this->formatGuid2ForFilterUser($uuid); + } + + $filter = $uuidAttr . '=' . $uuid; + $result = $this->searchUsers($filter, ['dn'], 2); + if(is_array($result) && isset($result[0]) && isset($result[0]['dn']) && count($result) === 1) { + // we put the count into account to make sure that this is + // really unique + return $result[0]['dn'][0]; + } + + throw new \Exception('Cannot determine UUID attribute'); + } + /** * auto-detects the directory's UUID attribute * @param string $dn a known DN used to check against @@ -1378,6 +1426,53 @@ class Access extends LDAPUtility implements user\IUserTools { return strtoupper($hex_guid_to_guid_str); } + /** + * the first three blocks of the string-converted GUID happen to be in + * reverse order. In order to use it in a filter, this needs to be + * corrected. Furthermore the dashes need to be replaced and \\ preprended + * to every two hax figures. + * + * If an invalid string is passed, it will be returned without change. + * + * @param string $guid + * @return string + */ + public function formatGuid2ForFilterUser($guid) { + if(!is_string($guid)) { + throw new \InvalidArgumentException('String expected'); + } + $blocks = explode('-', $guid); + if(count($blocks) !== 5) { + /* + * Why not throw an Exception instead? This method is a utility + * called only when trying to figure out whether a "missing" known + * LDAP user was or was not renamed on the LDAP server. And this + * even on the use case that a reverse lookup is needed (UUID known, + * not DN), i.e. when finding users (search dialog, users page, + * login, …) this will not be fired. This occurs only if shares from + * a users are supposed to be mounted who cannot be found. Throwing + * an exception here would kill the experience for a valid, acting + * user. Instead we write a log message. + */ + \OC::$server->getLogger()->info( + 'Passed string does not resemble a valid GUID. Known UUID ' . + '({uuid}) probably does not match UUID configuration.', + [ 'app' => 'user_ldap', 'uuid' => $guid ] + ); + return $guid; + } + for($i=0; $i < 3; $i++) { + $pairs = str_split($blocks[$i], 2); + $pairs = array_reverse($pairs); + $blocks[$i] = implode('', $pairs); + } + for($i=0; $i < 5; $i++) { + $pairs = str_split($blocks[$i], 2); + $blocks[$i] = '\\' . implode('\\', $pairs); + } + return implode('', $blocks); + } + /** * gets a SID of the domain of the given dn * @param string $dn diff --git a/apps/user_ldap/lib/mapping/abstractmapping.php b/apps/user_ldap/lib/mapping/abstractmapping.php index f0f0f6df75..c3d38ce8b7 100644 --- a/apps/user_ldap/lib/mapping/abstractmapping.php +++ b/apps/user_ldap/lib/mapping/abstractmapping.php @@ -158,7 +158,7 @@ abstract class AbstractMapping { } /** - * Gets the name based on the provided LDAP DN. + * Gets the name based on the provided LDAP UUID. * @param string $uuid * @return string|false */ @@ -166,6 +166,16 @@ abstract class AbstractMapping { return $this->getXbyY('owncloud_name', 'directory_uuid', $uuid); } + /** + * Gets the UUID based on the provided LDAP DN + * @param string $dn + * @return false|string + * @throws \Exception + */ + public function getUUIDByDN($dn) { + return $this->getXbyY('directory_uuid', 'ldap_dn', $dn); + } + /** * gets a piece of the mapping list * @param int $offset diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php index 7593371d85..3aec2a5ce5 100644 --- a/apps/user_ldap/tests/user_ldap.php +++ b/apps/user_ldap/tests/user_ldap.php @@ -70,14 +70,26 @@ class Test_User_Ldap_Direct extends \Test\TestCase { array($lw, null, null)); $this->configMock = $this->getMock('\OCP\IConfig'); - $um = new \OCA\user_ldap\lib\user\Manager( + + $offlineUser = $this->getMockBuilder('\OCA\user_ldap\lib\user\OfflineUser') + ->disableOriginalConstructor() + ->getMock(); + + $um = $this->getMockBuilder('\OCA\user_ldap\lib\user\Manager') + ->setMethods(['getDeletedUser']) + ->setConstructorArgs([ $this->configMock, $this->getMock('\OCA\user_ldap\lib\FilesystemHelper'), $this->getMock('\OCA\user_ldap\lib\LogWrapper'), $this->getMock('\OCP\IAvatarManager'), $this->getMock('\OCP\Image'), $this->getMock('\OCP\IDBConnection') - ); + ]) + ->getMock(); + + $um->expects($this->any()) + ->method('getDeletedUser') + ->will($this->returnValue($offlineUser)); $access = $this->getMock('\OCA\user_ldap\lib\Access', $accMethods, @@ -661,6 +673,44 @@ class Test_User_Ldap_Direct extends \Test\TestCase { $this->assertFalse($result); } + /** + * @expectedException \OC\User\NoUserException + */ + public function testGetHomeDeletedUser() { + $access = $this->getAccessMock(); + $backend = new UserLDAP($access, $this->getMock('\OCP\IConfig')); + $this->prepareMockForUserExists($access); + + $access->connection->expects($this->any()) + ->method('__get') + ->will($this->returnCallback(function($name) { + if($name === 'homeFolderNamingRule') { + return 'attr:testAttribute'; + } + return null; + })); + + $access->expects($this->any()) + ->method('readAttribute') + ->will($this->returnValue([])); + + $userMapper = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping') + ->disableOriginalConstructor() + ->getMock(); + + $access->expects($this->any()) + ->method('getUserMapper') + ->will($this->returnValue($userMapper)); + + $this->configMock->expects($this->any()) + ->method('getUserValue') + ->will($this->returnValue(true)); + + //no path at all – triggers OC default behaviour + $result = $backend->getHome('newyorker'); + $this->assertFalse($result); + } + private function prepareAccessForGetDisplayName(&$access) { $access->connection->expects($this->any()) ->method('__get') @@ -686,6 +736,14 @@ class Test_User_Ldap_Direct extends \Test\TestCase { return false; } })); + + $userMapper = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping') + ->disableOriginalConstructor() + ->getMock(); + + $access->expects($this->any()) + ->method('getUserMapper') + ->will($this->returnValue($userMapper)); } public function testGetDisplayName() { diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 0097dda89b..a266be7b7f 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -30,6 +30,7 @@ namespace OCA\user_ldap; +use OC\User\NoUserException; use OCA\user_ldap\lib\BackendUtility; use OCA\user_ldap\lib\Access; use OCA\user_ldap\lib\user\OfflineUser; @@ -190,15 +191,18 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn /** * checks whether a user is still available on LDAP + * * @param string|\OCA\User_LDAP\lib\user\User $user either the ownCloud user * name or an instance of that user * @return bool + * @throws \Exception + * @throws \OC\ServerNotAvailableException */ public function userExistsOnLDAP($user) { if(is_string($user)) { $user = $this->access->userManager->get($user); } - if(!$user instanceof User) { + if(is_null($user)) { return false; } @@ -209,7 +213,22 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn if(is_null($lcr)) { throw new \Exception('No LDAP Connection to server ' . $this->access->connection->ldapHost); } - return false; + + try { + $uuid = $this->access->getUserMapper()->getUUIDByDN($dn); + if(!$uuid) { + return false; + } + $newDn = $this->access->getUserDnByUuid($uuid); + $this->access->getUserMapper()->setDNbyUUID($newDn, $uuid); + return true; + } catch (\Exception $e) { + return false; + } + } + + if($user instanceof OfflineUser) { + $user->unmark(); } return true; @@ -274,10 +293,13 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } /** - * get the user's home directory - * @param string $uid the username - * @return string|bool - */ + * get the user's home directory + * + * @param string $uid the username + * @return bool|string + * @throws NoUserException + * @throws \Exception + */ public function getHome($uid) { if(isset($this->homesToKill[$uid]) && !empty($this->homesToKill[$uid])) { //a deleted user who needs some clean up @@ -295,6 +317,15 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } $user = $this->access->userManager->get($uid); + if(is_null($user) || ($user instanceof OfflineUser && !$this->userExistsOnLDAP($user->getOCName()))) { + throw new NoUserException($uid . ' is not a valid user anymore'); + } + if($user instanceof OfflineUser) { + // apparently this user survived the userExistsOnLDAP check, + // we request the user instance again in order to retrieve a User + // instance instead + $user = $this->access->userManager->get($uid); + } $path = $user->getHomePath(); $this->access->cacheUserHome($uid, $path); diff --git a/autotest-external.sh b/autotest-external.sh index 86fb796627..6128f68136 100755 --- a/autotest-external.sh +++ b/autotest-external.sh @@ -193,7 +193,8 @@ EOF echo "name: $name" # execute start file - if ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$startFile; then + ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$startFile + if [ $? -eq 0 ]; then # getting backend to test from filename # it's the part between the dots startSomething.TestToRun.sh testToRun=`echo $startFile | cut -d '-' -f 2` @@ -209,6 +210,8 @@ EOF "$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1-$name.xml" "$FILES_EXTERNAL_BACKEND_PATH/$testToRun.php" RESULT=$? fi + else + DOEXIT=1 fi # calculate stop file @@ -218,6 +221,10 @@ EOF # execute stop file if existant ./$FILES_EXTERNAL_BACKEND_ENV_PATH/$stopFile fi + if [ "$DOEXIT" ]; then + echo "Error during start file execution ... terminating" + exit $DOEXIT + fi done; } diff --git a/bower.json b/bower.json index eb8d1ce0b7..ae9575249c 100644 --- a/bower.json +++ b/bower.json @@ -29,6 +29,7 @@ "bootstrap": "~3.3.6", "backbone": "~1.2.3", "davclient.js": "https://github.com/evert/davclient.js.git", - "es6-promise": "https://github.com/jakearchibald/es6-promise.git#~2.3.0" + "es6-promise": "https://github.com/jakearchibald/es6-promise.git#~2.3.0", + "base64": "~0.3.0" } } diff --git a/build/integration/features/bootstrap/CapabilitiesContext.php b/build/integration/features/bootstrap/CapabilitiesContext.php index 4e200bdf42..1b0015dce7 100644 --- a/build/integration/features/bootstrap/CapabilitiesContext.php +++ b/build/integration/features/bootstrap/CapabilitiesContext.php @@ -2,8 +2,6 @@ use Behat\Behat\Context\Context; use Behat\Behat\Context\SnippetAcceptingContext; -use GuzzleHttp\Client; -use GuzzleHttp\Message\ResponseInterface; require __DIR__ . '/../../vendor/autoload.php'; diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php index a682467f52..49cd565cf2 100644 --- a/build/integration/features/bootstrap/WebDav.php +++ b/build/integration/features/bootstrap/WebDav.php @@ -97,6 +97,15 @@ trait WebDav{ PHPUnit_Framework_Assert::assertEquals($content, (string)$this->response->getBody()); } + /** + * @Then /^Downloaded content when downloading file "([^"]*)" with range "([^"]*)" should be "([^"]*)"$/ + */ + public function downloadedContentWhenDownloadindShouldBe($fileSource, $range, $content){ + $this->downloadFileWithRange($fileSource, $range); + $this->downloadedContentShouldBe($content); + } + + /*Returns the elements of a propfind, $folderDepth requires 1 to see elements without children*/ public function listFolder($user, $path, $folderDepth){ $fullUrl = substr($this->baseUrl, 0, -4); @@ -126,7 +135,7 @@ trait WebDav{ * @param \Behat\Gherkin\Node\TableNode|null $expectedElements */ public function checkElementList($user, $expectedElements){ - $elementList = $this->listFolder($user, '/', 2); + $elementList = $this->listFolder($user, '/', 3); if ($expectedElements instanceof \Behat\Gherkin\Node\TableNode) { $elementRows = $expectedElements->getRows(); $elementsSimplified = $this->simplifyArray($elementRows); @@ -153,5 +162,17 @@ trait WebDav{ } } + /** + * @Given User :user created a folder :destination + */ + public function userCreatedAFolder($user, $destination){ + try { + $this->response = $this->makeDavRequest($user, "MKCOL", $destination, []); + } catch (\GuzzleHttp\Exception\ServerException $e) { + // 4xx and 5xx responses cause an exception + $this->response = $e->getResponse(); + } + } + } diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index e00fd47bae..31ba0d4ad7 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -379,6 +379,47 @@ Feature: sharing | /CHILD/child.txt | And the HTTP status code should be "200" + Scenario: Share a file by multiple channels + Given As an "admin" + And user "user0" exists + And user "user1" exists + And user "user2" exists + And group "group0" exists + And user "user1" belongs to group "group0" + And user "user2" belongs to group "group0" + And user "user0" created a folder "/common" + And user "user0" created a folder "/common/sub" + And file "common" of user "user0" is shared with group "group0" + And file "textfile0.txt" of user "user1" is shared with user "user2" + And User "user1" moved file "/textfile0.txt" to "/common/textfile0.txt" + And User "user1" moved file "/common/textfile0.txt" to "/common/sub/textfile0.txt" + And As an "user2" + When Downloading file "/common/sub/textfile0.txt" with range "bytes=9-17" + Then Downloaded content should be "test text" + And Downloaded content when downloading file "/textfile0.txt" with range "bytes=9-17" should be "test text" + And user "user2" should see following elements + | /common/sub/textfile0.txt | + + Scenario: Share a file by multiple channels + Given As an "admin" + And user "user0" exists + And user "user1" exists + And user "user2" exists + And group "group0" exists + And user "user1" belongs to group "group0" + And user "user2" belongs to group "group0" + And user "user0" created a folder "/common" + And user "user0" created a folder "/common/sub" + And file "common" of user "user0" is shared with group "group0" + And file "textfile0.txt" of user "user1" is shared with user "user2" + And User "user1" moved file "/textfile0.txt" to "/common/textfile0.txt" + And User "user1" moved file "/common/textfile0.txt" to "/common/sub/textfile0.txt" + And As an "user2" + When Downloading file "/textfile0.txt" with range "bytes=9-17" + Then Downloaded content should be "test text" + And user "user2" should see following elements + | /common/sub/textfile0.txt | + Scenario: Delete all group shares Given As an "admin" And user "user0" exists diff --git a/config/config.sample.php b/config/config.sample.php index c3abe3a2b8..6e823e3968 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -799,20 +799,17 @@ $CONFIG = array( 'ldapUserCleanupInterval' => 51, /** - * Enforce the existence of the home folder naming rule for all users - * - * Following scenario: - * * a home folder naming rule is set in LDAP advanced settings - * * a user doesn't have the home folder naming rule attribute set - * - * If this is set to **true** (default) it will NOT fallback to the core's - * default naming rule of using the internal user ID as home folder name. - * - * If this is set to **false** it will fallback for the users without the - * attribute set to naming the home folder like the internal user ID. + * Comments * + * Global settings for the Comments infrastructure */ -'enforce_home_folder_naming_rule' => true, + +/** + * Replaces the default Comments Manager Factory. This can be utilized if an + * own or 3rdParty CommentsManager should be used that – for instance – uses the + * filesystem instead of the database to keep the comments. + */ +'comments.managerFactory' => '\OC\Comments\ManagerFactory', /** * Maintenance diff --git a/console.php b/console.php index 8bfbabf2a0..ab845aced5 100644 --- a/console.php +++ b/console.php @@ -64,6 +64,16 @@ try { } } + $oldWorkingDir = getcwd(); + if ($oldWorkingDir === false) { + echo "This script can be run from the ownCloud root directory only." . PHP_EOL; + echo "Can't determine current working dir - the script will continue to work but be aware of the above fact." . PHP_EOL; + } else if ($oldWorkingDir !== __DIR__ && !chdir(__DIR__)) { + echo "This script can be run from the ownCloud root directory only." . PHP_EOL; + echo "Can't change to ownCloud root diretory." . PHP_EOL; + exit(1); + } + $application = new Application(\OC::$server->getConfig()); $application->loadCommands(new ConsoleOutput()); $application->run(); diff --git a/core/avatar/avatarcontroller.php b/core/avatar/avatarcontroller.php index 6c0321e6b5..e8139aa50a 100644 --- a/core/avatar/avatarcontroller.php +++ b/core/avatar/avatarcontroller.php @@ -30,6 +30,7 @@ use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataDisplayResponse; +use OCP\Files\NotFoundException; use OCP\IAvatarManager; use OCP\ILogger; use OCP\IL10N; @@ -112,20 +113,23 @@ class AvatarController extends Controller { $size = 64; } - $avatar = $this->avatarManager->getAvatar($userId); - $image = $avatar->get($size); - - if ($image instanceof \OCP\IImage) { - $resp = new DataDisplayResponse($image->data(), + try { + $avatar = $this->avatarManager->getAvatar($userId)->getFile($size); + $resp = new DataDisplayResponse($avatar->getContent(), Http::STATUS_OK, - ['Content-Type' => $image->mimeType()]); - $resp->setETag(crc32($image->data())); - } else { + ['Content-Type' => $avatar->getMimeType()]); + $resp->setETag($avatar->getEtag()); + } catch (NotFoundException $e) { $user = $this->userManager->get($userId); - $userName = $user ? $user->getDisplayName() : ''; $resp = new DataResponse([ 'data' => [ - 'displayname' => $userName, + 'displayname' => $user->getDisplayName(), + ], + ]); + } catch (\Exception $e) { + $resp = new DataResponse([ + 'data' => [ + 'displayname' => '', ], ]); } diff --git a/core/command/app/getpath.php b/core/command/app/getpath.php new file mode 100644 index 0000000000..7cfa01d48a --- /dev/null +++ b/core/command/app/getpath.php @@ -0,0 +1,62 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OC\Core\Command\App; + +use OC\Core\Command\Base; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class GetPath extends Base { + protected function configure() { + parent::configure(); + + $this + ->setName('app:getpath') + ->setDescription('Get an absolute path to the app directory') + ->addArgument( + 'app', + InputArgument::REQUIRED, + 'Name of the app' + ) + ; + } + + /** + * Executes the current command. + * + * @param InputInterface $input An InputInterface instance + * @param OutputInterface $output An OutputInterface instance + * @return null|int null or 0 if everything went fine, or an error code + */ + protected function execute(InputInterface $input, OutputInterface $output) { + $appName = $input->getArgument('app'); + $path = \OC_App::getAppPath($appName); + if ($path !== false) { + $output->writeln($path); + return 0; + } + + // App not found, exit with non-zero + return 1; + } +} diff --git a/core/command/maintenance/install.php b/core/command/maintenance/install.php index b0235c518e..d4ef72c9fc 100644 --- a/core/command/maintenance/install.php +++ b/core/command/maintenance/install.php @@ -68,7 +68,12 @@ class Install extends Command { $errors = $sysInfo['errors']; if (count($errors) > 0) { $this->printErrors($output, $errors); - return 1; + + // ignore the OS X setup warning + if(count($errors) !== 1 || + (string)($errors[0]['error']) !== 'Mac OS X is not supported and ownCloud will not work properly on this platform. Use it at your own risk! ') { + return 1; + } } // validate user input diff --git a/core/command/status.php b/core/command/status.php index 2eb58525d3..c2a28ff822 100644 --- a/core/command/status.php +++ b/core/command/status.php @@ -39,7 +39,7 @@ class Status extends Base { protected function execute(InputInterface $input, OutputInterface $output) { $values = array( 'installed' => (bool) \OC::$server->getConfig()->getSystemValue('installed', false), - 'version' => implode('.', \OC_Util::getVersion()), + 'version' => implode('.', \OCP\Util::getVersion()), 'versionstring' => \OC_Util::getVersionString(), 'edition' => \OC_Util::getEditionString(), ); diff --git a/core/css/styles.css b/core/css/styles.css index 62161d6927..ce2cfa37c6 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -254,6 +254,10 @@ body { width: 22em; margin: 0 auto; padding-top: 20px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } #body-login p.info a { font-weight: 600; @@ -291,6 +295,10 @@ body { #body-login form fieldset { margin-bottom: 20px; text-align: left; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } #body-login form #sqliteInformation { margin-top: -20px; @@ -348,6 +356,10 @@ body { .groupmiddle, .groupbottom { position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } #body-login .grouptop input, .grouptop input { @@ -385,6 +397,10 @@ label.infield { padding: 14px; padding-left: 28px; vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } html.ie8 #body-login form input[type="checkbox"]+label { margin-left: -28px; diff --git a/core/js/avatar.js b/core/js/avatar.js deleted file mode 100644 index 8ff136d67c..0000000000 --- a/core/js/avatar.js +++ /dev/null @@ -1,10 +0,0 @@ -$(document).ready(function(){ - if (OC.currentUser) { - // Personal settings - $('#avatar .avatardiv').avatar(OC.currentUser, 128); - } - // User settings - $.each($('td.avatar .avatardiv'), function(i, element) { - $(element).avatar($(element).parent().parent().data('uid'), 32); - }); -}); diff --git a/core/js/config.php b/core/js/config.php index e51ae90372..c975c6db2d 100644 --- a/core/js/config.php +++ b/core/js/config.php @@ -138,7 +138,7 @@ $array = array( array( 'session_lifetime' => min(\OCP\Config::getSystemValue('session_lifetime', OC::$server->getIniWrapper()->getNumeric('session.gc_maxlifetime')), OC::$server->getIniWrapper()->getNumeric('session.gc_maxlifetime')), 'session_keepalive' => \OCP\Config::getSystemValue('session_keepalive', true), - 'version' => implode('.', OC_Util::getVersion()), + 'version' => implode('.', \OCP\Util::getVersion()), 'versionstring' => OC_Util::getVersionString(), 'enable_avatars' => \OC::$server->getConfig()->getSystemValue('enable_avatars', true), 'lost_password_link'=> \OC::$server->getConfig()->getSystemValue('lost_password_link', null), diff --git a/core/js/files/client.js b/core/js/files/client.js index 82cf3ff512..3d31f974ff 100644 --- a/core/js/files/client.js +++ b/core/js/files/client.js @@ -35,27 +35,25 @@ if (options.useHTTPS) { url = 'https://'; } - var credentials = ''; - if (options.userName) { - credentials += encodeURIComponent(options.userName); - } - if (options.password) { - credentials += ':' + encodeURIComponent(options.password); - } - if (credentials.length > 0) { - url += credentials + '@'; - } url += options.host + this._root; this._defaultHeaders = options.defaultHeaders || {'X-Requested-With': 'XMLHttpRequest'}; this._baseUrl = url; - this._client = new dav.Client({ + + var clientOptions = { baseUrl: this._baseUrl, xmlNamespaces: { 'DAV:': 'd', 'http://owncloud.org/ns': 'oc' } - }); + }; + if (options.userName) { + clientOptions.userName = options.userName; + } + if (options.password) { + clientOptions.password = options.password; + } + this._client = new dav.Client(clientOptions); this._client.xhrProvider = _.bind(this._xhrProvider, this); }; @@ -253,7 +251,7 @@ id: props['{' + Client.NS_OWNCLOUD + '}fileid'], path: OC.dirname(path) || '/', name: OC.basename(path), - mtime: new Date(props['{' + Client.NS_DAV + '}getlastmodified']) + mtime: (new Date(props['{' + Client.NS_DAV + '}getlastmodified'])).getTime() }; var etagProp = props['{' + Client.NS_DAV + '}getetag']; @@ -303,10 +301,6 @@ } break; case 'W': - if (isFile) { - // also add create permissions - data.permissions |= OC.PERMISSION_CREATE; - } data.permissions |= OC.PERMISSION_UPDATE; break; case 'D': diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js index fe93d0ea65..b77063a9ea 100644 --- a/core/js/oc-dialogs.js +++ b/core/js/oc-dialogs.js @@ -753,6 +753,7 @@ var OCdialogs = { var sorted = dirs.concat(others); $.each(sorted, function(idx, entry) { + entry.icon = OC.MimeType.getIconUrl(entry.mimetype); var $li = self.$listTmpl.octemplate({ type: entry.type, dir: dir, diff --git a/core/js/placeholder.js b/core/js/placeholder.js index 74bb9b1881..5fb5b5b8f8 100644 --- a/core/js/placeholder.js +++ b/core/js/placeholder.js @@ -47,16 +47,20 @@ */ (function ($) { - $.fn.imageplaceholder = function(seed, text) { + $.fn.imageplaceholder = function(seed, text, size) { // set optional argument "text" to value of "seed" if undefined text = text || seed; - var hash = md5(seed), - maxRange = parseInt('ffffffffffffffffffffffffffffffff', 16), + var hash = md5(seed).substring(0, 4), + maxRange = parseInt('ffff', 16), hue = parseInt(hash, 16) / maxRange * 256, - height = this.height(); + height = this.height() || size || 32; this.css('background-color', 'hsl(' + hue + ', 90%, 65%)'); + // Placeholders are square + this.height(height); + this.width(height); + // CSS rules this.css('color', '#fff'); this.css('font-weight', 'normal'); diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js index 5ac1945da7..8763ec1c71 100644 --- a/core/js/setupchecks.js +++ b/core/js/setupchecks.js @@ -70,13 +70,13 @@ } if(!data.isMemcacheConfigured) { messages.push({ - msg: t('core', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.', {docLink: data.memcacheDocs}), + msg: t('core', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.', {docLink: data.memcacheDocs}), type: OC.SetupChecks.MESSAGE_TYPE_INFO }); } if(!data.isUrandomAvailable) { messages.push({ - msg: t('core', '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation.', {docLink: data.securityDocs}), + msg: t('core', '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation.', {docLink: data.securityDocs}), type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } @@ -88,19 +88,19 @@ } if(data.phpSupported && data.phpSupported.eol) { messages.push({ - msg: t('core', 'Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.', {version: data.phpSupported.version, phpLink: 'https://secure.php.net/supported-versions.php'}), + msg: t('core', 'Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.', {version: data.phpSupported.version, phpLink: 'https://secure.php.net/supported-versions.php'}), type: OC.SetupChecks.MESSAGE_TYPE_INFO }); } if(!data.forwardedForHeadersWorking) { messages.push({ - msg: t('core', 'The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation.', {docLink: data.reverseProxyDocs}), + msg: t('core', 'The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation.', {docLink: data.reverseProxyDocs}), type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } if(!data.isCorrectMemcachedPHPModuleInstalled) { messages.push({ - msg: t('core', 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the memcached wiki about both modules.', {wikiLink: 'https://code.google.com/p/memcached/wiki/PHPClientComparison'}), + msg: t('core', 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the memcached wiki about both modules.', {wikiLink: 'https://code.google.com/p/memcached/wiki/PHPClientComparison'}), type: OC.SetupChecks.MESSAGE_TYPE_WARNING }); } @@ -108,7 +108,7 @@ messages.push({ msg: t( 'core', - 'Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)', + 'Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)', { docLink: data.codeIntegrityCheckerDocumentation, codeIntegrityDownloadEndpoint: OC.generateUrl('/settings/integrity/failed'), diff --git a/core/js/tests/specs/files/clientSpec.js b/core/js/tests/specs/files/clientSpec.js index 3a3181d842..61cff0a66e 100644 --- a/core/js/tests/specs/files/clientSpec.js +++ b/core/js/tests/specs/files/clientSpec.js @@ -252,7 +252,7 @@ describe('OC.Files.Client tests', function() { expect(info.name).toEqual('One.txt'); expect(info.permissions).toEqual(31); expect(info.size).toEqual(250); - expect(info.mtime.getTime()).toEqual(1436535485000); + expect(info.mtime).toEqual(1436535485000); expect(info.mimetype).toEqual('text/plain'); expect(info.etag).toEqual('559fcabd79a38'); @@ -264,7 +264,7 @@ describe('OC.Files.Client tests', function() { expect(info.name).toEqual('sub'); expect(info.permissions).toEqual(31); expect(info.size).toEqual(100); - expect(info.mtime.getTime()).toEqual(1436536800000); + expect(info.mtime).toEqual(1436536800000); expect(info.mimetype).toEqual('httpd/unix-directory'); expect(info.etag).toEqual('66cfcabd79abb'); }); @@ -295,7 +295,7 @@ describe('OC.Files.Client tests', function() { expect(info.name).toEqual('文件夹'); expect(info.permissions).toEqual(31); expect(info.size).toEqual(120); - expect(info.mtime.getTime()).toEqual(1436522405000); + expect(info.mtime).toEqual(1436522405000); expect(info.mimetype).toEqual('httpd/unix-directory'); expect(info.etag).toEqual('56cfcabd79abb'); @@ -376,7 +376,7 @@ describe('OC.Files.Client tests', function() { expect(info.name).toEqual('文件夹'); expect(info.permissions).toEqual(31); expect(info.size).toEqual(120); - expect(info.mtime.getTime()).toEqual(1436522405000); + expect(info.mtime).toEqual(1436522405000); expect(info.mimetype).toEqual('httpd/unix-directory'); expect(info.etag).toEqual('56cfcabd79abb'); }); @@ -425,7 +425,7 @@ describe('OC.Files.Client tests', function() { expect(info.name).toEqual('in root'); expect(info.permissions).toEqual(31); expect(info.size).toEqual(120); - expect(info.mtime.getTime()).toEqual(1436522405000); + expect(info.mtime).toEqual(1436522405000); expect(info.mimetype).toEqual('httpd/unix-directory'); expect(info.etag).toEqual('56cfcabd79abb'); }); diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js index 4bad893cf3..c5f1aa5eff 100644 --- a/core/js/tests/specs/setupchecksSpec.js +++ b/core/js/tests/specs/setupchecksSpec.js @@ -88,7 +88,7 @@ describe('OC.SetupChecks tests', function() { msg: '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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.', type: OC.SetupChecks.MESSAGE_TYPE_ERROR }, { - msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.', + msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.', type: OC.SetupChecks.MESSAGE_TYPE_INFO }]); done(); @@ -125,7 +125,7 @@ describe('OC.SetupChecks tests', function() { type: OC.SetupChecks.MESSAGE_TYPE_ERROR }, { - msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.', + msg: 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.', type: OC.SetupChecks.MESSAGE_TYPE_INFO }]); done(); @@ -187,7 +187,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation.', + msg: '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); @@ -216,7 +216,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the memcached wiki about both modules.', + msg: 'Memcached is configured as distributed cache, but the wrong PHP module "memcache" is installed. \\OC\\Memcache\\Memcached only supports "memcached" and not "memcache". See the memcached wiki about both modules.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); @@ -245,7 +245,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: 'The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation.', + msg: 'The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation.', type: OC.SetupChecks.MESSAGE_TYPE_WARNING }]); done(); @@ -295,7 +295,7 @@ describe('OC.SetupChecks tests', function() { async.done(function( data, s, x ){ expect(data).toEqual([{ - msg: 'Your PHP version (5.4.0) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.', + msg: 'Your PHP version (5.4.0) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP.', type: OC.SetupChecks.MESSAGE_TYPE_INFO }]); done(); diff --git a/core/l10n/ca.js b/core/l10n/ca.js index 90b5c697de..6af8618f1e 100644 --- a/core/l10n/ca.js +++ b/core/l10n/ca.js @@ -102,9 +102,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aquest servidor no té connexió a internet. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "No hi ha configurada cap memòria cau. Per millorar el rendiment configureu una memòria cau si està disponible. Podeu trobar més informació a la documentació.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP no pot llegir /dev/urandom, cosa poc recomanable per raons de seguretat. Podeu trobar més informació a la documentació.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La versió de PHP ({version}) ja no està mantinguda per PHP. Us recomanem que actualitzeu la versió per gaudir de les millores de rendiment i seguretat proporcionades per PHP.", "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als consells de seguretat", "Shared" : "Compartit", diff --git a/core/l10n/ca.json b/core/l10n/ca.json index eaa7fe37e8..e2fb2d41a1 100644 --- a/core/l10n/ca.json +++ b/core/l10n/ca.json @@ -100,9 +100,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aquest servidor no té connexió a internet. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "No hi ha configurada cap memòria cau. Per millorar el rendiment configureu una memòria cau si està disponible. Podeu trobar més informació a la documentació.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP no pot llegir /dev/urandom, cosa poc recomanable per raons de seguretat. Podeu trobar més informació a la documentació.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La versió de PHP ({version}) ja no està mantinguda per PHP. Us recomanem que actualitzeu la versió per gaudir de les millores de rendiment i seguretat proporcionades per PHP.", "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als consells de seguretat", "Shared" : "Compartit", diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 94fe048939..b8998470e8 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -114,12 +114,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nebyla nakonfigurována paměťová cache. Pro zlepšení výkonu a dostupnosti ji prosím nakonfigurujte. Další informace lze nalézt v naší dokumentaci.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v dokumentaci.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Vaše verze PHP ({version}) již není podporována. Doporučujeme aktualizovat na poslední verzi PHP pro využití vylepšení výkonu a bezpečnosti.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Konfigurace hlaviček zpětné proxy není správná nebo přistupujete na ownCloud přes důvěryhodnou proxy. Pokud přistupujete na ownCloud přes nedůvěryhodnou proxy je toto považováno za bezpečnostní problém který může útočníkovi umožnit záměnu IP adresy viděné ownCloudem. Více informací lze nalézt v naší dokumentaci.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached je nakonfigurován jako distribuovaná cache, ale je nainstalován nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Projděte si memcached wiki popisující oba moduly.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší dokumentaci. (Seznam neplatných souborů… / Znovu ověřit…)", "Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována ve shodě s \"{expected}\". To značí možné ohrožení bezpečnosti a soukromí a je doporučeno toto nastavení upravit.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich bezpečnostních tipech.", @@ -266,6 +260,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.", "Log in" : "Přihlásit", "Wrong password. Reset it?" : "Nesprávné heslo. Resetovat?", + "Wrong password." : "Chybné heslo.", "Stay logged in" : "Neodhlašovat", "Alternative Logins" : "Alternativní přihlášení", "This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index 08c93b6388..112eee4e84 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -112,12 +112,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nebyla nakonfigurována paměťová cache. Pro zlepšení výkonu a dostupnosti ji prosím nakonfigurujte. Další informace lze nalézt v naší dokumentaci.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v dokumentaci.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Vaše verze PHP ({version}) již není podporována. Doporučujeme aktualizovat na poslední verzi PHP pro využití vylepšení výkonu a bezpečnosti.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Konfigurace hlaviček zpětné proxy není správná nebo přistupujete na ownCloud přes důvěryhodnou proxy. Pokud přistupujete na ownCloud přes nedůvěryhodnou proxy je toto považováno za bezpečnostní problém který může útočníkovi umožnit záměnu IP adresy viděné ownCloudem. Více informací lze nalézt v naší dokumentaci.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached je nakonfigurován jako distribuovaná cache, ale je nainstalován nesprávný PHP modul \"memcache\". \\OC\\Memcache\\Memcached podporuje pouze \"memcached\" a ne \"memcache\". Projděte si memcached wiki popisující oba moduly.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Některé soubory neprošly kontrolou integrity. Více informací o tom jak tento problém vyřešit, lze nalézt v naší dokumentaci. (Seznam neplatných souborů… / Znovu ověřit…)", "Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována ve shodě s \"{expected}\". To značí možné ohrožení bezpečnosti a soukromí a je doporučeno toto nastavení upravit.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich bezpečnostních tipech.", @@ -264,6 +258,7 @@ "Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.", "Log in" : "Přihlásit", "Wrong password. Reset it?" : "Nesprávné heslo. Resetovat?", + "Wrong password." : "Chybné heslo.", "Stay logged in" : "Neodhlašovat", "Alternative Logins" : "Alternativní přihlášení", "This ownCloud instance is currently in single user mode." : "Tato instalace ownCloudu je momentálně v jednouživatelském módu.", diff --git a/core/l10n/da.js b/core/l10n/da.js index 21dd462781..870a287db4 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -111,10 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af applikationer fra tredjepart ikke fungerer. Det vil sandsynligvis heller ikke være muligt at tilgå filer fra eksterne drev eller afsendelse af e-mail med notifikationer virker sandsynligvis heller ikke. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod. ", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Der er ikke konfigureret et hukommelsesmellemlager. For at forbedre din ydelse, skal du konfigurere et mellemlager, hvis den er tilgængelig. Du finder mere information i din dokumentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom kan ikke læses af PHP, hvilket stærkt frarådes af sikkerhedsmæssige årsager. Der fås mere information i vores dokumentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din version af PHP ({version}) bliver ikke længere understøttet af PHP. Vi opfordrer dig til at opgradere din PHP-version, for at opnå fordelene i ydelse og sikkerhed gennem opdateringerne som fås fra PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Den omvendte konnfiguration af proxyen er ikke korrekt, eller også tilgår du ownCloud fra en proxy som der er tillid til. Hvis ikke tilgår ownCloud fra en proxy som der er tillid til, så er der er et sikkerhedsproblem, hvilket kan tillade at en angriber kan forfalske deres IP-adresse som synlig for ownCloud. Mere information fås i vores dokumentation.", "Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For udvidet sikkerhed anbefaler vi at aktivere HSTS, som foreskrevet i vores sikkerhedstips.", diff --git a/core/l10n/da.json b/core/l10n/da.json index 84cd2e09ed..2da2042bac 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -109,10 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af applikationer fra tredjepart ikke fungerer. Det vil sandsynligvis heller ikke være muligt at tilgå filer fra eksterne drev eller afsendelse af e-mail med notifikationer virker sandsynligvis heller ikke. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod. ", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Der er ikke konfigureret et hukommelsesmellemlager. For at forbedre din ydelse, skal du konfigurere et mellemlager, hvis den er tilgængelig. Du finder mere information i din dokumentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom kan ikke læses af PHP, hvilket stærkt frarådes af sikkerhedsmæssige årsager. Der fås mere information i vores dokumentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din version af PHP ({version}) bliver ikke længere understøttet af PHP. Vi opfordrer dig til at opgradere din PHP-version, for at opnå fordelene i ydelse og sikkerhed gennem opdateringerne som fås fra PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Den omvendte konnfiguration af proxyen er ikke korrekt, eller også tilgår du ownCloud fra en proxy som der er tillid til. Hvis ikke tilgår ownCloud fra en proxy som der er tillid til, så er der er et sikkerhedsproblem, hvilket kan tillade at en angriber kan forfalske deres IP-adresse som synlig for ownCloud. Mere information fås i vores dokumentation.", "Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For udvidet sikkerhed anbefaler vi at aktivere HSTS, som foreskrevet i vores sikkerhedstips.", diff --git a/core/l10n/de.js b/core/l10n/de.js index 79527a46e0..d0dfc56bb2 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -109,9 +109,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Du alle Funktionen nutzen möchtest.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer Dokumentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer Dokumentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) wird nicht länger unterstützt. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren Sicherheitshinweisen erläutert ist.", @@ -172,6 +169,7 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], "{version} is available. Get more information on how to update." : "{version} ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.", "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.", "An error occurred." : "Es ist ein Fehler aufgetreten.", "Please reload the page." : "Bitte lade die Seite neu.", @@ -181,6 +179,7 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden", "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist", "Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stelle sicher, dass Dein Benutzername korrekt ist.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere den Administrator.", "%s password reset" : "%s-Passwort zurücksetzen", "Use the following link to reset your password: {link}" : "Benutze den folgenden Link, um Dein Passwort zurückzusetzen: {link}", "New password" : "Neues Passwort", @@ -255,6 +254,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.", "Log in" : "Anmelden", "Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?", + "Wrong password." : "Falsches Passwort.", "Stay logged in" : "Angemeldet bleiben", "Alternative Logins" : "Alternative Logins", "This ownCloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", diff --git a/core/l10n/de.json b/core/l10n/de.json index b567d209a4..4be7fe80cc 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -107,9 +107,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Du alle Funktionen nutzen möchtest.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer Dokumentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer Dokumentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Deine PHP Version ({version}) wird nicht länger unterstützt. Wir empfehlen ein Upgrade deiner PHP Version, um die volle Performance und Sicherheit zu gewährleisten.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren Sicherheitshinweisen erläutert ist.", @@ -170,6 +167,7 @@ "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], "{version} is available. Get more information on how to update." : "{version} ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", + "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.", "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.", "An error occurred." : "Es ist ein Fehler aufgetreten.", "Please reload the page." : "Bitte lade die Seite neu.", @@ -179,6 +177,7 @@ "Couldn't reset password because the token is invalid" : "Das Passwort konnte aufgrund eines ungültigen Tokens nicht zurückgesetzt werden", "Couldn't reset password because the token is expired" : "Das Passwort konnte nicht zurückgesetzt werden, da der Token abgelaufen ist", "Couldn't send reset email. Please make sure your username is correct." : "E-Mail zum Zurücksetzen kann nicht versendet werden. Bitte stelle sicher, dass Dein Benutzername korrekt ist.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Es konnte keine E-Mail verschickt werden um das Passwort zurückzusetzten, da keine E-Mail im Benutzerkonto hinterlegt ist. Bitte kontaktiere den Administrator.", "%s password reset" : "%s-Passwort zurücksetzen", "Use the following link to reset your password: {link}" : "Benutze den folgenden Link, um Dein Passwort zurückzusetzen: {link}", "New password" : "Neues Passwort", @@ -253,6 +252,7 @@ "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.", "Log in" : "Anmelden", "Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?", + "Wrong password." : "Falsches Passwort.", "Stay logged in" : "Angemeldet bleiben", "Alternative Logins" : "Alternative Logins", "This ownCloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 404a2b3dd0..fac380bf61 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -107,9 +107,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer Dokumentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer Dokumentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ihre PHP Version ({version}) wird nicht länger unterstützt. Wir empfehlen ein Upgrade ihrer PHP Version, um die volle Performance und Sicherheit zu gewährleisten.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren Sicherheitshinweisen erläutert ist.", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index ab1839fa89..c9024cc3bc 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -105,9 +105,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer Dokumentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer Dokumentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ihre PHP Version ({version}) wird nicht länger unterstützt. Wir empfehlen ein Upgrade ihrer PHP Version, um die volle Performance und Sicherheit zu gewährleisten.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren Sicherheitshinweisen erläutert ist.", diff --git a/core/l10n/el.js b/core/l10n/el.js index e075b123a5..20008993e5 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν είναι κατεστραμμένη.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις για ενημερώσεις ή η εγκατάσταση εφαρμογών 3ων δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του καταλόγου της ρίζας εγγράφων-document root του διακομιστή.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Δεν έχει οριστεί προσωρινή μνήμη. Για να βελτιώσετε την απόδοσή σας παρακαλούμε να διαμορφώσετε ένα χώρο προσωρινής αποθήκευσης εάν υπάρχει διαθέσιμος. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην τεκμηρίωση.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην τεκμηρίωσή μας.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Η έκδοσή σας της PHP ({version}) δεν υποστηρίζεται πια από την PHP. Σας παροτρύνουμε να αναβαθμίσετε την PHP για να επωφεληθείτε από την απόδοση και την ασφάλεια που παρέχει η PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Η διαμόρφωση των reverse proxy headers δεν είναι σωστή ή συνδέεστε στο ownCloud από ένα έμπιστο διαμεσολαβητή. Αν δεν συνδέεστε στο ownCloud από έμπιστο διαμεσολαβητή, αυτό είναι ένα θέμα ασφαλείας και μπορεί να επιτρέψει σε έναν επιτιθέμενο να μασκαρέψει τη διεύθυνση IP του ως ορατή στο ownCloud. Περισσότερες πληροφορίες υπάρχουν στην τεκμηρίωση.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη cache, αλλά είναι εγκατεστημένη η λάθος μονάδα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε τη memcached wiki και για τις δύο μονάδες.", "Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις προτάσεις ασφαλείας μας.", diff --git a/core/l10n/el.json b/core/l10n/el.json index 7c203945b5..2ab6bc6eab 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν είναι κατεστραμμένη.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις για ενημερώσεις ή η εγκατάσταση εφαρμογών 3ων δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του καταλόγου της ρίζας εγγράφων-document root του διακομιστή.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Δεν έχει οριστεί προσωρινή μνήμη. Για να βελτιώσετε την απόδοσή σας παρακαλούμε να διαμορφώσετε ένα χώρο προσωρινής αποθήκευσης εάν υπάρχει διαθέσιμος. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην τεκμηρίωση.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην τεκμηρίωσή μας.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Η έκδοσή σας της PHP ({version}) δεν υποστηρίζεται πια από την PHP. Σας παροτρύνουμε να αναβαθμίσετε την PHP για να επωφεληθείτε από την απόδοση και την ασφάλεια που παρέχει η PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Η διαμόρφωση των reverse proxy headers δεν είναι σωστή ή συνδέεστε στο ownCloud από ένα έμπιστο διαμεσολαβητή. Αν δεν συνδέεστε στο ownCloud από έμπιστο διαμεσολαβητή, αυτό είναι ένα θέμα ασφαλείας και μπορεί να επιτρέψει σε έναν επιτιθέμενο να μασκαρέψει τη διεύθυνση IP του ως ορατή στο ownCloud. Περισσότερες πληροφορίες υπάρχουν στην τεκμηρίωση.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Το Memcached είναι ρυθμισμένο ως κατανεμημένη cache, αλλά είναι εγκατεστημένη η λάθος μονάδα \"memcache\" της PHP. Το \\OC\\Memcache\\Memcached υποστηρίζει μόνο τη \"memcached\" και όχι τη \"memcache\". Δείτε τη memcached wiki και για τις δύο μονάδες.", "Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις προτάσεις ασφαλείας μας.", diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index d51892019d..82e17dc59a 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -90,8 +90,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest enabling the Internet connection for this server.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation.", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", "Shared" : "Shared", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index 9042f4d0c0..a9129acaa8 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -88,8 +88,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest enabling the Internet connection for this server.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation.", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", "Shared" : "Shared", diff --git a/core/l10n/es.js b/core/l10n/es.js index fd8df5f6c2..8f5d465793 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -8,13 +8,20 @@ OC.L10N.register( "Maintenance mode is kept active" : "El modo mantenimiento aún está activo.", "Updating database schema" : "Actualizando el esquema del base de datos", "Updated database" : "Base de datos actualizada", + "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)", "Checked database schema update" : "Actualización del esquema de base de datos revisado", + "Checking updates of apps" : "Comprobar actualizaciones de apps", + "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos %s (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)", "Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones", "Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s", "Repair warning: " : "Advertencia de reparación:", "Repair error: " : "Error que reparar:", "Set log level to debug - current level: \"%s\"" : "Establecer nivel de registro para depurar - nivel actual: \"%s\"", "Reset log level to \"%s\"" : "Restablecer nivel de registro a \"%s\"", + "Starting code integrity check" : "Comenzando comprobación de integridad de código", + "Finished code integrity check" : "Terminando comprobación de integridad de código", + "%s (3rdparty)" : "%s (tercer parte)", + "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s", "Already up to date" : "Ya actualizado", "File is too big" : "El archivo es demasiado grande", @@ -107,11 +114,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionan. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "La memoria caché no ha sido configurada. Para aumentar su performance por favor configure memcache si está disponible. Más información puede ser encontrada en nuestra documentación.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra documentación.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Su versión PHP ({version}) ya no es respaldada por PHP. Recomendamos actualizar su versión de PHP para aprovechar las actualizaciones de rendimiento y seguridad proporcionadas por PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra documentación.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "memcached es un sistema de cache distribuido. pero ha sido instalado por error el modulo PHP memcache.\nConsulte memcached wiki acerca de ambos modulos", "Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros consejos de seguridad.", @@ -256,6 +258,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Por favor reintente nuevamente o contáctese con su administrador.", "Log in" : "Ingresar", "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Restablecerla?", + "Wrong password." : "Contraseña incorrecta.", "Stay logged in" : "Permanecer autenticado", "Alternative Logins" : "Inicios de sesión alternativos", "This ownCloud instance is currently in single user mode." : "Esta instalación de ownCloud se encuentra en modo de usuario único.", diff --git a/core/l10n/es.json b/core/l10n/es.json index a3ad1e2a9a..fc88108dc3 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -6,13 +6,20 @@ "Maintenance mode is kept active" : "El modo mantenimiento aún está activo.", "Updating database schema" : "Actualizando el esquema del base de datos", "Updated database" : "Base de datos actualizada", + "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)", "Checked database schema update" : "Actualización del esquema de base de datos revisado", + "Checking updates of apps" : "Comprobar actualizaciones de apps", + "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Comprobar si se puede actualizar el esquema de la base de datos %s (esto puede tardar bastante tiempo, dependiendo del tamaño de la base de datos)", "Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones", "Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s", "Repair warning: " : "Advertencia de reparación:", "Repair error: " : "Error que reparar:", "Set log level to debug - current level: \"%s\"" : "Establecer nivel de registro para depurar - nivel actual: \"%s\"", "Reset log level to \"%s\"" : "Restablecer nivel de registro a \"%s\"", + "Starting code integrity check" : "Comenzando comprobación de integridad de código", + "Finished code integrity check" : "Terminando comprobación de integridad de código", + "%s (3rdparty)" : "%s (tercer parte)", + "%s (incompatible)" : "%s (incompatible)", "Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s", "Already up to date" : "Ya actualizado", "File is too big" : "El archivo es demasiado grande", @@ -105,11 +112,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionan. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "La memoria caché no ha sido configurada. Para aumentar su performance por favor configure memcache si está disponible. Más información puede ser encontrada en nuestra documentación.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra documentación.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Su versión PHP ({version}) ya no es respaldada por PHP. Recomendamos actualizar su versión de PHP para aprovechar las actualizaciones de rendimiento y seguridad proporcionadas por PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuración de las cabeceras inversas del proxy son incorrectas, o está accediendo a ownCloud desde un proxy confiable. Si no está accediendo a ownCloud desde un proxy certificado y confiable, este es un problema de seguridad y puede permitirle a un hacker camuflar su dirección IP a ownCloud. Más información puede ser encontrada en nuestra documentación.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "memcached es un sistema de cache distribuido. pero ha sido instalado por error el modulo PHP memcache.\nConsulte memcached wiki acerca de ambos modulos", "Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros consejos de seguridad.", @@ -254,6 +256,7 @@ "Please try again or contact your administrator." : "Por favor reintente nuevamente o contáctese con su administrador.", "Log in" : "Ingresar", "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Restablecerla?", + "Wrong password." : "Contraseña incorrecta.", "Stay logged in" : "Permanecer autenticado", "Alternative Logins" : "Inicios de sesión alternativos", "This ownCloud instance is currently in single user mode." : "Esta instalación de ownCloud se encuentra en modo de usuario único.", diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index 7cb375149a..b3dc78ba16 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -5,12 +5,15 @@ OC.L10N.register( "Preparing update" : "Uuendamise ettevalmistamine", "Turned on maintenance mode" : "Haldusrežiimis sisse lülitatud", "Turned off maintenance mode" : "Haldusrežiimis välja lülitatud", + "Maintenance mode is kept active" : "Hooldusrežiim on aktiivne", "Updated database" : "Uuendatud andmebaas", "Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud", "Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud", "Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s", "Repair warning: " : "Paranda hoiatus:", "Repair error: " : "Paranda viga:", + "%s (3rdparty)" : "%s (3nda osapoole arendaja)", + "%s (incompatible)" : "%s (pole ühilduv)", "Following apps have been disabled: %s" : "Järgnevad rakendused on välja lülitatud: %s", "Already up to date" : "On juba ajakohane", "File is too big" : "Fail on liiga suur", @@ -18,6 +21,7 @@ OC.L10N.register( "No image or file provided" : "Ühtegi pilti või faili pole pakutud", "Unknown filetype" : "Tundmatu failitüüp", "Invalid image" : "Vigane pilt", + "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.", "No temporary profile picture available, try again" : "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti", "No crop data provided" : "Lõikeandmeid ei leitud", "Crop is not square" : "Lõikamine pole ruudukujuline", @@ -138,6 +142,7 @@ OC.L10N.register( "Share with users or groups …" : "Jaga kasutajate või gruppidega ...", "Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...", "Warning" : "Hoiatus", + "Error while sending notification" : "Tõrge teavituse saatmisel", "The object type is not specified." : "Objekti tüüp pole määratletud.", "Enter new" : "Sisesta uus", "Delete" : "Kustuta", @@ -226,6 +231,9 @@ OC.L10N.register( "An internal error occured." : "Tekkis sisemine tõrge.", "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", "Log in" : "Logi sisse", + "Wrong password. Reset it?" : "Vale parool. Kas vajad parooli taastamist?", + "Wrong password." : "Vale parool.", + "Stay logged in" : "Püsi sisselogituna", "Alternative Logins" : "Alternatiivsed sisselogimisviisid", "This ownCloud instance is currently in single user mode." : "See ownCloud on momendil seadistatud ühe kasutaja jaoks.", "This means only administrators can use the instance." : "See tähendab, et seda saavad kasutada ainult administraatorid.", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index d10decffc5..1c1ed60244 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -3,12 +3,15 @@ "Preparing update" : "Uuendamise ettevalmistamine", "Turned on maintenance mode" : "Haldusrežiimis sisse lülitatud", "Turned off maintenance mode" : "Haldusrežiimis välja lülitatud", + "Maintenance mode is kept active" : "Hooldusrežiim on aktiivne", "Updated database" : "Uuendatud andmebaas", "Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud", "Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud", "Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s", "Repair warning: " : "Paranda hoiatus:", "Repair error: " : "Paranda viga:", + "%s (3rdparty)" : "%s (3nda osapoole arendaja)", + "%s (incompatible)" : "%s (pole ühilduv)", "Following apps have been disabled: %s" : "Järgnevad rakendused on välja lülitatud: %s", "Already up to date" : "On juba ajakohane", "File is too big" : "Fail on liiga suur", @@ -16,6 +19,7 @@ "No image or file provided" : "Ühtegi pilti või faili pole pakutud", "Unknown filetype" : "Tundmatu failitüüp", "Invalid image" : "Vigane pilt", + "An error occurred. Please contact your admin." : "Tekkis tõrge. Palun võta ühendust administraatoriga.", "No temporary profile picture available, try again" : "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti", "No crop data provided" : "Lõikeandmeid ei leitud", "Crop is not square" : "Lõikamine pole ruudukujuline", @@ -136,6 +140,7 @@ "Share with users or groups …" : "Jaga kasutajate või gruppidega ...", "Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...", "Warning" : "Hoiatus", + "Error while sending notification" : "Tõrge teavituse saatmisel", "The object type is not specified." : "Objekti tüüp pole määratletud.", "Enter new" : "Sisesta uus", "Delete" : "Kustuta", @@ -224,6 +229,9 @@ "An internal error occured." : "Tekkis sisemine tõrge.", "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", "Log in" : "Logi sisse", + "Wrong password. Reset it?" : "Vale parool. Kas vajad parooli taastamist?", + "Wrong password." : "Vale parool.", + "Stay logged in" : "Püsi sisselogituna", "Alternative Logins" : "Alternatiivsed sisselogimisviisid", "This ownCloud instance is currently in single user mode." : "See ownCloud on momendil seadistatud ühe kasutaja jaoks.", "This means only administrators can use the instance." : "See tähendab, et seda saavad kasutada ainult administraatorid.", diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index f167292ec1..078682a7b7 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -114,12 +114,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "HTTP-palvelinta ei ole määritetty oikein tiedostojen synkronointia varten, koska WebDAV-liittymä vaikuttaa olevan rikki.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ownCloudin ominaisuuksia.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään http-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä internetistä, tai siirtämään datahakemiston http-palvelimen juurihakemiston ulkopuolelle.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Muistissa toimivaa cachea ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla dokumentaatiosta.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla dokumentaatiossa.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Käytössäsi oleva PHP-versio ({version}) ei ole enää PHP:n tukema. Päivitä PHP:n versio, jotta hyödyt suorituskykyyn ja tietoturvaan vaikuttavista päivityksistä.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Käänteisen välityspalvelimen otsakkaiden asetukset ovat väärin, tai vaihtoehtoisesti käytät ownCloudia luotetun välityspalvelimen kautta. Jos et käytä ownCloudia luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentää ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla dokumentaatiosta.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached on määritelty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettuna. \\OC\\Memcache\\Memcached tukee vain \"memcached\":ia, ei \"memcache\":a. Lisätietoja memcachedin wikissä molemmista moduuleista.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla dokumentaation kautta. (Luettelo virheellisistä tiedostoista… / Rescan…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Välimuistia ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla dokumentaatiossa.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ei ole PHP:n luettavissa, eikä tätä missään tapauksessa suositella tietoturvasyistä. Lisätietoja on saatavilla dokumentaatiossa.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP-versiosi ({version}) ei ole enää tuettu PHP:n toimesta. Suosittelemme päivittämään PHP:n version, jotta hyödyt suorituskykyparannuksista sekä tietoturvakorjauksista.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Käänteisen välityspalvelimen otsakemääritykset ovat väärin, tai olet yhteydessä ownCloudiin luotetun välityspalvelimen kautta. Jos et ole yhteydessä luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentävän ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla dokumentaatiossa.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached on määritetty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettu. \\OC\\Memcache\\Memcached tukee vain moduulia \"memcached\", ei moduulia \"memcache\". Lisätietoja memcachedin wikissä molemmista moduuleista.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla dokumentaatiossa. (Luettelo virheellisistä tiedostoista… / Tarkista uudelleen…)", "Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten tietoturvavinkeissä neuvotaan.", @@ -266,6 +266,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.", "Log in" : "Kirjaudu sisään", "Wrong password. Reset it?" : "Väärä salasana. Haluatko palauttaa salasanan?", + "Wrong password." : "Väärä salasana.", "Stay logged in" : "Pysy sisäänkirjautuneena", "Alternative Logins" : "Vaihtoehtoiset kirjautumiset", "This ownCloud instance is currently in single user mode." : "Tämä ownCloud-asennus on parhaillaan single user -tilassa.", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index d98473c9f5..b890a36d8e 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -112,12 +112,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "HTTP-palvelinta ei ole määritetty oikein tiedostojen synkronointia varten, koska WebDAV-liittymä vaikuttaa olevan rikki.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ownCloudin ominaisuuksia.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään http-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä internetistä, tai siirtämään datahakemiston http-palvelimen juurihakemiston ulkopuolelle.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Muistissa toimivaa cachea ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla dokumentaatiosta.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla dokumentaatiossa.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Käytössäsi oleva PHP-versio ({version}) ei ole enää PHP:n tukema. Päivitä PHP:n versio, jotta hyödyt suorituskykyyn ja tietoturvaan vaikuttavista päivityksistä.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Käänteisen välityspalvelimen otsakkaiden asetukset ovat väärin, tai vaihtoehtoisesti käytät ownCloudia luotetun välityspalvelimen kautta. Jos et käytä ownCloudia luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentää ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla dokumentaatiosta.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached on määritelty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettuna. \\OC\\Memcache\\Memcached tukee vain \"memcached\":ia, ei \"memcache\":a. Lisätietoja memcachedin wikissä molemmista moduuleista.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla dokumentaation kautta. (Luettelo virheellisistä tiedostoista… / Rescan…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Välimuistia ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla dokumentaatiossa.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ei ole PHP:n luettavissa, eikä tätä missään tapauksessa suositella tietoturvasyistä. Lisätietoja on saatavilla dokumentaatiossa.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP-versiosi ({version}) ei ole enää tuettu PHP:n toimesta. Suosittelemme päivittämään PHP:n version, jotta hyödyt suorituskykyparannuksista sekä tietoturvakorjauksista.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Käänteisen välityspalvelimen otsakemääritykset ovat väärin, tai olet yhteydessä ownCloudiin luotetun välityspalvelimen kautta. Jos et ole yhteydessä luotetun välityspalvelimen kautta, kyseessä on tietoturvaongelma, joka mahdollistaa hyökkääjän väärentävän ownCloudille näkyvän IP-osoitteen. Lisätietoja on saatavilla dokumentaatiossa.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached on määritetty hajautetuksi välimuistiksi, mutta väärä PHP-moduuli \"memcache\" on asennettu. \\OC\\Memcache\\Memcached tukee vain moduulia \"memcached\", ei moduulia \"memcache\". Lisätietoja memcachedin wikissä molemmista moduuleista.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Jotkin tiedostot eivät läpäisseet eheystarkistusta. Lisätietoja ongelman selvittämiseksi on saatavilla dokumentaatiossa. (Luettelo virheellisistä tiedostoista… / Tarkista uudelleen…)", "Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten tietoturvavinkeissä neuvotaan.", @@ -264,6 +264,7 @@ "Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.", "Log in" : "Kirjaudu sisään", "Wrong password. Reset it?" : "Väärä salasana. Haluatko palauttaa salasanan?", + "Wrong password." : "Väärä salasana.", "Stay logged in" : "Pysy sisäänkirjautuneena", "Alternative Logins" : "Vaihtoehtoiset kirjautumiset", "This ownCloud instance is currently in single user mode." : "Tämä ownCloud-asennus on parhaillaan single user -tilassa.", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 4bb7aa82c9..d6663c09aa 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -114,12 +114,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. 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 mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la documentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre documentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) n'est plus prise en charge par les créateurs de PHP. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuration des headers du reverse proxy est incorrecte, ou vous accédez ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Plus d'info dans la documentation.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". Consulter le wiki memcached parlant de ces deux modules.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre documentation. (Liste des fichiers invalides… / Relancer…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la documentation.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre documentation.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) n'est plus prise en charge par les créateurs de PHP. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuration des headers du reverse proxy est incorrecte, ou vous accédez ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Plus d'info dans la documentation.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". Consulter le wiki memcached parlant de ces deux modules.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre documentation. (Liste des fichiers invalides… / Relancer…)", "Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est donc recommandé d'ajuster ce paramètre.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre Guide pour le renforcement et la sécurité.", @@ -266,6 +266,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.", "Log in" : "Se connecter", "Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?", + "Wrong password." : "Mot de passe incorrect.", "Stay logged in" : "Rester connecté", "Alternative Logins" : "Identifiants alternatifs", "This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 02347de170..841d99bea1 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -112,12 +112,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. 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 mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la documentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre documentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) n'est plus prise en charge par les créateurs de PHP. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuration des headers du reverse proxy est incorrecte, ou vous accédez ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Plus d'info dans la documentation.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". Consulter le wiki memcached parlant de ces deux modules.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre documentation. (Liste des fichiers invalides… / Relancer…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la documentation.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre documentation.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilisée ({version}) n'est plus prise en charge par les créateurs de PHP. Nous vous recommandons de mettre à niveau votre installation de PHP pour bénéficier de meilleures performances et des mises à jour de sécurité fournies par PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuration des headers du reverse proxy est incorrecte, ou vous accédez ownCloud depuis un proxy de confiance. Si vous n'êtes pas en train d’accéder à ownCloud depuis un proxy de confiance, ceci est un problème de sécurité qui peut permettre à un attaquant de masquer sa véritable adresse IP. Plus d'info dans la documentation.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "\"memcached\" est configuré comme cache distribué, mais le module installé est \"memcache\". \\OC\\Memcache\\Memcached ne prend en charge que \"memcached\" et non \"memcache\". Consulter le wiki memcached parlant de ces deux modules.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Des fichiers n'ont pas réussi à passer la vérification d’intégrité. Plus d'information sur comment résoudre ce problème dans notre documentation. (Liste des fichiers invalides… / Relancer…)", "Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est donc recommandé d'ajuster ce paramètre.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre Guide pour le renforcement et la sécurité.", @@ -264,6 +264,7 @@ "Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.", "Log in" : "Se connecter", "Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?", + "Wrong password." : "Mot de passe incorrect.", "Stay logged in" : "Rester connecté", "Alternative Logins" : "Identifiants alternatifs", "This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.", diff --git a/core/l10n/gl.js b/core/l10n/gl.js index eaef574eef..d0a5468a23 100644 --- a/core/l10n/gl.js +++ b/core/l10n/gl.js @@ -100,8 +100,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor non ten conexión activa a Internet. Isto significa que algunhas características como a montaxe do almacenamento externo, as notificacións sobre actualizacións ou a instalación de engadidos de terceiros non funcionarán. Así mesmo, o acceso remoto a ficheiros e enviar correos de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet para este servidor se quere ter todos estes servizos.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O directorio de datos e os seus ficheiros probabelmente son accesíbeis desde a Internet. O ficheiro .htaccess non funciona. Recomendámoslle que configure o seu servidor web de xeito que o directorio de datos non sexa accesíbel ou que mova o directorio de datos fora do directorio root do servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Non foi configurada a memoria cache. Para mellorar o rendemento configure unha «memcache», se está dispoñíbel. Pode atopar máis información na nosa documentación.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom non é lexíbel por PHP xa que esta absolutamente desaconsellado por razóns de seguridade. Pode atopar máis información na nosa documentación.", "Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade ou a intimidade, recomendámoslle que axuste esta opción.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "A cabeceira HTTP «Strict-Transport-Security» non está configurada para menos de «{seconds}» segundos . Para mellorar a seguridade, recomendámoslle que active o uso de HTTPS, tal e como se describe nos consellos de seguridade.", diff --git a/core/l10n/gl.json b/core/l10n/gl.json index f72db710e8..823b08c4d1 100644 --- a/core/l10n/gl.json +++ b/core/l10n/gl.json @@ -98,8 +98,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor non ten conexión activa a Internet. Isto significa que algunhas características como a montaxe do almacenamento externo, as notificacións sobre actualizacións ou a instalación de engadidos de terceiros non funcionarán. Así mesmo, o acceso remoto a ficheiros e enviar correos de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet para este servidor se quere ter todos estes servizos.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O directorio de datos e os seus ficheiros probabelmente son accesíbeis desde a Internet. O ficheiro .htaccess non funciona. Recomendámoslle que configure o seu servidor web de xeito que o directorio de datos non sexa accesíbel ou que mova o directorio de datos fora do directorio root do servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Non foi configurada a memoria cache. Para mellorar o rendemento configure unha «memcache», se está dispoñíbel. Pode atopar máis información na nosa documentación.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom non é lexíbel por PHP xa que esta absolutamente desaconsellado por razóns de seguridade. Pode atopar máis información na nosa documentación.", "Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade ou a intimidade, recomendámoslle que axuste esta opción.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "A cabeceira HTTP «Strict-Transport-Security» non está configurada para menos de «{seconds}» segundos . Para mellorar a seguridade, recomendámoslle que active o uso de HTTPS, tal e como se describe nos consellos de seguridade.", diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js index a9b84b6bcf..d3a577e60a 100644 --- a/core/l10n/hu_HU.js +++ b/core/l10n/hu_HU.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "A webszerver nincs megfelelően beállítva a fájl szinkronizációhoz, mert a WebDAV interfész nem működik.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány tulajdonság, mint pl. külső tárolók felcsatolása, frissítési értesítések, vagy egyéb applikációk nem működnek. A fájlok távoli elérése és az email értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden tulajdonságot használni akar.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Az adat könyvtára és a fáljai valószínűleg elérhetőek az internetről. A .htaccess fájl nem működik. Erősen ajánlott, hogy úgy állítsa be a webszerverét, hogy az adatkönyvtár ne legyen elérhető az internetről, vagy mogassa ki az adatokat a webszerver gyökérkönyvtárából.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nem lett gyorsítótár memória beállítva. A teljesítmény növeléséhez kérem állítson be gyorsítótárat, ha lehetséges. További információ található az alábbi dokumentációban.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "a /dev/urandom eszköz nem elérhető PHP-ből, ami nagyon nagy biztonsági problémát jelent. További információ található az alábbi dokumentációban.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A PHP verziód ({version}) már nem támogatott a PHP által. Javasoljuk, hogy frissítsd a PHP verziót, hogy kihasználd a teljesítménybeli és biztonsági javításokat.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. További információ található a dokumentációban.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérjük, nézd meg a memcached wiki oldalt a modulokkal kapcsolatban.", "Error occurred while checking server setup" : "Hiba történt a szerver beállítások ellenőrzése közben", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A \"{header}\" HTTP fejléc nincs beállítva, hogy megegyezzen az elvárttal \"{expected}\". Ez egy potenciális biztonsági kockázat és kérjük, hogy változtassa meg a beállításokat.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezze a HSTS, ahogyan ezt részletezzük a biztonsági tippek dokumentációban.", diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json index 991851b5be..1729c08124 100644 --- a/core/l10n/hu_HU.json +++ b/core/l10n/hu_HU.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "A webszerver nincs megfelelően beállítva a fájl szinkronizációhoz, mert a WebDAV interfész nem működik.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ennek a szervernek nincs működő internet kapcsolata. Ez azt jelenti, hogy néhány tulajdonság, mint pl. külső tárolók felcsatolása, frissítési értesítések, vagy egyéb applikációk nem működnek. A fájlok távoli elérése és az email értesítések is lehet, hogy nem működnek. Ajánlott az internet kapcsolat engedélyezése a szerveren, ha minden tulajdonságot használni akar.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Az adat könyvtára és a fáljai valószínűleg elérhetőek az internetről. A .htaccess fájl nem működik. Erősen ajánlott, hogy úgy állítsa be a webszerverét, hogy az adatkönyvtár ne legyen elérhető az internetről, vagy mogassa ki az adatokat a webszerver gyökérkönyvtárából.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nem lett gyorsítótár memória beállítva. A teljesítmény növeléséhez kérem állítson be gyorsítótárat, ha lehetséges. További információ található az alábbi dokumentációban.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "a /dev/urandom eszköz nem elérhető PHP-ből, ami nagyon nagy biztonsági problémát jelent. További információ található az alábbi dokumentációban.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A PHP verziód ({version}) már nem támogatott a PHP által. Javasoljuk, hogy frissítsd a PHP verziót, hogy kihasználd a teljesítménybeli és biztonsági javításokat.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "A fordított proxy fejlécek konfigurációs beállításai helytelenek, vagy egy megbízható proxy-ból próbálja az ownCloud-ot elérni. Ha nem megbízható proxy-ból próbálja elérni az ownCloud-ot, akkor ez egy biztonsági probléma, a támadó az ownCloud számára látható IP cím csalást tud végrehajtani. További információ található a dokumentációban.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached be van konfigurálva gyorsítótárnak, de rossz \"memcache\" PHP modul van telepítve. \\OC\\Memcache\\Memcached csak a \"memcached\"-t támogatja, és nem a \"memcache\"-t. Kérjük, nézd meg a memcached wiki oldalt a modulokkal kapcsolatban.", "Error occurred while checking server setup" : "Hiba történt a szerver beállítások ellenőrzése közben", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A \"{header}\" HTTP fejléc nincs beállítva, hogy megegyezzen az elvárttal \"{expected}\". Ez egy potenciális biztonsági kockázat és kérjük, hogy változtassa meg a beállításokat.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "A \"Strict-Transport-Security\" HTTP fejléc nincs beállítva hogy \"{seconds}\" másodpercig tartson. Biztonsági okokból ajánljuk, hogy engedélyezze a HSTS, ahogyan ezt részletezzük a biztonsági tippek dokumentációban.", diff --git a/core/l10n/id.js b/core/l10n/id.js index fb0fb7f433..1c7325e120 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Tembolok memori tidak dikonfigurasi. Untuk meningkatkan kinerja, mohon konfigurasi memcache jika tersedia. Informasi lebih lanjut dapat ditemukan di dokumentasi kami.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom tidak terbaca oleh PHP sangat disarankan untuk alasan keamanan. Informasi lebih lanjut dapat ditemukan di dokumentasi kami.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versi PHP Anda ({version}) tidak lagi didukung oleh PHP. Kami menyarankan Anda untuk meningkatkan versi PHP Anda agar mendapatkan keuntungan pembaruan kinerja dan keamanan yang disediakan oleh PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Konfigurasi header reverse proxy tidak benar atau Anda mengakses ownCloud dari proxy yang tidak terpercaya. Jika Anda tidak mengakses ownCloud dari proxy yang terpercaya, ini merupakan masalah keamanan dan memungkinkan peretas dapat memalsukan alamat IP mereka yang terlihat pada ownCloud. Informasi lebih lanjut dapat ditemukan pada dokumentasi kami.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached diatur sebagai cache terdistribusi, namun modul PHP \"memcache\" yang dipasang salah. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" bukan \"memcache\". Lihat wiki memcached tentang kedua modul.", "Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP header \"Strict-Transport-Security\" tidak diatur kurang dari \"{seconds}\" detik. Untuk peningkatan keamanan, kami menyarankan untuk mengaktifkan HSTS seperti yang dijelaskan di tips keamanan.", diff --git a/core/l10n/id.json b/core/l10n/id.json index 2edd1f8b36..16b0e0e0df 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Tembolok memori tidak dikonfigurasi. Untuk meningkatkan kinerja, mohon konfigurasi memcache jika tersedia. Informasi lebih lanjut dapat ditemukan di dokumentasi kami.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom tidak terbaca oleh PHP sangat disarankan untuk alasan keamanan. Informasi lebih lanjut dapat ditemukan di dokumentasi kami.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versi PHP Anda ({version}) tidak lagi didukung oleh PHP. Kami menyarankan Anda untuk meningkatkan versi PHP Anda agar mendapatkan keuntungan pembaruan kinerja dan keamanan yang disediakan oleh PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Konfigurasi header reverse proxy tidak benar atau Anda mengakses ownCloud dari proxy yang tidak terpercaya. Jika Anda tidak mengakses ownCloud dari proxy yang terpercaya, ini merupakan masalah keamanan dan memungkinkan peretas dapat memalsukan alamat IP mereka yang terlihat pada ownCloud. Informasi lebih lanjut dapat ditemukan pada dokumentasi kami.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached diatur sebagai cache terdistribusi, namun modul PHP \"memcache\" yang dipasang salah. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" bukan \"memcache\". Lihat wiki memcached tentang kedua modul.", "Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP header \"Strict-Transport-Security\" tidak diatur kurang dari \"{seconds}\" detik. Untuk peningkatan keamanan, kami menyarankan untuk mengaktifkan HSTS seperti yang dijelaskan di tips keamanan.", diff --git a/core/l10n/is.js b/core/l10n/is.js index 47f52e49d0..f965ef064a 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -102,10 +102,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vefþjónninn er ekki enn sett upp á réttan hátt til að leyfa skráar samstillingu því WebDAV viðmótið virðist vera brotinn.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi miðlari hefur ekki virka nettengingu. Þetta þýðir að sumir eginleikar eins og virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á foritum þriðja aðila mun ekki virka. Fjar aðgangur af skrám og senda tilkynningar í tölvupósti vika líklega ekki heldur. Við leggjum til að virkja internet tengingu fyrir þennan vefþjóni ef þú vilt hafa alla eiginleika.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Gagnamappa og skrá eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjón þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir rót vefþjóns.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Ekkert skyndiminni hefur verið stillt. Til að auka afköst skaltu stilla skyndiminni ef í boði. Nánari upplýsingar má finna á documentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom er ekki læsileg af PHP, Sterklega er mælt með því að leyfa PHP að lesa /dev/urandom af öryggisástæðum. Nánari upplýsingar má finna á documentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP útgáfan þín ({version}) er ekki lengur supported by PHP. Við hvetjum þig til að uppfæra PHP útgáfuna til að nýta afkasta og öryggis nýjungar hjá PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Gagnstæður proxy haus stilling er röng, eða þú ert að tengjast ownCloud frá traustum proxy. Ef þú ert ekki að tengjast ownCloud frá traustum proxy, þetta er öryggismál og getur leyft árásir að skopstæling IP tölu þeirra sem sýnilega ownCloud. Nánari upplýsingar má finna á documentation.", "Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetingu miðlara", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\\\"{header}\\\" HTTP haus er ekki stilltur til jafns við \\\"{expected}\\\". Þetta er mögulegur öryggis eða næðis áhætta, við mælum með því að aðlaga þessa stillingu.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\\\"Strangt-Transport-Security\\\" HTTP haus er ekki stilltur á minst \\\"{seconds}\\\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í security tips.", diff --git a/core/l10n/is.json b/core/l10n/is.json index 04f1af7ab6..4e80bb7520 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -100,10 +100,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vefþjónninn er ekki enn sett upp á réttan hátt til að leyfa skráar samstillingu því WebDAV viðmótið virðist vera brotinn.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Þessi miðlari hefur ekki virka nettengingu. Þetta þýðir að sumir eginleikar eins og virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á foritum þriðja aðila mun ekki virka. Fjar aðgangur af skrám og senda tilkynningar í tölvupósti vika líklega ekki heldur. Við leggjum til að virkja internet tengingu fyrir þennan vefþjóni ef þú vilt hafa alla eiginleika.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Gagnamappa og skrá eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjón þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir rót vefþjóns.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Ekkert skyndiminni hefur verið stillt. Til að auka afköst skaltu stilla skyndiminni ef í boði. Nánari upplýsingar má finna á documentation.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom er ekki læsileg af PHP, Sterklega er mælt með því að leyfa PHP að lesa /dev/urandom af öryggisástæðum. Nánari upplýsingar má finna á documentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP útgáfan þín ({version}) er ekki lengur supported by PHP. Við hvetjum þig til að uppfæra PHP útgáfuna til að nýta afkasta og öryggis nýjungar hjá PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Gagnstæður proxy haus stilling er röng, eða þú ert að tengjast ownCloud frá traustum proxy. Ef þú ert ekki að tengjast ownCloud frá traustum proxy, þetta er öryggismál og getur leyft árásir að skopstæling IP tölu þeirra sem sýnilega ownCloud. Nánari upplýsingar má finna á documentation.", "Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetingu miðlara", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\\\"{header}\\\" HTTP haus er ekki stilltur til jafns við \\\"{expected}\\\". Þetta er mögulegur öryggis eða næðis áhætta, við mælum með því að aðlaga þessa stillingu.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\\\"Strangt-Transport-Security\\\" HTTP haus er ekki stilltur á minst \\\"{seconds}\\\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í security tips.", diff --git a/core/l10n/it.js b/core/l10n/it.js index c6cfb7d78d..29189b403a 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -114,12 +114,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra documentazione.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra documentazione.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più supportata da PHP. Ti esortiamo ad aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra documentazione.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il wiki di memcached per informazioni su entrambi i moduli.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra documentazione. (Elenco dei file non validi… / Nuova scansione…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni, configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra documentazione.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra documentazione.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più supportata da PHP. Ti consigliamo di aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra documentazione.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il wiki di memcached per informazioni su entrambi i moduli.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra documentazione. (Elenco dei file non validi… / Nuova scansione…)", "Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri consigli sulla sicurezza.", @@ -266,6 +266,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.", "Log in" : "Accedi", "Wrong password. Reset it?" : "Password errata. Vuoi reimpostarla?", + "Wrong password." : "Password errata.", "Stay logged in" : "Rimani collegato", "Alternative Logins" : "Accessi alternativi", "This ownCloud instance is currently in single user mode." : "Questa istanza di ownCloud è in modalità utente singolo.", diff --git a/core/l10n/it.json b/core/l10n/it.json index 4f3bc17231..c5c068e4da 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -112,12 +112,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra documentazione.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra documentazione.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più supportata da PHP. Ti esortiamo ad aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra documentazione.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il wiki di memcached per informazioni su entrambi i moduli.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra documentazione. (Elenco dei file non validi… / Nuova scansione…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni, configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra documentazione.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra documentazione.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La tua versione ({version}) di PHP non è più supportata da PHP. Ti consigliamo di aggiornare la versione di PHP per trarre vantaggio dagli aggiornamenti in termini di prestazioni e sicurezza forniti da PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configurazione delle intestazioni del proxy inverso non è corretta, o stai effettuando l'accesso a ownCloud da un proxy affidabile. Se non stai effettuando l'accesso da un proxy affidabile, questo è un problema di sicurezza e può consentire a un attaccante di falsificare il suo indirizzo IP, rendendo visibile a ownCloud. Ulteriori informazioni sono disponibili nella nostra documentazione.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached è configurato come cache distribuita, ma è installato il modulo \"memcache\" errato. \\OC\\Memcache\\Memcached supporta solo \"memcached\" e non \"memcache\". Vedi il wiki di memcached per informazioni su entrambi i moduli.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alcuni file non hanno superato il controllo di integrità. Ulteriori informazioni su come risolvere questo problema sono disponibili nella nostra documentazione. (Elenco dei file non validi… / Nuova scansione…)", "Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri consigli sulla sicurezza.", @@ -264,6 +264,7 @@ "Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.", "Log in" : "Accedi", "Wrong password. Reset it?" : "Password errata. Vuoi reimpostarla?", + "Wrong password." : "Password errata.", "Stay logged in" : "Rimani collegato", "Alternative Logins" : "Accessi alternativi", "This ownCloud instance is currently in single user mode." : "Questa istanza di ownCloud è in modalità utente singolo.", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index 375b8c8a78..57bb7c9ee8 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -18,6 +18,8 @@ OC.L10N.register( "Repair error: " : "修復エラー:", "Set log level to debug - current level: \"%s\"" : "ログレベルをデバッグにセットします - 現在のレベル: \"%s\"", "Reset log level to \"%s\"" : "ログレベルを \"%s\" にリセットします。", + "Starting code integrity check" : "コード整合性の確認を開始", + "Finished code integrity check" : "コード整合性の確認が終了", "%s (3rdparty)" : "%s (サードパーティー)", "%s (incompatible)" : "%s (非互換)", "Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s", @@ -77,6 +79,7 @@ OC.L10N.register( "Oct." : "10月", "Nov." : "11月", "Dec." : "12月", + "There were problems with the code integrity check. More information…" : "コード整合性の確認で問題が発生しました。詳しくはこちら…", "Settings" : "設定", "Saving..." : "保存中...", "seconds ago" : "数秒前", @@ -111,11 +114,10 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースが動作していないようです。Webサーバーは、ファイルの同期を許可するよう適切に設定されていません。", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、documentation を参照してください。", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、documentation を参照ください。", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、PHPでサポート されていません。 我々は、PHPから提供されている新しいバージョンにアップグレードし、それによるセキュリティの確保とパフォーマンスのメリットを受けられることを強くお勧めします。", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "リバースプロキシーのヘッダー設定が間違っているか、または信頼されたプロキシーからownCloudにアクセスしていません。もし、信頼されたプロキシーからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、ドキュメントを確認してください。", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached は分散キャッシュとして設定されていますが、間違った\"memcache\"のPHPモジュールがインストールされています。 \\OC\\Memcache\\Memcached は、\"memcached\" のみをサポートしていますが、\"memcache\" ではありません。memcached wiki で両方のモジュール を見てください。", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、ドキュメント を参照してください。", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、ドキュメント を参照ください。", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、PHPでサポート されていません。セキュリティ確保とパフォーマンス向上のために、PHPから提供されている新しいバージョンにアップグレードすることを強くお勧めします。", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、 ドキュメントを確認してください。", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP ヘッダは \"{expected}\" に設定されていません。これは潜在的なセキュリティリスクもしくはプライバシーリスクとなる可能性があるため、この設定を見直すことをおすすめします。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"Strict-Transport-Security\" HTTP ヘッダが最小値の \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、security tipsを参照して、HSTS を有効にすることをおすすめします。", @@ -187,6 +189,7 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした", "Couldn't reset password because the token is expired" : "トークンが期限切れのため、パスワードをリセットできませんでした", "Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。", "%s password reset" : "%s パスワードリセット", "Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}", "New password" : "新しいパスワードを入力", @@ -261,6 +264,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。", "Log in" : "ログイン", "Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?", + "Wrong password." : "パスワードが間違っています。", "Stay logged in" : "ログインしたままにする", "Alternative Logins" : "代替ログイン", "This ownCloud instance is currently in single user mode." : "このownCloudインスタンスは、現在シングルユーザーモードです。", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index 337358d57f..b5cb09d44a 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -16,6 +16,8 @@ "Repair error: " : "修復エラー:", "Set log level to debug - current level: \"%s\"" : "ログレベルをデバッグにセットします - 現在のレベル: \"%s\"", "Reset log level to \"%s\"" : "ログレベルを \"%s\" にリセットします。", + "Starting code integrity check" : "コード整合性の確認を開始", + "Finished code integrity check" : "コード整合性の確認が終了", "%s (3rdparty)" : "%s (サードパーティー)", "%s (incompatible)" : "%s (非互換)", "Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s", @@ -75,6 +77,7 @@ "Oct." : "10月", "Nov." : "11月", "Dec." : "12月", + "There were problems with the code integrity check. More information…" : "コード整合性の確認で問題が発生しました。詳しくはこちら…", "Settings" : "設定", "Saving..." : "保存中...", "seconds ago" : "数秒前", @@ -109,11 +112,10 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースが動作していないようです。Webサーバーは、ファイルの同期を許可するよう適切に設定されていません。", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続していません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といった一部の機能が利用できません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できないことがあります。すべての機能を利用するには、このサーバーのインターネット接続を有効にすることをお勧めします。", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、documentation を参照してください。", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、documentation を参照ください。", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、PHPでサポート されていません。 我々は、PHPから提供されている新しいバージョンにアップグレードし、それによるセキュリティの確保とパフォーマンスのメリットを受けられることを強くお勧めします。", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "リバースプロキシーのヘッダー設定が間違っているか、または信頼されたプロキシーからownCloudにアクセスしていません。もし、信頼されたプロキシーからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、ドキュメントを確認してください。", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached は分散キャッシュとして設定されていますが、間違った\"memcache\"のPHPモジュールがインストールされています。 \\OC\\Memcache\\Memcached は、\"memcached\" のみをサポートしていますが、\"memcache\" ではありません。memcached wiki で両方のモジュール を見てください。", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、ドキュメント を参照してください。", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、ドキュメント を参照ください。", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "ご利用のPHPのバージョン ({version}) は、PHPでサポート されていません。セキュリティ確保とパフォーマンス向上のために、PHPから提供されている新しいバージョンにアップグレードすることを強くお勧めします。", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "リバースプロキシのヘッダー設定が間違っているか、または信頼されたプロキシからownCloudにアクセスしていません。もし、信頼されたプロキシからアクセスしているのでないなら、セキュリティに問題があり、ownCloudを詐称したIPアドレスから攻撃者に対して見えるよう許可していることになります。詳細な情報は、 ドキュメントを確認してください。", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP ヘッダは \"{expected}\" に設定されていません。これは潜在的なセキュリティリスクもしくはプライバシーリスクとなる可能性があるため、この設定を見直すことをおすすめします。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"Strict-Transport-Security\" HTTP ヘッダが最小値の \"{seconds}\" 秒に設定されていません。 セキュリティを強化するため、security tipsを参照して、HSTS を有効にすることをおすすめします。", @@ -185,6 +187,7 @@ "Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした", "Couldn't reset password because the token is expired" : "トークンが期限切れのため、パスワードをリセットできませんでした", "Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "このユーザー名に紐付けられたメールアドレスがないため、リセットメールを送信できませんでした。管理者に問い合わせてください。", "%s password reset" : "%s パスワードリセット", "Use the following link to reset your password: {link}" : "パスワードをリセットするには次のリンクをクリックしてください: {link}", "New password" : "新しいパスワードを入力", @@ -259,6 +262,7 @@ "Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。", "Log in" : "ログイン", "Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?", + "Wrong password." : "パスワードが間違っています。", "Stay logged in" : "ログインしたままにする", "Alternative Logins" : "代替ログイン", "This ownCloud instance is currently in single user mode." : "このownCloudインスタンスは、現在シングルユーザーモードです。", diff --git a/core/l10n/ko.js b/core/l10n/ko.js index f8d131fca2..54dc3cc77a 100644 --- a/core/l10n/ko.js +++ b/core/l10n/ko.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAV 서비스가 올바르게 작동하지 않아서 웹 서버에서 파일 동기화를 사용할 수 없습니다.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "메모리 캐시가 설정되지 않았습니다. 성능을 향상시키려면 사용 가능한 경우 메모리 캐시를 설정하십시오. 더 많은 정보를 보려면 문서를 참고하십시오.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP에서 /dev/urandom을 읽을 수 없으며, 보안상의 이유로 권장되지 않습니다. 더 많은 정보를 보려면 문서를 참고하십시오.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "사용하고 있는 PHP 버전({version})은 더 이상 PHP에서 지원하지 않습니다. PHP를 업그레이드하여 성능 및 보안 개선을 누리십시오.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "역방향 프록시 헤더 설정이 잘못되었거나, 신뢰할 수 있는 프록시에서 ownCloud에 접근하고 있습니다. 신뢰할 수 있는 프록시에서 ownCloud에 접근하는 것이 아니라면, 이 상황은 보안 문제이며 공격자가 ownCloud에 접근하는 IP 주소를 속일 수 있습니다. 더 많은 정보를 보려면 문서를 참고하십시오.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "분산 캐시로 Memcached가 설정되었으나, 잘못된 PHP 모듈 \"memcache\"가 설치되어 있습니다. \\OC\\Memcache\\Memcached는 \"memcached\"를 지원하며, \"memcache\"를 지원하지 않습니다. memcached 위키의 두 모듈에 관한 정보를 참조하십시오.", "Error occurred while checking server setup" : "서버 설정을 확인하는 중 오류 발생", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 헤더가 \"{expected}\"와(과) 같이 설정되지 않았습니다. 잠재적인 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP 헤더 \"Strict-Transport-Security\"가 최소한 \"{seconds}\"초 이상으로 설정되어야 합니다. 강화된 보안을 위해서 보안 팁에 나타난 것처럼 HSTS를 활성화하는 것을 추천합니다.", diff --git a/core/l10n/ko.json b/core/l10n/ko.json index 64aec1d9d9..075a7eb64a 100644 --- a/core/l10n/ko.json +++ b/core/l10n/ko.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAV 서비스가 올바르게 작동하지 않아서 웹 서버에서 파일 동기화를 사용할 수 없습니다.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "메모리 캐시가 설정되지 않았습니다. 성능을 향상시키려면 사용 가능한 경우 메모리 캐시를 설정하십시오. 더 많은 정보를 보려면 문서를 참고하십시오.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP에서 /dev/urandom을 읽을 수 없으며, 보안상의 이유로 권장되지 않습니다. 더 많은 정보를 보려면 문서를 참고하십시오.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "사용하고 있는 PHP 버전({version})은 더 이상 PHP에서 지원하지 않습니다. PHP를 업그레이드하여 성능 및 보안 개선을 누리십시오.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "역방향 프록시 헤더 설정이 잘못되었거나, 신뢰할 수 있는 프록시에서 ownCloud에 접근하고 있습니다. 신뢰할 수 있는 프록시에서 ownCloud에 접근하는 것이 아니라면, 이 상황은 보안 문제이며 공격자가 ownCloud에 접근하는 IP 주소를 속일 수 있습니다. 더 많은 정보를 보려면 문서를 참고하십시오.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "분산 캐시로 Memcached가 설정되었으나, 잘못된 PHP 모듈 \"memcache\"가 설치되어 있습니다. \\OC\\Memcache\\Memcached는 \"memcached\"를 지원하며, \"memcache\"를 지원하지 않습니다. memcached 위키의 두 모듈에 관한 정보를 참조하십시오.", "Error occurred while checking server setup" : "서버 설정을 확인하는 중 오류 발생", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 헤더가 \"{expected}\"와(과) 같이 설정되지 않았습니다. 잠재적인 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP 헤더 \"Strict-Transport-Security\"가 최소한 \"{seconds}\"초 이상으로 설정되어야 합니다. 강화된 보안을 위해서 보안 팁에 나타난 것처럼 HSTS를 활성화하는 것을 추천합니다.", diff --git a/core/l10n/mk.js b/core/l10n/mk.js index e09dd51f6b..0fd2666320 100644 --- a/core/l10n/mk.js +++ b/core/l10n/mk.js @@ -89,7 +89,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овој опслужувач нема работна Интернет врска. Ова значи дека некои опции како што е монтирање на надворешни складишта, известувања за ажурирање или инсталации на апликации од 3-ти лица нема да работат. Пристапот на датотеки од далечина и праќање на пораки за известувања може исто така да не работат. Ви советуваме да овозможите Интернет врска за овој опслужувач ако сакате да ги имате сите опции. ", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Вашата папка за податоци и вашите датотеки се најверојатно достапни од интернет. Датотеката .htaccess не работи. Строго ви препорачуваме да го подесите вашиот веб опслужувач на начин на кој вашата папка за податоци не е веќе достапна од интернет или да ја преместите папката за податоци надвор од коренот на веб опслужувачот.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Не еконфигуриран кеш за меморијата. За да ги подобрите перформансите ве молам конфигурирајте memcache ако е достапно. Дополнителни информации можат да се најдат во нашата документација.", "Error occurred while checking server setup" : "Се случи грешка при проверката на подесувањата на опслужувачот", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавието \"{header}\" не е конфигурирано да биде еднакво на \"{expected}\". Ова е потенцијално сигурносен ризик и препорачуваме да прилагодат подесувањата.", "Shared" : "Споделен", diff --git a/core/l10n/mk.json b/core/l10n/mk.json index d5002b8ffe..24c4325324 100644 --- a/core/l10n/mk.json +++ b/core/l10n/mk.json @@ -87,7 +87,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овој опслужувач нема работна Интернет врска. Ова значи дека некои опции како што е монтирање на надворешни складишта, известувања за ажурирање или инсталации на апликации од 3-ти лица нема да работат. Пристапот на датотеки од далечина и праќање на пораки за известувања може исто така да не работат. Ви советуваме да овозможите Интернет врска за овој опслужувач ако сакате да ги имате сите опции. ", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Вашата папка за податоци и вашите датотеки се најверојатно достапни од интернет. Датотеката .htaccess не работи. Строго ви препорачуваме да го подесите вашиот веб опслужувач на начин на кој вашата папка за податоци не е веќе достапна од интернет или да ја преместите папката за податоци надвор од коренот на веб опслужувачот.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Не еконфигуриран кеш за меморијата. За да ги подобрите перформансите ве молам конфигурирајте memcache ако е достапно. Дополнителни информации можат да се најдат во нашата документација.", "Error occurred while checking server setup" : "Се случи грешка при проверката на подесувањата на опслужувачот", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавието \"{header}\" не е конфигурирано да биде еднакво на \"{expected}\". Ова е потенцијално сигурносен ризик и препорачуваме да прилагодат подесувањата.", "Shared" : "Споделен", diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js index d6a613ab48..d01f93dd57 100644 --- a/core/l10n/nb_NO.js +++ b/core/l10n/nb_NO.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i dokumentasjonen.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i dokumentasjonen.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din PHP-versjon ({version}) er ikke støttet av PHP lenger. Vi oppfordrer deg til å oppgradere din PHP-versjon for å nyte fordel av ytelses- og sikkerhetsoppdateringer som tilbys av PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Konfigurasjon av reverse proxy-headers er ikke korrekt, eller du aksesserer ownCloud fra en \"trusted proxy\". Hvis du ikke aksesserer ownCloud fra en \"trusted proxy\", er dette en sikkerhetsrisiko som kan la en angriper forfalske IP-addressen sin slik den oppfattes av ownCloud. Mer informasjon i dokumentasjonen.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached er konfigurert som distribuert cache, men feil PHP-module \"memcache\" er installert. \\OC\\Memcache\\Memcached støtter bare \"memcached\" og ikke \"memcache\". Se memcached wiki om begge modulene.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i sikkerhetstips.", diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json index 58cad24f1a..77f2fa0acf 100644 --- a/core/l10n/nb_NO.json +++ b/core/l10n/nb_NO.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i dokumentasjonen.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i dokumentasjonen.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din PHP-versjon ({version}) er ikke støttet av PHP lenger. Vi oppfordrer deg til å oppgradere din PHP-versjon for å nyte fordel av ytelses- og sikkerhetsoppdateringer som tilbys av PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Konfigurasjon av reverse proxy-headers er ikke korrekt, eller du aksesserer ownCloud fra en \"trusted proxy\". Hvis du ikke aksesserer ownCloud fra en \"trusted proxy\", er dette en sikkerhetsrisiko som kan la en angriper forfalske IP-addressen sin slik den oppfattes av ownCloud. Mer informasjon i dokumentasjonen.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached er konfigurert som distribuert cache, men feil PHP-module \"memcache\" er installert. \\OC\\Memcache\\Memcached støtter bare \"memcached\" og ikke \"memcache\". Se memcached wiki om begge modulene.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i sikkerhetstips.", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 9e2bc2d345..30fd49ad56 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -114,12 +114,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verstoord lijkt.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om uw datadirectory te verplaatsen naar een locatie buiten de document root van de webserver.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze documentatie.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze documentatie.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer ondersteund door PHP. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze documentatie.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de memcached wiki over beide modules.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze documentatie. (Lijst met ongeldige bestanden… / Opnieuw…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze documentatie.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze documentatie.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer ondersteund door PHP. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze documentatie.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de memcached wiki over beide modules.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze documentatie. (Lijst met ongeldige bestanden… / Opnieuw…)", "Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet overeenkomstig met \"{expected}\" geconfigureerd. Dit is een potentieel security of privacy risico en we adviseren om deze instelling te wijzigen.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze security tips.", @@ -266,6 +266,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.", "Log in" : "Meld u aan", "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", + "Wrong password." : "Onjuist wachtwoord.", "Stay logged in" : "Ingelogd blijven", "Alternative Logins" : "Alternatieve inlogs", "This ownCloud instance is currently in single user mode." : "Deze ownCloud werkt momenteel in enkele gebruiker modus.", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index d565545ce3..c919cc4325 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -112,12 +112,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verstoord lijkt.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om uw datadirectory te verplaatsen naar een locatie buiten de document root van de webserver.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze documentatie.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze documentatie.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer ondersteund door PHP. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze documentatie.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de memcached wiki over beide modules.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze documentatie. (Lijst met ongeldige bestanden… / Opnieuw…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze documentatie.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze documentatie.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "UwPHP versie ({version}) wordt niet langer ondersteund door PHP. We adviseren u om uw PHP versie te upgraden voor betere prestaties en security updates geleverd door PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "De reverse proxy headerconfiguratie is onjuist, of u hebt toegang tot ownCloud via een vertrouwde proxy. Als u ownCloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat ownCloud ziet kan spoofen. Meer informatie is te vinden in onze documentatie.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de memcached wiki over beide modules.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze documentatie. (Lijst met ongeldige bestanden… / Opnieuw…)", "Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet overeenkomstig met \"{expected}\" geconfigureerd. Dit is een potentieel security of privacy risico en we adviseren om deze instelling te wijzigen.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze security tips.", @@ -264,6 +264,7 @@ "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.", "Log in" : "Meld u aan", "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", + "Wrong password." : "Onjuist wachtwoord.", "Stay logged in" : "Ingelogd blijven", "Alternative Logins" : "Alternatieve inlogs", "This ownCloud instance is currently in single user mode." : "Deze ownCloud werkt momenteel in enkele gebruiker modus.", diff --git a/core/l10n/oc.js b/core/l10n/oc.js index f9fdb8bea1..8f25978f9c 100644 --- a/core/l10n/oc.js +++ b/core/l10n/oc.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vòstre servidor web es pas corrèctament configurat per la sincronizacion de fichièrs : sembla que l'interfàcia WebDAV fonciona pas.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aqueste servidor se pòt pas connectar a internet. Aquò significa que certanas foncionalitats, talas coma lo montatge de supòrts d'emmagazinatge distants, las notificacions de mesas a jorn o l'installacion d'aplicacions tèrças foncionaràn pas. L'accès als fichièrs a distància, e tanben las notificacions per mail pòdon tanben èsser indisponiblas. Es recomandat d'activar la connexion internet per aqueste servidor se volètz dispausar de l'ensemble de las foncionalitats ofèrtas.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Vòstre dorsièr de donadas e vòstres fichièrs son probablament accessibles dempuèi internet. Lo fichièr .htaccess fonciona pas. Vos recomandam bravament de configurar vòstre servidor web de manièra qu'aqueste dorsièr de donadas siá pas mai accessible, o de lo desplaçar en defòra de la raiç del servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Cap d'escondedor de la memòria es pas configurat. Se possible, configuratz un \"memcache\" per aumentar las performàncias. Per mai d'information consultatz la documentacion.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom es pas legible per PHP, aquò es bravament desconselhat per de rasons de seguretat. Mai d'informacions pòdon èsser trobadas dins nòstra documentacion.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilizada ({version}) es pas mai presa en carga pels creators de PHP. Vos recomandam de metre a nivèl vòstra installacion de PHP per beneficiar de performàncias melhoras e de las mesas a jorn de seguretat provesidas per PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuracion dels headers del reverse proxy es incorrècta, o accedissètz a ownCloud dempuèi un proxy fisable. Se sètz pas a accedir a ownCloud dempuèi un proxy fisable, aquò es un problèma de seguretat que pòt permetre a un atacant d'amagar sa vertadièra adreça IP. Mai d'info dins la documentacion.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "\"memcached\" es configurat coma escondedor distribuit, mas lo modul installat es \"memcache\". \\OC\\Memcache\\Memcached pren pas en carga que \"memcached\" e non pas \"memcache\". Consultar lo wiki memcached que parla d'aquestes dos moduls.", "Error occurred while checking server setup" : "Una error s'es produsida al moment de la verificacion de la configuracion del servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'entèsta HTTP \"{header}\" es pas configurada per èsser egala a \"{expected}\" en creant potencialament un risc religat a la seguretat e a la vida privada. Es doncas recomandat d'ajustar aqueste paramètre.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "L'entèsta HTTP \"Strict-Transport-Security\" es pas configurada a \"{seconds}\" segondas. Per renforçar la seguretat, recomandam d'activar HSTS coma descrich dins nòstre Guida pel renfortiment e la seguretat.", diff --git a/core/l10n/oc.json b/core/l10n/oc.json index bd34013f9e..e19930b78d 100644 --- a/core/l10n/oc.json +++ b/core/l10n/oc.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vòstre servidor web es pas corrèctament configurat per la sincronizacion de fichièrs : sembla que l'interfàcia WebDAV fonciona pas.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aqueste servidor se pòt pas connectar a internet. Aquò significa que certanas foncionalitats, talas coma lo montatge de supòrts d'emmagazinatge distants, las notificacions de mesas a jorn o l'installacion d'aplicacions tèrças foncionaràn pas. L'accès als fichièrs a distància, e tanben las notificacions per mail pòdon tanben èsser indisponiblas. Es recomandat d'activar la connexion internet per aqueste servidor se volètz dispausar de l'ensemble de las foncionalitats ofèrtas.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Vòstre dorsièr de donadas e vòstres fichièrs son probablament accessibles dempuèi internet. Lo fichièr .htaccess fonciona pas. Vos recomandam bravament de configurar vòstre servidor web de manièra qu'aqueste dorsièr de donadas siá pas mai accessible, o de lo desplaçar en defòra de la raiç del servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Cap d'escondedor de la memòria es pas configurat. Se possible, configuratz un \"memcache\" per aumentar las performàncias. Per mai d'information consultatz la documentacion.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom es pas legible per PHP, aquò es bravament desconselhat per de rasons de seguretat. Mai d'informacions pòdon èsser trobadas dins nòstra documentacion.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La version de PHP utilizada ({version}) es pas mai presa en carga pels creators de PHP. Vos recomandam de metre a nivèl vòstra installacion de PHP per beneficiar de performàncias melhoras e de las mesas a jorn de seguretat provesidas per PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "La configuracion dels headers del reverse proxy es incorrècta, o accedissètz a ownCloud dempuèi un proxy fisable. Se sètz pas a accedir a ownCloud dempuèi un proxy fisable, aquò es un problèma de seguretat que pòt permetre a un atacant d'amagar sa vertadièra adreça IP. Mai d'info dins la documentacion.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "\"memcached\" es configurat coma escondedor distribuit, mas lo modul installat es \"memcache\". \\OC\\Memcache\\Memcached pren pas en carga que \"memcached\" e non pas \"memcache\". Consultar lo wiki memcached que parla d'aquestes dos moduls.", "Error occurred while checking server setup" : "Una error s'es produsida al moment de la verificacion de la configuracion del servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'entèsta HTTP \"{header}\" es pas configurada per èsser egala a \"{expected}\" en creant potencialament un risc religat a la seguretat e a la vida privada. Es doncas recomandat d'ajustar aqueste paramètre.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "L'entèsta HTTP \"Strict-Transport-Security\" es pas configurada a \"{seconds}\" segondas. Per renforçar la seguretat, recomandam d'activar HSTS coma descrich dins nòstre Guida pel renfortiment e la seguretat.", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 23963477f5..8d774176b1 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -114,17 +114,17 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isto significa que algumas das características como a montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa documentação .", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa documentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é suportada pela PHP. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidos pela PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informações podem ser encontradas em nossa documentação.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached somente suporta \"memcached\" e não \"memcache\". Veja o memcached wiki sobre esse módulo.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa documentação. (Lista de arquivos inválidos… / Reexaminar…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nenhuma memória cache foi configurada. Para melhorar o seu desempenho, por favor configure um cache de memória, se disponível. Mais informação podem ser encontradas em nossa documentação.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom não pode ser lido pelo PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas na nossa documentação.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é mais suportada pelo PHP. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidas pelo PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informação pode ser encontrada na nossa documentação.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached está configurado como cache distribuído, mas o módulo PHP \"memcache\" errado está instalado. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja a o wiki sobre memcached sobre ambos os módulos.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa documentação. (Lista de arquivos inválidos… / Reexaminar…)", "Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas dicas de segurança.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas dicas de segurança.", - "Shared" : "Compartilhados", + "Shared" : "Compartilhado", "Shared with {recipients}" : "Compartilhado com {recipients}", "Error" : "Erro", "Error while sharing" : "Erro ao compartilhar", @@ -191,6 +191,7 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", "Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou", "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de e-mail para este nome de usuário. Entre em contato com o administrador.", "%s password reset" : "%s redefinir senha", "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}", "New password" : "Nova senha", @@ -217,7 +218,7 @@ OC.L10N.register( "You can click here to return to %s." : "Você pode clicar aqui para retornar para %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\ngostaria que você soubesse que %s compartilhou %s com você.\nVeja isto: %s\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Internal Server Error" : "Erro Interno do Servidor", "The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.", "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.", @@ -255,7 +256,7 @@ OC.L10N.register( "Finishing …" : "Finalizando ...", "Need help?" : "Precisa de ajuda?", "See the documentation" : "Veja a documentação", - "Hey there,

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

" : "Olá,

só para seu conhecimento que %s compartilhou %s com você.
Verificar!

", + "Hey there,

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

" : "Olá,

só para seu conhecimento que %s compartilhou %s com você.
Visualize-o!

", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.", "Log out" : "Sair", "Search" : "Perquisar", @@ -265,6 +266,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.", "Log in" : "Entrar", "Wrong password. Reset it?" : "Senha incorreta. Redefini-la?", + "Wrong password." : "Senha errada", "Stay logged in" : "Permaneça logado", "Alternative Logins" : "Logins Alternativos", "This ownCloud instance is currently in single user mode." : "Nesta instância ownCloud está em modo de usuário único.", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 966ec44994..e458367e89 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -112,17 +112,17 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isto significa que algumas das características como a montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa documentação .", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa documentation.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é suportada pela PHP. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidos pela PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informações podem ser encontradas em nossa documentação.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached está configurado como cache distribuído, mas o módulo PHP errado \"memcache\" está instalado. \\OC\\Memcache\\Memcached somente suporta \"memcached\" e não \"memcache\". Veja o memcached wiki sobre esse módulo.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa documentação. (Lista de arquivos inválidos… / Reexaminar…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nenhuma memória cache foi configurada. Para melhorar o seu desempenho, por favor configure um cache de memória, se disponível. Mais informação podem ser encontradas em nossa documentação.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom não pode ser lido pelo PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas na nossa documentação.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão do PHP ({version}) não é mais suportada pelo PHP. Nós o incentivamos a atualizar sua versão do PHP para tirar proveito de atualizações de desempenho e de segurança fornecidas pelo PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "A configuração de cabeçalhos do proxy reverso está incorreta, ou você está acessando ownCloud de um proxy confiável. Se você não está acessando ownCloud de um proxy confiável, esta é uma questão de segurança e pode permitir a um invasor falsificar seu endereço IP como visível para ownCloud. Mais informação pode ser encontrada na nossa documentação.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached está configurado como cache distribuído, mas o módulo PHP \"memcache\" errado está instalado. \\OC\\Memcache\\Memcached suporta apenas \"memcached\" e não \"memcache\". Veja a o wiki sobre memcached sobre ambos os módulos.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Alguns arquivos não passaram na verificação de integridade. Mais informações sobre como resolver este problema podem ser encontradas na nossa documentação. (Lista de arquivos inválidos… / Reexaminar…)", "Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas dicas de segurança.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas dicas de segurança.", - "Shared" : "Compartilhados", + "Shared" : "Compartilhado", "Shared with {recipients}" : "Compartilhado com {recipients}", "Error" : "Erro", "Error while sharing" : "Erro ao compartilhar", @@ -189,6 +189,7 @@ "Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", "Couldn't reset password because the token is expired" : "Não foi possível redefinir a senha porque o token expirou", "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Não foi possível enviar email de redefinição porque não há nenhum endereço de e-mail para este nome de usuário. Entre em contato com o administrador.", "%s password reset" : "%s redefinir senha", "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}", "New password" : "Nova senha", @@ -215,7 +216,7 @@ "You can click here to return to %s." : "Você pode clicar aqui para retornar para %s.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Olá,\n\ngostaria que você soubesse que %s compartilhou %s com você.\nVeja isto: %s\n\n", "The share will expire on %s." : "O compartilhamento irá expirar em %s.", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Internal Server Error" : "Erro Interno do Servidor", "The server encountered an internal error and was unable to complete your request." : "O servidor encontrou um erro interno e não conseguiu concluir o seu pedido.", "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Entre em contato com o administrador do servidor se este erro reaparece várias vezes, por favor, inclua os detalhes técnicos abaixo em seu relatório.", @@ -253,7 +254,7 @@ "Finishing …" : "Finalizando ...", "Need help?" : "Precisa de ajuda?", "See the documentation" : "Veja a documentação", - "Hey there,

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

" : "Olá,

só para seu conhecimento que %s compartilhou %s com você.
Verificar!

", + "Hey there,

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

" : "Olá,

só para seu conhecimento que %s compartilhou %s com você.
Visualize-o!

", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.", "Log out" : "Sair", "Search" : "Perquisar", @@ -263,6 +264,7 @@ "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.", "Log in" : "Entrar", "Wrong password. Reset it?" : "Senha incorreta. Redefini-la?", + "Wrong password." : "Senha errada", "Stay logged in" : "Permaneça logado", "Alternative Logins" : "Logins Alternativos", "This ownCloud instance is currently in single user mode." : "Nesta instância ownCloud está em modo de usuário único.", diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js index 0d28361a2c..d3b7e55ca0 100644 --- a/core/l10n/pt_PT.js +++ b/core/l10n/pt_PT.js @@ -107,9 +107,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O seu servidor da Web não está configurado corretamente para permitir a sincronização de ficheiro, porque a interface WebDAV parece estar com problemas.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de Internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos, notificações sobre actualizações, ou a instalação de aplicações de terceiros não irá funcionar. Aceder aos ficheiros remotamente e enviar notificações de email poderão não funcionar também. Sugerimos que active uma ligação à Internet se pretende obter todas as funcionalidades do ownCloud.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nenhuma memória de cache foi configurada. Se possível configure-a de forma a optimizar o desempenho. Mais informações podem ser encontradas na documentação.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom não é legível pelo PHP, o que é altamente desanimador por motivos de segurança. Pode ser encontrada mais informação na documentação.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão ({version}) do PHP já não é suportada pelo PHP. Nós encorajamos-lo a atualizar a sua versão do PHP para aproveitar o desempenho e as atualizações de segurança fornecidas pelo PHP.´«", "Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança ou privacidade e recomendamos que o corrija.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips." : "Está a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas dicas de segurança.", diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json index e9cf78ce9a..fe8c66967f 100644 --- a/core/l10n/pt_PT.json +++ b/core/l10n/pt_PT.json @@ -105,9 +105,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O seu servidor da Web não está configurado corretamente para permitir a sincronização de ficheiro, porque a interface WebDAV parece estar com problemas.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de Internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos, notificações sobre actualizações, ou a instalação de aplicações de terceiros não irá funcionar. Aceder aos ficheiros remotamente e enviar notificações de email poderão não funcionar também. Sugerimos que active uma ligação à Internet se pretende obter todas as funcionalidades do ownCloud.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Nenhuma memória de cache foi configurada. Se possível configure-a de forma a optimizar o desempenho. Mais informações podem ser encontradas na documentação.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom não é legível pelo PHP, o que é altamente desanimador por motivos de segurança. Pode ser encontrada mais informação na documentação.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão ({version}) do PHP já não é suportada pelo PHP. Nós encorajamos-lo a atualizar a sua versão do PHP para aproveitar o desempenho e as atualizações de segurança fornecidas pelo PHP.´«", "Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança ou privacidade e recomendamos que o corrija.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips." : "Está a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas dicas de segurança.", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 90a0791755..a9f3994eb2 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом, чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установки сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Мы предлагаем включить подключение к Интернету для этого сервера, если вы хотите, чтобы все функции работали.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из интернете. .htaccess файл не работает. Мы настоятельно рекомендуем вам настроить ваш веб сервер таким образом, что-бы каталог данных не был больше доступен или переместите каталог данных за пределы корня веб сервера.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробную информацию, вы можете посмотреть в нашей документации.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom не может быть прочитан PHP, что крайне нежелательно по причинам безопасности. Дополнительную информацию можно найти в a href=\"{docLink}\">документации.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версия PHP ({version}) более не поддерживается PHP. Мы советуем Вам обновить Вашу версию PHP для получения обновлений производительности и безопасности, предоставляемых PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Конфигурация заголовков обратного прокси сервера некорректна, либо Вы заходите в ownCloud через доверенный прокси. Если Вы не заходите в ownCloud через доверенный прокси, это может быть небезопасно, так как злоумышленник может подменить видимые Owncloud IP-адреса. Более подробную информацию можно найти в нашей документации.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\"! Информацию о модулях читайте на странице memcached.", "Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не настроен на ожидаемый \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен хотя бы на \"{seconds}\" секунд. Для улучшения безопасности мы рекомендуем включить HSTS согласно нашим подсказкам по безопасности.", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index 93b8ce53da..4589f151c5 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом, чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установки сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Мы предлагаем включить подключение к Интернету для этого сервера, если вы хотите, чтобы все функции работали.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из интернете. .htaccess файл не работает. Мы настоятельно рекомендуем вам настроить ваш веб сервер таким образом, что-бы каталог данных не был больше доступен или переместите каталог данных за пределы корня веб сервера.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробную информацию, вы можете посмотреть в нашей документации.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom не может быть прочитан PHP, что крайне нежелательно по причинам безопасности. Дополнительную информацию можно найти в a href=\"{docLink}\">документации.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версия PHP ({version}) более не поддерживается PHP. Мы советуем Вам обновить Вашу версию PHP для получения обновлений производительности и безопасности, предоставляемых PHP.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Конфигурация заголовков обратного прокси сервера некорректна, либо Вы заходите в ownCloud через доверенный прокси. Если Вы не заходите в ownCloud через доверенный прокси, это может быть небезопасно, так как злоумышленник может подменить видимые Owncloud IP-адреса. Более подробную информацию можно найти в нашей документации.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached настроен на распределенный кеш, но установлен не поддерживаемый модуль PHP \"memcache\". \\OC\\Memcache\\Memcached поддерживает только модуль \"memcached\"! Информацию о модулях читайте на странице memcached.", "Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не настроен на ожидаемый \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен хотя бы на \"{seconds}\" секунд. Для улучшения безопасности мы рекомендуем включить HSTS согласно нашим подсказкам по безопасности.", diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js index af5e6ce415..e170b1adb8 100644 --- a/core/l10n/sk_SK.js +++ b/core/l10n/sk_SK.js @@ -111,7 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je zatiaľ správne nastavený, aby umožnil synchronizáciu súborov, pretože rozhranie WebDAV sa zdá byť nefunkčné.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server nemá funkčné pripojenie k internetu. Niektoré moduly ako napr. externé úložisko, oznámenie o dostupných aktualizáciách alebo inštalácia aplikácií tretích strán nebudú fungovať. Vzdialený prístup k súborom a odosielanie oznamovacích emailov tiež nemusí fungovať. Ak chcete využívať všetky funkcie, odporúčame povoliť tomuto serveru pripojenie k internetu.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne 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 priestoru, ktorý webový server sprístupňuje.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP nedokáže čítať z /dev/urandom, čo sa z bezpečnostných dôvodov dôrazne neodporúča. Ďalšie informácie nájdete v našej dokumentácii.", "Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba", "Shared" : "Zdieľané", "Shared with {recipients}" : "Zdieľa s {recipients}", diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json index 77b7ea8b89..2309fd4dc4 100644 --- a/core/l10n/sk_SK.json +++ b/core/l10n/sk_SK.json @@ -109,7 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server nie je zatiaľ správne nastavený, aby umožnil synchronizáciu súborov, pretože rozhranie WebDAV sa zdá byť nefunkčné.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server nemá funkčné pripojenie k internetu. Niektoré moduly ako napr. externé úložisko, oznámenie o dostupných aktualizáciách alebo inštalácia aplikácií tretích strán nebudú fungovať. Vzdialený prístup k súborom a odosielanie oznamovacích emailov tiež nemusí fungovať. Ak chcete využívať všetky funkcie, odporúčame povoliť tomuto serveru pripojenie k internetu.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš priečinok s dátami aj vaše súbory sú pravdepodobne prístupné z internetu. Súbor .htaccess nefunguje. Dôrazne 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 priestoru, ktorý webový server sprístupňuje.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP nedokáže čítať z /dev/urandom, čo sa z bezpečnostných dôvodov dôrazne neodporúča. Ďalšie informácie nájdete v našej dokumentácii.", "Error occurred while checking server setup" : "Počas kontroly nastavenia serveru sa stala chyba", "Shared" : "Zdieľané", "Shared with {recipients}" : "Zdieľa s {recipients}", diff --git a/core/l10n/sq.js b/core/l10n/sq.js index 4f88093c46..d9c07f39da 100644 --- a/core/l10n/sq.js +++ b/core/l10n/sq.js @@ -114,12 +114,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Shërbyesi juaj web ende s’është rregulluar për të lejuar njëkohësim kartelash, ngaqë ndërfaqja WebDAV duket se është e dëmtuar.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ky shërbyes nuk ka lidhje Internet që funksionon. Kjo do të thotë që disa prej veçorive, të tilla si montimi i depozitave të jashtme, njoftimet mbi përditësime apo instalim aplikacionesh nga palë të treta, s’do të funksionojnë. Edhe hyrja në kartela së largëti, apo dërgimi i email-eve për njoftime mund të mos funksionojnë. Këshillojmë të aktivizoni për këtë shërbyes lidhjen në Internet, nëse doni t’i keni krejt këto veçori.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Drejtoria juaj e të dhënave dhe kartelat tuaja ka shumë mundësi të jenë të arritshme që nga interneti. Kartela .htaccess s’funksionon. Këshillojmë me forcë që ta formësoni shërbyesin tuaj web në një mënyrë që drejtoria e të dhënave të mos lejojë më hyrje, ose ta zhvendosni drejtorinë e të dhënave jashtë rrënjës së dokumenteve të shërbyesit web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "S’ka të formësuar fshehtinë kujtese. Që të shtoni suksesshmërinë e shërbyesit tuaj, ju lutemi, formësoni një memcache, në mundet. Të dhëna të mëtejshme mund të gjenden te dokumentimi ynë.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te dokumentimi ynë.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP -së ({version}) nuk mbulohet më nga PHP-ja. Ju nxisim ta përmirësoni PHP-në me një version të ri që të përfitoni nga përditësimi i punimit dhe sigurisë të ofruara nga PHP-ja.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te dokumentimi ynë.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni memcached wiki për të dy modulet.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te dokumentimi ynë. (Listë e kartelave të pavlefshme… / Rikontrolloji…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "S’është formësuar ndonjë fshehtinë kujtese. Që të përmirësohet punimi juaj, ju lutemi, formësoni një fshehtinë kujtese, në pastë. Të dhëna të mëtejshme mund të gjenden te dokumentimi ynë.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te dokumentimi ynë.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP-së ({version}) nuk mbulohet më nga PHP-ja. Ju nxisim ta përmirësoni versionin tuaj të PHP-së që të përfitoni nga përditësimet e funksionimit dhe sigurisë të ofruara nga PHP-ja.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te dokumentimi ynë.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni memcached wiki për të dy modulet.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te dokumentimi ynë. (Listë e kartelave të pavlefshme… / Rikontrolloji…)", "Error occurred while checking server setup" : "Ndodhi një gabim gjatë kontrollit të rregullimit të shërbyesit", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Kryet HTTP \"{header}\" s’është formësuar të jetë i njëjtë me \"{expected}\". Ky është një rrezik potencial sigurie dhe privatësie dhe këshillojmë të ndreqet ky rregullim.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Kryet HTTP \"Strict-Transport-Security\" s’është formësuar të paktën \"{seconds}\". Për siguri të thelluar këshillojmë aktivizimin e HSTS-së, siç përshkruhet te këshillat tona mbi sigurinë.", @@ -266,6 +266,7 @@ OC.L10N.register( "Please try again or contact your administrator." : "Ju lutemi, riprovoni ose lidhuni me përgjegjësin tuaj.", "Log in" : "Hyni", "Wrong password. Reset it?" : "Fjalëkalim i gabuar. Të ricaktohet?", + "Wrong password." : "Fjalëkalim i gabuar.", "Stay logged in" : "Qëndro i futur", "Alternative Logins" : "Hyrje Alternative", "This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.", diff --git a/core/l10n/sq.json b/core/l10n/sq.json index 748e0221e9..4653279c62 100644 --- a/core/l10n/sq.json +++ b/core/l10n/sq.json @@ -112,12 +112,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Shërbyesi juaj web ende s’është rregulluar për të lejuar njëkohësim kartelash, ngaqë ndërfaqja WebDAV duket se është e dëmtuar.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ky shërbyes nuk ka lidhje Internet që funksionon. Kjo do të thotë që disa prej veçorive, të tilla si montimi i depozitave të jashtme, njoftimet mbi përditësime apo instalim aplikacionesh nga palë të treta, s’do të funksionojnë. Edhe hyrja në kartela së largëti, apo dërgimi i email-eve për njoftime mund të mos funksionojnë. Këshillojmë të aktivizoni për këtë shërbyes lidhjen në Internet, nëse doni t’i keni krejt këto veçori.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Drejtoria juaj e të dhënave dhe kartelat tuaja ka shumë mundësi të jenë të arritshme që nga interneti. Kartela .htaccess s’funksionon. Këshillojmë me forcë që ta formësoni shërbyesin tuaj web në një mënyrë që drejtoria e të dhënave të mos lejojë më hyrje, ose ta zhvendosni drejtorinë e të dhënave jashtë rrënjës së dokumenteve të shërbyesit web.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "S’ka të formësuar fshehtinë kujtese. Që të shtoni suksesshmërinë e shërbyesit tuaj, ju lutemi, formësoni një memcache, në mundet. Të dhëna të mëtejshme mund të gjenden te dokumentimi ynë.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te dokumentimi ynë.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP -së ({version}) nuk mbulohet më nga PHP-ja. Ju nxisim ta përmirësoni PHP-në me një version të ri që të përfitoni nga përditësimi i punimit dhe sigurisë të ofruara nga PHP-ja.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te dokumentimi ynë.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni memcached wiki për të dy modulet.", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te dokumentimi ynë. (Listë e kartelave të pavlefshme… / Rikontrolloji…)", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "S’është formësuar ndonjë fshehtinë kujtese. Që të përmirësohet punimi juaj, ju lutemi, formësoni një fshehtinë kujtese, në pastë. Të dhëna të mëtejshme mund të gjenden te dokumentimi ynë.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom s’është i lexueshëm nga PHP-ja, çka shkëshillohet me forcë, për arsye sigurie. Më tepër informacion mund të gjendet te dokumentimi ynë.", + "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Versioni juaj i PHP-së ({version}) nuk mbulohet më nga PHP-ja. Ju nxisim ta përmirësoni versionin tuaj të PHP-së që të përfitoni nga përditësimet e funksionimit dhe sigurisë të ofruara nga PHP-ja.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Formësimi për krye ndërmjetësi prapësor është i pasaktë, ose jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar. Nëse s’jeni duke hyrë në ownCloud prej një ndërmjetësi të besuar, ky është një problem sigurie dhe mund t’i lejojë një agresori të maskojë adresën e vet IP si një të pranueshme nga ownCloud-i. Të dhëna të mëtejshme mund të gjeni te dokumentimi ynë.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached është formësuar si fshehtinë e shpërndarë, por është instaluar moduli i gabuar PHP \"memcache\". \\OC\\Memcache\\Memcached mbulon vetëm \"memcached\" dhe jo \"memcache\". Shihni memcached wiki për të dy modulet.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "Disa prej kartelave s’e kaluan dot kontrollin e integritetit. Si si mund të zgjidhet ky problem mund ta shihni më në thellësi te dokumentimi ynë. (Listë e kartelave të pavlefshme… / Rikontrolloji…)", "Error occurred while checking server setup" : "Ndodhi një gabim gjatë kontrollit të rregullimit të shërbyesit", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Kryet HTTP \"{header}\" s’është formësuar të jetë i njëjtë me \"{expected}\". Ky është një rrezik potencial sigurie dhe privatësie dhe këshillojmë të ndreqet ky rregullim.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "Kryet HTTP \"Strict-Transport-Security\" s’është formësuar të paktën \"{seconds}\". Për siguri të thelluar këshillojmë aktivizimin e HSTS-së, siç përshkruhet te këshillat tona mbi sigurinë.", @@ -264,6 +264,7 @@ "Please try again or contact your administrator." : "Ju lutemi, riprovoni ose lidhuni me përgjegjësin tuaj.", "Log in" : "Hyni", "Wrong password. Reset it?" : "Fjalëkalim i gabuar. Të ricaktohet?", + "Wrong password." : "Fjalëkalim i gabuar.", "Stay logged in" : "Qëndro i futur", "Alternative Logins" : "Hyrje Alternative", "This ownCloud instance is currently in single user mode." : "Kjo instancë ownCloud është aktualisht në gjendje me përdorues të vetëm.", diff --git a/core/l10n/sr.js b/core/l10n/sr.js index 6a91852851..d3e4830e27 100644 --- a/core/l10n/sr.js +++ b/core/l10n/sr.js @@ -101,8 +101,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овај сервер нема везу са интернетом. То значи да неке могућности, попут монтирања спољашњег складишта, обавештења о ажурирању или инсталација апликација треће стране, неће радити. Даљински приступ и слање е-поште, такође неће радити. Предлажемо да омогућите интернет везу за овај сервер ако желите да имате све могућности.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Није подешен меморијски кеш. Да бисте побољшали перформансе подесите „memcache“ ако је доступан. Више информација можете наћи у документацији.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ПХП не може да чита што није добро из безбедносних разлога. Информације о томе можете наћи у нашој дукументацији.", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "ХТТП заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.", "Shared" : "Дељено", diff --git a/core/l10n/sr.json b/core/l10n/sr.json index 6e66b1f770..a25a96de7c 100644 --- a/core/l10n/sr.json +++ b/core/l10n/sr.json @@ -99,8 +99,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овај сервер нема везу са интернетом. То значи да неке могућности, попут монтирања спољашњег складишта, обавештења о ажурирању или инсталација апликација треће стране, неће радити. Даљински приступ и слање е-поште, такође неће радити. Предлажемо да омогућите интернет везу за овај сервер ако желите да имате све могућности.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Није подешен меморијски кеш. Да бисте побољшали перформансе подесите „memcache“ ако је доступан. Више информација можете наћи у документацији.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ПХП не може да чита што није добро из безбедносних разлога. Информације о томе можете наћи у нашој дукументацији.", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "ХТТП заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.", "Shared" : "Дељено", diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js index 33816cc707..3daabec936 100644 --- a/core/l10n/th_TH.js +++ b/core/l10n/th_TH.js @@ -114,12 +114,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "เว็บเซิร์ฟเวอร์ของคุณยังไม่ถูกติดตั้งอย่างถูกต้องเพื่ออนุญาตให้ประสานข้อมูลให้ตรงกัน เนื่องจากอินเตอร์เฟซ WebDAV อาจเสียหาย", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "เซิร์ฟเวอร์นี้ไม่มีการเชื่อมต่ออินเทอร์เน็ตซึ่งหมายความว่าบางส่วนของคุณสมบัติ เช่น การจัดเก็บข้อมูลภายนอก การแจ้งเตือนเกี่ยวกับการปรับปรุงหรือการติดตั้งแอพพลิเคชันของบุคคลที่สามจะไม่ทำงาน การเข้าถึงไฟล์จากระยะไกลและการส่งอีเมล์แจ้งเตือนอาจจะไม่ทำงาน เราขอแนะนำให้เปิดใช้งานการเชื่อมต่ออินเทอร์เน็ตสำหรับเซิร์ฟเวอร์นี้ถ้าคุณต้องการใช้งานคุณสมบัติทั้งหมด", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณอาจจะสามารถเข้าถึงได้จากอินเทอร์เน็ต ขณะที่ htaccess ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "ไม่ได้ตั้งค่าหน่วยความจำแคช เพื่อเพิ่มประสิทธิภาพกรุณาตั้งค่า Memcache ของคุณ สามารถดูข้อมูลเพิ่มเติมได้ที่ เอกสาร", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ไม่สามารถอ่านโดย PHP ซึ่งมีผลด้านความปลอดภัยเป็นอย่างมาก สามารถดูข้อมูลเพิ่มเติมได้ที่ เอกสาร", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP รุ่น ({version}) ของคุณ จะไม่ได้รับ การสนับสนุนโดย PHP เราขอแนะนำให้คุณอัพเกรดรุ่นของ PHP เพื่อความปลอดภัย", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "การกำหนดค่าพร็อกซี่ไม่ถูกต้องหรือคุณกำลังเข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ ถ้าคุณไม่ได้เข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ นี้เป็นปัญหาด้านความปลอดภัย คุณอาจถูกโจมดีจากผู้ไม่หวังดี อ่านข้อมูลเพิ่มเติมได้ที่ เอกสาร", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached เป็นการกำหนดค่าแคช แต่มีโมดูล PHP ของ \"memcache\" ที่ผิดพลาดได้ถูกติดตั้ง \\OC\\Memcache\\Memcached สนับสนุนเฉพาะ \"memcached\" ไม่ใช่ \"memcache\" ดูได้ที่ วิกิพีเดียเกี่ยวกับโมดูล Memcached", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "บางไฟล์ยังไม่ได้ผ่านการตรวจสอบความสมบูรณ์ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไขปัญหานี้สามารถดูได้จาก เอกสาร (รายชื่อของไฟล์ที่ไม่ถูกต้อง... / แสกนอีกครั้ง…)", "Error occurred while checking server setup" : "เกิดข้อผิดพลาดขณะที่ทำการตรวจสอบการติดตั้งเซิร์ฟเวอร์", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"Strict-Transport-Security\" ส่วนหัว HTTP ไม่ได้กำหนดค่าให้น้อยกว่า \"{seconds}\" วินาที เพื่อความปลอดภัยที่เพิ่มขึ้นเราขอแนะนำให้เปิดใช้งาน HSTS ที่อธิบายไว้ใน เคล็ดลับการรักษาความปลอดภัย ของเรา", @@ -191,6 +185,7 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "ไม่สามารถตั้งรหัสผ่านใหม่เพราะโทเค็นไม่ถูกต้อง", "Couldn't reset password because the token is expired" : "ไม่สามารถตั้งค่ารหัสผ่านเพราะโทเค็นหมดอายุ", "Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "ไม่ควร", "%s password reset" : "%s ตั้งรหัสผ่านใหม่", "Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}", "New password" : "รหัสผ่านใหม่", diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json index aa2dbc993d..885cf348fd 100644 --- a/core/l10n/th_TH.json +++ b/core/l10n/th_TH.json @@ -112,12 +112,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "เว็บเซิร์ฟเวอร์ของคุณยังไม่ถูกติดตั้งอย่างถูกต้องเพื่ออนุญาตให้ประสานข้อมูลให้ตรงกัน เนื่องจากอินเตอร์เฟซ WebDAV อาจเสียหาย", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "เซิร์ฟเวอร์นี้ไม่มีการเชื่อมต่ออินเทอร์เน็ตซึ่งหมายความว่าบางส่วนของคุณสมบัติ เช่น การจัดเก็บข้อมูลภายนอก การแจ้งเตือนเกี่ยวกับการปรับปรุงหรือการติดตั้งแอพพลิเคชันของบุคคลที่สามจะไม่ทำงาน การเข้าถึงไฟล์จากระยะไกลและการส่งอีเมล์แจ้งเตือนอาจจะไม่ทำงาน เราขอแนะนำให้เปิดใช้งานการเชื่อมต่ออินเทอร์เน็ตสำหรับเซิร์ฟเวอร์นี้ถ้าคุณต้องการใช้งานคุณสมบัติทั้งหมด", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณอาจจะสามารถเข้าถึงได้จากอินเทอร์เน็ต ขณะที่ htaccess ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "ไม่ได้ตั้งค่าหน่วยความจำแคช เพื่อเพิ่มประสิทธิภาพกรุณาตั้งค่า Memcache ของคุณ สามารถดูข้อมูลเพิ่มเติมได้ที่ เอกสาร", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom ไม่สามารถอ่านโดย PHP ซึ่งมีผลด้านความปลอดภัยเป็นอย่างมาก สามารถดูข้อมูลเพิ่มเติมได้ที่ เอกสาร", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "PHP รุ่น ({version}) ของคุณ จะไม่ได้รับ การสนับสนุนโดย PHP เราขอแนะนำให้คุณอัพเกรดรุ่นของ PHP เพื่อความปลอดภัย", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "การกำหนดค่าพร็อกซี่ไม่ถูกต้องหรือคุณกำลังเข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ ถ้าคุณไม่ได้เข้าถึง ownCloud จากพร็อกซี่ที่เชื่อถือได้ นี้เป็นปัญหาด้านความปลอดภัย คุณอาจถูกโจมดีจากผู้ไม่หวังดี อ่านข้อมูลเพิ่มเติมได้ที่ เอกสาร", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached เป็นการกำหนดค่าแคช แต่มีโมดูล PHP ของ \"memcache\" ที่ผิดพลาดได้ถูกติดตั้ง \\OC\\Memcache\\Memcached สนับสนุนเฉพาะ \"memcached\" ไม่ใช่ \"memcache\" ดูได้ที่ วิกิพีเดียเกี่ยวกับโมดูล Memcached", - "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our documentation. (List of invalid files… / Rescan…)" : "บางไฟล์ยังไม่ได้ผ่านการตรวจสอบความสมบูรณ์ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไขปัญหานี้สามารถดูได้จาก เอกสาร (รายชื่อของไฟล์ที่ไม่ถูกต้อง... / แสกนอีกครั้ง…)", "Error occurred while checking server setup" : "เกิดข้อผิดพลาดขณะที่ทำการตรวจสอบการติดตั้งเซิร์ฟเวอร์", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"Strict-Transport-Security\" ส่วนหัว HTTP ไม่ได้กำหนดค่าให้น้อยกว่า \"{seconds}\" วินาที เพื่อความปลอดภัยที่เพิ่มขึ้นเราขอแนะนำให้เปิดใช้งาน HSTS ที่อธิบายไว้ใน เคล็ดลับการรักษาความปลอดภัย ของเรา", @@ -189,6 +183,7 @@ "Couldn't reset password because the token is invalid" : "ไม่สามารถตั้งรหัสผ่านใหม่เพราะโทเค็นไม่ถูกต้อง", "Couldn't reset password because the token is expired" : "ไม่สามารถตั้งค่ารหัสผ่านเพราะโทเค็นหมดอายุ", "Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "ไม่ควร", "%s password reset" : "%s ตั้งรหัสผ่านใหม่", "Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}", "New password" : "รหัสผ่านใหม่", diff --git a/core/l10n/tr.js b/core/l10n/tr.js index 5cef8c0a89..b71cf996a9 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye belgelendirmemizden ulaşabilirsiniz.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi belgelendirmemizde bulunabilir.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Kullandığınız PHP sürümü ({version}) artık PHP tarafından desteklenmiyor. PHP tarafından sağlanan performans ve güvenlik güncellemelerinden faydalanmak için PHP sürümünüzü güncellemenizi öneririz.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Ters vekil sunucu başlık yapılandırması hatalı veya ownCloud'a güvenilen bir vekil sunucusundan erişiyorsunuz. ownCloud'a güvenilen bir vekil sunucusundan erişmiyorsanız bu bir güvenlik problemidir ve bir saldırganın IP adresinizi taklit etmesine izin verebilir. Ayrıntılı bilgiyi belgelendirmemizde bulabilirsiniz.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached ayrılmış önbellek olarak yapılandırıldı, ancak yanlış PHP modülü \"memcache\" olarak yüklendi. \\OC\\Memcache\\Memcached sadece \"memcached\" olarak desteklenir, \"memcache\" olarak kullanamazsınız. memcached wiki about both modules linkine bakınız.", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için güvenlik ipuçlarımızda belirtilen HSTS etkinleştirmesini öneririz.", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 0be5d60d6d..48acac9350 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye belgelendirmemizden ulaşabilirsiniz.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi belgelendirmemizde bulunabilir.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Kullandığınız PHP sürümü ({version}) artık PHP tarafından desteklenmiyor. PHP tarafından sağlanan performans ve güvenlik güncellemelerinden faydalanmak için PHP sürümünüzü güncellemenizi öneririz.", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "Ters vekil sunucu başlık yapılandırması hatalı veya ownCloud'a güvenilen bir vekil sunucusundan erişiyorsunuz. ownCloud'a güvenilen bir vekil sunucusundan erişmiyorsanız bu bir güvenlik problemidir ve bir saldırganın IP adresinizi taklit etmesine izin verebilir. Ayrıntılı bilgiyi belgelendirmemizde bulabilirsiniz.", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached ayrılmış önbellek olarak yapılandırıldı, ancak yanlış PHP modülü \"memcache\" olarak yüklendi. \\OC\\Memcache\\Memcached sadece \"memcached\" olarak desteklenir, \"memcache\" olarak kullanamazsınız. memcached wiki about both modules linkine bakınız.", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için güvenlik ipuçlarımızda belirtilen HSTS etkinleştirmesini öneririz.", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index 1b2d0e93f7..8d8d09e37e 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -102,9 +102,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Цей сервер не має підключення до Інтернету. Це означає, що деякі з функцій, таких як зовнішнє сховище, повідомлення про оновлення та встановлення сторонніх додатків не будуть працювати. Доступ до файлів віддалено і надсилання повідомлень поштою можуть не працювати. Ми пропонуємо включити підключення до Інтернету для цього сервера, якщо ви хочете, щоб всі функції працювали.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Кеш пам'яті не налаштований. Задля покращення продуктивності, будь ласка, налаштуйте memcache, якщо є можливість. Додаткову інформацію шукайте у нашій документації.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom не доступний для читання PHP, що вкрай небажано з міркувань безпеки. Додаткову інформацію шукайте у нашій документації.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версія PHP ({version}) більше не підтримується. Ми рекомендуємо вам оновити версію PHP щоб отримати кращу продуктивність та оновлення безпеки.", "Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.", "Shared" : "Опубліковано", diff --git a/core/l10n/uk.json b/core/l10n/uk.json index 8fc606244e..e329ae9b17 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -100,9 +100,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Цей сервер не має підключення до Інтернету. Це означає, що деякі з функцій, таких як зовнішнє сховище, повідомлення про оновлення та встановлення сторонніх додатків не будуть працювати. Доступ до файлів віддалено і надсилання повідомлень поштою можуть не працювати. Ми пропонуємо включити підключення до Інтернету для цього сервера, якщо ви хочете, щоб всі функції працювали.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "Кеш пам'яті не налаштований. Задля покращення продуктивності, будь ласка, налаштуйте memcache, якщо є можливість. Додаткову інформацію шукайте у нашій документації.", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom не доступний для читання PHP, що вкрай небажано з міркувань безпеки. Додаткову інформацію шукайте у нашій документації.", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Ваша версія PHP ({version}) більше не підтримується. Ми рекомендуємо вам оновити версію PHP щоб отримати кращу продуктивність та оновлення безпеки.", "Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.", "Shared" : "Опубліковано", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index 9c2b8beb0f..763501f066 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -111,11 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏,因此你的网页服务器没有正确地设置来允许文件同步。", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "此服务器上没有可用的因特网连接. 这意味着某些特性将无法工作,例如挂载外部存储器, 提醒更新或安装第三方应用等. 从远程访问文件和发送提醒电子邮件也可能无法工作. 如果你想要ownCloud的所有特性, 我们建议启用此服务器的因特网连接.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的文档 。", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看文档了解详情。", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "你的 PHP 版本 ({version}) 不再被 PHP 支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 文档。", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached 配置为分布式缓存,但是已经安装的 PHP 模块是 \"memcache\" 。 \\OC\\Memcache\\Memcached 仅支持 \"memcached\" 而不是 \"memcache\"。点击 memcached wiki 了解两个模块的不同.", "Error occurred while checking server setup" : "当检查服务器启动时出错", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照安全提示启用 HSTS。", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index aff40a4dc2..aa24a672d7 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -109,11 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏,因此你的网页服务器没有正确地设置来允许文件同步。", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "此服务器上没有可用的因特网连接. 这意味着某些特性将无法工作,例如挂载外部存储器, 提醒更新或安装第三方应用等. 从远程访问文件和发送提醒电子邮件也可能无法工作. 如果你想要ownCloud的所有特性, 我们建议启用此服务器的因特网连接.", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的文档 。", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看文档了解详情。", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "你的 PHP 版本 ({version}) 不再被 PHP 支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 文档。", - "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the memcached wiki about both modules." : "Memcached 配置为分布式缓存,但是已经安装的 PHP 模块是 \"memcache\" 。 \\OC\\Memcache\\Memcached 仅支持 \"memcached\" 而不是 \"memcache\"。点击 memcached wiki 了解两个模块的不同.", "Error occurred while checking server setup" : "当检查服务器启动时出错", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照安全提示启用 HSTS。", diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index 9aecca3410..69a62cf8eb 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -111,10 +111,6 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器無法提供檔案同步功能,因為 WebDAV 界面有問題", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的資料目錄和您的檔案可能從網路網路被存取,使.htaccess 檔案無法發揮效果,我們強烈建議您配置您的網頁伺服器讓資料目錄不再被訪問存取或者將您的資料目錄移出網頁伺服器根目錄。", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "記憶體快取目前尚未配置,如果可以,請配置memcache提升效能,更多訊息查看 文件。", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP目前無法讀取/dev/urandom,基於安全因素,強烈建議您改善,更多訊息查看 文件。", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "您的PHP版本 ({version}) 不再被PHP支援,我們建議您升級您的PHP版本來提升效能以及安全性。", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "反向代理伺服器標頭配置不正確或者您正從一個受信任的代理伺服器訪問ownCloud,如果您不是從受信任的代理伺服器訪問ownCloud,表示這是一個安全性問題,攻擊者可利用IP詐騙存取ownCloud,更多訊息查看 文件。", "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 標頭配置與 \"{expected}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"強制安全傳輸\" HTTP標頭尚未配置至少 \"{seconds}\" 秒會重新定義成HTTPS,如我們的安全性提示所述,為了加強安全性,我們建議啟動 HTTP強制安全傳輸。", diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index 024aa29a4d..66750009ba 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -109,10 +109,6 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器無法提供檔案同步功能,因為 WebDAV 界面有問題", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。", "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 web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "您的資料目錄和您的檔案可能從網路網路被存取,使.htaccess 檔案無法發揮效果,我們強烈建議您配置您的網頁伺服器讓資料目錄不再被訪問存取或者將您的資料目錄移出網頁伺服器根目錄。", - "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation." : "記憶體快取目前尚未配置,如果可以,請配置memcache提升效能,更多訊息查看 文件。", - "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our documentation." : "PHP目前無法讀取/dev/urandom,基於安全因素,強烈建議您改善,更多訊息查看 文件。", - "Your PHP version ({version}) is no longer supported by PHP. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "您的PHP版本 ({version}) 不再被PHP支援,我們建議您升級您的PHP版本來提升效能以及安全性。", - "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our documentation." : "反向代理伺服器標頭配置不正確或者您正從一個受信任的代理伺服器訪問ownCloud,如果您不是從受信任的代理伺服器訪問ownCloud,表示這是一個安全性問題,攻擊者可利用IP詐騙存取ownCloud,更多訊息查看 文件。", "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 標頭配置與 \"{expected}\"不一樣,這是一個潛在安全性或者隱私上的風險,因此我們建議您調整此設定。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our security tips." : "\"強制安全傳輸\" HTTP標頭尚未配置至少 \"{seconds}\" 秒會重新定義成HTTPS,如我們的安全性提示所述,為了加強安全性,我們建議啟動 HTTP強制安全傳輸。", diff --git a/core/register_command.php b/core/register_command.php index 16dda55878..83e92a7e21 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -44,6 +44,7 @@ $application->add(new \OC\Core\Command\Integrity\SignCore( if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $application->add(new OC\Core\Command\App\Disable()); $application->add(new OC\Core\Command\App\Enable()); + $application->add(new OC\Core\Command\App\GetPath()); $application->add(new OC\Core\Command\App\ListApps()); $application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig())); diff --git a/core/templates/404.php b/core/templates/404.php index c8d16e3e8f..2b12b12cff 100644 --- a/core/templates/404.php +++ b/core/templates/404.php @@ -16,7 +16,7 @@ if(!isset($_)) {//also provide standalone error page
  • t('File not found')); ?>

    t('The specified document has not been found on the server.')); ?>

    -

    t('You can click here to return to %s.', array($theme->getName()))); ?>

    +

    t('You can click here to return to %s.', array($theme->getName()))); ?>

  • diff --git a/core/templates/internalmail.php b/core/templates/internalmail.php index 0e73a60185..c2d84184d3 100644 --- a/core/templates/internalmail.php +++ b/core/templates/internalmail.php @@ -4,7 +4,7 @@
    diff --git a/core/templates/mail.php b/core/templates/mail.php index 0e73a60185..c2d84184d3 100644 --- a/core/templates/mail.php +++ b/core/templates/mail.php @@ -4,7 +4,7 @@ diff --git a/core/templates/untrustedDomain.php b/core/templates/untrustedDomain.php index 361495636c..46bad21682 100644 --- a/core/templates/untrustedDomain.php +++ b/core/templates/untrustedDomain.php @@ -10,7 +10,7 @@ t('Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain.')); ?>

    - + t('Add "%s" as trusted domain', array($_['domain']))); ?>

    diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore index 09b6a47c72..3560e8c866 100644 --- a/core/vendor/.gitignore +++ b/core/vendor/.gitignore @@ -133,3 +133,5 @@ es6-promise/** !es6-promise/LICENSE !es6-promise/dist/es6-promise.js +# base64 +base64/*min.js diff --git a/core/vendor/base64/.bower.json b/core/vendor/base64/.bower.json new file mode 100644 index 0000000000..43a7299706 --- /dev/null +++ b/core/vendor/base64/.bower.json @@ -0,0 +1,29 @@ +{ + "name": "base64", + "version": "0.3.0", + "description": "Base64 encoding and decoding", + "main": "./base64.js", + "license": "WTFPL", + "repository": { + "type": "git", + "url": "git://github.com/davidchambers/Base64.js.git" + }, + "ignore": [ + "**/.*", + "Makefile", + "coverage/", + "scripts/", + "test/" + ], + "homepage": "https://github.com/davidchambers/Base64.js", + "_release": "0.3.0", + "_resolution": { + "type": "version", + "tag": "0.3.0", + "commit": "772df096a5ffe983f40202684ad45eed1e0e2d59" + }, + "_source": "git://github.com/davidchambers/Base64.js.git", + "_target": "~0.3.0", + "_originalSource": "base64", + "_direct": true +} \ No newline at end of file diff --git a/core/vendor/base64/LICENSE b/core/vendor/base64/LICENSE new file mode 100644 index 0000000000..483276716d --- /dev/null +++ b/core/vendor/base64/LICENSE @@ -0,0 +1,14 @@ + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (c) 2011..2012 David Chambers + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/core/vendor/base64/base64.js b/core/vendor/base64/base64.js new file mode 100644 index 0000000000..b82dded62c --- /dev/null +++ b/core/vendor/base64/base64.js @@ -0,0 +1,61 @@ +;(function () { + + var object = typeof exports != 'undefined' ? exports : this; // #8: web workers + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + function InvalidCharacterError(message) { + this.message = message; + } + InvalidCharacterError.prototype = new Error; + InvalidCharacterError.prototype.name = 'InvalidCharacterError'; + + // encoder + // [https://gist.github.com/999166] by [https://github.com/nignag] + object.btoa || ( + object.btoa = function (input) { + var str = String(input); + for ( + // initialize result and counter + var block, charCode, idx = 0, map = chars, output = ''; + // if the next str index does not exist: + // change the mapping table to "=" + // check if d has no fractional digits + str.charAt(idx | 0) || (map = '=', idx % 1); + // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8 + output += map.charAt(63 & block >> 8 - idx % 1 * 8) + ) { + charCode = str.charCodeAt(idx += 3/4); + if (charCode > 0xFF) { + throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."); + } + block = block << 8 | charCode; + } + return output; + }); + + // decoder + // [https://gist.github.com/1020396] by [https://github.com/atk] + object.atob || ( + object.atob = function (input) { + var str = String(input).replace(/=+$/, ''); + if (str.length % 4 == 1) { + throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded."); + } + for ( + // initialize result and counters + var bc = 0, bs, buffer, idx = 0, output = ''; + // get next character + buffer = str.charAt(idx++); + // character found in table? initialize bit storage and add its ascii value; + ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, + // and if not first of each 4 characters, + // convert the first 8 bits to one ascii character + bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 + ) { + // try to find character in table (0-63, not found => -1) + buffer = chars.indexOf(buffer); + } + return output; + }); + +}()); diff --git a/issue_template.md b/issue_template.md index 3859ea1c41..0295eb9c33 100644 --- a/issue_template.md +++ b/issue_template.md @@ -34,7 +34,7 @@ from within your ownCloud installation folder ``` If you have access to your command line run e.g.: -sudo -u www-data php occ config:list system --public +sudo -u www-data php occ config:list system from within your ownCloud installation folder or @@ -52,16 +52,14 @@ Insert your config.php content here #### LDAP configuration (delete this part if not used) ``` -On ownCloud 7+ with access to your command line run e.g.: +With access to your command line run e.g.: sudo -u www-data php occ ldap:show-config from within your ownCloud installation folder -On ownCloud 6 with access to your command line run e.g.: -sqlite3 data/owncloud.db or mysql -u root -p owncloud -then execute: select * from oc_appconfig where appid='user_ldap'; - Without access to your command line download the data/owncloud.db to your local -computer or access your SQL server remotely and run the select query above. +computer or access your SQL server remotely and run the select query: +SELECT * FROM `oc_appconfig` WHERE `appid` = 'user_ldap'; + Eventually replace sensitive data as the name/IP-address of your LDAP server or groups. ``` diff --git a/lib/base.php b/lib/base.php index 038c259ecf..34cbfe3066 100644 --- a/lib/base.php +++ b/lib/base.php @@ -112,6 +112,11 @@ class OC { */ public static $server = null; + /** + * @var \OC\Config + */ + private static $config = null; + /** * @throws \RuntimeException when the 3rdparty directory is missing or * the app path list is empty or contains an invalid path @@ -124,7 +129,7 @@ class OC { } else { self::$configDir = OC::$SERVERROOT . '/config/'; } - OC_Config::$object = new \OC\Config(self::$configDir); + self::$config = new \OC\Config(self::$configDir); OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT))); /** @@ -137,7 +142,7 @@ class OC { 'SCRIPT_FILENAME' => $_SERVER['SCRIPT_FILENAME'], ], ]; - $fakeRequest = new \OC\AppFramework\Http\Request($params, null, new \OC\AllConfig(new \OC\SystemConfig())); + $fakeRequest = new \OC\AppFramework\Http\Request($params, null, new \OC\AllConfig(new \OC\SystemConfig(self::$config))); $scriptName = $fakeRequest->getScriptName(); if (substr($scriptName, -1) == '/') { $scriptName .= 'index.php'; @@ -152,7 +157,7 @@ class OC { if (OC::$CLI) { - OC::$WEBROOT = OC_Config::getValue('overwritewebroot', ''); + OC::$WEBROOT = self::$config->getValue('overwritewebroot', ''); } else { if (substr($scriptName, 0 - strlen(OC::$SUBURI)) === OC::$SUBURI) { OC::$WEBROOT = substr($scriptName, 0, 0 - strlen(OC::$SUBURI)); @@ -165,7 +170,7 @@ class OC { // This most likely means that we are calling from CLI. // However some cron jobs still need to generate // a web URL, so we use overwritewebroot as a fallback. - OC::$WEBROOT = OC_Config::getValue('overwritewebroot', ''); + OC::$WEBROOT = self::$config->getValue('overwritewebroot', ''); } // Resolve /owncloud to /owncloud/ to ensure to always have a trailing @@ -178,8 +183,8 @@ class OC { } // search the 3rdparty folder - OC::$THIRDPARTYROOT = OC_Config::getValue('3rdpartyroot', null); - OC::$THIRDPARTYWEBROOT = OC_Config::getValue('3rdpartyurl', null); + OC::$THIRDPARTYROOT = self::$config->getValue('3rdpartyroot', null); + OC::$THIRDPARTYWEBROOT = self::$config->getValue('3rdpartyurl', null); if (empty(OC::$THIRDPARTYROOT) && empty(OC::$THIRDPARTYWEBROOT)) { if (file_exists(OC::$SERVERROOT . '/3rdparty')) { @@ -197,7 +202,7 @@ class OC { } // search the apps folder - $config_paths = OC_Config::getValue('apps_paths', array()); + $config_paths = self::$config->getValue('apps_paths', array()); if (!empty($config_paths)) { foreach ($config_paths as $paths) { if (isset($paths['url']) && isset($paths['path'])) { @@ -372,7 +377,7 @@ class OC { // check whether this is a core update or apps update $installedVersion = $systemConfig->getValue('version', '0.0.0'); - $currentVersion = implode('.', OC_Util::getVersion()); + $currentVersion = implode('.', \OCP\Util::getVersion()); $appManager = \OC::$server->getAppManager(); @@ -387,7 +392,7 @@ class OC { } // get third party apps - $ocVersion = OC_Util::getVersion(); + $ocVersion = \OCP\Util::getVersion(); $tmpl->assign('appsToUpgrade', $appManager->getAppsNeedingUpgrade($ocVersion)); $tmpl->assign('incompatibleAppsList', $appManager->getIncompatibleApps($ocVersion)); $tmpl->assign('productName', 'ownCloud'); // for now @@ -517,7 +522,7 @@ class OC { } // setup the basic server - self::$server = new \OC\Server(\OC::$WEBROOT); + self::$server = new \OC\Server(\OC::$WEBROOT, self::$config); \OC::$server->getEventLogger()->log('autoloader', 'Autoloader', $loaderStart, $loaderEnd); \OC::$server->getEventLogger()->start('boot', 'Initialize'); @@ -875,7 +880,7 @@ class OC { // Handle redirect URL for logged in users if (isset($_REQUEST['redirect_url']) && OC_User::isLoggedIn()) { - $location = OC_Helper::makeURLAbsolute(urldecode($_REQUEST['redirect_url'])); + $location = \OC::$server->getURLGenerator()->getAbsoluteURL(urldecode($_REQUEST['redirect_url'])); // Deny the redirect if the URL contains a @ // This prevents unvalidated redirects like ?redirect_url=:user@domain.com @@ -1055,7 +1060,7 @@ class OC { return false; } - if(!OC_Util::isCallRegistered()) { + if(!(\OC::$server->getRequest()->passesCSRFCheck())) { return false; } OC_App::loadApps(); diff --git a/lib/l10n/es.js b/lib/l10n/es.js index 8f554001cf..b37631114a 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -147,6 +147,8 @@ OC.L10N.register( "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.", "Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\".", + "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s", + "Storage incomplete configuration. %s" : "Configuración de almacenamiento incompleta. %s", "Storage not available" : "Almacenamiento no disponible" }, "nplurals=2; plural=(n != 1);"); diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 94ff1d3db2..9be893bbb6 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -145,6 +145,8 @@ "Data directory (%s) is invalid" : "El directorio de datos (%s) no es válido", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifique que el directorio de datos contiene un archivo \".ocdata\" en su directorio raíz.", "Could not obtain lock type %d on \"%s\"." : "No se pudo realizar el bloqueo %d en \"%s\".", + "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s", + "Storage incomplete configuration. %s" : "Configuración de almacenamiento incompleta. %s", "Storage not available" : "Almacenamiento no disponible" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js index eaf98861f2..ab56f6f920 100644 --- a/lib/l10n/et_EE.js +++ b/lib/l10n/et_EE.js @@ -33,6 +33,7 @@ OC.L10N.register( "web services under your control" : "veebitenused sinu kontrolli all", "Empty filename is not allowed" : "Tühi failinimi pole lubatud", "Dot files are not allowed" : "Punktiga failid pole lubatud", + "File name is a reserved word" : "Failinimi sisaldab keelatud sõna", "File name contains at least one invalid character" : "Faili nimesonvähemalt üks keelatud märk", "File name is too long" : "Faili nimi on liiga pikk", "Can't read file" : "Faili lugemine ebaõnnestus", diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json index 7d28a75c59..c67c057862 100644 --- a/lib/l10n/et_EE.json +++ b/lib/l10n/et_EE.json @@ -31,6 +31,7 @@ "web services under your control" : "veebitenused sinu kontrolli all", "Empty filename is not allowed" : "Tühi failinimi pole lubatud", "Dot files are not allowed" : "Punktiga failid pole lubatud", + "File name is a reserved word" : "Failinimi sisaldab keelatud sõna", "File name contains at least one invalid character" : "Faili nimesonvähemalt üks keelatud märk", "File name is too long" : "Faili nimi on liiga pikk", "Can't read file" : "Faili lugemine ebaõnnestus", diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js index d4035633f0..16eacd0366 100644 --- a/lib/l10n/fi_FI.js +++ b/lib/l10n/fi_FI.js @@ -87,6 +87,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s ei ole ryhmän %s jäsen", "You need to provide a password to create a public link, only protected links are allowed" : "Anna salasana luodaksesi julkisen linkin. Vain suojatut linkit ovat sallittuja", "Sharing %s failed, because sharing with links is not allowed" : "Kohteen %s jakaminen epäonnistui, koska jakaminen linkkejä käyttäen ei ole sallittu", + "Not allowed to create a federated share with the same user" : "Saman käyttäjän kanssa ei ole sallittua luoda federoitua jakoa", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Kohteen %s jakaminen epäonnistui, kohdetta %s ei löytynyt. Kenties palvelin ei ole juuri nyt tavoitettavissa.", "Setting permissions for %s failed, because the item was not found" : "Kohteen %s oikeuksien asettaminen epäonnistui, koska kohdetta ei löytynyt", "Cannot set expiration date. Expiration date is in the past" : "Vanhentumispäivää ei voi asettaa. Vanhentumispäivä on jo mennyt", diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json index b961e6b862..738ef893d7 100644 --- a/lib/l10n/fi_FI.json +++ b/lib/l10n/fi_FI.json @@ -85,6 +85,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s ei ole ryhmän %s jäsen", "You need to provide a password to create a public link, only protected links are allowed" : "Anna salasana luodaksesi julkisen linkin. Vain suojatut linkit ovat sallittuja", "Sharing %s failed, because sharing with links is not allowed" : "Kohteen %s jakaminen epäonnistui, koska jakaminen linkkejä käyttäen ei ole sallittu", + "Not allowed to create a federated share with the same user" : "Saman käyttäjän kanssa ei ole sallittua luoda federoitua jakoa", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Kohteen %s jakaminen epäonnistui, kohdetta %s ei löytynyt. Kenties palvelin ei ole juuri nyt tavoitettavissa.", "Setting permissions for %s failed, because the item was not found" : "Kohteen %s oikeuksien asettaminen epäonnistui, koska kohdetta ei löytynyt", "Cannot set expiration date. Expiration date is in the past" : "Vanhentumispäivää ei voi asettaa. Vanhentumispäivä on jo mennyt", diff --git a/lib/l10n/it.js b/lib/l10n/it.js index ed9f01c8a3..5c611b750f 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -96,6 +96,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti", "Sharing %s failed, because sharing with links is not allowed" : "Condivisione di %s non riuscita, poiché i collegamenti non sono consentiti", + "Not allowed to create a federated share with the same user" : "Non è consentito creare una condivisione federata con lo stesso utente", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La condivisione di %s non è riuscita, impossibile trovare %s, è probabile che il server non sia al momento raggiungibile.", "Share type %s is not valid for %s" : "Il tipo di condivisione %s non è valido per %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Impostazione permessi per %s non riuscita, poiché i permessi superano i permessi accordati a %s", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 4a6735185d..93d4c6a5c7 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -94,6 +94,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti", "Sharing %s failed, because sharing with links is not allowed" : "Condivisione di %s non riuscita, poiché i collegamenti non sono consentiti", + "Not allowed to create a federated share with the same user" : "Non è consentito creare una condivisione federata con lo stesso utente", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "La condivisione di %s non è riuscita, impossibile trovare %s, è probabile che il server non sia al momento raggiungibile.", "Share type %s is not valid for %s" : "Il tipo di condivisione %s non è valido per %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Impostazione permessi per %s non riuscita, poiché i permessi superano i permessi accordati a %s", diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js index 21375b5392..a0619055f3 100644 --- a/lib/l10n/ja.js +++ b/lib/l10n/ja.js @@ -96,6 +96,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "%s を共有できませんでした。%s は、グループ %s のメンバーではありません。", "You need to provide a password to create a public link, only protected links are allowed" : "公開用リンクの作成にはパスワードの設定が必要です", "Sharing %s failed, because sharing with links is not allowed" : "%s を共有できませんでした。リンクでの共有は許可されていません。", + "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s を共有できませんでした。%s が見つかりませんでした。現在サーバーに接続できないようです。", "Share type %s is not valid for %s" : "%s の共有方法は、%s には適用できません。", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%s を共有できませんでした。%s に許可されている権限を越えています。", @@ -147,6 +148,10 @@ OC.L10N.register( "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です", "Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。", "Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。", - "Storage not available" : "ストレージが利用できません" + "Storage unauthorized. %s" : "権限のないストレージです。 %s", + "Storage incomplete configuration. %s" : "設定が未完了のストレージです。 %s", + "Storage connection error. %s" : "ストレージへの接続エラー。 %s", + "Storage not available" : "ストレージが利用できません", + "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json index 204eb63787..681b479ff2 100644 --- a/lib/l10n/ja.json +++ b/lib/l10n/ja.json @@ -94,6 +94,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "%s を共有できませんでした。%s は、グループ %s のメンバーではありません。", "You need to provide a password to create a public link, only protected links are allowed" : "公開用リンクの作成にはパスワードの設定が必要です", "Sharing %s failed, because sharing with links is not allowed" : "%s を共有できませんでした。リンクでの共有は許可されていません。", + "Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s を共有できませんでした。%s が見つかりませんでした。現在サーバーに接続できないようです。", "Share type %s is not valid for %s" : "%s の共有方法は、%s には適用できません。", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "%s を共有できませんでした。%s に許可されている権限を越えています。", @@ -145,6 +146,10 @@ "Data directory (%s) is invalid" : "データディレクトリ (%s) は無効です", "Please check that the data directory contains a file \".ocdata\" in its root." : "データディレクトリに \".ocdata\" ファイルが含まれていることを確認してください。", "Could not obtain lock type %d on \"%s\"." : "\"%s\" で %d タイプのロックを取得できませんでした。", - "Storage not available" : "ストレージが利用できません" + "Storage unauthorized. %s" : "権限のないストレージです。 %s", + "Storage incomplete configuration. %s" : "設定が未完了のストレージです。 %s", + "Storage connection error. %s" : "ストレージへの接続エラー。 %s", + "Storage not available" : "ストレージが利用できません", + "Storage connection timeout. %s" : "ストレージへの接続がタイムアウト。 %s" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index f4201778f7..bb3bd55184 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -96,6 +96,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s", "You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan", "Sharing %s failed, because sharing with links is not allowed" : "Delen van %s is mislukt, omdat het delen met links niet is toegestaan", + "Not allowed to create a federated share with the same user" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.", "Share type %s is not valid for %s" : "Delen van type %s is niet geldig voor %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Instellen van de permissies voor %s is mislukt, omdat de permissies hoger zijn dan de aan %s toegekende permissies", diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index c8981f8fd4..8388c0a502 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -94,6 +94,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s", "You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan", "Sharing %s failed, because sharing with links is not allowed" : "Delen van %s is mislukt, omdat het delen met links niet is toegestaan", + "Not allowed to create a federated share with the same user" : "Het is niet toegestaan om een gefedereerde share met dezelfde gebruikersserver te maken", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.", "Share type %s is not valid for %s" : "Delen van type %s is niet geldig voor %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Instellen van de permissies voor %s is mislukt, omdat de permissies hoger zijn dan de aan %s toegekende permissies", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index 2595d5dfd3..f4e52410ba 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -96,6 +96,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos", "Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido", + "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.", "Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index 0da54181b3..80fad95147 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -94,6 +94,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos", "Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido", + "Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.", "Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s", diff --git a/lib/l10n/sq.js b/lib/l10n/sq.js index 386cd1adef..3318d18ad3 100644 --- a/lib/l10n/sq.js +++ b/lib/l10n/sq.js @@ -96,6 +96,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Ndarja e %s me të tjerët dështoi, ngaqë %s s’është anëtar i grupit %s", "You need to provide a password to create a public link, only protected links are allowed" : "Lypset të jepni një fjalëkalim që të krijoni një lidhje publike, lejohen vetëm lidhje të mbrojtura", "Sharing %s failed, because sharing with links is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohet ndarja me lidhje", + "Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.", "Share type %s is not valid for %s" : "Lloji i ndarjes %s s’është i vlefshëm për %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Caktimi i lejeve për %s dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s", diff --git a/lib/l10n/sq.json b/lib/l10n/sq.json index 3cf2531493..d902d07ee1 100644 --- a/lib/l10n/sq.json +++ b/lib/l10n/sq.json @@ -94,6 +94,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Ndarja e %s me të tjerët dështoi, ngaqë %s s’është anëtar i grupit %s", "You need to provide a password to create a public link, only protected links are allowed" : "Lypset të jepni një fjalëkalim që të krijoni një lidhje publike, lejohen vetëm lidhje të mbrojtura", "Sharing %s failed, because sharing with links is not allowed" : "Ndarja e %s me të tjerët dështoi, ngaqë nuk lejohet ndarja me lidhje", + "Not allowed to create a federated share with the same user" : "S’i lejohet të krijojë një ndarje të federuar me të njëjtin përdorues", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Ndarja për %s dështoi, s’u gjet dot %s, ndoshta shërbyesi është hëpërhë jashtë pune.", "Share type %s is not valid for %s" : "Lloji i ndarjes %s s’është i vlefshëm për %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Caktimi i lejeve për %s dështoi, ngaqë lejet tejkalojnë lejet e akorduara për %s", diff --git a/lib/l10n/th_TH.js b/lib/l10n/th_TH.js index 4da409b7d8..da84e9758c 100644 --- a/lib/l10n/th_TH.js +++ b/lib/l10n/th_TH.js @@ -147,6 +147,8 @@ OC.L10N.register( "Data directory (%s) is invalid" : "ไดเรกทอรีข้อมูล (%s) ไม่ถูกต้อง", "Please check that the data directory contains a file \".ocdata\" in its root." : "กรุณาตรวจสอบว่าไดเรกทอรีข้อมูลมีแฟ้ม \".ocdata\" อยู่ในราก", "Could not obtain lock type %d on \"%s\"." : "ไม่สามารถรับล็อคชนิด %d บน \"%s\"", + "Storage unauthorized. %s" : "การจัดเก็บข้อมูลไม่ได้รับอนุญาต %s", + "Storage incomplete configuration. %s" : "การตั้งค่าการจัดเก็บข้อมูลไม่สำเร็จ %s", "Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/th_TH.json b/lib/l10n/th_TH.json index a21802be63..8a951a1468 100644 --- a/lib/l10n/th_TH.json +++ b/lib/l10n/th_TH.json @@ -145,6 +145,8 @@ "Data directory (%s) is invalid" : "ไดเรกทอรีข้อมูล (%s) ไม่ถูกต้อง", "Please check that the data directory contains a file \".ocdata\" in its root." : "กรุณาตรวจสอบว่าไดเรกทอรีข้อมูลมีแฟ้ม \".ocdata\" อยู่ในราก", "Could not obtain lock type %d on \"%s\"." : "ไม่สามารถรับล็อคชนิด %d บน \"%s\"", + "Storage unauthorized. %s" : "การจัดเก็บข้อมูลไม่ได้รับอนุญาต %s", + "Storage incomplete configuration. %s" : "การตั้งค่าการจัดเก็บข้อมูลไม่สำเร็จ %s", "Storage not available" : "ไม่สามารถใช้พื้นที่จัดเก็บข้อมูลได้" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/lib/private/app.php b/lib/private/app.php index abf12264c5..5f6ca9596c 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -96,7 +96,7 @@ class OC_App { * if $types is set, only apps of those types will be loaded */ public static function loadApps($types = null) { - if (OC_Config::getValue('maintenance', false)) { + if (\OC::$server->getSystemConfig()->getValue('maintenance', false)) { return false; } // Load the enabled apps here @@ -239,7 +239,7 @@ class OC_App { * @return string[] */ public static function getEnabledApps($forceRefresh = false, $all = false) { - if (!OC_Config::getValue('installed', false)) { + if (!\OC::$server->getSystemConfig()->getValue('installed', false)) { return array(); } // in incognito mode or when logged out, $user will be false, @@ -318,8 +318,8 @@ class OC_App { \OC::$server->getConfig(), \OC::$server->getLogger() ); - $appData = $ocsClient->getApplication($app, \OC_Util::getVersion()); - $download= $ocsClient->getApplicationDownload($app, \OC_Util::getVersion()); + $appData = $ocsClient->getApplication($app, \OCP\Util::getVersion()); + $download= $ocsClient->getApplicationDownload($app, \OCP\Util::getVersion()); if(isset($download['downloadlink']) and $download['downloadlink']!='') { // Replace spaces in download link without encoding entire URL $download['downloadlink'] = str_replace(' ', '%20', $download['downloadlink']); @@ -374,13 +374,13 @@ class OC_App { $settings = array(); // by default, settings only contain the help menu if (OC_Util::getEditionString() === '' && - OC_Config::getValue('knowledgebaseenabled', true) == true + \OC::$server->getSystemConfig()->getValue('knowledgebaseenabled', true) == true ) { $settings = array( array( "id" => "help", "order" => 1000, - "href" => OC_Helper::linkToRoute("settings_help"), + "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_help'), "name" => $l->t("Help"), "icon" => OC_Helper::imagePath("settings", "help.svg") ) @@ -393,7 +393,7 @@ class OC_App { $settings[] = array( "id" => "personal", "order" => 1, - "href" => OC_Helper::linkToRoute("settings_personal"), + "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_personal'), "name" => $l->t("Personal"), "icon" => OC_Helper::imagePath("settings", "personal.svg") ); @@ -409,7 +409,7 @@ class OC_App { $settings[] = array( "id" => "core_users", "order" => 2, - "href" => OC_Helper::linkToRoute("settings_users"), + "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_users'), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath("settings", "users.svg") ); @@ -421,7 +421,7 @@ class OC_App { $settings[] = array( "id" => "admin", "order" => 1000, - "href" => OC_Helper::linkToRoute("settings_admin"), + "href" => \OC::$server->getURLGenerator()->linkToRoute('settings_admin'), "name" => $l->t("Admin"), "icon" => OC_Helper::imagePath("settings", "admin.svg") ); @@ -455,7 +455,7 @@ class OC_App { * @return string|false */ public static function getInstallPath() { - if (OC_Config::getValue('appstoreenabled', true) == false) { + if (\OC::$server->getSystemConfig()->getValue('appstoreenabled', true) == false) { return false; } @@ -880,7 +880,7 @@ class OC_App { if (is_null($category)) { - $categoryNames = $ocsClient->getCategories(\OC_Util::getVersion()); + $categoryNames = $ocsClient->getCategories(\OCP\Util::getVersion()); if (is_array($categoryNames)) { // Check that categories of apps were retrieved correctly if (!$categories = array_keys($categoryNames)) { @@ -892,7 +892,7 @@ class OC_App { } $page = 0; - $remoteApps = $ocsClient->getApplications($categories, $page, $filter, \OC_Util::getVersion()); + $remoteApps = $ocsClient->getApplications($categories, $page, $filter, \OCP\Util::getVersion()); $apps = []; $i = 0; $l = \OC::$server->getL10N('core'); @@ -1050,7 +1050,7 @@ class OC_App { $config, \OC::$server->getLogger() ); - $appData = $ocsClient->getApplication($app, \OC_Util::getVersion()); + $appData = $ocsClient->getApplication($app, \OCP\Util::getVersion()); // check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string if (!is_numeric($app)) { @@ -1080,7 +1080,7 @@ class OC_App { if ($app !== false) { // check if the app is compatible with this version of ownCloud $info = self::getAppInfo($app); - $version = OC_Util::getVersion(); + $version = \OCP\Util::getVersion(); if (!self::isAppCompatible($version, $info)) { throw new \Exception( $l->t('App "%s" cannot be installed because it is not compatible with this version of ownCloud.', diff --git a/lib/private/app/appmanager.php b/lib/private/app/appmanager.php index f826c8ba0c..8ae93f9883 100644 --- a/lib/private/app/appmanager.php +++ b/lib/private/app/appmanager.php @@ -148,6 +148,13 @@ class AppManager implements IAppManager { return false; } else { $groupIds = json_decode($enabled); + + if (!is_array($groupIds)) { + $jsonError = json_last_error(); + \OC::$server->getLogger()->warning('AppManger::checkAppForUser - can\'t decode group IDs: ' . print_r($enabled, true) . ' - json error code: ' . $jsonError, ['app' => 'lib']); + return false; + } + $userGroups = $this->groupManager->getUserGroupIds($user); foreach ($userGroups as $groupId) { if (array_search($groupId, $groupIds) !== false) { diff --git a/lib/private/app/infoparser.php b/lib/private/app/infoparser.php index 22f705884b..a84163612e 100644 --- a/lib/private/app/infoparser.php +++ b/lib/private/app/infoparser.php @@ -59,6 +59,7 @@ class InfoParser { $xml = simplexml_load_file($file); libxml_disable_entity_loader($loadEntities); if ($xml == false) { + libxml_clear_errors(); return null; } $array = $this->xmlToArray($xml); diff --git a/lib/private/app/platform.php b/lib/private/app/platform.php index f433ecd9f9..c16f050e13 100644 --- a/lib/private/app/platform.php +++ b/lib/private/app/platform.php @@ -52,7 +52,7 @@ class Platform { * @return string */ public function getOcVersion() { - $v = OC_Util::getVersion(); + $v = \OCP\Util::getVersion(); return join('.', $v); } diff --git a/lib/private/appframework/app.php b/lib/private/appframework/app.php index 0188d221be..5cad32bbd0 100644 --- a/lib/private/appframework/app.php +++ b/lib/private/appframework/app.php @@ -26,6 +26,7 @@ namespace OC\AppFramework; +use OC\AppFramework\Http\Dispatcher; use OC_App; use OC\AppFramework\DependencyInjection\DIContainer; use OCP\AppFramework\QueryException; @@ -97,6 +98,7 @@ class App { } // initialize the dispatcher and run all the middleware before the controller + /** @var Dispatcher $dispatcher */ $dispatcher = $container['Dispatcher']; list( diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php index ce6523cc8a..88ffc1c6f9 100644 --- a/lib/private/appframework/dependencyinjection/dicontainer.php +++ b/lib/private/appframework/dependencyinjection/dicontainer.php @@ -62,6 +62,10 @@ class DIContainer extends SimpleContainer implements IAppContainer { $this['AppName'] = $appName; $this['urlParams'] = $urlParams; + /** @var \OC\ServerContainer $server */ + $server = $this->getServer(); + $server->registerAppContainer($appName, $this); + // aliases $this->registerAlias('appName', 'AppName'); $this->registerAlias('webRoot', 'WebRoot'); diff --git a/lib/private/appframework/http/request.php b/lib/private/appframework/http/request.php index 2bbb70db0f..6ba1d8f644 100644 --- a/lib/private/appframework/http/request.php +++ b/lib/private/appframework/http/request.php @@ -447,7 +447,7 @@ class Request implements \ArrayAccess, \Countable, IRequest { $deobfuscatedToken = base64_decode($obfuscatedToken) ^ $secret; // Check if the token is valid - if(\OCP\Security\StringUtils::equals($deobfuscatedToken, $this->items['requesttoken'])) { + if(hash_equals($deobfuscatedToken, $this->items['requesttoken'])) { return true; } else { return false; diff --git a/lib/private/appframework/middleware/security/securitymiddleware.php b/lib/private/appframework/middleware/security/securitymiddleware.php index d0b7202a36..725ce689b4 100644 --- a/lib/private/appframework/middleware/security/securitymiddleware.php +++ b/lib/private/appframework/middleware/security/securitymiddleware.php @@ -27,7 +27,6 @@ namespace OC\AppFramework\Middleware\Security; -use OC\AppFramework\Http; use OC\Appframework\Middleware\Security\Exceptions\AppNotEnabledException; use OC\Appframework\Middleware\Security\Exceptions\CrossSiteRequestForgeryException; use OC\Appframework\Middleware\Security\Exceptions\NotAdminException; diff --git a/lib/private/appframework/utility/controllermethodreflector.php b/lib/private/appframework/utility/controllermethodreflector.php index 63cf5ac24f..1118332f93 100644 --- a/lib/private/appframework/utility/controllermethodreflector.php +++ b/lib/private/appframework/utility/controllermethodreflector.php @@ -60,16 +60,18 @@ class ControllerMethodReflector implements IControllerMethodReflector{ // extract type parameter information preg_match_all('/@param\h+(?P\w+)\h+\$(?P\w+)/', $docs, $matches); - // this is just a fix for PHP 5.3 (array_combine raises warning if called with - // two empty arrays - if($matches['var'] === array() && $matches['type'] === array()) { - $this->types = array(); - } else { - $this->types = array_combine($matches['var'], $matches['type']); - } + $this->types = array_combine($matches['var'], $matches['type']); - // get method parameters foreach ($reflection->getParameters() as $param) { + // extract type information from PHP 7 scalar types and prefer them + // over phpdoc annotations + if (method_exists($param, 'getType')) { + $type = $param->getType(); + if ($type !== null) { + $this->types[$param->getName()] = (string) $type; + } + } + if($param->isOptional()) { $default = $param->getDefaultValue(); } else { @@ -82,9 +84,9 @@ class ControllerMethodReflector implements IControllerMethodReflector{ /** * Inspects the PHPDoc parameters for types - * @param string $parameter the parameter whose type comments should be + * @param string $parameter the parameter whose type comments should be * parsed - * @return string|null type in the type parameters (@param int $something) + * @return string|null type in the type parameters (@param int $something) * would return int or null if not existing */ public function getType($parameter) { diff --git a/lib/private/archive/tar.php b/lib/private/archive/tar.php index 4448e56850..4066e1d86c 100644 --- a/lib/private/archive/tar.php +++ b/lib/private/archive/tar.php @@ -86,7 +86,7 @@ class OC_Archive_TAR extends OC_Archive { * @return bool */ function addFolder($path) { - $tmpBase = OC_Helper::tmpFolder(); + $tmpBase = \OC::$server->getTempManager()->getTemporaryFolder(); if (substr($path, -1, 1) != '/') { $path .= '/'; } diff --git a/lib/private/avatar.php b/lib/private/avatar.php index 37a813f3ff..c87facd25d 100644 --- a/lib/private/avatar.php +++ b/lib/private/avatar.php @@ -31,6 +31,7 @@ namespace OC; use OCP\Files\Folder; use OCP\Files\File; +use OCP\Files\NotFoundException; use OCP\IL10N; use OC_Image; @@ -62,28 +63,14 @@ class Avatar implements \OCP\IAvatar { * @return boolean|\OCP\IImage containing the avatar or false if there's no image */ public function get ($size = 64) { - if ($this->folder->nodeExists('avatar.jpg')) { - $ext = 'jpg'; - } elseif ($this->folder->nodeExists('avatar.png')) { - $ext = 'png'; - } else { + try { + $file = $this->getFile($size); + } catch (NotFoundException $e) { return false; } $avatar = new OC_Image(); - if ($this->folder->nodeExists('avatar.' . $size . '.' . $ext)) { - /** @var File $node */ - $node = $this->folder->get('avatar.' . $size . '.' . $ext); - $avatar->loadFromData($node->getContent()); - } else { - /** @var File $node */ - $node = $this->folder->get('avatar.' . $ext); - $avatar->loadFromData($node->getContent()); - if ($size > 0) { - $avatar->resize($size); - } - $this->folder->newFile('avatar.' . $size . '.' . $ext)->putContent($avatar->data()); - } + $avatar->loadFromData($file->getContent()); return $avatar; } @@ -144,4 +131,50 @@ class Avatar implements \OCP\IAvatar { $this->folder->get('avatar.png')->delete(); } catch (\OCP\Files\NotFoundException $e) {} } + + /** + * Get the File of an avatar of size $size. + * + * @param int $size + * @return File + * @throws NotFoundException + */ + public function getFile($size) { + $ext = $this->getExtention(); + + $path = 'avatar.' . $size . '.' . $ext; + + try { + $file = $this->folder->get($path); + } catch (NotFoundException $e) { + if ($size <= 0) { + throw new NotFoundException; + } + + $avatar = new OC_Image(); + /** @var File $file */ + $file = $this->folder->get('avatar.' . $ext); + $avatar->loadFromData($file->getContent()); + $avatar->resize($size); + $file = $this->folder->newFile($path); + $file->putContent($avatar->data()); + } + + return $file; + } + + /** + * Get the extention of the avatar. If there is no avatar throw Exception + * + * @return string + * @throws NotFoundException + */ + private function getExtention() { + if ($this->folder->nodeExists('avatar.jpg')) { + return 'jpg'; + } elseif ($this->folder->nodeExists('avatar.png')) { + return 'png'; + } + throw new NotFoundException; + } } diff --git a/lib/private/backgroundjob/job.php b/lib/private/backgroundjob/job.php index 88682cd09b..40a27491fe 100644 --- a/lib/private/backgroundjob/job.php +++ b/lib/private/backgroundjob/job.php @@ -54,7 +54,6 @@ abstract class Job implements IJob { if ($logger) { $logger->error('Error while running background job: ' . $e->getMessage()); } - $jobList->remove($this, $this->argument); } } diff --git a/lib/private/backgroundjob/joblist.php b/lib/private/backgroundjob/joblist.php index 03c9180ddb..446de2fa1a 100644 --- a/lib/private/backgroundjob/joblist.php +++ b/lib/private/backgroundjob/joblist.php @@ -24,134 +24,180 @@ namespace OC\BackgroundJob; +use OCP\AppFramework\QueryException; +use OCP\BackgroundJob\IJob; use OCP\BackgroundJob\IJobList; use OCP\AutoloadNotAllowedException; class JobList implements IJobList { - /** - * @var \OCP\IDBConnection - */ - private $conn; + /** @var \OCP\IDBConnection */ + protected $connection; /** * @var \OCP\IConfig $config */ - private $config; + protected $config; /** - * @param \OCP\IDBConnection $conn + * @param \OCP\IDBConnection $connection * @param \OCP\IConfig $config */ - public function __construct($conn, $config) { - $this->conn = $conn; + public function __construct($connection, $config) { + $this->connection = $connection; $this->config = $config; } /** - * @param Job|string $job + * @param IJob|string $job * @param mixed $argument */ public function add($job, $argument = null) { if (!$this->has($job, $argument)) { - if ($job instanceof Job) { + if ($job instanceof IJob) { $class = get_class($job); } else { $class = $job; } + $argument = json_encode($argument); if (strlen($argument) > 4000) { throw new \InvalidArgumentException('Background job arguments can\'t exceed 4000 characters (json encoded)'); } - $query = $this->conn->prepare('INSERT INTO `*PREFIX*jobs`(`class`, `argument`, `last_run`) VALUES(?, ?, 0)'); - $query->execute(array($class, $argument)); + + $query = $this->connection->getQueryBuilder(); + $query->insert('jobs') + ->values([ + 'class' => $query->createNamedParameter($class), + 'argument' => $query->createNamedParameter($argument), + 'last_run' => $query->createNamedParameter(0, \PDO::PARAM_INT), + ]); + $query->execute(); } } /** - * @param Job|string $job + * @param IJob|string $job * @param mixed $argument */ public function remove($job, $argument = null) { - if ($job instanceof Job) { + if ($job instanceof IJob) { $class = get_class($job); } else { $class = $job; } + + $query = $this->connection->getQueryBuilder(); + $query->delete('jobs') + ->where($query->expr()->eq('class', $query->createNamedParameter($class))); if (!is_null($argument)) { $argument = json_encode($argument); - $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `class` = ? AND `argument` = ?'); - $query->execute(array($class, $argument)); - } else { - $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `class` = ?'); - $query->execute(array($class)); + $query->andWhere($query->expr()->eq('argument', $query->createNamedParameter($argument))); } + $query->execute(); } + /** + * @param int $id + */ protected function removeById($id) { - $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `id` = ?'); - $query->execute([$id]); + $query = $this->connection->getQueryBuilder(); + $query->delete('jobs') + ->where($query->expr()->eq('id', $query->createNamedParameter($id, \PDO::PARAM_INT))); + $query->execute(); } /** * check if a job is in the list * - * @param Job|string $job + * @param IJob|string $job * @param mixed $argument * @return bool */ public function has($job, $argument) { - if ($job instanceof Job) { + if ($job instanceof IJob) { $class = get_class($job); } else { $class = $job; } $argument = json_encode($argument); - $query = $this->conn->prepare('SELECT `id` FROM `*PREFIX*jobs` WHERE `class` = ? AND `argument` = ?'); - $query->execute(array($class, $argument)); - return (bool)$query->fetch(); + + $query = $this->connection->getQueryBuilder(); + $query->select('id') + ->from('jobs') + ->where($query->expr()->eq('class', $query->createNamedParameter($class))) + ->andWhere($query->expr()->eq('argument', $query->createNamedParameter($argument))) + ->setMaxResults(1); + + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + + return (bool) $row; } /** * get all jobs in the list * - * @return Job[] + * @return IJob[] */ public function getAll() { - $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs`'); - $query->execute(); - $jobs = array(); - while ($row = $query->fetch()) { + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('jobs'); + $result = $query->execute(); + + $jobs = []; + while ($row = $result->fetch()) { $job = $this->buildJob($row); if ($job) { $jobs[] = $job; } } + $result->closeCursor(); + return $jobs; } /** * get the next job in the list * - * @return Job + * @return IJob|null */ public function getNext() { $lastId = $this->getLastJob(); - $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` > ? ORDER BY `id` ASC', 1); - $query->execute(array($lastId)); - if ($row = $query->fetch()) { + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('jobs') + ->where($query->expr()->gt('id', $query->createNamedParameter($lastId, \PDO::PARAM_INT))) + ->orderBy('id', 'ASC') + ->setMaxResults(1); + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row) { $jobId = $row['id']; $job = $this->buildJob($row); } else { //begin at the start of the queue - $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` ORDER BY `id` ASC', 1); - $query->execute(); - if ($row = $query->fetch()) { + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('jobs') + ->orderBy('id', 'ASC') + ->setMaxResults(1); + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row) { $jobId = $row['id']; $job = $this->buildJob($row); } else { return null; //empty job list } } + if (is_null($job)) { $this->removeById($jobId); return $this->getNext(); @@ -162,12 +208,18 @@ class JobList implements IJobList { /** * @param int $id - * @return Job|null + * @return IJob|null */ public function getById($id) { - $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` = ?'); - $query->execute(array($id)); - if ($row = $query->fetch()) { + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('jobs') + ->where($query->expr()->eq('id', $query->createNamedParameter($id, \PDO::PARAM_INT))); + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row) { return $this->buildJob($row); } else { return null; @@ -178,33 +230,38 @@ class JobList implements IJobList { * get the job object from a row in the db * * @param array $row - * @return Job + * @return IJob|null */ private function buildJob($row) { - $class = $row['class']; - /** - * @var Job $job - */ try { - if (!class_exists($class)) { - // job from disabled app or old version of an app, no need to do anything - return null; + try { + // Try to load the job as a service + /** @var IJob $job */ + $job = \OC::$server->query($row['class']); + } catch (QueryException $e) { + if (class_exists($row['class'])) { + $class = $row['class']; + $job = new $class(); + } else { + // job from disabled app or old version of an app, no need to do anything + return null; + } } - $job = new $class(); + $job->setId($row['id']); $job->setLastRun($row['last_run']); $job->setArgument(json_decode($row['argument'], true)); return $job; } catch (AutoloadNotAllowedException $e) { // job is from a disabled app, ignore + return null; } - return null; } /** * set the job that was last ran * - * @param Job $job + * @param IJob $job */ public function setLastJob($job) { $this->config->setAppValue('backgroundjob', 'lastjob', $job->getId()); @@ -213,19 +270,22 @@ class JobList implements IJobList { /** * get the id of the last ran job * - * @return string + * @return int */ public function getLastJob() { - return $this->config->getAppValue('backgroundjob', 'lastjob', 0); + return (int) $this->config->getAppValue('backgroundjob', 'lastjob', 0); } /** * set the lastRun of $job to now * - * @param Job $job + * @param IJob $job */ public function setLastRun($job) { - $query = $this->conn->prepare('UPDATE `*PREFIX*jobs` SET `last_run` = ? WHERE `id` = ?'); - $query->execute(array(time(), $job->getId())); + $query = $this->connection->getQueryBuilder(); + $query->update('jobs') + ->set('last_run', $query->createNamedParameter(time(), \PDO::PARAM_INT)) + ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), \PDO::PARAM_INT))); + $query->execute(); } } diff --git a/lib/private/comments/comment.php b/lib/private/comments/comment.php new file mode 100644 index 0000000000..219e7ec8e4 --- /dev/null +++ b/lib/private/comments/comment.php @@ -0,0 +1,357 @@ + '', + 'parentId' => '0', + 'topmostParentId' => '0', + 'childrenCount' => '0', + 'message' => '', + 'verb' => '', + 'actorType' => '', + 'actorId' => '', + 'objectType' => '', + 'objectId' => '', + 'creationDT' => null, + 'latestChildDT' => null, + ]; + + /** + * Comment constructor. + * + * @param [] $data optional, array with keys according to column names from + * the comments database scheme + */ + public function __construct(array $data = null) { + if(is_array($data)) { + $this->fromArray($data); + } + } + + /** + * returns the ID of the comment + * + * It may return an empty string, if the comment was not stored. + * It is expected that the concrete Comment implementation gives an ID + * by itself (e.g. after saving). + * + * @return string + * @since 9.0.0 + */ + public function getId() { + return $this->data['id']; + } + + /** + * sets the ID of the comment and returns itself + * + * It is only allowed to set the ID only, if the current id is an empty + * string (which means it is not stored in a database, storage or whatever + * the concrete implementation does), or vice versa. Changing a given ID is + * not permitted and must result in an IllegalIDChangeException. + * + * @param string $id + * @return IComment + * @throws IllegalIDChangeException + * @since 9.0.0 + */ + public function setId($id) { + if(!is_string($id)) { + throw new \InvalidArgumentException('String expected.'); + } + + $id = trim($id); + if($this->data['id'] === '' || ($this->data['id'] !== '' && $id === '')) { + $this->data['id'] = $id; + return $this; + } + + throw new IllegalIDChangeException('Not allowed to assign a new ID to an already saved comment.'); + } + + /** + * returns the parent ID of the comment + * + * @return string + * @since 9.0.0 + */ + public function getParentId() { + return $this->data['parentId']; + } + + /** + * sets the parent ID and returns itself + * + * @param string $parentId + * @return IComment + * @since 9.0.0 + */ + public function setParentId($parentId) { + if(!is_string($parentId)) { + throw new \InvalidArgumentException('String expected.'); + } + $this->data['parentId'] = trim($parentId); + return $this; + } + + /** + * returns the topmost parent ID of the comment + * + * @return string + * @since 9.0.0 + */ + public function getTopmostParentId() { + return $this->data['topmostParentId']; + } + + + /** + * sets the topmost parent ID and returns itself + * + * @param string $id + * @return IComment + * @since 9.0.0 + */ + public function setTopmostParentId($id) { + if(!is_string($id)) { + throw new \InvalidArgumentException('String expected.'); + } + $this->data['topmostParentId'] = trim($id); + return $this; + } + + /** + * returns the number of children + * + * @return int + * @since 9.0.0 + */ + public function getChildrenCount() { + return $this->data['childrenCount']; + } + + /** + * sets the number of children + * + * @param int $count + * @return IComment + * @since 9.0.0 + */ + public function setChildrenCount($count) { + if(!is_int($count)) { + throw new \InvalidArgumentException('Integer expected.'); + } + $this->data['childrenCount'] = $count; + return $this; + } + + /** + * returns the message of the comment + * + * @return string + * @since 9.0.0 + */ + public function getMessage() { + return $this->data['message']; + } + + /** + * sets the message of the comment and returns itself + * + * @param string $message + * @return IComment + * @since 9.0.0 + */ + public function setMessage($message) { + if(!is_string($message)) { + throw new \InvalidArgumentException('String expected.'); + } + $this->data['message'] = trim($message); + return $this; + } + + /** + * returns the verb of the comment + * + * @return string + * @since 9.0.0 + */ + public function getVerb() { + return $this->data['verb']; + } + + /** + * sets the verb of the comment, e.g. 'comment' or 'like' + * + * @param string $verb + * @return IComment + * @since 9.0.0 + */ + public function setVerb($verb) { + if(!is_string($verb) || !trim($verb)) { + throw new \InvalidArgumentException('Non-empty String expected.'); + } + $this->data['verb'] = trim($verb); + return $this; + } + + /** + * returns the actor type + * + * @return string + * @since 9.0.0 + */ + public function getActorType() { + return $this->data['actorType']; + } + + /** + * returns the actor ID + * + * @return string + * @since 9.0.0 + */ + public function getActorId() { + return $this->data['actorId']; + } + + /** + * sets (overwrites) the actor type and id + * + * @param string $actorType e.g. 'user' + * @param string $actorId e.g. 'zombie234' + * @return IComment + * @since 9.0.0 + */ + public function setActor($actorType, $actorId) { + if( + !is_string($actorType) || !trim($actorType) + || !is_string($actorId) || !trim($actorId) + ) { + throw new \InvalidArgumentException('String expected.'); + } + $this->data['actorType'] = trim($actorType); + $this->data['actorId'] = trim($actorId); + return $this; + } + + /** + * returns the creation date of the comment. + * + * If not explicitly set, it shall default to the time of initialization. + * + * @return \DateTime + * @since 9.0.0 + */ + public function getCreationDateTime() { + return $this->data['creationDT']; + } + + /** + * sets the creation date of the comment and returns itself + * + * @param \DateTime $timestamp + * @return IComment + * @since 9.0.0 + */ + public function setCreationDateTime(\DateTime $timestamp) { + $this->data['creationDT'] = $timestamp; + return $this; + } + + /** + * returns the timestamp of the most recent child + * + * @return int + * @since 9.0.0 + */ + public function getLatestChildDateTime() { + return $this->data['latestChildDT']; + } + + /** + * sets the date of the most recent child + * + * @param \DateTime $dateTime + * @return IComment + * @since 9.0.0 + */ + public function setLatestChildDateTime(\DateTime $dateTime = null) { + $this->data['latestChildDT'] = $dateTime; + return $this; + } + + /** + * returns the object type the comment is attached to + * + * @return string + * @since 9.0.0 + */ + public function getObjectType() { + return $this->data['objectType']; + } + + /** + * returns the object id the comment is attached to + * + * @return string + * @since 9.0.0 + */ + public function getObjectId() { + return $this->data['objectId']; + } + + /** + * sets (overwrites) the object of the comment + * + * @param string $objectType e.g. 'file' + * @param string $objectId e.g. '16435' + * @return IComment + * @since 9.0.0 + */ + public function setObject($objectType, $objectId) { + if( + !is_string($objectType) || !trim($objectType) + || !is_string($objectId) || !trim($objectId) + ) { + throw new \InvalidArgumentException('String expected.'); + } + $this->data['objectType'] = trim($objectType); + $this->data['objectId'] = trim($objectId); + return $this; + } + + /** + * sets the comment data based on an array with keys as taken from the + * database. + * + * @param [] $data + * @return IComment + */ + protected function fromArray($data) { + foreach(array_keys($data) as $key) { + // translate DB keys to internal setter names + $setter = 'set' . str_replace('_', '', ucwords($key,'_')); + $setter = str_replace('Timestamp', 'DateTime', $setter); + + if(method_exists($this, $setter)) { + $this->$setter($data[$key]); + } + } + + foreach(['actor', 'object'] as $role) { + if(isset($data[$role . '_type']) && isset($data[$role . '_id'])) { + $setter = 'set' . ucfirst($role); + $this->$setter($data[$role . '_type'], $data[$role . '_id']); + } + } + + return $this; + } +} diff --git a/lib/private/comments/manager.php b/lib/private/comments/manager.php new file mode 100644 index 0000000000..09e59f2837 --- /dev/null +++ b/lib/private/comments/manager.php @@ -0,0 +1,549 @@ +dbConn = $dbConn; + $this->logger = $logger; + } + + /** + * converts data base data into PHP native, proper types as defined by + * IComment interface. + * + * @param array $data + * @return array + */ + protected function normalizeDatabaseData(array $data) { + $data['id'] = strval($data['id']); + $data['parent_id'] = strval($data['parent_id']); + $data['topmost_parent_id'] = strval($data['topmost_parent_id']); + $data['creation_timestamp'] = new \DateTime($data['creation_timestamp']); + $data['latest_child_timestamp'] = new \DateTime($data['latest_child_timestamp']); + $data['children_count'] = intval($data['children_count']); + return $data; + } + + /** + * prepares a comment for an insert or update operation after making sure + * all necessary fields have a value assigned. + * + * @param IComment $comment + * @return IComment returns the same updated IComment instance as provided + * by parameter for convenience + * @throws \UnexpectedValueException + */ + protected function prepareCommentForDatabaseWrite(IComment $comment) { + if( !$comment->getActorType() + || !$comment->getActorId() + || !$comment->getObjectType() + || !$comment->getObjectId() + || !$comment->getVerb() + ) { + throw new \UnexpectedValueException('Actor, Object and Verb information must be provided for saving'); + } + + if($comment->getId() === '') { + $comment->setChildrenCount(0); + $comment->setLatestChildDateTime(new \DateTime('0000-00-00 00:00:00', new \DateTimeZone('UTC'))); + $comment->setLatestChildDateTime(null); + } + + if(is_null($comment->getCreationDateTime())) { + $comment->setCreationDateTime(new \DateTime()); + } + + if($comment->getParentId() !== '0') { + $comment->setTopmostParentId($this->determineTopmostParentId($comment->getParentId())); + } else { + $comment->setTopmostParentId('0'); + } + + $this->cache($comment); + + return $comment; + } + + /** + * returns the topmost parent id of a given comment identified by ID + * + * @param string $id + * @return string + * @throws NotFoundException + */ + protected function determineTopmostParentId($id) { + $comment = $this->get($id); + if($comment->getParentId() === '0') { + return $comment->getId(); + } else { + return $this->determineTopmostParentId($comment->getId()); + } + } + + /** + * updates child information of a comment + * + * @param string $id + * @param \DateTime $cDateTime the date time of the most recent child + * @throws NotFoundException + */ + protected function updateChildrenInformation($id, \DateTime $cDateTime) { + $qb = $this->dbConn->getQueryBuilder(); + $query = $qb->select($qb->createFunction('COUNT(`id`)')) + ->from('comments') + ->where($qb->expr()->eq('parent_id', $qb->createParameter('id'))) + ->setParameter('id', $id); + + $resultStatement = $query->execute(); + $data = $resultStatement->fetch(\PDO::FETCH_NUM); + $resultStatement->closeCursor(); + $children = intval($data[0]); + + $comment = $this->get($id); + $comment->setChildrenCount($children); + $comment->setLatestChildDateTime($cDateTime); + $this->save($comment); + } + + /** + * Tests whether actor or object type and id parameters are acceptable. + * Throws exception if not. + * + * @param string $role + * @param string $type + * @param string $id + * @throws \InvalidArgumentException + */ + protected function checkRoleParameters($role, $type, $id) { + if( + !is_string($type) || empty($type) + || !is_string($id) || empty($id) + ) { + throw new \InvalidArgumentException($role . ' parameters must be string and not empty'); + } + } + + /** + * run-time caches a comment + * + * @param IComment $comment + */ + protected function cache(IComment $comment) { + $id = $comment->getId(); + if(empty($id)) { + return; + } + $this->commentsCache[strval($id)] = $comment; + } + + /** + * removes an entry from the comments run time cache + * + * @param mixed $id the comment's id + */ + protected function uncache($id) { + $id = strval($id); + if (isset($this->commentsCache[$id])) { + unset($this->commentsCache[$id]); + } + } + + /** + * returns a comment instance + * + * @param string $id the ID of the comment + * @return IComment + * @throws NotFoundException + * @throws \InvalidArgumentException + * @since 9.0.0 + */ + public function get($id) { + if(intval($id) === 0) { + throw new \InvalidArgumentException('IDs must be translatable to a number in this implementation.'); + } + + if(isset($this->commentsCache[$id])) { + return $this->commentsCache[$id]; + } + + $qb = $this->dbConn->getQueryBuilder(); + $resultStatement = $qb->select('*') + ->from('comments') + ->where($qb->expr()->eq('id', $qb->createParameter('id'))) + ->setParameter('id', $id, \PDO::PARAM_INT) + ->execute(); + + $data = $resultStatement->fetch(); + $resultStatement->closeCursor(); + if(!$data) { + throw new NotFoundException(); + } + + $comment = new Comment($this->normalizeDatabaseData($data)); + $this->cache($comment); + return $comment; + } + + /** + * returns the comment specified by the id and all it's child comments. + * At this point of time, we do only support one level depth. + * + * @param string $id + * @param int $limit max number of entries to return, 0 returns all + * @param int $offset the start entry + * @return array + * @since 9.0.0 + * + * The return array looks like this + * [ + * 'comment' => IComment, // root comment + * 'replies' => + * [ + * 0 => + * [ + * 'comment' => IComment, + * 'replies' => [] + * ] + * 1 => + * [ + * 'comment' => IComment, + * 'replies'=> [] + * ], + * … + * ] + * ] + */ + public function getTree($id, $limit = 0, $offset = 0) { + $tree = []; + $tree['comment'] = $this->get($id); + $tree['replies'] = []; + + $qb = $this->dbConn->getQueryBuilder(); + $query = $qb->select('*') + ->from('comments') + ->where($qb->expr()->eq('topmost_parent_id', $qb->createParameter('id'))) + ->orderBy('creation_timestamp', 'DESC') + ->setParameter('id', $id); + + if($limit > 0) { + $query->setMaxResults($limit); + } + if($offset > 0) { + $query->setFirstResult($offset); + } + + $resultStatement = $query->execute(); + while($data = $resultStatement->fetch()) { + $comment = new Comment($this->normalizeDatabaseData($data)); + $this->cache($comment); + $tree['replies'][] = [ + 'comment' => $comment, + 'replies' => [] + ]; + } + $resultStatement->closeCursor(); + + return $tree; + } + + /** + * returns comments for a specific object (e.g. a file). + * + * The sort order is always newest to oldest. + * + * @param string $objectType the object type, e.g. 'files' + * @param string $objectId the id of the object + * @param int $limit optional, number of maximum comments to be returned. if + * not specified, all comments are returned. + * @param int $offset optional, starting point + * @param \DateTime $notOlderThan optional, timestamp of the oldest comments + * that may be returned + * @return IComment[] + * @since 9.0.0 + */ + public function getForObject( + $objectType, + $objectId, + $limit = 0, + $offset = 0, + \DateTime $notOlderThan = null + ) { + $comments = []; + + $qb = $this->dbConn->getQueryBuilder(); + $query = $qb->select('*') + ->from('comments') + ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) + ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) + ->orderBy('creation_timestamp', 'DESC') + ->setParameter('type', $objectType) + ->setParameter('id', $objectId); + + if($limit > 0) { + $query->setMaxResults($limit); + } + if($offset > 0) { + $query->setFirstResult($offset); + } + if(!is_null($notOlderThan)) { + $query + ->andWhere($qb->expr()->gt('creation_timestamp', $qb->createParameter('notOlderThan'))) + ->setParameter('notOlderThan', $notOlderThan, 'datetime'); + } + + $resultStatement = $query->execute(); + while($data = $resultStatement->fetch()) { + $comment = new Comment($this->normalizeDatabaseData($data)); + $this->cache($comment); + $comments[] = $comment; + } + $resultStatement->closeCursor(); + + return $comments; + } + + /** + * @param $objectType string the object type, e.g. 'files' + * @param $objectId string the id of the object + * @return Int + * @since 9.0.0 + */ + public function getNumberOfCommentsForObject($objectType, $objectId) { + $qb = $this->dbConn->getQueryBuilder(); + $query = $qb->select($qb->createFunction('COUNT(`id`)')) + ->from('comments') + ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) + ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) + ->setParameter('type', $objectType) + ->setParameter('id', $objectId); + + $resultStatement = $query->execute(); + $data = $resultStatement->fetch(\PDO::FETCH_NUM); + $resultStatement->closeCursor(); + return intval($data[0]); + } + + /** + * creates a new comment and returns it. At this point of time, it is not + * saved in the used data storage. Use save() after setting other fields + * of the comment (e.g. message or verb). + * + * @param string $actorType the actor type (e.g. 'user') + * @param string $actorId a user id + * @param string $objectType the object type the comment is attached to + * @param string $objectId the object id the comment is attached to + * @return IComment + * @since 9.0.0 + */ + public function create($actorType, $actorId, $objectType, $objectId) { + $comment = new Comment(); + $comment + ->setActor($actorType, $actorId) + ->setObject($objectType, $objectId); + return $comment; + } + + /** + * permanently deletes the comment specified by the ID + * + * When the comment has child comments, their parent ID will be changed to + * the parent ID of the item that is to be deleted. + * + * @param string $id + * @return bool + * @throws \InvalidArgumentException + * @since 9.0.0 + */ + public function delete($id) { + if(!is_string($id)) { + throw new \InvalidArgumentException('Parameter must be string'); + } + + $qb = $this->dbConn->getQueryBuilder(); + $query = $qb->delete('comments') + ->where($qb->expr()->eq('id', $qb->createParameter('id'))) + ->setParameter('id', $id); + + try { + $affectedRows = $query->execute(); + $this->uncache($id); + } catch (DriverException $e) { + $this->logger->logException($e, ['app' => 'core_comments']); + return false; + } + return ($affectedRows > 0); + } + + /** + * saves the comment permanently and returns it + * + * if the supplied comment has an empty ID, a new entry comment will be + * saved and the instance updated with the new ID. + * + * Otherwise, an existing comment will be updated. + * + * Throws NotFoundException when a comment that is to be updated does not + * exist anymore at this point of time. + * + * @param IComment $comment + * @return bool + * @throws NotFoundException + * @since 9.0.0 + */ + public function save(IComment $comment) { + if($this->prepareCommentForDatabaseWrite($comment)->getId() === '') { + $result = $this->insert($comment); + } else { + $result = $this->update($comment); + } + + if($result && !!$comment->getParentId()) { + $this->updateChildrenInformation( + $comment->getParentId(), + $comment->getCreationDateTime() + ); + $this->cache($comment); + } + + return $result; + } + + /** + * inserts the provided comment in the database + * + * @param IComment $comment + * @return bool + */ + protected function insert(IComment &$comment) { + $qb = $this->dbConn->getQueryBuilder(); + $affectedRows = $qb + ->insert('comments') + ->values([ + 'parent_id' => $qb->createNamedParameter($comment->getParentId()), + 'topmost_parent_id' => $qb->createNamedParameter($comment->getTopmostParentId()), + 'children_count' => $qb->createNamedParameter($comment->getChildrenCount()), + 'actor_type' => $qb->createNamedParameter($comment->getActorType()), + 'actor_id' => $qb->createNamedParameter($comment->getActorId()), + 'message' => $qb->createNamedParameter($comment->getMessage()), + 'verb' => $qb->createNamedParameter($comment->getVerb()), + 'creation_timestamp' => $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime'), + 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'), + 'object_type' => $qb->createNamedParameter($comment->getObjectType()), + 'object_id' => $qb->createNamedParameter($comment->getObjectId()), + ]) + ->execute(); + + if ($affectedRows > 0) { + $comment->setId(strval($qb->getLastInsertId())); + } + + return $affectedRows > 0; + } + + /** + * updates a Comment data row + * + * @param IComment $comment + * @return bool + * @throws NotFoundException + */ + protected function update(IComment $comment) { + $qb = $this->dbConn->getQueryBuilder(); + $affectedRows = $qb + ->update('comments') + ->set('parent_id', $qb->createNamedParameter($comment->getParentId())) + ->set('topmost_parent_id', $qb->createNamedParameter($comment->getTopmostParentId())) + ->set('children_count', $qb->createNamedParameter($comment->getChildrenCount())) + ->set('actor_type', $qb->createNamedParameter($comment->getActorType())) + ->set('actor_id', $qb->createNamedParameter($comment->getActorId())) + ->set('message', $qb->createNamedParameter($comment->getMessage())) + ->set('verb', $qb->createNamedParameter($comment->getVerb())) + ->set('creation_timestamp', $qb->createNamedParameter($comment->getCreationDateTime(), 'datetime')) + ->set('latest_child_timestamp', $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime')) + ->set('object_type', $qb->createNamedParameter($comment->getObjectType())) + ->set('object_id', $qb->createNamedParameter($comment->getObjectId())) + ->where($qb->expr()->eq('id', $qb->createParameter('id'))) + ->setParameter('id', $comment->getId()) + ->execute(); + + if($affectedRows === 0) { + throw new NotFoundException('Comment to update does ceased to exist'); + } + + return $affectedRows > 0; + } + + /** + * removes references to specific actor (e.g. on user delete) of a comment. + * The comment itself must not get lost/deleted. + * + * @param string $actorType the actor type (e.g. 'user') + * @param string $actorId a user id + * @return boolean + * @since 9.0.0 + */ + public function deleteReferencesOfActor($actorType, $actorId) { + $this->checkRoleParameters('Actor', $actorType, $actorId); + + $qb = $this->dbConn->getQueryBuilder(); + $affectedRows = $qb + ->update('comments') + ->set('actor_type', $qb->createNamedParameter(ICommentsManager::DELETED_USER)) + ->set('actor_id', $qb->createNamedParameter(ICommentsManager::DELETED_USER)) + ->where($qb->expr()->eq('actor_type', $qb->createParameter('type'))) + ->andWhere($qb->expr()->eq('actor_id', $qb->createParameter('id'))) + ->setParameter('type', $actorType) + ->setParameter('id', $actorId) + ->execute(); + + $this->commentsCache = []; + + return is_int($affectedRows); + } + + /** + * deletes all comments made of a specific object (e.g. on file delete) + * + * @param string $objectType the object type (e.g. 'file') + * @param string $objectId e.g. the file id + * @return boolean + * @since 9.0.0 + */ + public function deleteCommentsAtObject($objectType, $objectId) { + $this->checkRoleParameters('Object', $objectType, $objectId); + + $qb = $this->dbConn->getQueryBuilder(); + $affectedRows = $qb + ->delete('comments') + ->where($qb->expr()->eq('object_type', $qb->createParameter('type'))) + ->andWhere($qb->expr()->eq('object_id', $qb->createParameter('id'))) + ->setParameter('type', $objectType) + ->setParameter('id', $objectId) + ->execute(); + + $this->commentsCache = []; + + return is_int($affectedRows); + } +} diff --git a/lib/private/comments/managerfactory.php b/lib/private/comments/managerfactory.php new file mode 100644 index 0000000000..41978d0cf4 --- /dev/null +++ b/lib/private/comments/managerfactory.php @@ -0,0 +1,23 @@ +getDatabaseConnection(), + \OC::$server->getLogger() + ); + } +} diff --git a/lib/private/console/application.php b/lib/private/console/application.php index 55c817d497..e6d8677b72 100644 --- a/lib/private/console/application.php +++ b/lib/private/console/application.php @@ -48,25 +48,31 @@ class Application { /** * @param OutputInterface $output + * @throws \Exception */ public function loadCommands(OutputInterface $output) { // $application is required to be defined in the register_command scripts $application = $this->application; - require_once \OC::$SERVERROOT . '/core/register_command.php'; + require_once __DIR__ . '/../../../core/register_command.php'; if ($this->config->getSystemValue('installed', false)) { - if (!\OCP\Util::needUpgrade()) { + if (\OCP\Util::needUpgrade()) { + $output->writeln("ownCloud or one of the apps require upgrade - only a limited number of commands are available"); + $output->writeln("You may use your browser or the occ upgrade command to do the upgrade"); + } elseif ($this->config->getSystemValue('maintenance', false)) { + $output->writeln("ownCloud is in maintenance mode - no app have been loaded"); + } else { OC_App::loadApps(); foreach (\OC::$server->getAppManager()->getInstalledApps() as $app) { $appPath = \OC_App::getAppPath($app); + if($appPath === false) { + continue; + } \OC::$loader->addValidRoot($appPath); $file = $appPath . '/appinfo/register_command.php'; if (file_exists($file)) { require $file; } } - } else { - $output->writeln("ownCloud or one of the apps require upgrade - only a limited number of commands are available"); - $output->writeln("You may use your browser or the occ upgrade command to do the upgrade"); } } else { $output->writeln("ownCloud is not installed - only a limited number of commands are available"); @@ -85,6 +91,11 @@ class Application { } } + /** + * Sets whether to automatically exit after a command execution or not. + * + * @param bool $boolean Whether to automatically exit after a command execution or not + */ public function setAutoExit($boolean) { $this->application->setAutoExit($boolean); } diff --git a/lib/private/db/querybuilder/querybuilder.php b/lib/private/db/querybuilder/querybuilder.php index 741da4efc2..a4cbb5abd7 100644 --- a/lib/private/db/querybuilder/querybuilder.php +++ b/lib/private/db/querybuilder/querybuilder.php @@ -40,6 +40,9 @@ class QueryBuilder implements IQueryBuilder { /** @var bool */ private $automaticTablePrefix = true; + /** @var string */ + protected $lastInsertedTable; + /** * Initializes a new QueryBuilder. * @@ -445,6 +448,8 @@ class QueryBuilder implements IQueryBuilder { $this->getTableName($insert) ); + $this->lastInsertedTable = $insert; + return $this; } @@ -1051,10 +1056,10 @@ class QueryBuilder implements IQueryBuilder { * @throws \BadMethodCallException When being called before an insert query has been run. */ public function getLastInsertId() { - $from = $this->getQueryPart('from'); - - if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && !empty($from)) { - return (int) $this->connection->lastInsertId($from['table']); + if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && $this->lastInsertedTable) { + // lastInsertId() needs the prefix but no quotes + $table = $this->prefixTableName($this->lastInsertedTable); + return (int) $this->connection->lastInsertId($table); } throw new \BadMethodCallException('Invalid call to getLastInsertId without using insert() before.'); @@ -1067,11 +1072,22 @@ class QueryBuilder implements IQueryBuilder { * @return string */ public function getTableName($table) { + $table = $this->prefixTableName($table); + return $this->helper->quoteColumnName($table); + } + + /** + * Returns the table name with database prefix as needed by the implementation + * + * @param string $table + * @return string + */ + protected function prefixTableName($table) { if ($this->automaticTablePrefix === false || strpos($table, '*PREFIX*') === 0) { - return $this->helper->quoteColumnName($table); + return $table; } - return $this->helper->quoteColumnName('*PREFIX*' . $table); + return '*PREFIX*' . $table; } /** diff --git a/lib/private/defaults.php b/lib/private/defaults.php index 16f45943f5..23f0baad96 100644 --- a/lib/private/defaults.php +++ b/lib/private/defaults.php @@ -49,7 +49,7 @@ class OC_Defaults { function __construct() { $this->l = \OC::$server->getL10N('lib'); - $version = OC_Util::getVersion(); + $version = \OCP\Util::getVersion(); $this->defaultEntity = 'ownCloud'; /* e.g. company name, used for footers and copyright notices */ $this->defaultName = 'ownCloud'; /* short name, used when referring to the software */ diff --git a/lib/private/eventsource.php b/lib/private/eventsource.php index c076b87ddd..0e98bdc262 100644 --- a/lib/private/eventsource.php +++ b/lib/private/eventsource.php @@ -76,7 +76,7 @@ class OC_EventSource implements \OCP\IEventSource { } else { header("Content-Type: text/event-stream"); } - if (!OC_Util::isCallRegistered()) { + if (!(\OC::$server->getRequest()->passesCSRFCheck())) { $this->send('error', 'Possible CSRF attack. Connection will be closed.'); $this->close(); exit(); diff --git a/lib/private/files/fileinfo.php b/lib/private/files/fileinfo.php index 5b5e869700..5ed65cd379 100644 --- a/lib/private/files/fileinfo.php +++ b/lib/private/files/fileinfo.php @@ -100,6 +100,8 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { return $this->getType(); } else if ($offset === 'etag') { return $this->getEtag(); + } elseif ($offset === 'permissions') { + return $this->getPermissions(); } elseif (isset($this->data[$offset])) { return $this->data[$offset]; } else { @@ -193,7 +195,11 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { * @return int */ public function getPermissions() { - return $this->data['permissions']; + $perms = $this->data['permissions']; + if (\OCP\Util::isSharingDisabledForUser() || ($this->isShared() && !\OC\Share\Share::isResharingAllowed())) { + $perms = $perms & ~\OCP\Constants::PERMISSION_SHARE; + } + return $perms; } /** diff --git a/lib/private/files/objectstore/objectstorestorage.php b/lib/private/files/objectstore/objectstorestorage.php index 5ec05a3529..b34a6bdfb8 100644 --- a/lib/private/files/objectstore/objectstorestorage.php +++ b/lib/private/files/objectstore/objectstorestorage.php @@ -274,7 +274,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { } else { $ext = ''; } - $tmpFile = \OC_Helper::tmpFile($ext); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($ext); \OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack')); if ($this->file_exists($path)) { $source = $this->fopen($path, 'r'); @@ -329,7 +329,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { $stat['mtime'] = $mtime; $this->getCache()->update($stat['fileid'], $stat); } else { - $mimeType = \OC_Helper::getFileNameMimeType($path); + $mimeType = \OC::$server->getMimeTypeDetector()->detectPath($path); // create new file $stat = array( 'etag' => $this->getETag($path), diff --git a/lib/private/files/storage/common.php b/lib/private/files/storage/common.php index 0cd67e343f..1e30d48f61 100644 --- a/lib/private/files/storage/common.php +++ b/lib/private/files/storage/common.php @@ -141,10 +141,6 @@ abstract class Common implements Storage { } public function isSharable($path) { - if (\OCP\Util::isSharingDisabledForUser()) { - return false; - } - return $this->isReadable($path); } @@ -229,7 +225,7 @@ abstract class Common implements Storage { if ($this->is_dir($path)) { return 'httpd/unix-directory'; } elseif ($this->file_exists($path)) { - return \OC_Helper::getFileNameMimeType($path); + return \OC::$server->getMimeTypeDetector()->detectPath($path); } else { return false; } @@ -252,7 +248,7 @@ abstract class Common implements Storage { } public function getLocalFolder($path) { - $baseDir = \OC_Helper::tmpFolder(); + $baseDir = \OC::$server->getTempManager()->getTemporaryFolder(); $this->addLocalFolder($path, $baseDir); return $baseDir; } diff --git a/lib/private/files/storage/dav.php b/lib/private/files/storage/dav.php index dda163e41a..9afebab1dd 100644 --- a/lib/private/files/storage/dav.php +++ b/lib/private/files/storage/dav.php @@ -34,6 +34,7 @@ namespace OC\Files\Storage; use Exception; +use GuzzleHttp\Exception\RequestException; use OC\Files\Filesystem; use OC\Files\Stream\Close; use Icewind\Streams\IteratorDirectory; @@ -339,15 +340,20 @@ class DAV extends Common { switch ($mode) { case 'r': case 'rb': - if (!$this->file_exists($path)) { - return false; + try { + $response = $this->httpClientService + ->newClient() + ->get($this->createBaseUri() . $this->encodePath($path), [ + 'auth' => [$this->user, $this->password], + 'stream' => true + ]); + } catch (RequestException $e) { + if ($e->getResponse()->getStatusCode() === 404) { + return false; + } else { + throw $e; + } } - $response = $this->httpClientService - ->newClient() - ->get($this->createBaseUri() . $this->encodePath($path), [ - 'auth' => [$this->user, $this->password], - 'stream' => true - ]); if ($response->getStatusCode() !== Http::STATUS_OK) { if ($response->getStatusCode() === Http::STATUS_LOCKED) { diff --git a/lib/private/files/storage/localtempfiletrait.php b/lib/private/files/storage/localtempfiletrait.php index 84331f49b1..8875c2c449 100644 --- a/lib/private/files/storage/localtempfiletrait.php +++ b/lib/private/files/storage/localtempfiletrait.php @@ -70,7 +70,7 @@ trait LocalTempFileTrait { } else { $extension = ''; } - $tmpFile = \OC_Helper::tmpFile($extension); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($extension); $target = fopen($tmpFile, 'w'); \OC_Helper::streamCopy($source, $target); fclose($target); diff --git a/lib/private/files/storage/temporary.php b/lib/private/files/storage/temporary.php index c8b99a5563..8abc19929b 100644 --- a/lib/private/files/storage/temporary.php +++ b/lib/private/files/storage/temporary.php @@ -29,7 +29,7 @@ namespace OC\Files\Storage; */ class Temporary extends Local{ public function __construct($arguments = null) { - parent::__construct(array('datadir' => \OC_Helper::tmpFolder())); + parent::__construct(array('datadir' => \OC::$server->getTempManager()->getTemporaryFolder())); } public function cleanUp() { diff --git a/lib/private/files/storage/wrapper/availability.php b/lib/private/files/storage/wrapper/availability.php index d6ce78f6e4..d2fbbbacf7 100644 --- a/lib/private/files/storage/wrapper/availability.php +++ b/lib/private/files/storage/wrapper/availability.php @@ -399,7 +399,6 @@ class Availability extends Wrapper { /** {@inheritdoc} */ public function getOwner($path) { - $this->checkAvailability(); try { return parent::getOwner($path); } catch (\OCP\Files\StorageNotAvailableException $e) { diff --git a/lib/private/files/type/detection.php b/lib/private/files/type/detection.php index c102e739e0..0e2bab39e5 100644 --- a/lib/private/files/type/detection.php +++ b/lib/private/files/type/detection.php @@ -238,7 +238,7 @@ class Detection implements IMimeTypeDetector { $finfo = finfo_open(FILEINFO_MIME); return finfo_buffer($finfo, $data); } else { - $tmpFile = \OC_Helper::tmpFile(); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile(); $fh = fopen($tmpFile, 'wb'); fwrite($fh, $data, 8024); fclose($fh); diff --git a/lib/private/files/view.php b/lib/private/files/view.php index 6abefff419..fcea4828c4 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -912,7 +912,7 @@ class View { $source = $this->fopen($path, 'r'); if ($source) { $extension = pathinfo($path, PATHINFO_EXTENSION); - $tmpFile = \OC_Helper::tmpFile($extension); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile($extension); file_put_contents($tmpFile, $source); return $tmpFile; } else { @@ -1253,7 +1253,7 @@ class View { * @param boolean|string $includeMountPoints true to add mountpoint sizes, * 'ext' to add only ext storage mount point sizes. Defaults to true. * defaults to true - * @return \OC\Files\FileInfo|bool False if file does not exist + * @return \OC\Files\FileInfo|false False if file does not exist */ public function getFileInfo($path, $includeMountPoints = true) { $this->assertPathLength($path); diff --git a/lib/private/helper.php b/lib/private/helper.php index 78a567638e..6495290371 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -53,88 +53,6 @@ use Symfony\Component\Process\ExecutableFinder; class OC_Helper { private static $templateManager; - /** - * Creates an url using a defined route - * @param string $route - * @param array $parameters with param=>value, will be appended to the returned url - * @return string the url - * @deprecated Use \OC::$server->getURLGenerator()->linkToRoute($route, $parameters) - * - * Returns a url to the given app and file. - */ - public static function linkToRoute($route, $parameters = array()) { - return OC::$server->getURLGenerator()->linkToRoute($route, $parameters); - } - - /** - * Creates an url - * @param string $app app - * @param string $file file - * @param array $args array with param=>value, will be appended to the returned url - * The value of $args will be urlencoded - * @return string the url - * @deprecated Use \OC::$server->getURLGenerator()->linkTo($app, $file, $args) - * - * Returns a url to the given app and file. - */ - public static function linkTo( $app, $file, $args = array() ) { - return OC::$server->getURLGenerator()->linkTo($app, $file, $args); - } - - /** - * Creates an absolute url - * @param string $app app - * @param string $file file - * @param array $args array with param=>value, will be appended to the returned url - * The value of $args will be urlencoded - * @return string the url - * - * Returns a absolute url to the given app and file. - */ - public static function linkToAbsolute($app, $file, $args = array()) { - return OC::$server->getURLGenerator()->getAbsoluteURL( - self::linkTo($app, $file, $args) - ); - } - - /** - * Makes an $url absolute - * @param string $url the url - * @return string the absolute url - * @deprecated Use \OC::$server->getURLGenerator()->getAbsoluteURL($url) - * - * Returns a absolute url to the given app and file. - */ - public static function makeURLAbsolute($url) { - return OC::$server->getURLGenerator()->getAbsoluteURL($url); - } - - /** - * Creates an url for remote use - * @param string $service id - * @return string the url - * - * Returns a url to the given service. - */ - public static function linkToRemoteBase($service) { - return self::linkTo('', 'remote.php') . '/' . $service; - } - - /** - * Creates an absolute url for remote use - * @param string $service id - * @param bool $add_slash - * @return string the url - * - * Returns a absolute url to the given service. - */ - public static function linkToRemote($service, $add_slash = true) { - return OC::$server->getURLGenerator()->getAbsoluteURL( - self::linkToRemoteBase($service) - . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : '') - ); - } - /** * Creates an absolute url for public use * @param string $service id @@ -147,7 +65,7 @@ class OC_Helper { if ($service === 'files') { $url = OC::$server->getURLGenerator()->getAbsoluteURL('/s'); } else { - $url = OC::$server->getURLGenerator()->getAbsoluteURL(self::linkTo('', 'public.php').'?service='.$service); + $url = OC::$server->getURLGenerator()->getAbsoluteURL(OC::$server->getURLGenerator()->linkTo('', 'public.php').'?service='.$service); } return $url . (($add_slash && $service[strlen($service) - 1] != '/') ? '/' : ''); } @@ -165,18 +83,6 @@ class OC_Helper { return OC::$server->getURLGenerator()->imagePath($app, $image); } - /** - * get path to icon of file type - * @param string $mimetype mimetype - * @return string the url - * - * Returns the path to the image of this file type. - * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->mimeTypeIcon($mimetype) - */ - public static function mimetypeIcon($mimetype) { - return \OC::$server->getMimeTypeDetector()->mimeTypeIcon($mimetype); - } - /** * get path to preview of file * @param string $path path @@ -185,21 +91,11 @@ class OC_Helper { * Returns the path to the preview of the file. */ public static function previewIcon($path) { - return self::linkToRoute( 'core_ajax_preview', array('x' => 32, 'y' => 32, 'file' => $path )); + return \OC::$server->getURLGenerator()->linkToRoute('core_ajax_preview', ['x' => 32, 'y' => 32, 'file' => $path]); } public static function publicPreviewIcon( $path, $token ) { - return self::linkToRoute( 'core_ajax_public_preview', array('x' => 32, 'y' => 32, 'file' => $path, 't' => $token)); - } - - /** - * shows whether the user has an avatar - * @param string $user username - * @return bool avatar set or not - * @deprecated 9.0.0 Use \OC::$server->getAvatarManager()->getAvatar($user)->exists(); - **/ - public static function userAvatarSet($user) { - return \OC::$server->getAvatarManager()->getAvatar($user)->exists(); + return \OC::$server->getURLGenerator()->linkToRoute('core_ajax_public_preview', ['x' => 32, 'y' => 32, 'file' => $path, 't' => $token]); } /** @@ -363,14 +259,6 @@ class OC_Helper { return !file_exists($dir); } - /** - * @return \OC\Files\Type\Detection - * @deprecated 8.2.0 use \OC::$server->getMimeTypeDetector() - */ - static public function getMimetypeDetector() { - return \OC::$server->getMimeTypeDetector(); - } - /** * @return \OC\Files\Type\TemplateManager */ @@ -381,39 +269,6 @@ class OC_Helper { return self::$templateManager; } - /** - * Try to guess the mimetype based on filename - * - * @param string $path - * @return string - * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detectPath($path) - */ - static public function getFileNameMimeType($path) { - return \OC::$server->getMimeTypeDetector()->detectPath($path); - } - - /** - * Get a secure mimetype that won't expose potential XSS. - * - * @param string $mimeType - * @return string - * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType) - */ - static function getSecureMimeType($mimeType) { - return \OC::$server->getMimeTypeDetector()->getSecureMimeType($mimeType); - } - - /** - * get the mimetype form a data string - * - * @param string $data - * @return string - * @deprecated 8.2.0 Use \OC::$server->getMimeTypeDetector()->detectString($data) - */ - static function getStringMimeType($data) { - return \OC::$server->getMimeTypeDetector()->detectString($data); - } - /** * detect if a given program is found in the search PATH * @@ -492,31 +347,6 @@ class OC_Helper { return array($count, $result); } - /** - * create a temporary file with an unique filename - * - * @param string $postfix - * @return string - * @deprecated Use the TempManager instead - * - * temporary files are automatically cleaned up after the script is finished - */ - public static function tmpFile($postfix = '') { - return \OC::$server->getTempManager()->getTemporaryFile($postfix); - } - - /** - * create a temporary folder with an unique filename - * - * @return string - * @deprecated Use the TempManager instead - * - * temporary files are automatically cleaned up after the script is finished - */ - public static function tmpFolder() { - return \OC::$server->getTempManager()->getTemporaryFolder(); - } - /** * Adds a suffix to the name in case the file exists * @@ -782,7 +612,7 @@ class OC_Helper { */ public static function getStorageInfo($path, $rootInfo = null) { // return storage info without adding mount points - $includeExtStorage = \OC_Config::getValue('quota_include_external_storage', false); + $includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false); if (!$rootInfo) { $rootInfo = \OC\Files\Filesystem::getFileInfo($path, false); diff --git a/lib/private/installer.php b/lib/private/installer.php index fa9fc6704d..bbd976cda9 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -232,8 +232,8 @@ class OC_Installer{ \OC::$server->getConfig(), \OC::$server->getLogger() ); - $appData = $ocsClient->getApplication($ocsId, \OC_Util::getVersion()); - $download = $ocsClient->getApplicationDownload($ocsId, \OC_Util::getVersion()); + $appData = $ocsClient->getApplication($ocsId, \OCP\Util::getVersion()); + $download = $ocsClient->getApplicationDownload($ocsId, \OCP\Util::getVersion()); if (isset($download['downloadlink']) && trim($download['downloadlink']) !== '') { $download['downloadlink'] = str_replace(' ', '%20', $download['downloadlink']); @@ -264,7 +264,7 @@ class OC_Installer{ //download the file if necessary if($data['source']=='http') { $pathInfo = pathinfo($data['href']); - $path=OC_Helper::tmpFile('.' . $pathInfo['extension']); + $path = \OC::$server->getTempManager()->getTemporaryFile('.' . $pathInfo['extension']); if(!isset($data['href'])) { throw new \Exception($l->t("No href specified when installing app from http")); } @@ -284,7 +284,7 @@ class OC_Installer{ } //extract the archive in a temporary folder - $extractDir=OC_Helper::tmpFolder(); + $extractDir = \OC::$server->getTempManager()->getTemporaryFolder(); OC_Helper::rmdirr($extractDir); mkdir($extractDir); if($archive=OC_Archive::open($path)) { @@ -342,7 +342,7 @@ class OC_Installer{ } // check if the app is compatible with this version of ownCloud - if(!OC_App::isAppCompatible(OC_Util::getVersion(), $info)) { + if(!OC_App::isAppCompatible(\OCP\Util::getVersion(), $info)) { OC_Helper::rmdirr($extractDir); throw new \Exception($l->t("App can't be installed because it is not compatible with this version of ownCloud")); } @@ -400,7 +400,7 @@ class OC_Installer{ \OC::$server->getConfig(), \OC::$server->getLogger() ); - $ocsdata = $ocsClient->getApplication($ocsid, \OC_Util::getVersion()); + $ocsdata = $ocsClient->getApplication($ocsid, \OCP\Util::getVersion()); $ocsversion= (string) $ocsdata['version']; $currentversion=OC_App::getAppVersion($app); if (version_compare($ocsversion, $currentversion, '>')) { diff --git a/lib/private/json.php b/lib/private/json.php index eba374f4da..0bf4e8bcd0 100644 --- a/lib/private/json.php +++ b/lib/private/json.php @@ -76,7 +76,7 @@ class OC_JSON{ * @deprecated Use annotation based CSRF checks from the AppFramework instead */ public static function callCheck() { - if( !OC_Util::isCallRegistered()) { + if( !(\OC::$server->getRequest()->passesCSRFCheck())) { $l = \OC::$server->getL10N('lib'); self::error(array( 'data' => array( 'message' => $l->t('Token expired. Please reload page.'), 'error' => 'token_expired' ))); exit(); diff --git a/lib/private/legacy/config.php b/lib/private/legacy/config.php deleted file mode 100644 index 1835d4a4b1..0000000000 --- a/lib/private/legacy/config.php +++ /dev/null @@ -1,94 +0,0 @@ - - * @author Joas Schilling - * @author Jörn Friedrich Dreyer - * @author Lukas Reschke - * @author Michael Gapczynski - * @author Morris Jobke - * @author Robin McCorkell - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program 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, version 3, - * along with this program. If not, see - * - */ - -/** - * This class is responsible for reading and writing config.php, the very basic - * configuration file of ownCloud. - * - * @deprecated use \OC::$server->getConfig() to get an \OCP\Config instance - */ -class OC_Config { - - /** @var \OC\Config */ - public static $object; - - /** - * Lists all available config keys - * @return array an array of key names - * - * This function returns all keys saved in config.php. Please note that it - * does not return the values. - */ - public static function getKeys() { - return self::$object->getKeys(); - } - - /** - * Gets a value from config.php - * @param string $key key - * @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. - */ - public static function getValue($key, $default = null) { - return self::$object->getValue($key, $default); - } - - /** - * Sets a value - * @param string $key key - * @param mixed $value value - * - * This function sets the value and writes the config.php. - * - */ - public static function setValue($key, $value) { - self::$object->setValue($key, $value); - } - - /** - * Sets and deletes values and writes the config.php - * - * @param array $configs Associative array with `key => value` pairs - * If value is null, the config key will be deleted - */ - public static function setValues(array $configs) { - self::$object->setValues($configs); - } - - /** - * Removes a key from the config - * @param string $key key - * - * This function removes a key from the config.php. - */ - public static function deleteKey($key) { - self::$object->deleteKey($key); - } -} diff --git a/lib/private/lock/abstractlockingprovider.php b/lib/private/lock/abstractlockingprovider.php index c7a29380ef..db5f1c72dd 100644 --- a/lib/private/lock/abstractlockingprovider.php +++ b/lib/private/lock/abstractlockingprovider.php @@ -28,6 +28,8 @@ use OCP\Lock\ILockingProvider; * to release any left over locks at the end of the request */ abstract class AbstractLockingProvider implements ILockingProvider { + const TTL = 3600; // how long until we clear stray locks in seconds + protected $acquiredLocks = [ 'shared' => [], 'exclusive' => [] diff --git a/lib/private/lock/dblockingprovider.php b/lib/private/lock/dblockingprovider.php index 90657e6725..1b5142a90d 100644 --- a/lib/private/lock/dblockingprovider.php +++ b/lib/private/lock/dblockingprovider.php @@ -51,8 +51,6 @@ class DBLockingProvider extends AbstractLockingProvider { private $sharedLocks = []; - const TTL = 3600; // how long until we clear stray locks in seconds - /** * Check if we have an open shared lock for a path * @@ -235,10 +233,10 @@ class DBLockingProvider extends AbstractLockingProvider { /** * cleanup empty locks */ - public function cleanEmptyLocks() { + public function cleanExpiredLocks() { $expire = $this->timeFactory->getTime(); $this->connection->executeUpdate( - 'DELETE FROM `*PREFIX*file_locks` WHERE `lock` = 0 AND `ttl` < ?', + 'DELETE FROM `*PREFIX*file_locks` WHERE `ttl` < ?', [$expire] ); } @@ -262,7 +260,7 @@ class DBLockingProvider extends AbstractLockingProvider { public function __destruct() { try { - $this->cleanEmptyLocks(); + $this->cleanExpiredLocks(); } catch (\Exception $e) { // If the table is missing, the clean up was successful if ($this->connection->tableExists('file_locks')) { diff --git a/lib/private/lock/memcachelockingprovider.php b/lib/private/lock/memcachelockingprovider.php index e4158dcdfd..af95200d15 100644 --- a/lib/private/lock/memcachelockingprovider.php +++ b/lib/private/lock/memcachelockingprovider.php @@ -21,6 +21,7 @@ namespace OC\Lock; +use OCP\IMemcacheTTL; use OCP\Lock\LockedException; use OCP\IMemcache; @@ -37,6 +38,12 @@ class MemcacheLockingProvider extends AbstractLockingProvider { $this->memcache = $memcache; } + private function setTTL($path) { + if ($this->memcache instanceof IMemcacheTTL) { + $this->memcache->setTTL($path, self::TTL); + } + } + /** * @param string $path * @param int $type self::LOCK_SHARED or self::LOCK_EXCLUSIVE @@ -69,6 +76,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider { throw new LockedException($path); } } + $this->setTTL($path); $this->markAcquire($path, $type); } @@ -106,6 +114,7 @@ class MemcacheLockingProvider extends AbstractLockingProvider { throw new LockedException($path); } } + $this->setTTL($path); $this->markChange($path, $targetType); } } diff --git a/lib/private/log.php b/lib/private/log.php index ee5d61e98d..a722243dc6 100644 --- a/lib/private/log.php +++ b/lib/private/log.php @@ -227,7 +227,7 @@ class Log implements ILogger { $request = \OC::$server->getRequest(); // if token is found in the request change set the log condition to satisfied - if($request && StringUtils::equals($request->getParam('log_secret'), $logCondition['shared_secret'])) { + if($request && hash_equals($logCondition['shared_secret'], $request->getParam('log_secret'))) { $this->logConditionSatisfied = true; } } diff --git a/lib/private/log/owncloud.php b/lib/private/log/owncloud.php index f8a5f7534c..e455824a8d 100644 --- a/lib/private/log/owncloud.php +++ b/lib/private/log/owncloud.php @@ -73,7 +73,7 @@ class OC_Log_Owncloud { } catch (Exception $e) { $timezone = new DateTimeZone('UTC'); } - $time = DateTime::createFromFormat("U.u", microtime(true), $timezone); + $time = DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", ""), $timezone); if ($time === false) { $time = new DateTime(null, $timezone); } @@ -101,6 +101,9 @@ class OC_Log_Owncloud { // Fall back to error_log error_log($entry); } + if (php_sapi_name() === 'cli-server') { + error_log($message, 4); + } } /** diff --git a/lib/private/memcache/apcu.php b/lib/private/memcache/apcu.php index 84147233ef..778e27d456 100644 --- a/lib/private/memcache/apcu.php +++ b/lib/private/memcache/apcu.php @@ -24,7 +24,101 @@ namespace OC\Memcache; -class APCu extends APC { +use OCP\IMemcache; + +class APCu extends Cache implements IMemcache { + use CASTrait { + cas as casEmulated; + } + + use CADTrait; + + public function get($key) { + $result = apcu_fetch($this->getPrefix() . $key, $success); + if (!$success) { + return null; + } + return $result; + } + + public function set($key, $value, $ttl = 0) { + return apcu_store($this->getPrefix() . $key, $value, $ttl); + } + + public function hasKey($key) { + return apcu_exists($this->getPrefix() . $key); + } + + public function remove($key) { + return apcu_delete($this->getPrefix() . $key); + } + + public function clear($prefix = '') { + $ns = $this->getPrefix() . $prefix; + $ns = preg_quote($ns, '/'); + if(class_exists('\APCIterator')) { + $iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY); + } else { + $iter = new \APCUIterator('user', '/^' . $ns . '/', APC_ITER_KEY); + } + return apcu_delete($iter); + } + + /** + * Set a value in the cache if it's not already stored + * + * @param string $key + * @param mixed $value + * @param int $ttl Time To Live in seconds. Defaults to 60*60*24 + * @return bool + */ + public function add($key, $value, $ttl = 0) { + return apcu_add($this->getPrefix() . $key, $value, $ttl); + } + + /** + * Increase a stored number + * + * @param string $key + * @param int $step + * @return int | bool + */ + public function inc($key, $step = 1) { + $this->add($key, 0); + return apcu_inc($this->getPrefix() . $key, $step); + } + + /** + * Decrease a stored number + * + * @param string $key + * @param int $step + * @return int | bool + */ + public function dec($key, $step = 1) { + return apcu_dec($this->getPrefix() . $key, $step); + } + + /** + * Compare and set + * + * @param string $key + * @param mixed $old + * @param mixed $new + * @return bool + */ + public function cas($key, $old, $new) { + // apc only does cas for ints + if (is_int($old) and is_int($new)) { + return apcu_cas($this->getPrefix() . $key, $old, $new); + } else { + return $this->casEmulated($key, $old, $new); + } + } + + /** + * @return bool + */ static public function isAvailable() { if (!extension_loaded('apcu')) { return false; @@ -32,7 +126,10 @@ class APCu extends APC { return false; } elseif (!\OC::$server->getIniWrapper()->getBool('apc.enable_cli') && \OC::$CLI) { return false; - } elseif (version_compare(phpversion('apc'), '4.0.6') === -1) { + } elseif ( + version_compare(phpversion('apc'), '4.0.6') === -1 && + version_compare(phpversion('apcu'), '5.1.0') === -1 + ) { return false; } else { return true; diff --git a/lib/private/memcache/redis.php b/lib/private/memcache/redis.php index 83be662eab..68b62e7534 100644 --- a/lib/private/memcache/redis.php +++ b/lib/private/memcache/redis.php @@ -25,9 +25,9 @@ namespace OC\Memcache; -use OCP\IMemcache; +use OCP\IMemcacheTTL; -class Redis extends Cache implements IMemcache { +class Redis extends Cache implements IMemcacheTTL { /** * @var \Redis $cache */ @@ -195,6 +195,10 @@ class Redis extends Cache implements IMemcache { return false; } + public function setTTL($key, $ttl) { + self::$cache->expire($this->getNamespace() . $key, $ttl); + } + static public function isAvailable() { return extension_loaded('redis') && version_compare(phpversion('redis'), '2.2.5', '>='); diff --git a/lib/private/ocs/cloud.php b/lib/private/ocs/cloud.php index 2cf40c449f..1b04f43d47 100644 --- a/lib/private/ocs/cloud.php +++ b/lib/private/ocs/cloud.php @@ -26,7 +26,7 @@ class OC_OCS_Cloud { public static function getCapabilities() { $result = array(); - list($major, $minor, $micro) = OC_Util::getVersion(); + list($major, $minor, $micro) = \OCP\Util::getVersion(); $result['version'] = array( 'major' => $major, 'minor' => $minor, diff --git a/lib/private/ocsclient.php b/lib/private/ocsclient.php index e2973f8260..81c9abee05 100644 --- a/lib/private/ocsclient.php +++ b/lib/private/ocsclient.php @@ -97,6 +97,7 @@ class OCSClient { libxml_disable_entity_loader($loadEntities); if($data === false) { + libxml_clear_errors(); $this->logger->error( sprintf('Could not get %s, content was no valid XML', $action), [ diff --git a/lib/private/preview.php b/lib/private/preview.php index b2accdfd00..44d38b354a 100644 --- a/lib/private/preview.php +++ b/lib/private/preview.php @@ -1168,7 +1168,7 @@ class Preview { */ private function getMimeIcon() { $image = new \OC_Image(); - $mimeIconWebPath = \OC_Helper::mimetypeIcon($this->mimeType); + $mimeIconWebPath = \OC::$server->getMimeTypeDetector()->mimeTypeIcon($this->mimeType); if (empty(\OC::$WEBROOT)) { $mimeIconServerPath = \OC::$SERVERROOT . $mimeIconWebPath; } else { @@ -1250,7 +1250,7 @@ class Preview { * @param array $args * @param string $prefix */ - public static function prepare_delete($args, $prefix = '') { + public static function prepare_delete(array $args, $prefix = '') { $path = $args['path']; if (substr($path, 0, 1) === '/') { $path = substr($path, 1); @@ -1259,7 +1259,11 @@ class Preview { $view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix); $absPath = Files\Filesystem::normalizePath($view->getAbsolutePath($path)); - self::addPathToDeleteFileMapper($absPath, $view->getFileInfo($path)); + $fileInfo = $view->getFileInfo($path); + if($fileInfo === false) { + return; + } + self::addPathToDeleteFileMapper($absPath, $fileInfo); if ($view->is_dir($path)) { $children = self::getAllChildren($view, $path); self::$deleteChildrenMapper[$absPath] = $children; diff --git a/lib/private/preview/movie.php b/lib/private/preview/movie.php index f71eaaf3eb..2c2e6d0939 100644 --- a/lib/private/preview/movie.php +++ b/lib/private/preview/movie.php @@ -46,7 +46,7 @@ class Movie extends Provider { if ($useFileDirectly) { $absPath = $fileview->getLocalFile($path); } else { - $absPath = \OC_Helper::tmpFile(); + $absPath = \OC::$server->getTempManager()->getTemporaryFile(); $handle = $fileview->fopen($path, 'rb'); @@ -79,7 +79,7 @@ class Movie extends Provider { * @return bool|\OCP\IImage */ private function generateThumbNail($maxX, $maxY, $absPath, $second) { - $tmpPath = \OC_Helper::tmpFile(); + $tmpPath = \OC::$server->getTempManager()->getTemporaryFile(); if (self::$avconvBinary) { $cmd = self::$avconvBinary . ' -an -y -ss ' . escapeshellarg($second) . diff --git a/lib/private/route/router.php b/lib/private/route/router.php index 4ca5e16ddf..f144c54398 100644 --- a/lib/private/route/router.php +++ b/lib/private/route/router.php @@ -92,7 +92,7 @@ class Router implements IRouter { $this->logger = $logger; $baseUrl = \OC::$WEBROOT; if(!(getenv('front_controller_active') === 'true')) { - $baseUrl = \OC_Helper::linkTo('', 'index.php'); + $baseUrl = \OC::$server->getURLGenerator()->linkTo('', 'index.php'); } if (!\OC::$CLI) { $method = $_SERVER['REQUEST_METHOD']; diff --git a/lib/private/security/crypto.php b/lib/private/security/crypto.php index 0bd34df3f3..46d0c750b2 100644 --- a/lib/private/security/crypto.php +++ b/lib/private/security/crypto.php @@ -123,7 +123,7 @@ class Crypto implements ICrypto { $this->cipher->setIV($iv); - if(!\OCP\Security\StringUtils::equals($this->calculateHMAC($parts[0].$parts[1], $password), $hmac)) { + if(!hash_equals($this->calculateHMAC($parts[0].$parts[1], $password), $hmac)) { throw new \Exception('HMAC does not match.'); } diff --git a/lib/private/security/hasher.php b/lib/private/security/hasher.php index a5dd22e5dc..318141b685 100644 --- a/lib/private/security/hasher.php +++ b/lib/private/security/hasher.php @@ -109,7 +109,7 @@ class Hasher implements IHasher { // Verify whether it matches a legacy PHPass or SHA1 string $hashLength = strlen($hash); if($hashLength === 60 && password_verify($message.$this->legacySalt, $hash) || - $hashLength === 40 && StringUtils::equals($hash, sha1($message))) { + $hashLength === 40 && hash_equals($hash, sha1($message))) { $newHash = $this->hash($message); return true; } diff --git a/lib/private/security/securerandom.php b/lib/private/security/securerandom.php index 87dca68985..24affbe898 100644 --- a/lib/private/security/securerandom.php +++ b/lib/private/security/securerandom.php @@ -27,25 +27,15 @@ use Sabre\DAV\Exception; use OCP\Security\ISecureRandom; /** - * Class SecureRandom provides a layer around RandomLib to generate - * secure random strings. For PHP 7 the native CSPRNG is used. + * Class SecureRandom provides a wrapper around the random_int function to generate + * secure random strings. For PHP 7 the native CSPRNG is used, older versions do + * use a fallback. * * Usage: - * \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(10); - * + * \OC::$server->getSecureRandom()->generate(10); * @package OC\Security */ class SecureRandom implements ISecureRandom { - - /** @var \RandomLib\Factory */ - var $factory; - /** @var \RandomLib\Generator */ - var $generator; - - function __construct() { - $this->factory = new RandomLib\Factory; - } - /** * Convenience method to get a low strength random number generator. * @@ -53,10 +43,10 @@ class SecureRandom implements ISecureRandom { * in a non-cryptographical setting. They are not strong enough to be * used as keys or salts. They are however useful for one-time use tokens. * + * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int() * @return $this */ public function getLowStrengthGenerator() { - $this->generator = $this->factory->getLowStrengthGenerator(); return $this; } @@ -67,10 +57,10 @@ class SecureRandom implements ISecureRandom { * They are strong enough to be used as keys and salts. However, they do * take some time and resources to generate, so they should not be over-used * + * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int() * @return $this */ public function getMediumStrengthGenerator() { - $this->generator = $this->factory->getMediumStrengthGenerator(); return $this; } @@ -80,26 +70,17 @@ class SecureRandom implements ISecureRandom { * @param string $characters An optional list of characters to use if no character list is * specified all valid base64 characters are used. * @return string - * @throws \Exception If the generator is not initialized. */ public function generate($length, $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/') { - if(is_null($this->generator)) { - throw new \Exception('Generator is not initialized.'); + $maxCharIndex = strlen($characters) - 1; + $randomString = ''; + + while($length > 0) { + $randomNumber = random_int(0, $maxCharIndex); + $randomString .= $characters[$randomNumber]; + $length--; } - - if(function_exists('random_int')) { - $maxCharIndex = strlen($characters) - 1; - $randomString = ''; - - while($length > 0) { - $randomNumber = random_int(0, $maxCharIndex); - $randomString .= $characters[$randomNumber]; - $length--; - } - return $randomString; - } - - return $this->generator->generateString($length, $characters); + return $randomString; } } diff --git a/lib/private/security/stringutils.php b/lib/private/security/stringutils.php deleted file mode 100644 index fa4342a2b4..0000000000 --- a/lib/private/security/stringutils.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @author Morris Jobke - * - * @copyright Copyright (c) 2015, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program 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, version 3, - * along with this program. If not, see - * - */ - -namespace OC\Security; - -class StringUtils { - - /** - * Compares whether two strings are equal. To prevent guessing of the string - * length this is done by comparing two hashes against each other and afterwards - * a comparison of the real string to prevent against the unlikely chance of - * collisions. - * - * Be aware that this function may leak whether the string to compare have a different - * length. - * - * @param string $expected The expected value - * @param string $input The input to compare against - * @return bool True if the two strings are equal, otherwise false. - */ - public static function equals($expected, $input) { - - if(!is_string($expected) || !is_string($input)) { - return false; - } - - if(function_exists('hash_equals')) { - return hash_equals($expected, $input); - } - - $randomString = \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(10); - - if(hash('sha512', $expected.$randomString) === hash('sha512', $input.$randomString)) { - if($expected === $input) { - return true; - } - } - - return false; - } -} \ No newline at end of file diff --git a/lib/private/server.php b/lib/private/server.php index 6692e6f6bb..7efe78b7c3 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -78,14 +78,15 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; * * TODO: hookup all manager classes */ -class Server extends SimpleContainer implements IServerContainer { +class Server extends ServerContainer implements IServerContainer { /** @var string */ private $webRoot; /** * @param string $webRoot + * @param \OC\Config $config */ - public function __construct($webRoot) { + public function __construct($webRoot, \OC\Config $config) { parent::__construct(); $this->webRoot = $webRoot; @@ -238,8 +239,8 @@ class Server extends SimpleContainer implements IServerContainer { $c->getSystemConfig() ); }); - $this->registerService('SystemConfig', function ($c) { - return new \OC\SystemConfig(); + $this->registerService('SystemConfig', function ($c) use ($config) { + return new \OC\SystemConfig($config); }); $this->registerService('AppConfig', function ($c) { return new \OC\AppConfig(\OC_DB::getConnection()); @@ -528,6 +529,13 @@ class Server extends SimpleContainer implements IServerContainer { }); return $manager; }); + $this->registerService('CommentsManager', function(Server $c) { + $config = $c->getConfig(); + $factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory'); + /** @var \OCP\Comments\ICommentsManagerFactory $factory */ + $factory = new $factoryClass(); + return $factory->getManager(); + }); $this->registerService('EventDispatcher', function() { return new EventDispatcher(); }); @@ -1121,6 +1129,13 @@ class Server extends SimpleContainer implements IServerContainer { return $this->query('NotificationManager'); } + /** + * @return \OCP\Comments\ICommentsManager + */ + public function getCommentsManager() { + return $this->query('CommentsManager'); + } + /** * @return \OC\IntegrityCheck\Checker */ diff --git a/lib/private/servercontainer.php b/lib/private/servercontainer.php new file mode 100644 index 0000000000..856e3f9b49 --- /dev/null +++ b/lib/private/servercontainer.php @@ -0,0 +1,89 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OC; + + +use OC\AppFramework\DependencyInjection\DIContainer; +use OC\AppFramework\Utility\SimpleContainer; +use OCP\AppFramework\QueryException; + +/** + * Class ServerContainer + * + * @package OC + */ +class ServerContainer extends SimpleContainer { + /** @var DIContainer[] */ + protected $appContainers; + + /** + * ServerContainer constructor. + */ + public function __construct() { + parent::__construct(); + $this->appContainers = []; + } + + /** + * @param string $appName + * @param DIContainer $container + */ + public function registerAppContainer($appName, DIContainer $container) { + $this->appContainers[$appName] = $container; + } + + /** + * @param string $appName + * @return DIContainer + */ + public function getAppContainer($appName) { + if (isset($this->appContainers[$appName])) { + return $this->appContainers[$appName]; + } + + return new DIContainer($appName); + } + + /** + * @param string $name name of the service to query for + * @return mixed registered service for the given $name + * @throws QueryException if the query could not be resolved + */ + public function query($name) { + $name = $this->sanitizeName($name); + + // In case the service starts with OCA\ we try to find the service in + // the apps container first. + if (strpos($name, 'OCA\\') === 0 && substr_count($name, '\\') >= 2) { + $segments = explode('\\', $name); + $appContainer = $this->getAppContainer(strtolower($segments[0])); + try { + return $appContainer->query($name); + } catch (QueryException $e) { + // Didn't find the service in the respective app container, + // ignore it and fall back to the core container. + } + } + + return parent::query($name); + } +} diff --git a/lib/private/setup.php b/lib/private/setup.php index 814d78679e..770f5cdab5 100644 --- a/lib/private/setup.php +++ b/lib/private/setup.php @@ -322,7 +322,7 @@ class Setup { 'datadirectory' => $dataDir, 'overwrite.cli.url' => $request->getServerProtocol() . '://' . $request->getInsecureServerHost() . \OC::$WEBROOT, 'dbtype' => $dbType, - 'version' => implode('.', \OC_Util::getVersion()), + 'version' => implode('.', \OCP\Util::getVersion()), ]); try { @@ -369,11 +369,9 @@ class Setup { // out that this is indeed an ownCloud data directory file_put_contents($config->getSystemValue('datadirectory', \OC::$SERVERROOT.'/data').'/.ocdata', ''); - // Update htaccess files for apache hosts - if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) { - self::updateHtaccess(); - self::protectDataDirectory(); - } + // Update .htaccess files + Setup::updateHtaccess(); + Setup::protectDataDirectory(); //try to write logtimezone if (date_default_timezone_get()) { @@ -394,33 +392,18 @@ class Setup { return \OC::$SERVERROOT.'/.htaccess'; } - /** - * Checks if the .htaccess contains the current version parameter - * - * @return bool - */ - private function isCurrentHtaccess() { - $version = \OC_Util::getVersion(); - unset($version[3]); - - return !strpos( - file_get_contents($this->pathToHtaccess()), - 'Version: '.implode('.', $version) - ) === false; - } - /** * Append the correct ErrorDocument path for Apache hosts - * - * @throws \OC\HintException If .htaccess does not include the current version */ public static function updateHtaccess() { + // From CLI we don't know the defined web root. Thus we can't write any + // directives into the .htaccess file. + if(\OC::$CLI) { + return; + } $setupHelper = new \OC\Setup(\OC::$server->getConfig(), \OC::$server->getIniWrapper(), \OC::$server->getL10N('lib'), new \OC_Defaults(), \OC::$server->getLogger(), \OC::$server->getSecureRandom()); - if(!$setupHelper->isCurrentHtaccess()) { - throw new \OC\HintException('.htaccess file has the wrong version. Please upload the correct version. Maybe you forgot to replace it after updating?'); - } $htaccessContent = file_get_contents($setupHelper->pathToHtaccess()); $content = ''; @@ -439,6 +422,9 @@ class Setup { $content.="\n RewriteBase ".$webRoot; $content .= "\n "; $content .= "\n SetEnv front_controller_active true"; + $content .= "\n "; + $content .= "\n DirectorySlash off"; + $content .= "\n "; $content.="\n "; $content.="\n"; diff --git a/lib/private/setup/mysql.php b/lib/private/setup/mysql.php index f2d2b15cd9..e8b88eb348 100644 --- a/lib/private/setup/mysql.php +++ b/lib/private/setup/mysql.php @@ -89,15 +89,28 @@ class MySQL extends AbstractDatabase { * @throws \OC\DatabaseSetupException */ private function connect() { - $type = 'mysql'; + $connectionParams = array( - 'host' => $this->dbHost, - 'user' => $this->dbUser, - 'password' => $this->dbPassword, - 'tablePrefix' => $this->tablePrefix, + 'host' => $this->dbHost, + 'user' => $this->dbUser, + 'password' => $this->dbPassword, + 'tablePrefix' => $this->tablePrefix, ); + + // adding port support + if (strpos($this->dbHost, ':')) { + // Host variable may carry a port or socket. + list($host, $portOrSocket) = explode(':', $this->dbHost, 2); + if (ctype_digit($portOrSocket)) { + $connectionParams['port'] = $portOrSocket; + } else { + $connectionParams['unix_socket'] = $portOrSocket; + } + $connectionParams['host'] = $host; + } + $cf = new ConnectionFactory(); - return $cf->getConnection($type, $connectionParams); + return $cf->getConnection('mysql', $connectionParams); } /** diff --git a/lib/private/share/helper.php b/lib/private/share/helper.php index 26bbca8131..0441647df8 100644 --- a/lib/private/share/helper.php +++ b/lib/private/share/helper.php @@ -289,4 +289,38 @@ class Helper extends \OC\Share\Constants { $hint = $l->t('Invalid Federated Cloud ID'); throw new HintException('Invalid Fededrated Cloud ID', $hint); } + + /** + * check if two federated cloud IDs refer to the same user + * + * @param string $user1 + * @param string $server1 + * @param string $user2 + * @param string $server2 + * @return bool true if both users and servers are the same + */ + public static function isSameUserOnSameServer($user1, $server1, $user2, $server2) { + $normalizedServer1 = strtolower(\OC\Share\Share::removeProtocolFromUrl($server1)); + $normalizedServer2 = strtolower(\OC\Share\Share::removeProtocolFromUrl($server2)); + + if (rtrim($normalizedServer1, '/') === rtrim($normalizedServer2, '/')) { + // FIXME this should be a method in the user management instead + \OCP\Util::emitHook( + '\OCA\Files_Sharing\API\Server2Server', + 'preLoginNameUsedAsUserName', + array('uid' => &$user1) + ); + \OCP\Util::emitHook( + '\OCA\Files_Sharing\API\Server2Server', + 'preLoginNameUsedAsUserName', + array('uid' => &$user2) + ); + + if ($user1 === $user2) { + return true; + } + } + + return false; + } } diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php index 4d282158ba..f071c7f3a3 100644 --- a/lib/private/share/mailnotifications.php +++ b/lib/private/share/mailnotifications.php @@ -170,7 +170,7 @@ class MailNotifications { * @param string $filename the shared file * @param string $link the public link * @param int $expiration expiration date (timestamp) - * @return array $result of failed recipients + * @return string[] $result of failed recipients */ public function sendLinkShareMail($recipient, $filename, $link, $expiration) { $subject = (string)$this->l->t('%s shared »%s« with you', [$this->senderDisplayName, $filename]); @@ -232,8 +232,8 @@ class MailNotifications { } /** - * @param $itemSource - * @param $itemType + * @param string $itemSource + * @param string $itemType * @param IUser $recipient * @return array */ diff --git a/lib/private/share/share.php b/lib/private/share/share.php index 8899df2563..fff437b3ff 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -635,7 +635,7 @@ class Share extends Constants { throw new \Exception($message_t); } // verify that the user has share permission - if (!\OC\Files\Filesystem::isSharable($path)) { + if (!\OC\Files\Filesystem::isSharable($path) || \OCP\Util::isSharingDisabledForUser()) { $message = 'You are not allowed to share %s'; $message_t = $l->t('You are not allowed to share %s', [$path]); \OCP\Util::writeLog('OCP\Share', sprintf($message, $path), \OCP\Util::DEBUG); @@ -762,6 +762,11 @@ class Share extends Constants { $updateExistingShare = false; if (\OC::$server->getAppConfig()->getValue('core', 'shareapi_allow_links', 'yes') == 'yes') { + // IF the password is changed via the old ajax endpoint verify it before deleting the old share + if ($passwordChanged === true) { + self::verifyPassword($shareWith); + } + // when updating a link share // FIXME Don't delete link if we update it if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, @@ -844,11 +849,20 @@ class Share extends Constants { throw new \Exception($message_t); } + // don't allow federated shares if source and target server are the same + list($user, $remote) = Helper::splitUserRemote($shareWith); + $currentServer = self::removeProtocolFromUrl(\OC::$server->getURLGenerator()->getAbsoluteURL('/')); + $currentUser = \OC::$server->getUserSession()->getUser()->getUID(); + if (Helper::isSameUserOnSameServer($user, $remote, $currentUser, $currentServer)) { + $message = 'Not allowed to create a federated share with the same user.'; + $message_t = $l->t('Not allowed to create a federated share with the same user'); + \OCP\Util::writeLog('OCP\Share', $message, \OCP\Util::DEBUG); + throw new \Exception($message_t); + } $token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(self::TOKEN_LENGTH, \OCP\Security\ISecureRandom::CHAR_LOWER . \OCP\Security\ISecureRandom::CHAR_UPPER . \OCP\Security\ISecureRandom::CHAR_DIGITS); - list($user, $remote) = Helper::splitUserRemote($shareWith); $shareWith = $user . '@' . $remote; $shareId = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token, $itemSourceName); @@ -2505,7 +2519,7 @@ class Share extends Constants { * @param string $url * @return string */ - private static function removeProtocolFromUrl($url) { + public static function removeProtocolFromUrl($url) { if (strpos($url, 'https://') === 0) { return substr($url, strlen('https://')); } else if (strpos($url, 'http://') === 0) { diff --git a/lib/private/systemconfig.php b/lib/private/systemconfig.php index 94b815aebd..fb8c18123d 100644 --- a/lib/private/systemconfig.php +++ b/lib/private/systemconfig.php @@ -44,12 +44,19 @@ class SystemConfig { 'objectstore' => ['arguments' => ['password' => true]], ]; + /** @var Config */ + private $config; + + public function __construct(Config $config) { + $this->config = $config; + } + /** * Lists all available config keys * @return array an array of key names */ public function getKeys() { - return \OC_Config::getKeys(); + return $this->config->getKeys(); } /** @@ -59,7 +66,7 @@ class SystemConfig { * @param mixed $value the value that should be stored */ public function setValue($key, $value) { - \OC_Config::setValue($key, $value); + $this->config->setValue($key, $value); } /** @@ -69,7 +76,7 @@ class SystemConfig { * If value is null, the config key will be deleted */ public function setValues(array $configs) { - \OC_Config::setValues($configs); + $this->config->setValues($configs); } /** @@ -80,7 +87,7 @@ class SystemConfig { * @return mixed the value or $default */ public function getValue($key, $default = '') { - return \OC_Config::getValue($key, $default); + return $this->config->getValue($key, $default); } /** @@ -106,7 +113,7 @@ class SystemConfig { * @param string $key the key of the value, under which it was saved */ public function deleteValue($key) { - \OC_Config::deleteKey($key); + $this->config->deleteKey($key); } /** diff --git a/lib/private/template.php b/lib/private/template.php index d794dacac2..c2528c2685 100644 --- a/lib/private/template.php +++ b/lib/private/template.php @@ -119,7 +119,6 @@ class OC_Template extends \OC\Template\Base { // avatars if (\OC::$server->getSystemConfig()->getValue('enable_avatars', true) === true) { - \OC_Util::addScript('avatar', null, true); \OC_Util::addScript('jquery.avatar', null, true); \OC_Util::addScript('placeholder', null, true); } @@ -162,6 +161,8 @@ class OC_Template extends \OC\Template\Base { } if (\OC::$server->getRequest()->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_IE])) { + // polyfill for btoa/atob for IE friends + OC_Util::addVendorScript('base64/base64'); // shim for the davclient.js library \OCP\Util::addScript('files/iedavclient'); } diff --git a/lib/private/template/functions.php b/lib/private/template/functions.php index d156d26f9c..982ecde585 100644 --- a/lib/private/template/functions.php +++ b/lib/private/template/functions.php @@ -146,7 +146,7 @@ function component($app, $file) { * For further information have a look at OC_Helper::linkTo */ function link_to( $app, $file, $args = array() ) { - return OC_Helper::linkTo( $app, $file, $args ); + return \OC::$server->getURLGenerator()->linkTo($app, $file, $args); } /** @@ -173,11 +173,9 @@ function image_path( $app, $image ) { * make OC_Helper::mimetypeIcon available as a simple function * @param string $mimetype mimetype * @return string link to the image - * - * For further information have a look at OC_Helper::mimetypeIcon */ function mimetype_icon( $mimetype ) { - return OC_Helper::mimetypeIcon( $mimetype ); + return \OC::$server->getMimeTypeDetector()->mimeTypeIcon( $mimetype ); } /** diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php index 1a6a07ddc9..bf25b2d31a 100644 --- a/lib/private/templatelayout.php +++ b/lib/private/templatelayout.php @@ -136,7 +136,13 @@ class OC_TemplateLayout extends OC_Template { $this->assign('user_uid', OC_User::getUser()); $this->assign('appsmanagement_active', $appsMgmtActive); $this->assign('enableAvatars', $this->config->getSystemValue('enable_avatars', true)); - $this->assign('userAvatarSet', \OC_Helper::userAvatarSet(OC_User::getUser())); + + if (OC_User::getUser() === false) { + $this->assign('userAvatarSet', false); + } else { + $this->assign('userAvatarSet', \OC::$server->getAvatarManager()->getAvatar(OC_User::getUser())->exists()); + } + } else if ($renderAs == 'error') { parent::__construct('core', 'layout.guest', '', false); $this->assign('bodyid', 'body-login'); @@ -153,20 +159,20 @@ class OC_TemplateLayout extends OC_Template { if(empty(self::$versionHash)) { $v = OC_App::getAppVersions(); - $v['core'] = implode('.', \OC_Util::getVersion()); + $v['core'] = implode('.', \OCP\Util::getVersion()); self::$versionHash = md5(implode(',', $v)); } $useAssetPipeline = self::isAssetPipelineEnabled(); if ($useAssetPipeline) { - $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config', array('v' => self::$versionHash))); + $this->append( 'jsfiles', \OC::$server->getURLGenerator()->linkToRoute('js_config', ['v' => self::$versionHash])); $this->generateAssets(); } else { // Add the js files $jsFiles = self::findJavascriptFiles(OC_Util::$scripts); $this->assign('jsfiles', array()); if ($this->config->getSystemValue('installed', false) && $renderAs != 'error') { - $this->append( 'jsfiles', OC_Helper::linkToRoute('js_config', array('v' => self::$versionHash))); + $this->append( 'jsfiles', \OC::$server->getURLGenerator()->linkToRoute('js_config', ['v' => self::$versionHash])); } foreach($jsFiles as $info) { $web = $info[1]; @@ -275,8 +281,8 @@ class OC_TemplateLayout extends OC_Template { $writer->writeAsset($cssCollection); } - $this->append('jsfiles', OC_Helper::linkTo('assets', "$jsHash.js")); - $this->append('cssfiles', OC_Helper::linkTo('assets', "$cssHash.css")); + $this->append('jsfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$jsHash.js")); + $this->append('cssfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$cssHash.css")); } /** diff --git a/lib/private/updater.php b/lib/private/updater.php index 366ad2555a..04f8dcf722 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -155,7 +155,7 @@ class Updater extends BasicEmitter { $this->config->setAppValue('core', 'installedat', microtime(true)); } - $version = \OC_Util::getVersion(); + $version = \OCP\Util::getVersion(); $version['installed'] = $this->config->getAppValue('core', 'installedat'); $version['updated'] = $this->config->getAppValue('core', 'lastupdatedat'); $version['updatechannel'] = \OC_Util::getChannel(); @@ -177,6 +177,8 @@ class Updater extends BasicEmitter { $tmp['versionstring'] = (string)$data->versionstring; $tmp['url'] = (string)$data->url; $tmp['web'] = (string)$data->web; + } else { + libxml_clear_errors(); } } else { $data = []; @@ -206,7 +208,7 @@ class Updater extends BasicEmitter { } $installedVersion = $this->config->getSystemValue('version', '0.0.0'); - $currentVersion = implode('.', \OC_Util::getVersion()); + $currentVersion = implode('.', \OCP\Util::getVersion()); $this->log->debug('starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, array('app' => 'core')); $success = true; @@ -351,7 +353,7 @@ class Updater extends BasicEmitter { } // only set the final version if everything went well - $this->config->setSystemValue('version', implode('.', \OC_Util::getVersion())); + $this->config->setSystemValue('version', implode('.', \OCP\Util::getVersion())); } } @@ -470,7 +472,7 @@ class Updater extends BasicEmitter { private function checkAppsRequirements() { $isCoreUpgrade = $this->isCodeUpgrade(); $apps = OC_App::getEnabledApps(); - $version = OC_Util::getVersion(); + $version = \OCP\Util::getVersion(); $disabledApps = []; foreach ($apps as $app) { // check if the app is compatible with this version of ownCloud @@ -507,7 +509,7 @@ class Updater extends BasicEmitter { */ private function isCodeUpgrade() { $installedVersion = $this->config->getSystemValue('version', '0.0.0'); - $currentVersion = implode('.', OC_Util::getVersion()); + $currentVersion = implode('.', \OCP\Util::getVersion()); if (version_compare($currentVersion, $installedVersion, '>')) { return true; } diff --git a/lib/private/user.php b/lib/private/user.php index 74441d9175..cfa60d675f 100644 --- a/lib/private/user.php +++ b/lib/private/user.php @@ -66,14 +66,6 @@ class OC_User { return OC::$server->getUserSession(); } - /** - * @return \OC\User\Manager - * @deprecated Use \OC::$server->getUserManager() - */ - public static function getManager() { - return OC::$server->getUserManager(); - } - private static $_backends = array(); private static $_usedBackends = array(); @@ -83,44 +75,6 @@ class OC_User { // bool, stores if a user want to access a resource anonymously, e.g if he opens a public link private static $incognitoMode = false; - /** - * registers backend - * - * @param string $backend name of the backend - * @deprecated Add classes by calling OC_User::useBackend() with a class instance instead - * @return bool - * - * Makes a list of backends that can be used by other modules - */ - public static function registerBackend($backend) { - self::$_backends[] = $backend; - return true; - } - - /** - * gets available backends - * - * @deprecated - * @return array an array of backends - * - * Returns the names of all backends. - */ - public static function getBackends() { - return self::$_backends; - } - - /** - * gets used backends - * - * @deprecated - * @return array an array of backends - * - * Returns the names of all used backends. - */ - public static function getUsedBackends() { - return array_keys(self::$_usedBackends); - } - /** * Adds the backend to the list of used backends * @@ -132,7 +86,7 @@ class OC_User { public static function useBackend($backend = 'database') { if ($backend instanceof OC_User_Interface) { self::$_usedBackends[get_class($backend)] = $backend; - self::getManager()->registerBackend($backend); + \OC::$server->getUserManager()->registerBackend($backend); } else { // You'll never know what happens if (null === $backend OR !is_string($backend)) { @@ -146,17 +100,17 @@ class OC_User { case 'sqlite': \OCP\Util::writeLog('core', 'Adding user backend ' . $backend . '.', \OCP\Util::DEBUG); self::$_usedBackends[$backend] = new OC_User_Database(); - self::getManager()->registerBackend(self::$_usedBackends[$backend]); + \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]); break; case 'dummy': self::$_usedBackends[$backend] = new \Test\Util\User\Dummy(); - self::getManager()->registerBackend(self::$_usedBackends[$backend]); + \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]); break; default: \OCP\Util::writeLog('core', 'Adding default user backend ' . $backend . '.', \OCP\Util::DEBUG); $className = 'OC_USER_' . strToUpper($backend); self::$_usedBackends[$backend] = new $className(); - self::getManager()->registerBackend(self::$_usedBackends[$backend]); + \OC::$server->getUserManager()->registerBackend(self::$_usedBackends[$backend]); break; } } @@ -168,7 +122,7 @@ class OC_User { */ public static function clearBackends() { self::$_usedBackends = array(); - self::getManager()->clearBackends(); + \OC::$server->getUserManager()->clearBackends(); } /** @@ -176,7 +130,7 @@ class OC_User { */ public static function setupBackends() { OC_App::loadApps(array('prelogin')); - $backends = OC_Config::getValue('user_backends', array()); + $backends = \OC::$server->getSystemConfig()->getValue('user_backends', array()); foreach ($backends as $i => $config) { $class = $config['class']; $arguments = $config['arguments']; @@ -198,42 +152,6 @@ class OC_User { } } - /** - * Create a new user - * - * @param string $uid The username of the user to create - * @param string $password The password of the new user - * @throws Exception - * @return bool true/false - * - * Creates a new user. Basic checking of username is done in OC_User - * itself, not in its subclasses. - * - * Allowed characters in the username are: "a-z", "A-Z", "0-9" and "_.@-" - * @deprecated Use \OC::$server->getUserManager()->createUser($uid, $password) - */ - public static function createUser($uid, $password) { - return self::getManager()->createUser($uid, $password); - } - - /** - * delete a user - * - * @param string $uid The username of the user to delete - * @return bool - * - * Deletes a user - * @deprecated Use \OC::$server->getUserManager()->get() and then run delete() on the return - */ - public static function deleteUser($uid) { - $user = self::getManager()->get($uid); - if ($user) { - return $user->delete(); - } else { - return false; - } - } - /** * Try to login a user * @@ -343,7 +261,7 @@ class OC_User { if (is_null($displayName)) { $displayName = $uid; } - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->setDisplayName($displayName); } else { @@ -452,7 +370,7 @@ class OC_User { */ public static function getDisplayName($uid = null) { if ($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->getDisplayName(); } else { @@ -490,7 +408,7 @@ class OC_User { * Change the password of a user */ public static function setPassword($uid, $password, $recoveryPassword = null) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->setPassword($password, $recoveryPassword); } else { @@ -507,7 +425,7 @@ class OC_User { * Check whether a specified user can change his avatar */ public static function canUserChangeAvatar($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->canChangeAvatar(); } else { @@ -524,7 +442,7 @@ class OC_User { * Check whether a specified user can change his password */ public static function canUserChangePassword($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->canChangePassword(); } else { @@ -541,7 +459,7 @@ class OC_User { * Check whether a specified user can change his display name */ public static function canUserChangeDisplayName($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->canChangeDisplayName(); } else { @@ -560,7 +478,7 @@ class OC_User { * returns the user id or false */ public static function checkPassword($uid, $password) { - $manager = self::getManager(); + $manager = \OC::$server->getUserManager(); $username = $manager->checkPassword($uid, $password); if ($username !== false) { return $username->getUID(); @@ -576,11 +494,11 @@ class OC_User { * @deprecated Use \OC::$server->getUserManager->getHome() */ public static function getHome($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->getHome(); } else { - return OC_Config::getValue('datadirectory', OC::$SERVERROOT . '/data') . '/' . $uid; + return \OC::$server->getSystemConfig()->getValue('datadirectory', OC::$SERVERROOT . '/data') . '/' . $uid; } } @@ -595,7 +513,7 @@ class OC_User { * @param integer $offset */ public static function getUsers($search = '', $limit = null, $offset = null) { - $users = self::getManager()->search($search, $limit, $offset); + $users = \OC::$server->getUserManager()->search($search, $limit, $offset); $uids = array(); foreach ($users as $user) { $uids[] = $user->getUID(); @@ -616,7 +534,7 @@ class OC_User { */ public static function getDisplayNames($search = '', $limit = null, $offset = null) { $displayNames = array(); - $users = self::getManager()->searchDisplayName($search, $limit, $offset); + $users = \OC::$server->getUserManager()->searchDisplayName($search, $limit, $offset); foreach ($users as $user) { $displayNames[$user->getUID()] = $user->getDisplayName(); } @@ -630,7 +548,7 @@ class OC_User { * @return boolean */ public static function userExists($uid) { - return self::getManager()->userExists($uid); + return \OC::$server->getUserManager()->userExists($uid); } /** @@ -639,7 +557,7 @@ class OC_User { * @param string $uid the user to disable */ public static function disableUser($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { $user->setEnabled(false); } @@ -651,7 +569,7 @@ class OC_User { * @param string $uid */ public static function enableUser($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { $user->setEnabled(true); } @@ -664,7 +582,7 @@ class OC_User { * @return bool */ public static function isEnabled($uid) { - $user = self::getManager()->get($uid); + $user = \OC::$server->getUserManager()->get($uid); if ($user) { return $user->isEnabled(); } else { diff --git a/lib/private/user/user.php b/lib/private/user/user.php index d827097ee3..6c89dd06f7 100644 --- a/lib/private/user/user.php +++ b/lib/private/user/user.php @@ -189,6 +189,8 @@ class User implements IUser { // Delete the users entry in the storage table \OC\Files\Cache\Storage::remove('home::' . $this->uid); + + \OC::$server->getCommentsManager()->deleteReferencesOfActor('user', $this->uid); } if ($this->emitter) { diff --git a/lib/private/util.php b/lib/private/util.php index eb188b649e..c9738b29ca 100644 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -72,7 +72,7 @@ class OC_Util { private static function initLocalStorageRootFS() { // mount local file backend as root - $configDataDirectory = OC_Config::getValue("datadirectory", OC::$SERVERROOT . "/data"); + $configDataDirectory = \OC::$server->getSystemConfig()->getValue("datadirectory", OC::$SERVERROOT . "/data"); //first set up the local "root" storage \OC\Files\Filesystem::initMountManager(); if (!self::$rootMounted) { @@ -184,7 +184,7 @@ class OC_Util { OC_Hook::emit('OC_Filesystem', 'preSetup', array('user' => $user)); //check if we are using an object storage - $objectStore = OC_Config::getValue('objectstore'); + $objectStore = \OC::$server->getSystemConfig()->getValue('objectstore', null); if (isset($objectStore)) { self::initObjectStoreRootFS($objectStore); } else { @@ -642,13 +642,15 @@ class OC_Util { } // Check if config folder is writable. - if (!is_writable(OC::$configDir) or !is_readable(OC::$configDir)) { - $errors[] = array( - 'error' => $l->t('Cannot write into "config" directory'), - 'hint' => $l->t('This can usually be fixed by ' - . '%sgiving the webserver write access to the config directory%s.', - array('', '')) - ); + if(!OC_Helper::isReadOnlyConfigEnabled()) { + if (!is_writable(OC::$configDir) or !is_readable(OC::$configDir)) { + $errors[] = array( + 'error' => $l->t('Cannot write into "config" directory'), + 'hint' => $l->t('This can usually be fixed by ' + . '%sgiving the webserver write access to the config directory%s.', + array('', '')) + ); + } } // Check if there is a writable install folder. @@ -846,7 +848,7 @@ class OC_Util { public static function checkDatabaseVersion() { $l = \OC::$server->getL10N('lib'); $errors = array(); - $dbType = \OC_Config::getValue('dbtype', 'sqlite'); + $dbType = \OC::$server->getSystemConfig()->getValue('dbtype', 'sqlite'); if ($dbType === 'pgsql') { // check PostgreSQL version try { @@ -949,9 +951,11 @@ class OC_Util { $parameters['canResetPassword'] = true; if (!\OC::$server->getSystemConfig()->getValue('lost_password_link')) { - $user = \OC::$server->getUserManager()->get($_REQUEST['user']); - if ($user instanceof IUser) { - $parameters['canResetPassword'] = $user->canChangePassword(); + if (isset($_REQUEST['user'])) { + $user = \OC::$server->getUserManager()->get($_REQUEST['user']); + if ($user instanceof IUser) { + $parameters['canResetPassword'] = $user->canChangePassword(); + } } } @@ -970,7 +974,7 @@ class OC_Util { */ public static function checkAppEnabled($app) { if (!OC_App::isEnabled($app)) { - header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php')); + header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php')); exit(); } } @@ -984,7 +988,7 @@ class OC_Util { public static function checkLoggedIn() { // Check if we are a user if (!OC_User::isLoggedIn()) { - header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php', + header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php', [ 'redirect_url' => \OC::$server->getRequest()->getRequestUri() ] @@ -1002,7 +1006,7 @@ class OC_Util { public static function checkAdminUser() { OC_Util::checkLoggedIn(); if (!OC_User::isAdminUser(OC_User::getUser())) { - header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php')); + header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php')); exit(); } } @@ -1042,7 +1046,7 @@ class OC_Util { } if (!$isSubAdmin) { - header('Location: ' . OC_Helper::linkToAbsolute('', 'index.php')); + header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php')); exit(); } return true; @@ -1104,11 +1108,11 @@ class OC_Util { * @return string */ public static function getInstanceId() { - $id = OC_Config::getValue('instanceid', null); + $id = \OC::$server->getSystemConfig()->getValue('instanceid', null); if (is_null($id)) { // We need to guarantee at least one letter in instanceid so it can be used as the session_name $id = 'oc' . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(10, \OCP\Security\ISecureRandom::CHAR_LOWER.\OCP\Security\ISecureRandom::CHAR_DIGITS); - OC_Config::$object->setValue('instanceid', $id); + \OC::$server->getSystemConfig()->setValue('instanceid', $id); } return $id; } @@ -1123,7 +1127,6 @@ class OC_Util { * Creates a 'request token' (random) and stores it inside the session. * Ever subsequent (ajax) request must use such a valid token to succeed, * otherwise the request will be denied as a protection against CSRF. - * @see OC_Util::isCallRegistered() */ public static function callRegister() { // Use existing token if function has already been called @@ -1150,27 +1153,6 @@ class OC_Util { return self::$obfuscatedToken; } - /** - * Check an ajax get/post call if the request token is valid. - * - * @return boolean False if request token is not set or is invalid. - * @see OC_Util::callRegister() - */ - public static function isCallRegistered() { - return \OC::$server->getRequest()->passesCSRFCheck(); - } - - /** - * Check an ajax get/post call if the request token is valid. Exit if not. - * - * @return void - */ - public static function callCheck() { - if (!OC_Util::isCallRegistered()) { - exit(); - } - } - /** * Public function to sanitize HTML * @@ -1246,7 +1228,7 @@ class OC_Util { fclose($fp); // accessing the file via http - $url = OC_Helper::makeURLAbsolute(OC::$WEBROOT . '/data' . $fileName); + $url = \OC::$server->getURLGenerator()->getAbsoluteURL(OC::$WEBROOT . '/data' . $fileName); try { $content = \OC::$server->getHTTPClientService()->newClient()->get($url)->getBody(); } catch (\Exception $e) { @@ -1360,7 +1342,7 @@ class OC_Util { * @return string the theme */ public static function getTheme() { - $theme = OC_Config::getValue("theme", ''); + $theme = \OC::$server->getSystemConfig()->getValue("theme", ''); if ($theme === '') { if (is_dir(OC::$SERVERROOT . '/themes/default')) { @@ -1505,7 +1487,7 @@ class OC_Util { public static function needUpgrade(\OCP\IConfig $config) { if ($config->getSystemValue('installed', false)) { $installedVersion = $config->getSystemValue('version', '0.0.0'); - $currentVersion = implode('.', OC_Util::getVersion()); + $currentVersion = implode('.', \OCP\Util::getVersion()); $versionDiff = version_compare($currentVersion, $installedVersion); if ($versionDiff > 0) { return true; diff --git a/lib/public/backgroundjob/ijob.php b/lib/public/backgroundjob/ijob.php index a24a543452..8d970dbe78 100644 --- a/lib/public/backgroundjob/ijob.php +++ b/lib/public/backgroundjob/ijob.php @@ -36,11 +36,28 @@ interface IJob { * * @param \OCP\BackgroundJob\IJobList $jobList The job list that manages the state of this job * @param ILogger $logger - * @return void * @since 7.0.0 */ public function execute($jobList, ILogger $logger = null); + /** + * @param int $id + * @since 7.0.0 + */ + public function setId($id); + + /** + * @param int $lastRun + * @since 7.0.0 + */ + public function setLastRun($lastRun); + + /** + * @param mixed $argument + * @since 7.0.0 + */ + public function setArgument($argument); + /** * Get the id of the background job * This id is determined by the job list when a job is added to the list diff --git a/lib/public/backgroundjob/ijoblist.php b/lib/public/backgroundjob/ijoblist.php index 384f8b3d80..51431c42a6 100644 --- a/lib/public/backgroundjob/ijoblist.php +++ b/lib/public/backgroundjob/ijoblist.php @@ -36,7 +36,6 @@ interface IJobList { * * @param \OCP\BackgroundJob\IJob|string $job * @param mixed $argument The argument to be passed to $job->run() when the job is exectured - * @return void * @since 7.0.0 */ public function add($job, $argument = null); @@ -46,7 +45,6 @@ interface IJobList { * * @param \OCP\BackgroundJob\IJob|string $job * @param mixed $argument - * @return void * @since 7.0.0 */ public function remove($job, $argument = null); @@ -72,14 +70,14 @@ interface IJobList { /** * get the next job in the list * - * @return \OCP\BackgroundJob\IJob + * @return \OCP\BackgroundJob\IJob|null * @since 7.0.0 */ public function getNext(); /** * @param int $id - * @return \OCP\BackgroundJob\IJob + * @return \OCP\BackgroundJob\IJob|null * @since 7.0.0 */ public function getById($id); @@ -88,7 +86,6 @@ interface IJobList { * set the job that was last ran to the current time * * @param \OCP\BackgroundJob\IJob $job - * @return void * @since 7.0.0 */ public function setLastJob($job); @@ -105,7 +102,6 @@ interface IJobList { * set the lastRun of $job to now * * @param \OCP\BackgroundJob\IJob $job - * @return void * @since 7.0.0 */ public function setLastRun($job); diff --git a/lib/public/comments/icomment.php b/lib/public/comments/icomment.php index c8f407624a..7924ec8d5f 100644 --- a/lib/public/comments/icomment.php +++ b/lib/public/comments/icomment.php @@ -5,7 +5,7 @@ namespace OCP\Comments; /** * Interface IComment * - * This class represents a comment and offers methods for modification. + * This class represents a comment * * @package OCP\Comments * @since 9.0.0 @@ -49,13 +49,30 @@ interface IComment { /** * sets the parent ID and returns itself - * * @param string $parentId * @return IComment * @since 9.0.0 */ public function setParentId($parentId); + /** + * returns the topmost parent ID of the comment + * + * @return string + * @since 9.0.0 + */ + public function getTopmostParentId(); + + + /** + * sets the topmost parent ID and returns itself + * + * @param string $id + * @return IComment + * @since 9.0.0 + */ + public function setTopmostParentId($id); + /** * returns the number of children * diff --git a/lib/public/comments/icommentsmanager.php b/lib/public/comments/icommentsmanager.php index ebf7a34bf2..7626ffd635 100644 --- a/lib/public/comments/icommentsmanager.php +++ b/lib/public/comments/icommentsmanager.php @@ -12,6 +12,17 @@ namespace OCP\Comments; */ interface ICommentsManager { + /** + * @const DELETED_USER type and id for a user that has been deleted + * @see deleteReferencesOfActor + * @since 9.0.0 + * + * To be used as replacement for user type actors in deleteReferencesOfActor(). + * + * User interfaces shall show "Deleted user" as display name, if needed. + */ + const DELETED_USER = 'deleted_user'; + /** * returns a comment instance * @@ -28,7 +39,7 @@ interface ICommentsManager { * @param string $id * @param int $limit max number of entries to return, 0 returns all * @param int $offset the start entry - * @return [] + * @return array * @since 9.0.0 * * The return array looks like this @@ -73,7 +84,6 @@ interface ICommentsManager { * @param \DateTime $notOlderThan optional, timestamp of the oldest comments * that may be returned * @return IComment[] - * @throws NotFoundException in case the requested type or id is not present * @since 9.0.0 */ public function getForObject( @@ -88,7 +98,6 @@ interface ICommentsManager { * @param $objectType string the object type, e.g. 'files' * @param $objectId string the id of the object * @return Int - * @throws NotFoundException in case the requested type or id is not present * @since 9.0.0 */ public function getNumberOfCommentsForObject($objectType, $objectId); @@ -130,17 +139,20 @@ interface ICommentsManager { * Throws NotFoundException when a comment that is to be updated does not * exist anymore at this point of time. * - * @param IComment + * @param IComment $comment * @return bool * @throws NotFoundException * @since 9.0.0 */ - public function save(&$comment); + public function save(IComment $comment); /** * removes references to specific actor (e.g. on user delete) of a comment. * The comment itself must not get lost/deleted. * + * A 'user' type actor (type and id) should get replaced by the + * value of the DELETED_USER constant of this interface. + * * @param string $actorType the actor type (e.g. 'user') * @param string $actorId a user id * @return boolean diff --git a/lib/public/comments/icommentsmanagerfactory.php b/lib/public/comments/icommentsmanagerfactory.php new file mode 100644 index 0000000000..6718dd39ba --- /dev/null +++ b/lib/public/comments/icommentsmanagerfactory.php @@ -0,0 +1,23 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program 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, version 3, + * along with this program. If not, see + * + */ + +namespace OCP; + +/** + * Interface for memcache backends that support setting ttl after the value is set + * + * @since 8.2.2 + */ +interface IMemcacheTTL extends IMemcache { + /** + * Set the ttl for an existing value + * + * @param string $key + * @param int $ttl time to live in seconds + * @since 8.2.2 + */ + public function setTTL($key, $ttl); +} diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php index 7cb2672254..267e5dc4d3 100644 --- a/lib/public/iservercontainer.php +++ b/lib/public/iservercontainer.php @@ -471,6 +471,12 @@ interface IServerContainer { */ public function getNotificationManager(); + /** + * @return \OCP\Comments\ICommentsManager + * @since 9.0.0 + */ + public function getCommentsManager(); + /** * Returns the system-tag manager * diff --git a/lib/public/security/isecurerandom.php b/lib/public/security/isecurerandom.php index 1b72e4f437..8315d0f971 100644 --- a/lib/public/security/isecurerandom.php +++ b/lib/public/security/isecurerandom.php @@ -23,12 +23,12 @@ namespace OCP\Security; /** - * Class SecureRandom provides a layer around RandomLib to generate - * secure random strings. For PHP 7 the native CSPRNG is used. + * Class SecureRandom provides a wrapper around the random_int function to generate + * secure random strings. For PHP 7 the native CSPRNG is used, older versions do + * use a fallback. * * Usage: - * $rng = new \OC\Security\SecureRandom(); - * $randomString = $rng->getMediumStrengthGenerator()->generateString(30); + * \OC::$server->getSecureRandom()->generate(10); * * @package OCP\Security * @since 8.0.0 @@ -52,6 +52,7 @@ interface ISecureRandom { * * @return $this * @since 8.0.0 + * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int() */ public function getLowStrengthGenerator(); @@ -64,6 +65,7 @@ interface ISecureRandom { * * @return $this * @since 8.0.0 + * @deprecated 9.0.0 Use \OC\Security\SecureRandom::generate directly or random_bytes() / random_int() */ public function getMediumStrengthGenerator(); @@ -73,7 +75,6 @@ interface ISecureRandom { * @param string $characters An optional list of characters to use if no character list is * specified all valid base64 characters are used. * @return string - * @throws \Exception If the generator is not initialized. * @since 8.0.0 */ public function generate($length, diff --git a/lib/public/security/stringutils.php b/lib/public/security/stringutils.php index 4f41fcf826..7cf12ea270 100644 --- a/lib/public/security/stringutils.php +++ b/lib/public/security/stringutils.php @@ -39,8 +39,9 @@ class StringUtils { * @param string $input The input to compare against * @return bool True if the two strings are equal, otherwise false. * @since 8.0.0 + * @deprecated 9.0.0 Use hash_equals */ public static function equals($expected, $input) { - return \OC\Security\StringUtils::equals($expected, $input); + return hash_equals($expected, $input); } } diff --git a/lib/public/util.php b/lib/public/util.php index 4e783b764e..493aa0000a 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -269,7 +269,10 @@ class Util { * @since 4.0.0 - parameter $args was added in 4.5.0 */ public static function linkToAbsolute( $app, $file, $args = array() ) { - return(\OC_Helper::linkToAbsolute( $app, $file, $args )); + $urlGenerator = \OC::$server->getURLGenerator(); + return $urlGenerator->getAbsoluteURL( + $urlGenerator->linkTo($app, $file, $args) + ); } /** @@ -279,7 +282,11 @@ class Util { * @since 4.0.0 */ public static function linkToRemote( $service ) { - return(\OC_Helper::linkToRemote( $service )); + $urlGenerator = \OC::$server->getURLGenerator(); + $remoteBase = $urlGenerator->linkTo('', 'remote.php') . '/' . $service; + return $urlGenerator->getAbsoluteURL( + $remoteBase . (($service[strlen($service) - 1] != '/') ? '/' : '') + ); } /** @@ -302,7 +309,7 @@ class Util { * @since 5.0.0 */ public static function linkToRoute( $route, $parameters = array() ) { - return \OC_Helper::linkToRoute($route, $parameters); + return \OC::$server->getURLGenerator()->linkToRoute($route, $parameters); } /** @@ -316,7 +323,7 @@ class Util { * @since 4.0.0 - parameter $args was added in 4.5.0 */ public static function linkTo( $app, $file, $args = array() ) { - return(\OC_Helper::linkTo( $app, $file, $args )); + return \OC::$server->getURLGenerator()->linkTo($app, $file, $args); } /** @@ -487,7 +494,9 @@ class Util { * @since 4.5.0 */ public static function callCheck() { - \OC_Util::callCheck(); + if (!(\OC::$server->getRequest()->passesCSRFCheck())) { + exit(); + } } /** diff --git a/settings/changepassword/controller.php b/settings/changepassword/controller.php index 695914683d..f5b9bd58b5 100644 --- a/settings/changepassword/controller.php +++ b/settings/changepassword/controller.php @@ -55,10 +55,10 @@ class Controller { \OC_JSON::callCheck(); \OC_JSON::checkLoggedIn(); + $l = new \OC_L10n('settings'); if (isset($_POST['username'])) { $username = $_POST['username']; } else { - $l = new \OC_L10n('settings'); \OC_JSON::error(array('data' => array('message' => $l->t('No user supplied')) )); exit(); } @@ -78,7 +78,6 @@ class Controller { } elseif ($isUserAccessible) { $userstatus = 'subadmin'; } else { - $l = new \OC_L10n('settings'); \OC_JSON::error(array('data' => array('message' => $l->t('Authentication error')) )); exit(); } @@ -122,7 +121,6 @@ class Controller { $validRecoveryPassword = $keyManager->checkRecoveryPassword($recoveryPassword); $recoveryEnabledForUser = $recovery->isRecoveryEnabledForUser($username); } - $l = new \OC_L10n('settings'); if ($recoveryEnabledForUser && $recoveryPassword === '') { \OC_JSON::error(array('data' => array( diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php index d0e465bfa9..d2430f9b55 100644 --- a/settings/controller/appsettingscontroller.php +++ b/settings/controller/appsettingscontroller.php @@ -159,7 +159,7 @@ class AppSettingsController extends Controller { if($this->ocsClient->isAppStoreEnabled()) { // apps from external repo via OCS - $ocs = $this->ocsClient->getCategories(\OC_Util::getVersion()); + $ocs = $this->ocsClient->getCategories(\OCP\Util::getVersion()); if ($ocs) { foreach($ocs as $k => $v) { $name = str_replace('ownCloud ', '', $v); @@ -205,9 +205,10 @@ class AppSettingsController extends Controller { } return ($a < $b) ? -1 : 1; }); + $version = \OCP\Util::getVersion(); foreach($apps as $key => $app) { if(!array_key_exists('level', $app) && array_key_exists('ocsid', $app)) { - $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], \OC_Util::getVersion()); + $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], $version); if(is_array($remoteAppEntry) && array_key_exists('level', $remoteAppEntry)) { $apps[$key]['level'] = $remoteAppEntry['level']; @@ -221,9 +222,10 @@ class AppSettingsController extends Controller { $apps = array_filter($apps, function ($app) { return !$app['active']; }); + $version = \OCP\Util::getVersion(); foreach($apps as $key => $app) { if(!array_key_exists('level', $app) && array_key_exists('ocsid', $app)) { - $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], \OC_Util::getVersion()); + $remoteAppEntry = $this->ocsClient->getApplication($app['ocsid'], $version); if(is_array($remoteAppEntry) && array_key_exists('level', $remoteAppEntry)) { $apps[$key]['level'] = $remoteAppEntry['level']; diff --git a/settings/help.php b/settings/help.php index 60719a3df9..848ce06cf4 100644 --- a/settings/help.php +++ b/settings/help.php @@ -34,17 +34,17 @@ OC_Util::addStyle( "settings", "settings" ); if(isset($_GET['mode']) and $_GET['mode'] === 'admin') { - $url=OC_Helper::linkToAbsolute( 'core', 'doc/admin/index.html' ); + $url=\OCP\Util::linkToAbsolute( 'core', 'doc/admin/index.html' ); $style1=''; $style2=' active'; }else{ - $url=OC_Helper::linkToAbsolute( 'core', 'doc/user/index.html' ); + $url=\OCP\Util::linkToAbsolute( 'core', 'doc/user/index.html' ); $style1=' active'; $style2=''; } -$url1=OC_Helper::linkToRoute( "settings_help" ).'?mode=user'; -$url2=OC_Helper::linkToRoute( "settings_help" ).'?mode=admin'; +$url1=\OC::$server->getURLGenerator()->linkToRoute('settings_help').'?mode=user'; +$url2=\OC::$server->getURLGenerator()->linkToRoute('settings_help').'?mode=admin'; $tmpl = new OC_Template( "settings", "help", "user" ); $tmpl->assign( "admin", OC_User::isAdminUser(OC_User::getUser())); diff --git a/settings/js/personal.js b/settings/js/personal.js index 8362adac2a..b90194b90e 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -405,6 +405,11 @@ $(document).ready(function () { if ($('#sslCertificate > tbody > tr').length === 0) { $('#sslCertificate').hide(); } + + // Load the big avatar + if (oc_config.enable_avatars) { + $('#avatar .avatardiv').avatar(OC.currentUser, 128); + } }); if (!OC.Encryption) { diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 2f8a964baf..aea9405357 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -68,7 +68,7 @@ var UserList = { if (user.isAvatarAvailable === true) { $('div.avatardiv', $tr).avatar(user.name, 32, undefined, undefined, undefined, user.displayname); } else { - $('div.avatardiv', $tr).imageplaceholder(user.displayname); + $('div.avatardiv', $tr).imageplaceholder(user.displayname, undefined, 32); } } @@ -650,7 +650,7 @@ $(document).ready(function () { {username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal}, function (result) { if (result.status != 'success') { - OC.Notification.show(t('admin', result.data.message)); + OC.Notification.showTemporary(t('admin', result.data.message)); } } ); @@ -698,6 +698,8 @@ $(document).ready(function () { } } ); + var displayName = $input.val(); + $tr.data('displayname', displayName); $input.blur(); } else { $input.blur(); @@ -705,8 +707,7 @@ $(document).ready(function () { } }) .blur(function () { - var displayName = $input.val(); - $tr.data('displayname', displayName); + var displayName = $tr.data('displayname'); $input.replaceWith('' + escapeHTML(displayName) + ''); $td.find('img').show(); }); @@ -725,6 +726,7 @@ $(document).ready(function () { .keypress(function (event) { if (event.keyCode === 13) { if ($(this).val().length > 0) { + $tr.data('mailAddress', $input.val()); $input.blur(); $.ajax({ type: 'PUT', @@ -744,7 +746,7 @@ $(document).ready(function () { } }) .blur(function () { - var mailAddress = $input.val(); + var mailAddress = $tr.data('mailAddress'); var $span = $('').text(mailAddress); $tr.data('mailAddress', mailAddress); $input.replaceWith($span); diff --git a/settings/l10n/ar.js b/settings/l10n/ar.js index 818d001b3d..b6b1797440 100644 --- a/settings/l10n/ar.js +++ b/settings/l10n/ar.js @@ -4,11 +4,9 @@ OC.L10N.register( "Sharing" : "مشاركة", "Cron" : "مجدول", "Log" : "سجل", - "Authentication error" : "لم يتم التأكد من الشخصية بنجاح", - "Your full name has been changed." : "اسمك الكامل تم تغييره.", - "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل", "Language changed" : "تم تغيير اللغة", "Invalid request" : "طلب غير مفهوم", + "Authentication error" : "لم يتم التأكد من الشخصية بنجاح", "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s", "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s", @@ -23,6 +21,8 @@ OC.L10N.register( "test email settings" : "إعدادات البريد التجريبي", "Email sent" : "تم ارسال البريد الالكتروني", "Email saved" : "تم حفظ البريد الإلكتروني", + "Your full name has been changed." : "اسمك الكامل تم تغييره.", + "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل", "Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.", "Sending..." : "جاري الارسال ...", "All" : "الكل", @@ -82,7 +82,6 @@ OC.L10N.register( "Forum" : "منتدى", "Get the apps to sync your files" : "احصل على التطبيقات لمزامنة ملفاتك", "Show First Run Wizard again" : "ابدأ خطوات بداية التشغيل من جديد", - "You have used %s of the available %s" : "تم إستهلاك %s من المتوفر %s", "Password" : "كلمة المرور", "Unable to change your password" : "لم يتم تعديل كلمة السر بنجاح", "Current password" : "كلمات السر الحالية", diff --git a/settings/l10n/ar.json b/settings/l10n/ar.json index 6e2a8268b5..770e285626 100644 --- a/settings/l10n/ar.json +++ b/settings/l10n/ar.json @@ -2,11 +2,9 @@ "Sharing" : "مشاركة", "Cron" : "مجدول", "Log" : "سجل", - "Authentication error" : "لم يتم التأكد من الشخصية بنجاح", - "Your full name has been changed." : "اسمك الكامل تم تغييره.", - "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل", "Language changed" : "تم تغيير اللغة", "Invalid request" : "طلب غير مفهوم", + "Authentication error" : "لم يتم التأكد من الشخصية بنجاح", "Admins can't remove themself from the admin group" : "لا يستطيع المدير إزالة حسابه من مجموعة المديرين", "Unable to add user to group %s" : "فشل إضافة المستخدم الى المجموعة %s", "Unable to remove user from group %s" : "فشل إزالة المستخدم من المجموعة %s", @@ -21,6 +19,8 @@ "test email settings" : "إعدادات البريد التجريبي", "Email sent" : "تم ارسال البريد الالكتروني", "Email saved" : "تم حفظ البريد الإلكتروني", + "Your full name has been changed." : "اسمك الكامل تم تغييره.", + "Unable to change full name" : "لم يتم التمكن من تغيير اسمك الكامل", "Are you really sure you want add \"{domain}\" as trusted domain?" : "هل أنت متأكد انك تريد إضافة \"{domain}\" كنطاق موثوق فيه.", "Sending..." : "جاري الارسال ...", "All" : "الكل", @@ -80,7 +80,6 @@ "Forum" : "منتدى", "Get the apps to sync your files" : "احصل على التطبيقات لمزامنة ملفاتك", "Show First Run Wizard again" : "ابدأ خطوات بداية التشغيل من جديد", - "You have used %s of the available %s" : "تم إستهلاك %s من المتوفر %s", "Password" : "كلمة المرور", "Unable to change your password" : "لم يتم تعديل كلمة السر بنجاح", "Current password" : "كلمات السر الحالية", diff --git a/settings/l10n/ast.js b/settings/l10n/ast.js index 9597cc9a52..8bca7c8c0d 100644 --- a/settings/l10n/ast.js +++ b/settings/l10n/ast.js @@ -6,12 +6,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Rexistru", "Updates" : "Anovamientos", - "Authentication error" : "Fallu d'autenticación", - "Your full name has been changed." : "Camudóse'l nome completu.", - "Unable to change full name" : "Nun pue camudase'l nome completu", "Couldn't remove app." : "Nun pudo desaniciase l'aplicación.", "Language changed" : "Camudóse la llingua", "Invalid request" : "Solicitú inválida", + "Authentication error" : "Fallu d'autenticación", "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador", "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s", "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s", @@ -28,6 +26,8 @@ OC.L10N.register( "Email sent" : "Corréu-e unviáu", "You need to set your user email before being able to send test emails." : "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.", "Email saved" : "Corréu-e guardáu", + "Your full name has been changed." : "Camudóse'l nome completu.", + "Unable to change full name" : "Nun pue camudase'l nome completu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?", "Add trusted domain" : "Amestar dominiu de confianza", "Sending..." : "Unviando...", @@ -127,7 +127,6 @@ OC.L10N.register( "Android app" : "Aplicación d'Android", "iOS app" : "Aplicación d'iOS", "Show First Run Wizard again" : "Amosar nuevamente l'Encontu d'execución inicial", - "You have used %s of the available %s" : "Usasti %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "Nun pudo camudase la contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/ast.json b/settings/l10n/ast.json index c3252ba8bf..e824763c7a 100644 --- a/settings/l10n/ast.json +++ b/settings/l10n/ast.json @@ -4,12 +4,10 @@ "Cron" : "Cron", "Log" : "Rexistru", "Updates" : "Anovamientos", - "Authentication error" : "Fallu d'autenticación", - "Your full name has been changed." : "Camudóse'l nome completu.", - "Unable to change full name" : "Nun pue camudase'l nome completu", "Couldn't remove app." : "Nun pudo desaniciase l'aplicación.", "Language changed" : "Camudóse la llingua", "Invalid request" : "Solicitú inválida", + "Authentication error" : "Fallu d'autenticación", "Admins can't remove themself from the admin group" : "Los alministradores nun puen desaniciase a ellos mesmos del grupu d'alministrador", "Unable to add user to group %s" : "Nun pudo amestase l'usuariu al grupu %s", "Unable to remove user from group %s" : "Nun pudo desaniciase al usuariu del grupu %s", @@ -26,6 +24,8 @@ "Email sent" : "Corréu-e unviáu", "You need to set your user email before being able to send test emails." : "Tienes de configurar la direición de corréu-e enantes de poder unviar mensaxes de prueba.", "Email saved" : "Corréu-e guardáu", + "Your full name has been changed." : "Camudóse'l nome completu.", + "Unable to change full name" : "Nun pue camudase'l nome completu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿De xuru que quies amestar \"{domain}\" como dominiu de confianza?", "Add trusted domain" : "Amestar dominiu de confianza", "Sending..." : "Unviando...", @@ -125,7 +125,6 @@ "Android app" : "Aplicación d'Android", "iOS app" : "Aplicación d'iOS", "Show First Run Wizard again" : "Amosar nuevamente l'Encontu d'execución inicial", - "You have used %s of the available %s" : "Usasti %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "Nun pudo camudase la contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/az.js b/settings/l10n/az.js index 60a2492a28..01a15f5fb7 100644 --- a/settings/l10n/az.js +++ b/settings/l10n/az.js @@ -7,12 +7,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Jurnal", "Updates" : "Yenilənmələr", - "Authentication error" : "Təyinat metodikası", - "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.", - "Unable to change full name" : "Tam adı dəyişmək olmur", "Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.", "Language changed" : "Dil dəyişdirildi", "Invalid request" : "Səhv müraciət", + "Authentication error" : "Təyinat metodikası", "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz", "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı", "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı", @@ -44,6 +42,8 @@ OC.L10N.register( "Invalid user" : "İstifadəçi adı yalnışdır", "Unable to change mail address" : "Mail ünvanını dəyişmək olmur", "Email saved" : "Məktub yadda saxlanıldı", + "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.", + "Unable to change full name" : "Tam adı dəyişmək olmur", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?", "Add trusted domain" : "İnamlı domainlərə əlavə et", "Sending..." : "Göndərilir...", @@ -173,7 +173,6 @@ OC.L10N.register( "iOS app" : "iOS proqramı", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Əgər siz proektə dəstək vermək istəyirsinizsə\n\t\tTəkmilləşdirməyə üzv\n\t\tyada\n\t\tsöz yaymaq!", "Show First Run Wizard again" : "İlk işəsalma sehirbazını yenidən göstər", - "You have used %s of the available %s" : "Siz istifadə etdiniz %s mövcud olan %s", "Password" : "Şifrə", "Unable to change your password" : "Sizin şifrəni dəyişmək mümkün olmadı", "Current password" : "Hazırkı şifrə", diff --git a/settings/l10n/az.json b/settings/l10n/az.json index 8b46a472df..8e09dc87fc 100644 --- a/settings/l10n/az.json +++ b/settings/l10n/az.json @@ -5,12 +5,10 @@ "Cron" : "Cron", "Log" : "Jurnal", "Updates" : "Yenilənmələr", - "Authentication error" : "Təyinat metodikası", - "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.", - "Unable to change full name" : "Tam adı dəyişmək olmur", "Couldn't remove app." : "Proqram təminatını silmək mümkün olmadı.", "Language changed" : "Dil dəyişdirildi", "Invalid request" : "Səhv müraciət", + "Authentication error" : "Təyinat metodikası", "Admins can't remove themself from the admin group" : "İnzibatçılar özlərini inzibatçı qrupundan silə bilməz", "Unable to add user to group %s" : "İstifadəçini %s qrupuna əlavə etmək mümkün olmadı", "Unable to remove user from group %s" : "İstifadəçini %s qrupundan silmək mümkün olmadı", @@ -42,6 +40,8 @@ "Invalid user" : "İstifadəçi adı yalnışdır", "Unable to change mail address" : "Mail ünvanını dəyişmək olmur", "Email saved" : "Məktub yadda saxlanıldı", + "Your full name has been changed." : "Sizin tam adınız dəyişdirildi.", + "Unable to change full name" : "Tam adı dəyişmək olmur", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" adını inamlı domainlər siyahısına əlavə etməyinizdən əminsinizmi?", "Add trusted domain" : "İnamlı domainlərə əlavə et", "Sending..." : "Göndərilir...", @@ -171,7 +171,6 @@ "iOS app" : "iOS proqramı", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Əgər siz proektə dəstək vermək istəyirsinizsə\n\t\tTəkmilləşdirməyə üzv\n\t\tyada\n\t\tsöz yaymaq!", "Show First Run Wizard again" : "İlk işəsalma sehirbazını yenidən göstər", - "You have used %s of the available %s" : "Siz istifadə etdiniz %s mövcud olan %s", "Password" : "Şifrə", "Unable to change your password" : "Sizin şifrəni dəyişmək mümkün olmadı", "Current password" : "Hazırkı şifrə", diff --git a/settings/l10n/bg_BG.js b/settings/l10n/bg_BG.js index 425b8f47dc..81b2060129 100644 --- a/settings/l10n/bg_BG.js +++ b/settings/l10n/bg_BG.js @@ -7,12 +7,10 @@ OC.L10N.register( "Cron" : "Крон", "Log" : "Лог", "Updates" : "Обновления", - "Authentication error" : "Възникна проблем с идентификацията", - "Your full name has been changed." : "Вашето пълно име е променено.", - "Unable to change full name" : "Неуспешна промяна на пълното име.", "Couldn't remove app." : "Неуспешно премахване на приложението.", "Language changed" : "Езикът е променен", "Invalid request" : "Невалидна заявка", + "Authentication error" : "Възникна проблем с идентификацията", "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".", "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.", "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.", @@ -43,6 +41,8 @@ OC.L10N.register( "Invalid user" : "Невалиден протребител", "Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща", "Email saved" : "Имейлът е запазен", + "Your full name has been changed." : "Вашето пълно име е променено.", + "Unable to change full name" : "Неуспешна промяна на пълното име.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?", "Add trusted domain" : "Добавяне на сигурен домейн", "Sending..." : "Изпращане...", @@ -173,7 +173,6 @@ OC.L10N.register( "iOS app" : "iOS приложение", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ако искаш да помогнеш на проекта:\n\t\tприсъедини се и пиши код\n\t\tили\n\t\tразпространи мълвата!", "Show First Run Wizard again" : "Покажи Настройките за Първоначално Зареждане отново", - "You have used %s of the available %s" : "Използвал си %s от наличните %s.", "Password" : "Парола", "Unable to change your password" : "Неуспешна промяна на паролата.", "Current password" : "Текуща парола", diff --git a/settings/l10n/bg_BG.json b/settings/l10n/bg_BG.json index e12faed8f6..0bcb30520e 100644 --- a/settings/l10n/bg_BG.json +++ b/settings/l10n/bg_BG.json @@ -5,12 +5,10 @@ "Cron" : "Крон", "Log" : "Лог", "Updates" : "Обновления", - "Authentication error" : "Възникна проблем с идентификацията", - "Your full name has been changed." : "Вашето пълно име е променено.", - "Unable to change full name" : "Неуспешна промяна на пълното име.", "Couldn't remove app." : "Неуспешно премахване на приложението.", "Language changed" : "Езикът е променен", "Invalid request" : "Невалидна заявка", + "Authentication error" : "Възникна проблем с идентификацията", "Admins can't remove themself from the admin group" : "Администраторите не могат да премахват себе си от групата \"admin\".", "Unable to add user to group %s" : "Неуспешно добавяне на потребител към групата %s.", "Unable to remove user from group %s" : "Неуспешно премахване на потребител от групата %s.", @@ -41,6 +39,8 @@ "Invalid user" : "Невалиден протребител", "Unable to change mail address" : "Неуспешна промяна на адрес на електронна поща", "Email saved" : "Имейлът е запазен", + "Your full name has been changed." : "Вашето пълно име е променено.", + "Unable to change full name" : "Неуспешна промяна на пълното име.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Сигурен/на ли сте, че искате \"{domain}\" да бъде добавен като сигурен домейн?", "Add trusted domain" : "Добавяне на сигурен домейн", "Sending..." : "Изпращане...", @@ -171,7 +171,6 @@ "iOS app" : "iOS приложение", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ако искаш да помогнеш на проекта:\n\t\tприсъедини се и пиши код\n\t\tили\n\t\tразпространи мълвата!", "Show First Run Wizard again" : "Покажи Настройките за Първоначално Зареждане отново", - "You have used %s of the available %s" : "Използвал си %s от наличните %s.", "Password" : "Парола", "Unable to change your password" : "Неуспешна промяна на паролата.", "Current password" : "Текуща парола", diff --git a/settings/l10n/bn_BD.js b/settings/l10n/bn_BD.js index b83657ea34..3e9e28da9a 100644 --- a/settings/l10n/bn_BD.js +++ b/settings/l10n/bn_BD.js @@ -3,11 +3,10 @@ OC.L10N.register( { "Sharing" : "ভাগাভাগিরত", "External Storage" : "বাহ্যিক সংরক্ষণাগার", - "Authentication error" : "অনুমোদন ঘটিত সমস্যা", - "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।", "Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা", "Language changed" : "ভাষা পরিবর্তন করা হয়েছে", "Invalid request" : "অনুরোধটি সঠিক নয়", + "Authentication error" : "অনুমোদন ঘটিত সমস্যা", "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না", "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ", "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না", @@ -19,6 +18,7 @@ OC.L10N.register( "test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন", "Email sent" : "ই-মেইল পাঠানো হয়েছে", "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে", + "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।", "All" : "সবাই", "Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ", "Disable" : "নিষ্ক্রিয়", @@ -55,7 +55,6 @@ OC.L10N.register( "Forum" : "ফোরাম", "Get the apps to sync your files" : "আপনার ফাইলসমূহ সিংক করতে অ্যাপস নিন", "Show First Run Wizard again" : "প্রথমবার চালানোর যাদুকর পূনরায় প্রদর্শন কর", - "You have used %s of the available %s" : "আপনি ব্যবহার করছেন %s, সুলভ %s এর মধ্যে।", "Password" : "কূটশব্দ", "Unable to change your password" : "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়", "Current password" : "বর্তমান কূটশব্দ", diff --git a/settings/l10n/bn_BD.json b/settings/l10n/bn_BD.json index daa17c9fa9..ec57244bb7 100644 --- a/settings/l10n/bn_BD.json +++ b/settings/l10n/bn_BD.json @@ -1,11 +1,10 @@ { "translations": { "Sharing" : "ভাগাভাগিরত", "External Storage" : "বাহ্যিক সংরক্ষণাগার", - "Authentication error" : "অনুমোদন ঘটিত সমস্যা", - "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।", "Couldn't remove app." : "অ্যাপ অপসারণ করা গেলনা", "Language changed" : "ভাষা পরিবর্তন করা হয়েছে", "Invalid request" : "অনুরোধটি সঠিক নয়", + "Authentication error" : "অনুমোদন ঘটিত সমস্যা", "Admins can't remove themself from the admin group" : "প্রশাসকবৃন্দ তাদেরকে প্রশাসক গোষ্ঠী থেকে মুছে ফেলতে পারবেন না", "Unable to add user to group %s" : " %s গোষ্ঠীতে ব্যবহারকারী যোগ করা সম্ভব হলো না ", "Unable to remove user from group %s" : "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না", @@ -17,6 +16,7 @@ "test email settings" : "ইমেইল নিয়ামকসমূহ পরীক্ষা করুন", "Email sent" : "ই-মেইল পাঠানো হয়েছে", "Email saved" : "ই-মেইল সংরক্ষন করা হয়েছে", + "Your full name has been changed." : "আপনার পূর্ণ নাম পরিবর্তন করা হয়েছে।", "All" : "সবাই", "Error while disabling app" : "অ্যাপ অকার্যকর করতে সমস্যা দেখা দিয়েছে ", "Disable" : "নিষ্ক্রিয়", @@ -53,7 +53,6 @@ "Forum" : "ফোরাম", "Get the apps to sync your files" : "আপনার ফাইলসমূহ সিংক করতে অ্যাপস নিন", "Show First Run Wizard again" : "প্রথমবার চালানোর যাদুকর পূনরায় প্রদর্শন কর", - "You have used %s of the available %s" : "আপনি ব্যবহার করছেন %s, সুলভ %s এর মধ্যে।", "Password" : "কূটশব্দ", "Unable to change your password" : "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়", "Current password" : "বর্তমান কূটশব্দ", diff --git a/settings/l10n/bs.js b/settings/l10n/bs.js index feafcfe966..b209de0e71 100644 --- a/settings/l10n/bs.js +++ b/settings/l10n/bs.js @@ -5,12 +5,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Zapisnik", "Updates" : "Ažuriranja", - "Authentication error" : "Grešna autentifikacije", - "Your full name has been changed." : "Vaše puno ime je promijenjeno.", - "Unable to change full name" : "Puno ime nije moguće promijeniti", "Couldn't remove app." : "Nije moguće ukloniti aplikaciju.", "Language changed" : "Jezik je promijenjen", "Invalid request" : "Neispravan zahtjev", + "Authentication error" : "Grešna autentifikacije", "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", @@ -37,6 +35,8 @@ OC.L10N.register( "Invalid user" : "Nevažeči korisnik", "Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte", "Email saved" : "E-pošta je spremljena", + "Your full name has been changed." : "Vaše puno ime je promijenjeno.", + "Unable to change full name" : "Puno ime nije moguće promijeniti", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Add trusted domain" : "Dodaj pouzdanu domenu", "Sending..." : "Slanje...", @@ -145,7 +145,6 @@ OC.L10N.register( "Android app" : "Android aplikacija", "iOS app" : "iOS aplikacija", "Show First Run Wizard again" : "Opet pokažite First Run Wizard", - "You have used %s of the available %s" : "Iskoristili ste %s od raspoloživog %s", "Password" : "Lozinka", "Unable to change your password" : "Vašu lozinku nije moguće promijeniti", "Current password" : "Trenutna lozinka", diff --git a/settings/l10n/bs.json b/settings/l10n/bs.json index ece2026bc2..f85499598d 100644 --- a/settings/l10n/bs.json +++ b/settings/l10n/bs.json @@ -3,12 +3,10 @@ "Cron" : "Cron", "Log" : "Zapisnik", "Updates" : "Ažuriranja", - "Authentication error" : "Grešna autentifikacije", - "Your full name has been changed." : "Vaše puno ime je promijenjeno.", - "Unable to change full name" : "Puno ime nije moguće promijeniti", "Couldn't remove app." : "Nije moguće ukloniti aplikaciju.", "Language changed" : "Jezik je promijenjen", "Invalid request" : "Neispravan zahtjev", + "Authentication error" : "Grešna autentifikacije", "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", @@ -35,6 +33,8 @@ "Invalid user" : "Nevažeči korisnik", "Unable to change mail address" : "Nemoguće je izmjeniti adresu e-pošte", "Email saved" : "E-pošta je spremljena", + "Your full name has been changed." : "Vaše puno ime je promijenjeno.", + "Unable to change full name" : "Puno ime nije moguće promijeniti", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li zaista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Add trusted domain" : "Dodaj pouzdanu domenu", "Sending..." : "Slanje...", @@ -143,7 +143,6 @@ "Android app" : "Android aplikacija", "iOS app" : "iOS aplikacija", "Show First Run Wizard again" : "Opet pokažite First Run Wizard", - "You have used %s of the available %s" : "Iskoristili ste %s od raspoloživog %s", "Password" : "Lozinka", "Unable to change your password" : "Vašu lozinku nije moguće promijeniti", "Current password" : "Trenutna lozinka", diff --git a/settings/l10n/ca.js b/settings/l10n/ca.js index 1725d278b4..798f6c3959 100644 --- a/settings/l10n/ca.js +++ b/settings/l10n/ca.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Registre", "Tips & tricks" : "Consells i trucs", "Updates" : "Actualitzacions", - "Authentication error" : "Error d'autenticació", - "Your full name has been changed." : "El vostre nom complet ha canviat.", - "Unable to change full name" : "No s'ha pogut canviar el nom complet", "Couldn't remove app." : "No s'ha pogut eliminar l'aplicació", "Language changed" : "S'ha canviat l'idioma", "Invalid request" : "Sol·licitud no vàlida", + "Authentication error" : "Error d'autenticació", "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin", "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s", "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s", @@ -50,6 +48,8 @@ OC.L10N.register( "Invalid user" : "Usuari no vàlid", "Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic", "Email saved" : "S'ha desat el correu electrònic", + "Your full name has been changed." : "El vostre nom complet ha canviat.", + "Unable to change full name" : "No s'ha pogut canviar el nom complet", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?", "Add trusted domain" : "Afegir domini de confiança", "Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració", @@ -199,7 +199,6 @@ OC.L10N.register( "iOS app" : "aplicació para iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Si vol recolzar el projecte\n⇥⇥ unir-se al desenvolupament\n⇥⇥o\n⇥⇥ difondre'l !!", "Show First Run Wizard again" : "Torna a mostrar l'assistent de primera execució", - "You have used %s of the available %s" : "Heu utilitzat %s d'un total disponible de %s", "Password" : "Contrasenya", "Unable to change your password" : "No s'ha pogut canviar la contrasenya", "Current password" : "Contrasenya actual", diff --git a/settings/l10n/ca.json b/settings/l10n/ca.json index 39f569a4a1..00f13762a8 100644 --- a/settings/l10n/ca.json +++ b/settings/l10n/ca.json @@ -10,12 +10,10 @@ "Log" : "Registre", "Tips & tricks" : "Consells i trucs", "Updates" : "Actualitzacions", - "Authentication error" : "Error d'autenticació", - "Your full name has been changed." : "El vostre nom complet ha canviat.", - "Unable to change full name" : "No s'ha pogut canviar el nom complet", "Couldn't remove app." : "No s'ha pogut eliminar l'aplicació", "Language changed" : "S'ha canviat l'idioma", "Invalid request" : "Sol·licitud no vàlida", + "Authentication error" : "Error d'autenticació", "Admins can't remove themself from the admin group" : "Els administradors no es poden eliminar del grup admin", "Unable to add user to group %s" : "No es pot afegir l'usuari al grup %s", "Unable to remove user from group %s" : "No es pot eliminar l'usuari del grup %s", @@ -48,6 +46,8 @@ "Invalid user" : "Usuari no vàlid", "Unable to change mail address" : "No es pot canviar l'adreça de correu electrònic", "Email saved" : "S'ha desat el correu electrònic", + "Your full name has been changed." : "El vostre nom complet ha canviat.", + "Unable to change full name" : "No s'ha pogut canviar el nom complet", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Esteu seguir que voleu afegir \"{domain}\" com a un domini de confiança?", "Add trusted domain" : "Afegir domini de confiança", "Migration in progress. Please wait until the migration is finished" : "Migració en progrés. Si us plau, espereu fins que finalitzi la migració", @@ -197,7 +197,6 @@ "iOS app" : "aplicació para iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Si vol recolzar el projecte\n⇥⇥ unir-se al desenvolupament\n⇥⇥o\n⇥⇥ difondre'l !!", "Show First Run Wizard again" : "Torna a mostrar l'assistent de primera execució", - "You have used %s of the available %s" : "Heu utilitzat %s d'un total disponible de %s", "Password" : "Contrasenya", "Unable to change your password" : "No s'ha pogut canviar la contrasenya", "Current password" : "Contrasenya actual", diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 3e5d3867c6..c9fcc22e37 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Záznam", "Tips & tricks" : "Tipy a triky", "Updates" : "Aktualizace", - "Authentication error" : "Chyba přihlášení", - "Your full name has been changed." : "Vaše celé jméno bylo změněno.", - "Unable to change full name" : "Nelze změnit celé jméno", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", "Language changed" : "Jazyk byl změněn", "Invalid request" : "Neplatný požadavek", + "Authentication error" : "Chyba přihlášení", "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců", "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s", "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Neplatný uživatel", "Unable to change mail address" : "Nelze změnit emailovou adresu", "Email saved" : "Email uložen", + "Your full name has been changed." : "Vaše celé jméno bylo změněno.", + "Unable to change full name" : "Nelze změnit celé jméno", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?", "Add trusted domain" : "Přidat důvěryhodnou doménu", "Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwrite.cli.url\" (Je doporučena tato: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nebylo možné spustit službu cron v CLI. Došlo k následujícím technickým chybám:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transakční uzamykání souborů používá databázi jako uzamykací mechanismus, pro co nejlepší výkon nakonfigurujte uzamykání pomocí memcache. Více informací najdete v dokumentaci ↗.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Ověřte znovu prosím informace z instalační příručky ↗ a zkontrolujte log na výskyt chyb a varování.", "All checks passed." : "Všechny testy byly úspěšné.", "Open documentation" : "Otevřít dokumentaci", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "iOS aplikace", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Chcete-li podpořit tento projekt\n\t\tpřidejte se k jeho vývoji\n\t\tnebo\n\t\tšiřte osvětu!", "Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním", - "You have used %s of the available %s" : "Používáte %s z %s dostupných", "Password" : "Heslo", "Unable to change your password" : "Změna vašeho hesla se nezdařila", "Current password" : "Současné heslo", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index 42771f82ba..43b692760f 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -10,12 +10,10 @@ "Log" : "Záznam", "Tips & tricks" : "Tipy a triky", "Updates" : "Aktualizace", - "Authentication error" : "Chyba přihlášení", - "Your full name has been changed." : "Vaše celé jméno bylo změněno.", - "Unable to change full name" : "Nelze změnit celé jméno", "Couldn't remove app." : "Nepodařilo se odebrat aplikaci.", "Language changed" : "Jazyk byl změněn", "Invalid request" : "Neplatný požadavek", + "Authentication error" : "Chyba přihlášení", "Admins can't remove themself from the admin group" : "Správci se nemohou odebrat sami ze skupiny správců", "Unable to add user to group %s" : "Nelze přidat uživatele do skupiny %s", "Unable to remove user from group %s" : "Nelze odebrat uživatele ze skupiny %s", @@ -51,6 +49,8 @@ "Invalid user" : "Neplatný uživatel", "Unable to change mail address" : "Nelze změnit emailovou adresu", "Email saved" : "Email uložen", + "Your full name has been changed." : "Vaše celé jméno bylo změněno.", + "Unable to change full name" : "Nelze změnit celé jméno", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jste si jisti, že chcete přidat \"{domain}\" mezi důvěryhodné domény?", "Add trusted domain" : "Přidat důvěryhodnou doménu", "Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Velmi doporučujeme nainstalovat požadované balíčky do systému, pro podporu jednoho z následujících národních prostředí: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Instalace mimo kořenový adresář domény a používání systémového příkazu cron může způsobit problém s generováním správné URL. Pro zabránění těmto chybám nastavte prosím správnou cestu ve svém config.php souboru v hodnotě \"overwrite.cli.url\" (Je doporučena tato: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Nebylo možné spustit službu cron v CLI. Došlo k následujícím technickým chybám:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transakční uzamykání souborů používá databázi jako uzamykací mechanismus, pro co nejlepší výkon nakonfigurujte uzamykání pomocí memcache. Více informací najdete v dokumentaci ↗.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Ověřte znovu prosím informace z instalační příručky ↗ a zkontrolujte log na výskyt chyb a varování.", "All checks passed." : "Všechny testy byly úspěšné.", "Open documentation" : "Otevřít dokumentaci", @@ -229,7 +228,6 @@ "iOS app" : "iOS aplikace", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Chcete-li podpořit tento projekt\n\t\tpřidejte se k jeho vývoji\n\t\tnebo\n\t\tšiřte osvětu!", "Show First Run Wizard again" : "Znovu zobrazit průvodce prvním spuštěním", - "You have used %s of the available %s" : "Používáte %s z %s dostupných", "Password" : "Heslo", "Unable to change your password" : "Změna vašeho hesla se nezdařila", "Current password" : "Současné heslo", diff --git a/settings/l10n/cy_GB.js b/settings/l10n/cy_GB.js index 590745e735..74cb40cf89 100644 --- a/settings/l10n/cy_GB.js +++ b/settings/l10n/cy_GB.js @@ -1,8 +1,8 @@ OC.L10N.register( "settings", { - "Authentication error" : "Gwall dilysu", "Invalid request" : "Cais annilys", + "Authentication error" : "Gwall dilysu", "Email sent" : "Anfonwyd yr e-bost", "Delete" : "Dileu", "Groups" : "Grwpiau", diff --git a/settings/l10n/cy_GB.json b/settings/l10n/cy_GB.json index 41535c5c9c..537395458b 100644 --- a/settings/l10n/cy_GB.json +++ b/settings/l10n/cy_GB.json @@ -1,6 +1,6 @@ { "translations": { - "Authentication error" : "Gwall dilysu", "Invalid request" : "Cais annilys", + "Authentication error" : "Gwall dilysu", "Email sent" : "Anfonwyd yr e-bost", "Delete" : "Dileu", "Groups" : "Grwpiau", diff --git a/settings/l10n/da.js b/settings/l10n/da.js index b69c9d248d..e5f7a69437 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Log", "Tips & tricks" : "Tips & tricks", "Updates" : "Opdateringer", - "Authentication error" : "Adgangsfejl", - "Your full name has been changed." : "Dit fulde navn er blevet ændret.", - "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn", "Couldn't remove app." : "Kunne ikke fjerne app'en.", "Language changed" : "Sprog ændret", "Invalid request" : "Ugyldig forespørgsel", + "Authentication error" : "Adgangsfejl", "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen", "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s", "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Ugyldig bruger", "Unable to change mail address" : "Kan ikke ændre mailadresse", "Email saved" : "E-mailadressen er gemt", + "Your full name has been changed." : "Dit fulde navn er blevet ændret.", + "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?", "Add trusted domain" : "Tilføj et domæne som du har tillid til", "Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet", @@ -132,7 +132,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke muligt at udføre cronjobbet via kommandolinjefladen CLI. Følgende tekniske fejl fremkom:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transaktions låsning af filer bliver brugt af databasen som lås til backend, for den bedste ydelse tilrådes det at konfigurere memcache. Se documentation ↗ for mere information", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Dobbelttjek venligst , og tjek om der er fejl eller advarsler i loggen.", "All checks passed." : "Alle tjek blev bestået.", "Open documentation" : "Åben dokumentation", @@ -223,7 +222,6 @@ OC.L10N.register( "iOS app" : "iOS-app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Hvis du vil støtte projektet, så\n\t\tdeltag i udviklingen\n\t\teller\n\t\tspred budskabet!", "Show First Run Wizard again" : "Vis guiden for første kørsel igen.", - "You have used %s of the available %s" : "Du har brugt %s af den tilgængelige %s", "Password" : "Kodeord", "Unable to change your password" : "Ude af stand til at ændre dit kodeord", "Current password" : "Nuværende adgangskode", diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 1519317def..8313714699 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -10,12 +10,10 @@ "Log" : "Log", "Tips & tricks" : "Tips & tricks", "Updates" : "Opdateringer", - "Authentication error" : "Adgangsfejl", - "Your full name has been changed." : "Dit fulde navn er blevet ændret.", - "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn", "Couldn't remove app." : "Kunne ikke fjerne app'en.", "Language changed" : "Sprog ændret", "Invalid request" : "Ugyldig forespørgsel", + "Authentication error" : "Adgangsfejl", "Admins can't remove themself from the admin group" : "Administratorer kan ikke fjerne dem selv fra admin gruppen", "Unable to add user to group %s" : "Brugeren kan ikke tilføjes til gruppen %s", "Unable to remove user from group %s" : "Brugeren kan ikke fjernes fra gruppen %s", @@ -51,6 +49,8 @@ "Invalid user" : "Ugyldig bruger", "Unable to change mail address" : "Kan ikke ændre mailadresse", "Email saved" : "E-mailadressen er gemt", + "Your full name has been changed." : "Dit fulde navn er blevet ændret.", + "Unable to change full name" : "Ikke i stand til at ændre dit fulde navn", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?", "Add trusted domain" : "Tilføj et domæne som du har tillid til", "Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet", @@ -130,7 +130,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke muligt at udføre cronjobbet via kommandolinjefladen CLI. Følgende tekniske fejl fremkom:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transaktions låsning af filer bliver brugt af databasen som lås til backend, for den bedste ydelse tilrådes det at konfigurere memcache. Se documentation ↗ for mere information", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Dobbelttjek venligst , og tjek om der er fejl eller advarsler i loggen.", "All checks passed." : "Alle tjek blev bestået.", "Open documentation" : "Åben dokumentation", @@ -221,7 +220,6 @@ "iOS app" : "iOS-app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Hvis du vil støtte projektet, så\n\t\tdeltag i udviklingen\n\t\teller\n\t\tspred budskabet!", "Show First Run Wizard again" : "Vis guiden for første kørsel igen.", - "You have used %s of the available %s" : "Du har brugt %s af den tilgængelige %s", "Password" : "Kodeord", "Unable to change your password" : "Ude af stand til at ændre dit kodeord", "Current password" : "Nuværende adgangskode", diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 2034a6650e..2c4d7f146b 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -225,7 +225,6 @@ OC.L10N.register( "iOS app" : "iOS-App", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Wenn Du das Projekt unterstützen möchtest,\nbeteilige Dich an der Entwicklung\noder\nhilf mit, es bekannter zu machen!", "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "You have used %s of the available %s" : "Du verwendest %s der verfügbaren %s", "Password" : "Passwort", "Unable to change your password" : "Passwort konnte nicht geändert werden", "Current password" : "Aktuelles Passwort", diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 31f677bd66..9fb9bdf539 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -223,7 +223,6 @@ "iOS app" : "iOS-App", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Wenn Du das Projekt unterstützen möchtest,\nbeteilige Dich an der Entwicklung\noder\nhilf mit, es bekannter zu machen!", "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "You have used %s of the available %s" : "Du verwendest %s der verfügbaren %s", "Password" : "Passwort", "Unable to change your password" : "Passwort konnte nicht geändert werden", "Current password" : "Aktuelles Passwort", diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index bb25af1645..dba37d5a87 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -219,7 +219,6 @@ OC.L10N.register( "iOS app" : "iOS-App", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Wenn Sie das Projekt unterstützen möchten,\nbeteiligen Sie sich an der Entwicklung\noder\nhelfen Sie mit, es bekannter zu machen!", "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "You have used %s of the available %s" : "Sie verwenden %s der verfügbaren %s", "Password" : "Passwort", "Unable to change your password" : "Das Passwort konnte nicht geändert werden", "Current password" : "Aktuelles Passwort", diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index 503b76e483..ae3a477c8d 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -217,7 +217,6 @@ "iOS app" : "iOS-App", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Wenn Sie das Projekt unterstützen möchten,\nbeteiligen Sie sich an der Entwicklung\noder\nhelfen Sie mit, es bekannter zu machen!", "Show First Run Wizard again" : "Den Einrichtungsassistenten erneut anzeigen", - "You have used %s of the available %s" : "Sie verwenden %s der verfügbaren %s", "Password" : "Passwort", "Unable to change your password" : "Das Passwort konnte nicht geändert werden", "Current password" : "Aktuelles Passwort", diff --git a/settings/l10n/el.js b/settings/l10n/el.js index acb9dca3df..77fd2c3a82 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Καταγραφές", "Tips & tricks" : "Συμβουλές & τεχνάσματα", "Updates" : "Ενημερώσεις", - "Authentication error" : "Σφάλμα πιστοποίησης", - "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.", - "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας", "Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.", "Language changed" : "Η γλώσσα άλλαξε", "Invalid request" : "Μη έγκυρο αίτημα", + "Authentication error" : "Σφάλμα πιστοποίησης", "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s", "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Μη έγκυρος χρήστης", "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας", "Email saved" : "Το email αποθηκεύτηκε ", + "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.", + "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;", "Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή", "Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Προτείνουμε ανεπιφύλακτα να εγκαταστήσετε στο σύστημά σας τα απαιτούμενα πακέτα έτσι ώστε να υποστηρίζεται μια από τις ακόλουθες ρυθμίσεις τοποθεσίας: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Αν η εγκατάστασή σας δεν έχει γίνει στο root του τομέα και χρησιμοποιείται το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwrite.cli.url\" στο αρχείο config.php που βρίσκεται στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Δεν ήταν δυνατή η εκτέλεση της cronjob μέσω τερματικού. Εμφανίστηκαν τα παρακάτω τεχνικά σφάλματα:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Το Transactional file locking χρησιμοποιεί τη βάση δεδομένων ως locking backend, για καλύτερες επιδόσεις συστήνουμς τη διαμόρφωση μιας memcache για το κλείδωμα. Δείτε την τεκμηρίωση ↗ για περισσότερες πληροφορίες.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Παρακαλώ ελέγξτε ξανά τους οδηγούς εγκατάστασης, καθώς επίσης και για τυχόν σφάλματα ή προειδοποιήσεις στο log.", "All checks passed." : "Όλοι οι έλεγχοι επιτυχείς.", "Open documentation" : "Ανοιχτή τεκμηρίωση.", @@ -230,7 +229,6 @@ OC.L10N.register( "iOS app" : "Εφαρμογή iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\tσυμμετέχετε στην ανάπτυξη\n\t\tή\n\t\tδιαδόστε το μήνυμα!", "Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά", - "You have used %s of the available %s" : "Χρησιμοποιήσατε %s από τα %s διαθέσιμα", "Password" : "Συνθηματικό", "Unable to change your password" : "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης", "Current password" : "Τρέχων συνθηματικό", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index 42d6dd01ce..0c343a29e7 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -10,12 +10,10 @@ "Log" : "Καταγραφές", "Tips & tricks" : "Συμβουλές & τεχνάσματα", "Updates" : "Ενημερώσεις", - "Authentication error" : "Σφάλμα πιστοποίησης", - "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.", - "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας", "Couldn't remove app." : "Αδυναμία αφαίρεσης εφαρμογής.", "Language changed" : "Η γλώσσα άλλαξε", "Invalid request" : "Μη έγκυρο αίτημα", + "Authentication error" : "Σφάλμα πιστοποίησης", "Admins can't remove themself from the admin group" : "Οι διαχειριστές δεν μπορούν να αφαιρέσουν τους εαυτούς τους από την ομάδα των διαχειριστών", "Unable to add user to group %s" : "Αδυναμία προσθήκη χρήστη στην ομάδα %s", "Unable to remove user from group %s" : "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s", @@ -51,6 +49,8 @@ "Invalid user" : "Μη έγκυρος χρήστης", "Unable to change mail address" : "Αδυναμία αλλαγής διεύθυνσης αλληλογραφίας", "Email saved" : "Το email αποθηκεύτηκε ", + "Your full name has been changed." : "Το πλήρες όνομά σας άλλαξε.", + "Unable to change full name" : "Δεν ήταν δυνατή η αλλαγή του πλήρους ονόματός σας", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Είστε πραγματικά σίγουροι ότι θέλετε να προσθέσετε το \"{domain}\" σαν αξιόπιστη περιοχή;", "Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή", "Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Προτείνουμε ανεπιφύλακτα να εγκαταστήσετε στο σύστημά σας τα απαιτούμενα πακέτα έτσι ώστε να υποστηρίζεται μια από τις ακόλουθες ρυθμίσεις τοποθεσίας: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Αν η εγκατάστασή σας δεν έχει γίνει στο root του τομέα και χρησιμοποιείται το cron του συστήματος, μπορεί να υπάρξουν ζητήματα με τη δημιουργία URL. Για να αποφύγετε αυτά τα προβλήματα, παρακαλώ ρυθμίστε την επιλογή \"overwrite.cli.url\" στο αρχείο config.php που βρίσκεται στη διαδρομή webroot της εγκατάστασής σας (Suggested: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Δεν ήταν δυνατή η εκτέλεση της cronjob μέσω τερματικού. Εμφανίστηκαν τα παρακάτω τεχνικά σφάλματα:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Το Transactional file locking χρησιμοποιεί τη βάση δεδομένων ως locking backend, για καλύτερες επιδόσεις συστήνουμς τη διαμόρφωση μιας memcache για το κλείδωμα. Δείτε την τεκμηρίωση ↗ για περισσότερες πληροφορίες.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Παρακαλώ ελέγξτε ξανά τους οδηγούς εγκατάστασης, καθώς επίσης και για τυχόν σφάλματα ή προειδοποιήσεις στο log.", "All checks passed." : "Όλοι οι έλεγχοι επιτυχείς.", "Open documentation" : "Ανοιχτή τεκμηρίωση.", @@ -228,7 +227,6 @@ "iOS app" : "Εφαρμογή iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\tσυμμετέχετε στην ανάπτυξη\n\t\tή\n\t\tδιαδόστε το μήνυμα!", "Show First Run Wizard again" : "Προβολή Οδηγού Πρώτης Εκτέλεσης ξανά", - "You have used %s of the available %s" : "Χρησιμοποιήσατε %s από τα %s διαθέσιμα", "Password" : "Συνθηματικό", "Unable to change your password" : "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης", "Current password" : "Τρέχων συνθηματικό", diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index 5a4a1a3c99..e8d0cc3e5e 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -10,12 +10,10 @@ OC.L10N.register( "Log" : "Log", "Tips & tricks" : "Tips & tricks", "Updates" : "Updates", - "Authentication error" : "Authentication error", - "Your full name has been changed." : "Your full name has been changed.", - "Unable to change full name" : "Unable to change full name", "Couldn't remove app." : "Couldn't remove app.", "Language changed" : "Language changed", "Invalid request" : "Invalid request", + "Authentication error" : "Authentication error", "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group", "Unable to add user to group %s" : "Unable to add user to group %s", "Unable to remove user from group %s" : "Unable to remove user from group %s", @@ -49,6 +47,8 @@ OC.L10N.register( "Invalid user" : "Invalid user", "Unable to change mail address" : "Unable to change mail address", "Email saved" : "Email saved", + "Your full name has been changed." : "Your full name has been changed.", + "Unable to change full name" : "Unable to change full name", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?", "Add trusted domain" : "Add trusted domain", "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", @@ -208,7 +208,6 @@ OC.L10N.register( "iOS app" : "iOS app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!", "Show First Run Wizard again" : "Show First Run Wizard again", - "You have used %s of the available %s" : "You have used %s of the available %s", "Password" : "Password", "Unable to change your password" : "Unable to change your password", "Current password" : "Current password", diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index 4f1e2efc45..37d3f31b45 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -8,12 +8,10 @@ "Log" : "Log", "Tips & tricks" : "Tips & tricks", "Updates" : "Updates", - "Authentication error" : "Authentication error", - "Your full name has been changed." : "Your full name has been changed.", - "Unable to change full name" : "Unable to change full name", "Couldn't remove app." : "Couldn't remove app.", "Language changed" : "Language changed", "Invalid request" : "Invalid request", + "Authentication error" : "Authentication error", "Admins can't remove themself from the admin group" : "Admins can't remove themselves from the admin group", "Unable to add user to group %s" : "Unable to add user to group %s", "Unable to remove user from group %s" : "Unable to remove user from group %s", @@ -47,6 +45,8 @@ "Invalid user" : "Invalid user", "Unable to change mail address" : "Unable to change mail address", "Email saved" : "Email saved", + "Your full name has been changed." : "Your full name has been changed.", + "Unable to change full name" : "Unable to change full name", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Are you really sure you want add \"{domain}\" as a trusted domain?", "Add trusted domain" : "Add trusted domain", "Migration in progress. Please wait until the migration is finished" : "Migration in progress. Please wait until the migration is finished", @@ -206,7 +206,6 @@ "iOS app" : "iOS app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!", "Show First Run Wizard again" : "Show First Run Wizard again", - "You have used %s of the available %s" : "You have used %s of the available %s", "Password" : "Password", "Unable to change your password" : "Unable to change your password", "Current password" : "Current password", diff --git a/settings/l10n/eo.js b/settings/l10n/eo.js index ca4b5485d5..215fec4d70 100644 --- a/settings/l10n/eo.js +++ b/settings/l10n/eo.js @@ -6,11 +6,9 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Protokolo", "Updates" : "Ĝisdatigoj", - "Authentication error" : "Aŭtentiga eraro", - "Your full name has been changed." : "Via plena nomo ŝanĝitas.", - "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon", "Language changed" : "La lingvo estas ŝanĝita", "Invalid request" : "Nevalida peto", + "Authentication error" : "Aŭtentiga eraro", "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.", "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s", "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s", @@ -21,6 +19,8 @@ OC.L10N.register( "Saved" : "Konservita", "Email sent" : "La retpoŝtaĵo sendiĝis", "Email saved" : "La retpoŝtadreso konserviĝis", + "Your full name has been changed." : "Via plena nomo ŝanĝitas.", + "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon", "Sending..." : "Sendante...", "All" : "Ĉio", "Please wait...." : "Bonvolu atendi...", @@ -88,7 +88,6 @@ OC.L10N.register( "Uninstall App" : "Malinstali aplikaĵon", "Forum" : "Forumo", "Get the apps to sync your files" : "Ekhavu la aplikaĵojn por sinkronigi viajn dosierojn", - "You have used %s of the available %s" : "Vi uzas %s el la disponeblaj %s", "Password" : "Pasvorto", "Unable to change your password" : "Ne eblis ŝanĝi vian pasvorton", "Current password" : "Nuna pasvorto", diff --git a/settings/l10n/eo.json b/settings/l10n/eo.json index 3df0eda6e8..1e2441717f 100644 --- a/settings/l10n/eo.json +++ b/settings/l10n/eo.json @@ -4,11 +4,9 @@ "Cron" : "Cron", "Log" : "Protokolo", "Updates" : "Ĝisdatigoj", - "Authentication error" : "Aŭtentiga eraro", - "Your full name has been changed." : "Via plena nomo ŝanĝitas.", - "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon", "Language changed" : "La lingvo estas ŝanĝita", "Invalid request" : "Nevalida peto", + "Authentication error" : "Aŭtentiga eraro", "Admins can't remove themself from the admin group" : "Administrantoj ne povas forigi sin mem el la administra grupo.", "Unable to add user to group %s" : "Ne eblis aldoni la uzanton al la grupo %s", "Unable to remove user from group %s" : "Ne eblis forigi la uzantan el la grupo %s", @@ -19,6 +17,8 @@ "Saved" : "Konservita", "Email sent" : "La retpoŝtaĵo sendiĝis", "Email saved" : "La retpoŝtadreso konserviĝis", + "Your full name has been changed." : "Via plena nomo ŝanĝitas.", + "Unable to change full name" : "Ne eblis ŝanĝi la plenan nomon", "Sending..." : "Sendante...", "All" : "Ĉio", "Please wait...." : "Bonvolu atendi...", @@ -86,7 +86,6 @@ "Uninstall App" : "Malinstali aplikaĵon", "Forum" : "Forumo", "Get the apps to sync your files" : "Ekhavu la aplikaĵojn por sinkronigi viajn dosierojn", - "You have used %s of the available %s" : "Vi uzas %s el la disponeblaj %s", "Password" : "Pasvorto", "Unable to change your password" : "Ne eblis ŝanĝi vian pasvorton", "Current password" : "Nuna pasvorto", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index 36d9d9392e..c0ddd8320f 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Registro", "Tips & tricks" : "Sugerencias y trucos", "Updates" : "Actualizaciones", - "Authentication error" : "Error de autenticación", - "Your full name has been changed." : "Se ha cambiado su nombre completo.", - "Unable to change full name" : "No se puede cambiar el nombre completo", "Couldn't remove app." : "No se pudo eliminar la aplicación.", "Language changed" : "Idioma cambiado", "Invalid request" : "Petición no válida", + "Authentication error" : "Error de autenticación", "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Usuario no válido", "Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico", "Email saved" : "Correo electrónico guardado", + "Your full name has been changed." : "Se ha cambiado su nombre completo.", + "Unable to change full name" : "No se puede cambiar el nombre completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?", "Add trusted domain" : "Agregar dominio de confianza", "Migration in progress. Please wait until the migration is finished" : "Migración en curso. Por favor, espere hasta que la migración esté finalizada.", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwrite.cli.url\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "El fichero de bloqueo de transaciones esta usando la base de datos como mecanismo de bloqueo, para mejorar el rendimiento es recomendable usar cacheo de memoria para los bloqueos. Visita la documentación ↗ para mas información.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Por favor revise las guías de instalación ↗, y compruebe los errores o avisos en el registro.", "All checks passed." : "Ha pasado todos los controles", "Open documentation" : "Documentación abierta", @@ -227,7 +226,6 @@ OC.L10N.register( "iOS app" : "La aplicación de iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Si quiere colaborar con el proyecto\n\t\tparticipe en el desarrollo\n\t\to\n\t\t¡difúndalo!", "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", - "You have used %s of the available %s" : "Ha usado %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "No se ha podido cambiar su contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 87cf83a55f..43bfa420e2 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -10,12 +10,10 @@ "Log" : "Registro", "Tips & tricks" : "Sugerencias y trucos", "Updates" : "Actualizaciones", - "Authentication error" : "Error de autenticación", - "Your full name has been changed." : "Se ha cambiado su nombre completo.", - "Unable to change full name" : "No se puede cambiar el nombre completo", "Couldn't remove app." : "No se pudo eliminar la aplicación.", "Language changed" : "Idioma cambiado", "Invalid request" : "Petición no válida", + "Authentication error" : "Error de autenticación", "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", @@ -51,6 +49,8 @@ "Invalid user" : "Usuario no válido", "Unable to change mail address" : "No se pudo cambiar la dirección de correo electrónico", "Email saved" : "Correo electrónico guardado", + "Your full name has been changed." : "Se ha cambiado su nombre completo.", + "Unable to change full name" : "No se puede cambiar el nombre completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "¿Está seguro de querer agregar \"{domain}\" como un dominio de confianza?", "Add trusted domain" : "Agregar dominio de confianza", "Migration in progress. Please wait until the migration is finished" : "Migración en curso. Por favor, espere hasta que la migración esté finalizada.", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Es muy recomendable instalar los paquetes necesarios para poder soportar una de las siguientes configuraciones regionales: %s. ", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwrite.cli.url\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "El fichero de bloqueo de transaciones esta usando la base de datos como mecanismo de bloqueo, para mejorar el rendimiento es recomendable usar cacheo de memoria para los bloqueos. Visita la documentación ↗ para mas información.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Por favor revise las guías de instalación ↗, y compruebe los errores o avisos en el registro.", "All checks passed." : "Ha pasado todos los controles", "Open documentation" : "Documentación abierta", @@ -225,7 +224,6 @@ "iOS app" : "La aplicación de iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Si quiere colaborar con el proyecto\n\t\tparticipe en el desarrollo\n\t\to\n\t\t¡difúndalo!", "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", - "You have used %s of the available %s" : "Ha usado %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "No se ha podido cambiar su contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/es_AR.js b/settings/l10n/es_AR.js index ed34e871e8..860933eea2 100644 --- a/settings/l10n/es_AR.js +++ b/settings/l10n/es_AR.js @@ -98,7 +98,6 @@ OC.L10N.register( "Android app" : "App para Android", "iOS app" : "App para iOS", "Show First Run Wizard again" : "Mostrar de nuevo el asistente de primera ejecución", - "You have used %s of the available %s" : "Usás %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "No fue posible cambiar tu contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/es_AR.json b/settings/l10n/es_AR.json index f337de3b80..c4c088c5f5 100644 --- a/settings/l10n/es_AR.json +++ b/settings/l10n/es_AR.json @@ -96,7 +96,6 @@ "Android app" : "App para Android", "iOS app" : "App para iOS", "Show First Run Wizard again" : "Mostrar de nuevo el asistente de primera ejecución", - "You have used %s of the available %s" : "Usás %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "No fue posible cambiar tu contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js index 0a83ff50f1..05f73194b8 100644 --- a/settings/l10n/es_MX.js +++ b/settings/l10n/es_MX.js @@ -5,11 +5,9 @@ OC.L10N.register( "External Storage" : "Almacenamiento externo", "Cron" : "Cron", "Log" : "Registro", - "Authentication error" : "Error de autenticación", - "Your full name has been changed." : "Se ha cambiado su nombre completo.", - "Unable to change full name" : "No se puede cambiar el nombre completo", "Language changed" : "Idioma cambiado", "Invalid request" : "Petición no válida", + "Authentication error" : "Error de autenticación", "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", @@ -23,6 +21,8 @@ OC.L10N.register( "Saved" : "Guardado", "Email sent" : "Correo electrónico enviado", "Email saved" : "Correo electrónico guardado", + "Your full name has been changed." : "Se ha cambiado su nombre completo.", + "Unable to change full name" : "No se puede cambiar el nombre completo", "All" : "Todos", "Please wait...." : "Espere, por favor....", "Error while disabling app" : "Error mientras se desactivaba la aplicación", @@ -70,7 +70,6 @@ OC.L10N.register( "Forum" : "Foro", "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", - "You have used %s of the available %s" : "Ha usado %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "No se ha podido cambiar su contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json index a83dfef804..beaa6fc1d9 100644 --- a/settings/l10n/es_MX.json +++ b/settings/l10n/es_MX.json @@ -3,11 +3,9 @@ "External Storage" : "Almacenamiento externo", "Cron" : "Cron", "Log" : "Registro", - "Authentication error" : "Error de autenticación", - "Your full name has been changed." : "Se ha cambiado su nombre completo.", - "Unable to change full name" : "No se puede cambiar el nombre completo", "Language changed" : "Idioma cambiado", "Invalid request" : "Petición no válida", + "Authentication error" : "Error de autenticación", "Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador", "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s", "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s", @@ -21,6 +19,8 @@ "Saved" : "Guardado", "Email sent" : "Correo electrónico enviado", "Email saved" : "Correo electrónico guardado", + "Your full name has been changed." : "Se ha cambiado su nombre completo.", + "Unable to change full name" : "No se puede cambiar el nombre completo", "All" : "Todos", "Please wait...." : "Espere, por favor....", "Error while disabling app" : "Error mientras se desactivaba la aplicación", @@ -68,7 +68,6 @@ "Forum" : "Foro", "Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos", "Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial", - "You have used %s of the available %s" : "Ha usado %s de los %s disponibles", "Password" : "Contraseña", "Unable to change your password" : "No se ha podido cambiar su contraseña", "Current password" : "Contraseña actual", diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js index e783531d6c..73111e8f0e 100644 --- a/settings/l10n/et_EE.js +++ b/settings/l10n/et_EE.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Logi", "Tips & tricks" : "Nõuanded ja trikid", "Updates" : "Uuendused", - "Authentication error" : "Autentimise viga", - "Your full name has been changed." : "Sinu täispikk nimi on muudetud.", - "Unable to change full name" : "Täispika nime muutmine ebaõnnestus", "Couldn't remove app." : "Ei suutnud rakendit eemaldada.", "Language changed" : "Keel on muudetud", "Invalid request" : "Vigane päring", + "Authentication error" : "Autentimise viga", "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada", "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s", "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s", @@ -46,8 +44,11 @@ OC.L10N.register( "Invalid user" : "Vigane kasutaja", "Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus", "Email saved" : "Kiri on salvestatud", + "Your full name has been changed." : "Sinu täispikk nimi on muudetud.", + "Unable to change full name" : "Täispika nime muutmine ebaõnnestus", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?", "Add trusted domain" : "Lis ausaldusväärne domeen", + "Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud", "Migration started …" : "Kolimist on alustatud ...", "Sending..." : "Saadan...", "Official" : "Ametlik", @@ -67,6 +68,7 @@ OC.L10N.register( "Uninstalling ...." : "Eemaldan...", "Error while uninstalling app" : "Viga rakendi eemaldamisel", "Uninstall" : "Eemalda", + "App update" : "Rakenduse uuendus", "Select a profile picture" : "Vali profiili pilt", "Very weak password" : "Väga nõrk parool", "Weak password" : "Nõrk parool", @@ -153,6 +155,7 @@ OC.L10N.register( "More" : "Rohkem", "Less" : "Vähem", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logifail on suurem kui 100 MB. Allalaadimine võib veidi aega võtta!", + "What to log" : "Mida logisse sisse kanda", "How to do backups" : "Kuidas teha varukoopiaid", "Advanced monitoring" : "Lisavalikutega jälgimine", "Performance tuning" : "Kiiruse seadistamine", @@ -182,7 +185,6 @@ OC.L10N.register( "Android app" : "Androidi rakendus", "iOS app" : "iOS-i rakendus", "Show First Run Wizard again" : "Näita veelkord Esmase Käivituse Juhendajat", - "You have used %s of the available %s" : "Kasutad %s saadavalolevast %s", "Password" : "Parool", "Unable to change your password" : "Sa ei saa oma parooli muuta", "Current password" : "Praegune parool", @@ -194,6 +196,7 @@ OC.L10N.register( "Your email address" : "Sinu e-posti aadress", "Fill in an email address to enable password recovery and receive notifications" : "Täida e-posti aadress võimaldamaks parooli taastamist ning teadete saamist.", "No email address set" : "E-posti aadressi pole veel määratud", + "You are member of the following groups:" : "Sa oled nende gruppide liige:", "Profile picture" : "Profiili pilt", "Upload new" : "Laadi uus üles", "Select new from Files" : "Vali failidest uus", @@ -229,6 +232,7 @@ OC.L10N.register( "Group Admin for" : "Grupi admin", "Quota" : "Mahupiir", "Storage Location" : "Mahu asukoht", + "User Backend" : "Kasutaja taustarakendus", "Last Login" : "Viimane sisselogimine", "change full name" : "Muuda täispikka nime", "set new password" : "määra uus parool", diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json index 95416aad77..b6172f9237 100644 --- a/settings/l10n/et_EE.json +++ b/settings/l10n/et_EE.json @@ -10,12 +10,10 @@ "Log" : "Logi", "Tips & tricks" : "Nõuanded ja trikid", "Updates" : "Uuendused", - "Authentication error" : "Autentimise viga", - "Your full name has been changed." : "Sinu täispikk nimi on muudetud.", - "Unable to change full name" : "Täispika nime muutmine ebaõnnestus", "Couldn't remove app." : "Ei suutnud rakendit eemaldada.", "Language changed" : "Keel on muudetud", "Invalid request" : "Vigane päring", + "Authentication error" : "Autentimise viga", "Admins can't remove themself from the admin group" : "Administraatorid ei saa ise end admin grupist eemaldada", "Unable to add user to group %s" : "Kasutajat ei saa lisada gruppi %s", "Unable to remove user from group %s" : "Kasutajat ei saa eemaldada grupist %s", @@ -44,8 +42,11 @@ "Invalid user" : "Vigane kasutaja", "Unable to change mail address" : "E-posti aadressi muutmine ebaõnnestus", "Email saved" : "Kiri on salvestatud", + "Your full name has been changed." : "Sinu täispikk nimi on muudetud.", + "Unable to change full name" : "Täispika nime muutmine ebaõnnestus", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Oled sa kindel, et soovid lisada domeeni \"{domain}\" usaldusväärseks domeeniks?", "Add trusted domain" : "Lis ausaldusväärne domeen", + "Migration in progress. Please wait until the migration is finished" : "Kolimine on käimas. Palun oota, kuni see on lõpetatud", "Migration started …" : "Kolimist on alustatud ...", "Sending..." : "Saadan...", "Official" : "Ametlik", @@ -65,6 +66,7 @@ "Uninstalling ...." : "Eemaldan...", "Error while uninstalling app" : "Viga rakendi eemaldamisel", "Uninstall" : "Eemalda", + "App update" : "Rakenduse uuendus", "Select a profile picture" : "Vali profiili pilt", "Very weak password" : "Väga nõrk parool", "Weak password" : "Nõrk parool", @@ -151,6 +153,7 @@ "More" : "Rohkem", "Less" : "Vähem", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logifail on suurem kui 100 MB. Allalaadimine võib veidi aega võtta!", + "What to log" : "Mida logisse sisse kanda", "How to do backups" : "Kuidas teha varukoopiaid", "Advanced monitoring" : "Lisavalikutega jälgimine", "Performance tuning" : "Kiiruse seadistamine", @@ -180,7 +183,6 @@ "Android app" : "Androidi rakendus", "iOS app" : "iOS-i rakendus", "Show First Run Wizard again" : "Näita veelkord Esmase Käivituse Juhendajat", - "You have used %s of the available %s" : "Kasutad %s saadavalolevast %s", "Password" : "Parool", "Unable to change your password" : "Sa ei saa oma parooli muuta", "Current password" : "Praegune parool", @@ -192,6 +194,7 @@ "Your email address" : "Sinu e-posti aadress", "Fill in an email address to enable password recovery and receive notifications" : "Täida e-posti aadress võimaldamaks parooli taastamist ning teadete saamist.", "No email address set" : "E-posti aadressi pole veel määratud", + "You are member of the following groups:" : "Sa oled nende gruppide liige:", "Profile picture" : "Profiili pilt", "Upload new" : "Laadi uus üles", "Select new from Files" : "Vali failidest uus", @@ -227,6 +230,7 @@ "Group Admin for" : "Grupi admin", "Quota" : "Mahupiir", "Storage Location" : "Mahu asukoht", + "User Backend" : "Kasutaja taustarakendus", "Last Login" : "Viimane sisselogimine", "change full name" : "Muuda täispikka nime", "set new password" : "määra uus parool", diff --git a/settings/l10n/eu.js b/settings/l10n/eu.js index 486cdc7481..36f245a8c4 100644 --- a/settings/l10n/eu.js +++ b/settings/l10n/eu.js @@ -6,12 +6,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Log", "Updates" : "Eguneraketak", - "Authentication error" : "Autentifikazio errorea", - "Your full name has been changed." : "Zure izena aldatu egin da.", - "Unable to change full name" : "Ezin izan da izena aldatu", "Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..", "Language changed" : "Hizkuntza aldatuta", "Invalid request" : "Baliogabeko eskaera", + "Authentication error" : "Autentifikazio errorea", "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik", "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu", "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu", @@ -40,6 +38,8 @@ OC.L10N.register( "Invalid user" : "Baliogabeko erabiiltzailea", "Unable to change mail address" : "Ezin izan da posta helbidea aldatu", "Email saved" : "Eposta gorde da", + "Your full name has been changed." : "Zure izena aldatu egin da.", + "Unable to change full name" : "Ezin izan da izena aldatu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?", "Add trusted domain" : "Gehitu domeinu fidagarria", "Sending..." : "Bidaltzen...", @@ -153,7 +153,6 @@ OC.L10N.register( "Android app" : "Android aplikazioa", "iOS app" : "iOS aplikazioa", "Show First Run Wizard again" : "Erakutsi berriz Lehenengo Aldiko Morroia", - "You have used %s of the available %s" : "Dagoeneko %s erabili duzu eskuragarri duzun %setatik", "Password" : "Pasahitza", "Unable to change your password" : "Ezin izan da zure pasahitza aldatu", "Current password" : "Uneko pasahitza", diff --git a/settings/l10n/eu.json b/settings/l10n/eu.json index 218241db95..5f8c814ccf 100644 --- a/settings/l10n/eu.json +++ b/settings/l10n/eu.json @@ -4,12 +4,10 @@ "Cron" : "Cron", "Log" : "Log", "Updates" : "Eguneraketak", - "Authentication error" : "Autentifikazio errorea", - "Your full name has been changed." : "Zure izena aldatu egin da.", - "Unable to change full name" : "Ezin izan da izena aldatu", "Couldn't remove app." : "Ezin izan da aplikazioa ezabatu..", "Language changed" : "Hizkuntza aldatuta", "Invalid request" : "Baliogabeko eskaera", + "Authentication error" : "Autentifikazio errorea", "Admins can't remove themself from the admin group" : "Kudeatzaileak ezin du bere burua kendu kudeatzaile taldetik", "Unable to add user to group %s" : "Ezin izan da erabiltzailea %s taldera gehitu", "Unable to remove user from group %s" : "Ezin izan da erabiltzailea %s taldetik ezabatu", @@ -38,6 +36,8 @@ "Invalid user" : "Baliogabeko erabiiltzailea", "Unable to change mail address" : "Ezin izan da posta helbidea aldatu", "Email saved" : "Eposta gorde da", + "Your full name has been changed." : "Zure izena aldatu egin da.", + "Unable to change full name" : "Ezin izan da izena aldatu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ziur zaude gehitu nahi duzula \"{domain}\" domeinu fidagarri gisa?", "Add trusted domain" : "Gehitu domeinu fidagarria", "Sending..." : "Bidaltzen...", @@ -151,7 +151,6 @@ "Android app" : "Android aplikazioa", "iOS app" : "iOS aplikazioa", "Show First Run Wizard again" : "Erakutsi berriz Lehenengo Aldiko Morroia", - "You have used %s of the available %s" : "Dagoeneko %s erabili duzu eskuragarri duzun %setatik", "Password" : "Pasahitza", "Unable to change your password" : "Ezin izan da zure pasahitza aldatu", "Current password" : "Uneko pasahitza", diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js index 299505e156..8ee843c748 100644 --- a/settings/l10n/fa.js +++ b/settings/l10n/fa.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "کارنامه", "Tips & tricks" : "نکات و راهنمایی‌ها", "Updates" : "به روز رسانی ها", - "Authentication error" : "خطا در اعتبار سنجی", - "Your full name has been changed." : "نام کامل شما تغییر یافت", - "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد", "Couldn't remove app." : "امکان حذف برنامه وجود ندارد.", "Language changed" : "زبان تغییر کرد", "Invalid request" : "درخواست نامعتبر", + "Authentication error" : "خطا در اعتبار سنجی", "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست", "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست", @@ -44,6 +42,8 @@ OC.L10N.register( "Invalid user" : "کاربر نامعتبر", "Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست", "Email saved" : "ایمیل ذخیره شد", + "Your full name has been changed." : "نام کامل شما تغییر یافت", + "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد", "Add trusted domain" : "افزودن دامنه مورد اعتماد", "Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید", "Migration started …" : "مهاجرت شروع شد...", @@ -175,7 +175,6 @@ OC.L10N.register( "Android app" : "اپ اندروید", "iOS app" : "اپ iOS", "Show First Run Wizard again" : "راهبری کمکی اجرای اول را دوباره نمایش بده", - "You have used %s of the available %s" : "شما استفاده کردید از %s از میزان در دسترس %s", "Password" : "گذرواژه", "Unable to change your password" : "ناتوان در تغییر گذرواژه", "Current password" : "گذرواژه کنونی", diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json index e07f0633e9..c934d03262 100644 --- a/settings/l10n/fa.json +++ b/settings/l10n/fa.json @@ -10,12 +10,10 @@ "Log" : "کارنامه", "Tips & tricks" : "نکات و راهنمایی‌ها", "Updates" : "به روز رسانی ها", - "Authentication error" : "خطا در اعتبار سنجی", - "Your full name has been changed." : "نام کامل شما تغییر یافت", - "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد", "Couldn't remove app." : "امکان حذف برنامه وجود ندارد.", "Language changed" : "زبان تغییر کرد", "Invalid request" : "درخواست نامعتبر", + "Authentication error" : "خطا در اعتبار سنجی", "Admins can't remove themself from the admin group" : "مدیران نمی توانند خود را از گروه مدیریت حذف کنند", "Unable to add user to group %s" : "امکان افزودن کاربر به گروه %s نیست", "Unable to remove user from group %s" : "امکان حذف کاربر از گروه %s نیست", @@ -42,6 +40,8 @@ "Invalid user" : "کاربر نامعتبر", "Unable to change mail address" : "تغییر آدرس ایمیل امکان‌پذیر نیست", "Email saved" : "ایمیل ذخیره شد", + "Your full name has been changed." : "نام کامل شما تغییر یافت", + "Unable to change full name" : "امکان تغییر نام کامل وجود ندارد", "Add trusted domain" : "افزودن دامنه مورد اعتماد", "Migration in progress. Please wait until the migration is finished" : "مهاجرت در حال اجراست. لطفا تا اتمام مهاجرت صبر کنید", "Migration started …" : "مهاجرت شروع شد...", @@ -173,7 +173,6 @@ "Android app" : "اپ اندروید", "iOS app" : "اپ iOS", "Show First Run Wizard again" : "راهبری کمکی اجرای اول را دوباره نمایش بده", - "You have used %s of the available %s" : "شما استفاده کردید از %s از میزان در دسترس %s", "Password" : "گذرواژه", "Unable to change your password" : "ناتوان در تغییر گذرواژه", "Current password" : "گذرواژه کنونی", diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index 9d0ca9371b..b67f12d637 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Loki", "Tips & tricks" : "Vinkit", "Updates" : "Päivitykset", - "Authentication error" : "Tunnistautumisvirhe", - "Your full name has been changed." : "Koko nimesi on muutettu.", - "Unable to change full name" : "Koko nimen muuttaminen epäonnistui", "Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.", "Language changed" : "Kieli on vaihdettu", "Invalid request" : "Virheellinen pyyntö", + "Authentication error" : "Tunnistautumisvirhe", "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä", "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu", "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu", @@ -52,6 +50,8 @@ OC.L10N.register( "Invalid user" : "Virheellinen käyttäjä", "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut", "Email saved" : "Sähköposti tallennettu", + "Your full name has been changed." : "Koko nimesi on muutettu.", + "Unable to change full name" : "Koko nimen muuttaminen epäonnistui", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?", "Add trusted domain" : "Lisää luotettu toimialue", "Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu", @@ -221,7 +221,6 @@ OC.L10N.register( "iOS app" : "iOS-sovellus", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Jos haluat tukea projektia, \n\t\tauta sovelluskehityksessä\n\t\ttai\n\t\tlevitä sanaa!", "Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen", - "You have used %s of the available %s" : "Käytössäsi on %s/%s", "Password" : "Salasana", "Unable to change your password" : "Salasanaasi ei voitu vaihtaa", "Current password" : "Nykyinen salasana", diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index a517c3d2f1..b1e30a6b92 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -10,12 +10,10 @@ "Log" : "Loki", "Tips & tricks" : "Vinkit", "Updates" : "Päivitykset", - "Authentication error" : "Tunnistautumisvirhe", - "Your full name has been changed." : "Koko nimesi on muutettu.", - "Unable to change full name" : "Koko nimen muuttaminen epäonnistui", "Couldn't remove app." : "Sovelluksen poistaminen epäonnistui.", "Language changed" : "Kieli on vaihdettu", "Invalid request" : "Virheellinen pyyntö", + "Authentication error" : "Tunnistautumisvirhe", "Admins can't remove themself from the admin group" : "Ylläpitäjät eivät poistaa omia tunnuksiaan ylläpitäjien ryhmästä", "Unable to add user to group %s" : "Käyttäjän tai ryhmän %s lisääminen ei onnistu", "Unable to remove user from group %s" : "Käyttäjän poistaminen ryhmästä %s ei onnistu", @@ -50,6 +48,8 @@ "Invalid user" : "Virheellinen käyttäjä", "Unable to change mail address" : "Sähköpostiosoitteen vaihtaminen ei onnistunut", "Email saved" : "Sähköposti tallennettu", + "Your full name has been changed." : "Koko nimesi on muutettu.", + "Unable to change full name" : "Koko nimen muuttaminen epäonnistui", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Haluatko varmasti liittää kohteen \"{domain}\" luotetuksi toimialueeksi?", "Add trusted domain" : "Lisää luotettu toimialue", "Migration in progress. Please wait until the migration is finished" : "Migraatio on kesken. Odota kunnes migraatio valmistuu", @@ -219,7 +219,6 @@ "iOS app" : "iOS-sovellus", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Jos haluat tukea projektia, \n\t\tauta sovelluskehityksessä\n\t\ttai\n\t\tlevitä sanaa!", "Show First Run Wizard again" : "Näytä ensimmäisen käyttökerran avustaja uudelleen", - "You have used %s of the available %s" : "Käytössäsi on %s/%s", "Password" : "Salasana", "Unable to change your password" : "Salasanaasi ei voitu vaihtaa", "Current password" : "Nykyinen salasana", diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index 805b5c05d5..6a9a503671 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets nécessaires à la prise en charge de l'un des paramètres régionaux suivants : %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwrite.cli.url\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "La tâche cron n'a pu s'exécuter via CLI. Ces erreurs techniques sont apparues :", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Le verrouillage transactionnel de fichiers utilise la base de données. Pour obtenir de meilleures performances il est recommandé d'utiliser plutôt memcache. Consultez la documentation ↗ pour plus d'informations.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Consultez les guides d'installation ↗, et cherchez des erreurs ou avertissements dans les logs.", "All checks passed." : "Tous les tests ont réussi.", "Open documentation" : "Voir la documentation", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "Application iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Si vous souhaitez apporter votre support au projet\n rejoignez le développement\n ou\n faites passer le mot !", "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", - "You have used %s of the available %s" : "Vous utilisez %s des %s disponibles", "Password" : "Mot de passe", "Unable to change your password" : "Impossible de changer votre mot de passe", "Current password" : "Mot de passe actuel", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 61c3129a8c..abab989d3f 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nous vous recommandons d'installer sur votre système les paquets nécessaires à la prise en charge de l'un des paramètres régionaux suivants : %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si votre installation n'a pas été effectuée à la racine du domaine et qu'elle utilise le cron du système, il peut y avoir des problèmes avec la génération d'URL. Pour les éviter, veuillez configurer l'option \"overwrite.cli.url\" de votre fichier config.php avec le chemin de la racine de votre installation (suggéré : \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "La tâche cron n'a pu s'exécuter via CLI. Ces erreurs techniques sont apparues :", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Le verrouillage transactionnel de fichiers utilise la base de données. Pour obtenir de meilleures performances il est recommandé d'utiliser plutôt memcache. Consultez la documentation ↗ pour plus d'informations.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Consultez les guides d'installation ↗, et cherchez des erreurs ou avertissements dans les logs.", "All checks passed." : "Tous les tests ont réussi.", "Open documentation" : "Voir la documentation", @@ -229,7 +228,6 @@ "iOS app" : "Application iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Si vous souhaitez apporter votre support au projet\n rejoignez le développement\n ou\n faites passer le mot !", "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", - "You have used %s of the available %s" : "Vous utilisez %s des %s disponibles", "Password" : "Mot de passe", "Unable to change your password" : "Impossible de changer votre mot de passe", "Current password" : "Mot de passe actuel", diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index 633e877bd5..525b14cd6c 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Rexistro", "Tips & tricks" : "Trucos e consellos", "Updates" : "Actualizacións", - "Authentication error" : "Produciuse un erro de autenticación", - "Your full name has been changed." : "O seu nome completo foi cambiado", - "Unable to change full name" : "Non é posíbel cambiar o nome completo", "Couldn't remove app." : "Non foi posíbel retirar a aplicación.", "Language changed" : "O idioma cambiou", "Invalid request" : "Petición incorrecta", + "Authentication error" : "Produciuse un erro de autenticación", "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin", "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s", "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Usuario incorrecto", "Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.", "Email saved" : "Correo gardado", + "Your full name has been changed." : "O seu nome completo foi cambiado", + "Unable to change full name" : "Non é posíbel cambiar o nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?", "Add trusted domain" : "Engadir dominio de confianza", "Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.", @@ -216,7 +216,6 @@ OC.L10N.register( "iOS app" : "Aplicación iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se quere axudar ao proxecto\n\t\túnase ao desenvolvemento\n\t\tou\n\t\tespalle a nova!", "Show First Run Wizard again" : "Amosar o axudante da primeira execución outra vez", - "You have used %s of the available %s" : "Ten en uso %s do total dispoñíbel de %s", "Password" : "Contrasinal", "Unable to change your password" : "Non é posíbel cambiar o seu contrasinal", "Current password" : "Contrasinal actual", diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index e8f78c560f..7447e933e4 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -10,12 +10,10 @@ "Log" : "Rexistro", "Tips & tricks" : "Trucos e consellos", "Updates" : "Actualizacións", - "Authentication error" : "Produciuse un erro de autenticación", - "Your full name has been changed." : "O seu nome completo foi cambiado", - "Unable to change full name" : "Non é posíbel cambiar o nome completo", "Couldn't remove app." : "Non foi posíbel retirar a aplicación.", "Language changed" : "O idioma cambiou", "Invalid request" : "Petición incorrecta", + "Authentication error" : "Produciuse un erro de autenticación", "Admins can't remove themself from the admin group" : "Os administradores non poden eliminarse a si mesmos do grupo admin", "Unable to add user to group %s" : "Non é posíbel engadir o usuario ao grupo %s", "Unable to remove user from group %s" : "Non é posíbel eliminar o usuario do grupo %s", @@ -51,6 +49,8 @@ "Invalid user" : "Usuario incorrecto", "Unable to change mail address" : "Non é posíbel cambiar o enderezo de correo.", "Email saved" : "Correo gardado", + "Your full name has been changed." : "O seu nome completo foi cambiado", + "Unable to change full name" : "Non é posíbel cambiar o nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Confirma que quere engadir «{domain}» como dominio de confianza?", "Add trusted domain" : "Engadir dominio de confianza", "Migration in progress. Please wait until the migration is finished" : "A migración está en proceso. Agarde a que remate.", @@ -214,7 +214,6 @@ "iOS app" : "Aplicación iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se quere axudar ao proxecto\n\t\túnase ao desenvolvemento\n\t\tou\n\t\tespalle a nova!", "Show First Run Wizard again" : "Amosar o axudante da primeira execución outra vez", - "You have used %s of the available %s" : "Ten en uso %s do total dispoñíbel de %s", "Password" : "Contrasinal", "Unable to change your password" : "Non é posíbel cambiar o seu contrasinal", "Current password" : "Contrasinal actual", diff --git a/settings/l10n/he.js b/settings/l10n/he.js index cfffdc8b96..e5e5bc7df1 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -5,9 +5,9 @@ OC.L10N.register( "External Storage" : "אחסון חיצוני", "Cron" : "Cron", "Log" : "יומן", - "Authentication error" : "שגיאת הזדהות", "Language changed" : "שפה השתנתה", "Invalid request" : "בקשה לא חוקית", + "Authentication error" : "שגיאת הזדהות", "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים", "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s", "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s", @@ -48,7 +48,6 @@ OC.L10N.register( "Forum" : "פורום", "Get the apps to sync your files" : "השג את האפליקציות על מנת לסנכרן את הקבצים שלך", "Show First Run Wizard again" : "הצגת אשף ההפעלה הראשונית שוב", - "You have used %s of the available %s" : "השתמשת ב־%s מתוך %s הזמינים לך", "Password" : "סיסמא", "Unable to change your password" : "לא ניתן לשנות את הססמה שלך", "Current password" : "ססמה נוכחית", diff --git a/settings/l10n/he.json b/settings/l10n/he.json index b38203e3d0..393c6875de 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -3,9 +3,9 @@ "External Storage" : "אחסון חיצוני", "Cron" : "Cron", "Log" : "יומן", - "Authentication error" : "שגיאת הזדהות", "Language changed" : "שפה השתנתה", "Invalid request" : "בקשה לא חוקית", + "Authentication error" : "שגיאת הזדהות", "Admins can't remove themself from the admin group" : "מנהלים לא יכולים להסיר את עצמם מקבוצת המנהלים", "Unable to add user to group %s" : "לא ניתן להוסיף משתמש לקבוצה %s", "Unable to remove user from group %s" : "לא ניתן להסיר משתמש מהקבוצה %s", @@ -46,7 +46,6 @@ "Forum" : "פורום", "Get the apps to sync your files" : "השג את האפליקציות על מנת לסנכרן את הקבצים שלך", "Show First Run Wizard again" : "הצגת אשף ההפעלה הראשונית שוב", - "You have used %s of the available %s" : "השתמשת ב־%s מתוך %s הזמינים לך", "Password" : "סיסמא", "Unable to change your password" : "לא ניתן לשנות את הססמה שלך", "Current password" : "ססמה נוכחית", diff --git a/settings/l10n/hr.js b/settings/l10n/hr.js index d9c1bb3f4f..c841816616 100644 --- a/settings/l10n/hr.js +++ b/settings/l10n/hr.js @@ -6,12 +6,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Zapisnik", "Updates" : "nadogradnje", - "Authentication error" : "Pogrešna autentikacija", - "Your full name has been changed." : "Vaše puno ime je promijenjeno.", - "Unable to change full name" : "Puno ime nije moguće promijeniti.", "Couldn't remove app." : "Nije moguće ukloniti app.", "Language changed" : "Promjena jezika", "Invalid request" : "Zahtjev neispravan", + "Authentication error" : "Pogrešna autentikacija", "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", @@ -27,6 +25,8 @@ OC.L10N.register( "Email sent" : "E-pošta je poslana", "You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.", "Email saved" : "E-pošta spremljena", + "Your full name has been changed." : "Vaše puno ime je promijenjeno.", + "Unable to change full name" : "Puno ime nije moguće promijeniti.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Add trusted domain" : "Dodajte pouzdanu domenu", "Sending..." : "Slanje...", @@ -122,7 +122,6 @@ OC.L10N.register( "Forum" : "Forum", "Get the apps to sync your files" : "Koristite aplikacije za sinkronizaciju svojih datoteka", "Show First Run Wizard again" : "Opet pokažite First Run Wizard", - "You have used %s of the available %s" : "Iskoristili ste %s od raspoloživog %s", "Password" : "Lozinka", "Unable to change your password" : "Vašu lozinku nije moguće promijeniti", "Current password" : "Trenutna lozinka", diff --git a/settings/l10n/hr.json b/settings/l10n/hr.json index 8867813b96..4497d7acd6 100644 --- a/settings/l10n/hr.json +++ b/settings/l10n/hr.json @@ -4,12 +4,10 @@ "Cron" : "Cron", "Log" : "Zapisnik", "Updates" : "nadogradnje", - "Authentication error" : "Pogrešna autentikacija", - "Your full name has been changed." : "Vaše puno ime je promijenjeno.", - "Unable to change full name" : "Puno ime nije moguće promijeniti.", "Couldn't remove app." : "Nije moguće ukloniti app.", "Language changed" : "Promjena jezika", "Invalid request" : "Zahtjev neispravan", + "Authentication error" : "Pogrešna autentikacija", "Admins can't remove themself from the admin group" : "Administratori ne mogu sami sebe ukloniti iz admin grupe", "Unable to add user to group %s" : "Dodavanje korisnika grupi %s nije moguće", "Unable to remove user from group %s" : "Uklanjanje korisnika iz grupe %s nije moguće", @@ -25,6 +23,8 @@ "Email sent" : "E-pošta je poslana", "You need to set your user email before being able to send test emails." : "Prije nego li ste u mogućnosti slati testnu e-poštu trebate postaviti svoj korisnički email.", "Email saved" : "E-pošta spremljena", + "Your full name has been changed." : "Vaše puno ime je promijenjeno.", + "Unable to change full name" : "Puno ime nije moguće promijeniti.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeste li doista sigurni da želite dodati \"{domain}\" kao pouzdanu domenu?", "Add trusted domain" : "Dodajte pouzdanu domenu", "Sending..." : "Slanje...", @@ -120,7 +120,6 @@ "Forum" : "Forum", "Get the apps to sync your files" : "Koristite aplikacije za sinkronizaciju svojih datoteka", "Show First Run Wizard again" : "Opet pokažite First Run Wizard", - "You have used %s of the available %s" : "Iskoristili ste %s od raspoloživog %s", "Password" : "Lozinka", "Unable to change your password" : "Vašu lozinku nije moguće promijeniti", "Current password" : "Trenutna lozinka", diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js index 399129eda4..a774f53413 100644 --- a/settings/l10n/hu_HU.js +++ b/settings/l10n/hu_HU.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Naplózás", "Tips & tricks" : "Tippek és trükkök", "Updates" : "Frissítések", - "Authentication error" : "Azonosítási hiba", - "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.", - "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét", "Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.", "Language changed" : "A nyelv megváltozott", "Invalid request" : "Érvénytelen kérés", + "Authentication error" : "Azonosítási hiba", "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.", "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s", "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s", @@ -51,6 +49,8 @@ OC.L10N.register( "Invalid user" : "Érvénytelen felhasználó", "Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet", "Email saved" : "E-mail elmentve!", + "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.", + "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?", "Add trusted domain" : "Megbízható tartomány hozzáadása", "Migration in progress. Please wait until the migration is finished" : "Migráció folyamatban. Kérjük várj, míg a migráció befejeződik.", @@ -212,7 +212,6 @@ OC.L10N.register( "iOS app" : "IOS applikáció", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ha segíteni szeretnéd a projektet\n\t\tcsatlakozz a fejlesztéshez\n\t\tvagy\n\t\thirdesd az igét!", "Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!", - "You have used %s of the available %s" : "Az Ön tárterület-felhasználása jelenleg: %s. Maximálisan ennyi áll rendelkezésére: %s", "Password" : "Jelszó", "Unable to change your password" : "A jelszó nem változtatható meg", "Current password" : "A jelenlegi jelszó", diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json index fe9f17f14a..6d68a7f369 100644 --- a/settings/l10n/hu_HU.json +++ b/settings/l10n/hu_HU.json @@ -10,12 +10,10 @@ "Log" : "Naplózás", "Tips & tricks" : "Tippek és trükkök", "Updates" : "Frissítések", - "Authentication error" : "Azonosítási hiba", - "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.", - "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét", "Couldn't remove app." : "Az alkalmazást nem sikerült eltávolítani.", "Language changed" : "A nyelv megváltozott", "Invalid request" : "Érvénytelen kérés", + "Authentication error" : "Azonosítási hiba", "Admins can't remove themself from the admin group" : "Adminisztrátorok nem távolíthatják el magukat az admin csoportból.", "Unable to add user to group %s" : "A felhasználó nem adható hozzá ehhez a csoporthoz: %s", "Unable to remove user from group %s" : "A felhasználó nem távolítható el ebből a csoportból: %s", @@ -49,6 +47,8 @@ "Invalid user" : "Érvénytelen felhasználó", "Unable to change mail address" : "Nem lehet megváltoztatni az e-mail címet", "Email saved" : "E-mail elmentve!", + "Your full name has been changed." : "Az Ön teljes nevét módosítottuk.", + "Unable to change full name" : "Nem sikerült megváltoztatni a teljes nevét", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Biztos abban, hogy hozzá akarja adni \"{domain}\"-t a megbízható tartományokhoz?", "Add trusted domain" : "Megbízható tartomány hozzáadása", "Migration in progress. Please wait until the migration is finished" : "Migráció folyamatban. Kérjük várj, míg a migráció befejeződik.", @@ -210,7 +210,6 @@ "iOS app" : "IOS applikáció", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ha segíteni szeretnéd a projektet\n\t\tcsatlakozz a fejlesztéshez\n\t\tvagy\n\t\thirdesd az igét!", "Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!", - "You have used %s of the available %s" : "Az Ön tárterület-felhasználása jelenleg: %s. Maximálisan ennyi áll rendelkezésére: %s", "Password" : "Jelszó", "Unable to change your password" : "A jelszó nem változtatható meg", "Current password" : "A jelenlegi jelszó", diff --git a/settings/l10n/id.js b/settings/l10n/id.js index e5efe797e6..b3ba2dd91f 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Log", "Tips & tricks" : "Tips & trik", "Updates" : "Pembaruan", - "Authentication error" : "Terjadi kesalahan saat otentikasi", - "Your full name has been changed." : "Nama lengkap Anda telah diubah", - "Unable to change full name" : "Tidak dapat mengubah nama lengkap", "Couldn't remove app." : "Tidak dapat menghapus aplikasi.", "Language changed" : "Bahasa telah diubah", "Invalid request" : "Permintaan tidak valid", + "Authentication error" : "Terjadi kesalahan saat otentikasi", "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin", "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s", "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Pengguna salah", "Unable to change mail address" : "Tidak dapat mengubah alamat email", "Email saved" : "Email disimpan", + "Your full name has been changed." : "Nama lengkap Anda telah diubah", + "Unable to change full name" : "Tidak dapat mengubah nama lengkap", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?", "Add trusted domain" : "Tambah domain terpercaya", "Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Kamu sangat menyarankan untuk menginstal paket-paket yang dibutuhkan pada sistem agar mendukung lokal berikut: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transaksi penguncian berkas menggunakan basis data sebagai backend penguncian, untuk mendapatkan kinerja terbaik, disarankan mengkonfigurasi memcache sebagai penguncian. Baca dokumentasi ↗ untuk informasi lebih lanjut.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Mohon periksa dua kali panduan instalasi ↗, dan periksa segala kesalahan atau peringatan pada log.", "All checks passed." : "Semua pemeriksaan lulus.", "Open documentation" : "Buka dokumentasi", @@ -230,7 +229,6 @@ OC.L10N.register( "iOS app" : "Aplikasi iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Jika Anda ingin mendukung proyek ini\n\t\tbergabunglah dalam pengembangan\n\t\tatau\n\t\tpromosikan!", "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", - "You have used %s of the available %s" : "Anda telah menggunakan %s dari total %s", "Password" : "Sandi", "Unable to change your password" : "Gagal mengubah sandi Anda", "Current password" : "Sandi saat ini", diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 8a30d825bc..8004eea747 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -10,12 +10,10 @@ "Log" : "Log", "Tips & tricks" : "Tips & trik", "Updates" : "Pembaruan", - "Authentication error" : "Terjadi kesalahan saat otentikasi", - "Your full name has been changed." : "Nama lengkap Anda telah diubah", - "Unable to change full name" : "Tidak dapat mengubah nama lengkap", "Couldn't remove app." : "Tidak dapat menghapus aplikasi.", "Language changed" : "Bahasa telah diubah", "Invalid request" : "Permintaan tidak valid", + "Authentication error" : "Terjadi kesalahan saat otentikasi", "Admins can't remove themself from the admin group" : "Admin tidak dapat menghapus dirinya sendiri dari grup admin", "Unable to add user to group %s" : "Tidak dapat menambahkan pengguna ke grup %s", "Unable to remove user from group %s" : "Tidak dapat menghapus pengguna dari grup %s", @@ -51,6 +49,8 @@ "Invalid user" : "Pengguna salah", "Unable to change mail address" : "Tidak dapat mengubah alamat email", "Email saved" : "Email disimpan", + "Your full name has been changed." : "Nama lengkap Anda telah diubah", + "Unable to change full name" : "Tidak dapat mengubah nama lengkap", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Apakah Anda yakin ingin menambahkan \"{domain}\" sebagai domain terpercaya?", "Add trusted domain" : "Tambah domain terpercaya", "Migration in progress. Please wait until the migration is finished" : "Migrasi sedang dalam proses. Mohon tunggu sampai migrasi selesai.", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Kamu sangat menyarankan untuk menginstal paket-paket yang dibutuhkan pada sistem agar mendukung lokal berikut: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transaksi penguncian berkas menggunakan basis data sebagai backend penguncian, untuk mendapatkan kinerja terbaik, disarankan mengkonfigurasi memcache sebagai penguncian. Baca dokumentasi ↗ untuk informasi lebih lanjut.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Mohon periksa dua kali panduan instalasi ↗, dan periksa segala kesalahan atau peringatan pada log.", "All checks passed." : "Semua pemeriksaan lulus.", "Open documentation" : "Buka dokumentasi", @@ -228,7 +227,6 @@ "iOS app" : "Aplikasi iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Jika Anda ingin mendukung proyek ini\n\t\tbergabunglah dalam pengembangan\n\t\tatau\n\t\tpromosikan!", "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", - "You have used %s of the available %s" : "Anda telah menggunakan %s dari total %s", "Password" : "Sandi", "Unable to change your password" : "Gagal mengubah sandi Anda", "Current password" : "Sandi saat ini", diff --git a/settings/l10n/is.js b/settings/l10n/is.js index 994011a098..8dad6854cd 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -2,9 +2,9 @@ OC.L10N.register( "settings", { "External Storage" : "Ytri gagnageymsla", - "Authentication error" : "Villa við auðkenningu", "Language changed" : "Tungumáli breytt", "Invalid request" : "Ógild fyrirspurn", + "Authentication error" : "Villa við auðkenningu", "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp", "Unable to add user to group %s" : "Ekki tókst að bæta notenda við hópinn %s", "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s", @@ -37,7 +37,6 @@ OC.L10N.register( "by" : "af", "Cheers!" : "Skál!", "Forum" : "Vefspjall", - "You have used %s of the available %s" : "Þú hefur notað %s af tiltæku %s", "Password" : "Lykilorð", "Unable to change your password" : "Ekki tókst að breyta lykilorðinu þínu", "Current password" : "Núverandi lykilorð", diff --git a/settings/l10n/is.json b/settings/l10n/is.json index 5e2507a549..17b9b2b19a 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -1,8 +1,8 @@ { "translations": { "External Storage" : "Ytri gagnageymsla", - "Authentication error" : "Villa við auðkenningu", "Language changed" : "Tungumáli breytt", "Invalid request" : "Ógild fyrirspurn", + "Authentication error" : "Villa við auðkenningu", "Admins can't remove themself from the admin group" : "Stjórnendur geta ekki fjarlægt sjálfa sig úr stjórnendahóp", "Unable to add user to group %s" : "Ekki tókst að bæta notenda við hópinn %s", "Unable to remove user from group %s" : "Ekki tókst að fjarlægja notanda úr hópnum %s", @@ -35,7 +35,6 @@ "by" : "af", "Cheers!" : "Skál!", "Forum" : "Vefspjall", - "You have used %s of the available %s" : "Þú hefur notað %s af tiltæku %s", "Password" : "Lykilorð", "Unable to change your password" : "Ekki tókst að breyta lykilorðinu þínu", "Current password" : "Núverandi lykilorð", diff --git a/settings/l10n/it.js b/settings/l10n/it.js index 4d73fe6100..da582dc123 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Log", "Tips & tricks" : "Suggerimenti e trucchi", "Updates" : "Aggiornamenti", - "Authentication error" : "Errore di autenticazione", - "Your full name has been changed." : "Il tuo nome completo è stato cambiato.", - "Unable to change full name" : "Impossibile cambiare il nome completo", "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", "Language changed" : "Lingua modificata", "Invalid request" : "Richiesta non valida", + "Authentication error" : "Errore di autenticazione", "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione", "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s", "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Utente non valido", "Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta", "Email saved" : "Email salvata", + "Your full name has been changed." : "Il tuo nome completo è stato cambiato.", + "Unable to change full name" : "Impossibile cambiare il nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?", "Add trusted domain" : "Aggiungi dominio attendibile", "Migration in progress. Please wait until the migration is finished" : "Migrazione in corso. Attendi fino al completamento della migrazione", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwrite.cli.url\" nel file config.php al percorso della radice del sito della tua installazione (Consigliato: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Il blocco del file transazionale sta utilizzando il database come motore di blocco, per avere prestazioni migliori, è consigliato configurare una cache di memoria per il blocco. Vedi la documentazione ↗ per ulteriori informazioni.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Leggi attentamente le guide d'installazione ↗, e controlla gli errori o gli avvisi nel log.", "All checks passed." : "Tutti i controlli passati.", "Open documentation" : "Apri la documentazione", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "Applicazione iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se vuoi supportare il progetto\n\t\tdiventa uno sviluppatore\n\t\to\n\t\tdiffondi il verbo!", "Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio", - "You have used %s of the available %s" : "Hai utilizzato %s dei %s disponibili", "Password" : "Password", "Unable to change your password" : "Modifica password non riuscita", "Current password" : "Password attuale", diff --git a/settings/l10n/it.json b/settings/l10n/it.json index 1090780f96..6047e85e59 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -10,12 +10,10 @@ "Log" : "Log", "Tips & tricks" : "Suggerimenti e trucchi", "Updates" : "Aggiornamenti", - "Authentication error" : "Errore di autenticazione", - "Your full name has been changed." : "Il tuo nome completo è stato cambiato.", - "Unable to change full name" : "Impossibile cambiare il nome completo", "Couldn't remove app." : "Impossibile rimuovere l'applicazione.", "Language changed" : "Lingua modificata", "Invalid request" : "Richiesta non valida", + "Authentication error" : "Errore di autenticazione", "Admins can't remove themself from the admin group" : "Gli amministratori non possono rimuovere se stessi dal gruppo di amministrazione", "Unable to add user to group %s" : "Impossibile aggiungere l'utente al gruppo %s", "Unable to remove user from group %s" : "Impossibile rimuovere l'utente dal gruppo %s", @@ -51,6 +49,8 @@ "Invalid user" : "Utente non valido", "Unable to change mail address" : "Impossibile cambiare l'indirizzo di posta", "Email saved" : "Email salvata", + "Your full name has been changed." : "Il tuo nome completo è stato cambiato.", + "Unable to change full name" : "Impossibile cambiare il nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sei sicuro di voler aggiungere \"{domain}\" come dominio attendibile?", "Add trusted domain" : "Aggiungi dominio attendibile", "Migration in progress. Please wait until the migration is finished" : "Migrazione in corso. Attendi fino al completamento della migrazione", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Consigliamo vivamente di installare i pacchetti richiesti sul tuo sistema per supportare una delle localizzazioni seguenti: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se la tua installazione non si trova nella radice del dominio e utilizza il cron di sistema, potrebbero esserci problemi con la generazione degli URL. Per evitare questi problemi, imposta l'opzione \"overwrite.cli.url\" nel file config.php al percorso della radice del sito della tua installazione (Consigliato: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Non è stato possibile eseguire il job di cron tramite CLI. Sono apparsi i seguenti errori tecnici:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Il blocco del file transazionale sta utilizzando il database come motore di blocco, per avere prestazioni migliori, è consigliato configurare una cache di memoria per il blocco. Vedi la documentazione ↗ per ulteriori informazioni.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Leggi attentamente le guide d'installazione ↗, e controlla gli errori o gli avvisi nel log.", "All checks passed." : "Tutti i controlli passati.", "Open documentation" : "Apri la documentazione", @@ -229,7 +228,6 @@ "iOS app" : "Applicazione iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se vuoi supportare il progetto\n\t\tdiventa uno sviluppatore\n\t\to\n\t\tdiffondi il verbo!", "Show First Run Wizard again" : "Mostra nuovamente la procedura di primo avvio", - "You have used %s of the available %s" : "Hai utilizzato %s dei %s disponibili", "Password" : "Password", "Unable to change your password" : "Modifica password non riuscita", "Current password" : "Password attuale", diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js index 9d6705aff3..4a1b8944f8 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -20,7 +20,7 @@ OC.L10N.register( "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません", "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません", "Couldn't update app." : "アプリをアップデートできませんでした。", - "Wrong password" : "無効なパスワード", + "Wrong password" : "パスワードが間違っています", "No user supplied" : "ユーザーが指定されていません", "Please provide an admin recovery password, otherwise all user data will be lost" : "リカバリ用の管理者パスワードを入力してください。そうでない場合は、全ユーザーのデータが失われます。", "Wrong admin recovery password. Please check the password and try again." : "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするには、システムに必要なパッケージをインストールすることを強くおすすめします: %s。", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合は、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwrite.cli.url\" オプションをインストールしたwebrootのパスに設定してください。(推奨: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "トランザクションファイルのロックは、データベースを使用してバックエンドのロックをしています。最高のパフォーマンスのためには、ロック用に memcache を設定することをお勧めします。詳細については、ドキュメント↗ を参照してください。", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "インストールガイド ↗をもう一度チェックして、ログ にあるエラーまたは警告について確認してください。", "All checks passed." : "すべてのチェックに合格しました。", "Open documentation" : "ドキュメントを開く", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "iOSアプリ", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "プロジェクトをサポートしていただける場合は、\n開発に参加するか、\nプロジェクトを広く伝えてください!", "Show First Run Wizard again" : "初回ウィザードを再表示する", - "You have used %s of the available %s" : "現在 %s / %s を使用しています", "Password" : "パスワード", "Unable to change your password" : "パスワードを変更することができません", "Current password" : "現在のパスワード", diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index aa22a5ce9b..a811a7410b 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -18,7 +18,7 @@ "Unable to add user to group %s" : "ユーザーをグループ %s に追加できません", "Unable to remove user from group %s" : "ユーザーをグループ %s から削除できません", "Couldn't update app." : "アプリをアップデートできませんでした。", - "Wrong password" : "無効なパスワード", + "Wrong password" : "パスワードが間違っています", "No user supplied" : "ユーザーが指定されていません", "Please provide an admin recovery password, otherwise all user data will be lost" : "リカバリ用の管理者パスワードを入力してください。そうでない場合は、全ユーザーのデータが失われます。", "Wrong admin recovery password. Please check the password and try again." : "リカバリ用の管理者パスワードが間違っています。パスワードを確認して再度実行してください。", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "次のロケールをサポートするには、システムに必要なパッケージをインストールすることを強くおすすめします: %s。", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "URLがドメインのルート(/)で終わっていない場合で、システムのcronを利用している場合は、URLの生成に問題が発生します。その場合は、config.php ファイルの中の \"overwrite.cli.url\" オプションをインストールしたwebrootのパスに設定してください。(推奨: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI から cronジョブを実行することができませんでした。次の技術的なエラーが発生しています:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "トランザクションファイルのロックは、データベースを使用してバックエンドのロックをしています。最高のパフォーマンスのためには、ロック用に memcache を設定することをお勧めします。詳細については、ドキュメント↗ を参照してください。", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "インストールガイド ↗をもう一度チェックして、ログ にあるエラーまたは警告について確認してください。", "All checks passed." : "すべてのチェックに合格しました。", "Open documentation" : "ドキュメントを開く", @@ -229,7 +228,6 @@ "iOS app" : "iOSアプリ", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "プロジェクトをサポートしていただける場合は、\n開発に参加するか、\nプロジェクトを広く伝えてください!", "Show First Run Wizard again" : "初回ウィザードを再表示する", - "You have used %s of the available %s" : "現在 %s / %s を使用しています", "Password" : "パスワード", "Unable to change your password" : "パスワードを変更することができません", "Current password" : "現在のパスワード", diff --git a/settings/l10n/ka_GE.js b/settings/l10n/ka_GE.js index 0c6ad6fd82..72e6d9ab65 100644 --- a/settings/l10n/ka_GE.js +++ b/settings/l10n/ka_GE.js @@ -5,9 +5,9 @@ OC.L10N.register( "External Storage" : "ექსტერნალ საცავი", "Cron" : "Cron–ი", "Log" : "ლოგი", - "Authentication error" : "ავთენტიფიკაციის შეცდომა", "Language changed" : "ენა შეცვლილია", "Invalid request" : "არასწორი მოთხოვნა", + "Authentication error" : "ავთენტიფიკაციის შეცდომა", "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან", "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s", "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s", @@ -48,7 +48,6 @@ OC.L10N.register( "Forum" : "ფორუმი", "Get the apps to sync your files" : "აპლიკაცია ფაილების სინქრონიზაციისთვის", "Show First Run Wizard again" : "მაჩვენე თავიდან გაშვებული ვიზარდი", - "You have used %s of the available %s" : "თქვენ გამოყენებული გაქვთ %s –ი –%s–დან", "Password" : "პაროლი", "Unable to change your password" : "თქვენი პაროლი არ შეიცვალა", "Current password" : "მიმდინარე პაროლი", diff --git a/settings/l10n/ka_GE.json b/settings/l10n/ka_GE.json index 5892c19547..63771d97d5 100644 --- a/settings/l10n/ka_GE.json +++ b/settings/l10n/ka_GE.json @@ -3,9 +3,9 @@ "External Storage" : "ექსტერნალ საცავი", "Cron" : "Cron–ი", "Log" : "ლოგი", - "Authentication error" : "ავთენტიფიკაციის შეცდომა", "Language changed" : "ენა შეცვლილია", "Invalid request" : "არასწორი მოთხოვნა", + "Authentication error" : "ავთენტიფიკაციის შეცდომა", "Admins can't remove themself from the admin group" : "ადმინისტრატორებს არ შეუძლიათ საკუთარი თავის წაშლა ადმინ ჯგუფიდან", "Unable to add user to group %s" : "მომხმარებლის დამატება ვერ მოხეხდა ჯგუფში %s", "Unable to remove user from group %s" : "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s", @@ -46,7 +46,6 @@ "Forum" : "ფორუმი", "Get the apps to sync your files" : "აპლიკაცია ფაილების სინქრონიზაციისთვის", "Show First Run Wizard again" : "მაჩვენე თავიდან გაშვებული ვიზარდი", - "You have used %s of the available %s" : "თქვენ გამოყენებული გაქვთ %s –ი –%s–დან", "Password" : "პაროლი", "Unable to change your password" : "თქვენი პაროლი არ შეიცვალა", "Current password" : "მიმდინარე პაროლი", diff --git a/settings/l10n/km.js b/settings/l10n/km.js index bba9783e9a..321787ef39 100644 --- a/settings/l10n/km.js +++ b/settings/l10n/km.js @@ -5,9 +5,9 @@ OC.L10N.register( "External Storage" : "ឃ្លាំងផ្ទុក​ខាងក្រៅ", "Cron" : "Cron", "Log" : "Log", - "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ", "Language changed" : "បាន​ប្ដូរ​ភាសា", "Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ", + "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ", "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ", "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s", "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s", @@ -63,7 +63,6 @@ OC.L10N.register( "Forum" : "វេទិកាពិភាក្សា", "Get the apps to sync your files" : "ដាក់​អោយកម្មវិធីផ្សេងៗ ​ធ្វើសមកាលកម្ម​ឯកសារ​អ្នក", "Show First Run Wizard again" : "បង្ហាញ First Run Wizard ម្តង​ទៀត", - "You have used %s of the available %s" : "អ្នក​បាន​ប្រើ %s ក្នុង​ចំណោម​ចំនួន​មាន %s", "Password" : "ពាក្យសម្ងាត់", "Unable to change your password" : "មិន​អាច​ប្ដូរ​ពាក្យ​សម្ងាត់​របស់​អ្នក​បាន​ទេ", "Current password" : "ពាក្យសម្ងាត់​បច្ចុប្បន្ន", diff --git a/settings/l10n/km.json b/settings/l10n/km.json index 89cd82da01..ac409f3393 100644 --- a/settings/l10n/km.json +++ b/settings/l10n/km.json @@ -3,9 +3,9 @@ "External Storage" : "ឃ្លាំងផ្ទុក​ខាងក្រៅ", "Cron" : "Cron", "Log" : "Log", - "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ", "Language changed" : "បាន​ប្ដូរ​ភាសា", "Invalid request" : "សំណើ​មិន​ត្រឹម​ត្រូវ", + "Authentication error" : "កំហុស​ការ​ផ្ទៀង​ផ្ទាត់​ភាព​ត្រឹម​ត្រូវ", "Admins can't remove themself from the admin group" : "អ្នក​គ្រប់​គ្រង​មិន​អាច​លុប​ខ្លួន​ឯង​ចេញ​ពី​ក្រុម​អ្នក​គ្រប់​គ្រង​ឡើយ", "Unable to add user to group %s" : "មិន​អាច​បន្ថែម​អ្នក​ប្រើ​ទៅ​ក្រុម %s", "Unable to remove user from group %s" : "មិន​អាច​ដក​អ្នក​ប្រើ​ចេញ​ពី​ក្រុម​ %s", @@ -61,7 +61,6 @@ "Forum" : "វេទិកាពិភាក្សា", "Get the apps to sync your files" : "ដាក់​អោយកម្មវិធីផ្សេងៗ ​ធ្វើសមកាលកម្ម​ឯកសារ​អ្នក", "Show First Run Wizard again" : "បង្ហាញ First Run Wizard ម្តង​ទៀត", - "You have used %s of the available %s" : "អ្នក​បាន​ប្រើ %s ក្នុង​ចំណោម​ចំនួន​មាន %s", "Password" : "ពាក្យសម្ងាត់", "Unable to change your password" : "មិន​អាច​ប្ដូរ​ពាក្យ​សម្ងាត់​របស់​អ្នក​បាន​ទេ", "Current password" : "ពាក្យសម្ងាត់​បច្ចុប្បន្ន", diff --git a/settings/l10n/kn.js b/settings/l10n/kn.js index 4ef7313b3b..673081e5f0 100644 --- a/settings/l10n/kn.js +++ b/settings/l10n/kn.js @@ -3,12 +3,10 @@ OC.L10N.register( { "Sharing" : "ಹಂಚಿಕೆ", "Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ", - "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ", - "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.", - "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ", "Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ", "Invalid request" : "ಅಮಾನ್ಯ ಕೋರಿಕೆ", + "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ", "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ", "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", @@ -33,6 +31,8 @@ OC.L10N.register( "Invalid user" : "ಅಮಾನ್ಯ ಬಳಕೆದಾರ", "Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ", + "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.", + "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", "All" : "ಎಲ್ಲಾ", "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....", diff --git a/settings/l10n/kn.json b/settings/l10n/kn.json index cbae632d1c..5942e8a8dc 100644 --- a/settings/l10n/kn.json +++ b/settings/l10n/kn.json @@ -1,12 +1,10 @@ { "translations": { "Sharing" : "ಹಂಚಿಕೆ", "Log" : "ಹಿನ್ನೆಲೆಯ ದಾಖಲೆ", - "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ", - "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.", - "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Couldn't remove app." : "ಅಳಿಸುವಾಗ ಏನೊ ಲೋಪವಾಗಿದೆ", "Language changed" : "ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ", "Invalid request" : "ಅಮಾನ್ಯ ಕೋರಿಕೆ", + "Authentication error" : "ದೃಢೀಕರಣ ದೋಷ", "Admins can't remove themself from the admin group" : "ನಿರ್ವಾಹಕರು ನಿರ್ವಹಣೆ ಗುಂಪಿನಿಂದ ತಮ್ಮನ್ನೇ ತಾವು ತೆಗೆದುಹಾಕಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ", "Unable to add user to group %s" : "%s ಗುಂಪಿಗೆ ಹೂಸ ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "Unable to remove user from group %s" : "%s ಗುಂಪು ಬಳಕೆದಾರ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", @@ -31,6 +29,8 @@ "Invalid user" : "ಅಮಾನ್ಯ ಬಳಕೆದಾರ", "Unable to change mail address" : "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ", "Email saved" : "ಇ-ಅಂಚೆಯನ್ನು ಉಳಿಸಿದೆ", + "Your full name has been changed." : "ನಿಮ್ಮ ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.", + "Unable to change full name" : "ಪೂರ್ಣ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ", "Sending..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", "All" : "ಎಲ್ಲಾ", "Please wait...." : "ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ ....", diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index 6eea3ecede..1cdade56ec 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "로그", "Tips & tricks" : "팁과 추가 정보", "Updates" : "업데이트", - "Authentication error" : "인증 오류", - "Your full name has been changed." : "전체 이름이 변경되었습니다.", - "Unable to change full name" : "전체 이름을 변경할 수 없음", "Couldn't remove app." : "앱을 삭제할 수 없습니다.", "Language changed" : "언어가 변경됨", "Invalid request" : "잘못된 요청", + "Authentication error" : "인증 오류", "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음", "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음", "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "잘못된 사용자", "Unable to change mail address" : "이메일 주소를 변경할 수 없음", "Email saved" : "이메일 저장됨", + "Your full name has been changed." : "전체 이름이 변경되었습니다.", + "Unable to change full name" : "전체 이름을 변경할 수 없음", "Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?", "Add trusted domain" : "신뢰할 수 있는 도메인 추가", "Migration in progress. Please wait until the migration is finished" : "이전 작업 중입니다. 작업이 완료될 때까지 기다려 주십시오", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "다음 중 하나 이상의 로캘을 지원하기 위하여 필요한 패키지를 시스템에 설치하는 것을 추천합니다: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "잠금 백엔드로 데이터베이스를 사용하고 있으므로 트랜잭션 기반 파일 잠금을 사용합니다. 더 좋은 성능을 내려면 memcache 기반 잠금 사용을 추천합니다. 더 많은 정보를 보려면 문서 ↗를 참고하십시오.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "설치 가이드 ↗를 다시 확인하시고 로그의 오류 및 경고를 확인하십시오.", "All checks passed." : "모든 검사를 통과했습니다.", "Open documentation" : "문서 열기", @@ -230,7 +229,6 @@ OC.L10N.register( "iOS app" : "iOS 앱", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "프로젝트를 지원하려면\n\t\t개발에 참여하거나\n\t\t\n\t\t널리 알려 주십시오!", "Show First Run Wizard again" : "첫 실행 마법사 다시 보이기", - "You have used %s of the available %s" : "현재 공간 중 %s/%s을(를) 사용 중입니다", "Password" : "암호", "Unable to change your password" : "암호를 변경할 수 없음", "Current password" : "현재 암호", diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index 1fb664b213..be3974f712 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -10,12 +10,10 @@ "Log" : "로그", "Tips & tricks" : "팁과 추가 정보", "Updates" : "업데이트", - "Authentication error" : "인증 오류", - "Your full name has been changed." : "전체 이름이 변경되었습니다.", - "Unable to change full name" : "전체 이름을 변경할 수 없음", "Couldn't remove app." : "앱을 삭제할 수 없습니다.", "Language changed" : "언어가 변경됨", "Invalid request" : "잘못된 요청", + "Authentication error" : "인증 오류", "Admins can't remove themself from the admin group" : "관리자 자신을 관리자 그룹에서 삭제할 수 없음", "Unable to add user to group %s" : "그룹 %s에 사용자를 추가할 수 없음", "Unable to remove user from group %s" : "그룹 %s에서 사용자를 삭제할 수 없음", @@ -51,6 +49,8 @@ "Invalid user" : "잘못된 사용자", "Unable to change mail address" : "이메일 주소를 변경할 수 없음", "Email saved" : "이메일 저장됨", + "Your full name has been changed." : "전체 이름이 변경되었습니다.", + "Unable to change full name" : "전체 이름을 변경할 수 없음", "Are you really sure you want add \"{domain}\" as trusted domain?" : "신뢰할 수 있는 도메인 목록에 \"{domain}\"을(를) 추가하시겠습니까?", "Add trusted domain" : "신뢰할 수 있는 도메인 추가", "Migration in progress. Please wait until the migration is finished" : "이전 작업 중입니다. 작업이 완료될 때까지 기다려 주십시오", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "다음 중 하나 이상의 로캘을 지원하기 위하여 필요한 패키지를 시스템에 설치하는 것을 추천합니다: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "도메인의 루트 디렉터리 아래에 설치되어 있지 않고 시스템 cron을 사용한다면 URL 생성에 문제가 발생할 수도 있습니다. 이 문제를 해결하려면 설치본의 웹 루트 경로에 있는 config.php 파일의 \"overwrite.cli.url\" 옵션을 변경하십시오(제안: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "CLI로 cronjob을 실행할 수 없었습니다. 다음 기술적 오류가 발생했습니다:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "잠금 백엔드로 데이터베이스를 사용하고 있으므로 트랜잭션 기반 파일 잠금을 사용합니다. 더 좋은 성능을 내려면 memcache 기반 잠금 사용을 추천합니다. 더 많은 정보를 보려면 문서 ↗를 참고하십시오.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "설치 가이드 ↗를 다시 확인하시고 로그의 오류 및 경고를 확인하십시오.", "All checks passed." : "모든 검사를 통과했습니다.", "Open documentation" : "문서 열기", @@ -228,7 +227,6 @@ "iOS app" : "iOS 앱", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "프로젝트를 지원하려면\n\t\t개발에 참여하거나\n\t\t\n\t\t널리 알려 주십시오!", "Show First Run Wizard again" : "첫 실행 마법사 다시 보이기", - "You have used %s of the available %s" : "현재 공간 중 %s/%s을(를) 사용 중입니다", "Password" : "암호", "Unable to change your password" : "암호를 변경할 수 없음", "Current password" : "현재 암호", diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js index 79643dc416..43f9705baa 100644 --- a/settings/l10n/lb.js +++ b/settings/l10n/lb.js @@ -5,9 +5,9 @@ OC.L10N.register( "Redis" : "Redis", "Cron" : "Cron", "Log" : "Log", - "Authentication error" : "Authentifikatioun's Fehler", "Language changed" : "Sprooch huet geännert", "Invalid request" : "Ongülteg Requête", + "Authentication error" : "Authentifikatioun's Fehler", "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", "Wrong password" : "Falscht Passwuert", diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json index 26af461d14..1d408deb07 100644 --- a/settings/l10n/lb.json +++ b/settings/l10n/lb.json @@ -3,9 +3,9 @@ "Redis" : "Redis", "Cron" : "Cron", "Log" : "Log", - "Authentication error" : "Authentifikatioun's Fehler", "Language changed" : "Sprooch huet geännert", "Invalid request" : "Ongülteg Requête", + "Authentication error" : "Authentifikatioun's Fehler", "Admins can't remove themself from the admin group" : "Admins kennen sech selwer net aus enger Admin Group läschen.", "Unable to add user to group %s" : "Onmeiglech User an Grupp ze sätzen %s", "Wrong password" : "Falscht Passwuert", diff --git a/settings/l10n/lo.js b/settings/l10n/lo.js index 862f93e195..4306981813 100644 --- a/settings/l10n/lo.js +++ b/settings/l10n/lo.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Sharing" : "ການແບ່ງປັນ", "Log" : "ບັນທຶກ", - "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້", - "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້" + "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້", + "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້" }, "nplurals=1; plural=0;"); diff --git a/settings/l10n/lo.json b/settings/l10n/lo.json index 7551594418..942e427821 100644 --- a/settings/l10n/lo.json +++ b/settings/l10n/lo.json @@ -1,7 +1,7 @@ { "translations": { "Sharing" : "ການແບ່ງປັນ", "Log" : "ບັນທຶກ", - "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້", - "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້" + "Couldn't remove app." : "ບໍ່ສາມາດລຶບແອັບຯອອກໄດ້", + "Unable to change full name" : "ບໍ່ສາມາດປ່ຽນຊື່ເຕັມໄດ້" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js index c1ec5be221..839707cd21 100644 --- a/settings/l10n/lt_LT.js +++ b/settings/l10n/lt_LT.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Žurnalas", "Tips & tricks" : "Patarimai ir gudrybės", "Updates" : "Atnaujinimai", - "Authentication error" : "Autentikacijos klaida", - "Your full name has been changed." : "Pilnas vardas pakeistas.", - "Unable to change full name" : "Nepavyko pakeisti pilno vardo", "Couldn't remove app." : "Nepavyko pašalinti programėlės.", "Language changed" : "Kalba pakeista", "Invalid request" : "Klaidinga užklausa", + "Authentication error" : "Autentikacijos klaida", "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės", "Unable to add user to group %s" : "Nepavyko pridėti vartotojo prie grupės %s", "Unable to remove user from group %s" : "Nepavyko ištrinti vartotojo iš grupės %s", @@ -37,6 +35,8 @@ OC.L10N.register( "Your %s account was created" : "Tavo paskyra %s sukurta", "Unable to delete user." : "Nepavyko ištrinti vartotojo.", "Email saved" : "El. paštas išsaugotas", + "Your full name has been changed." : "Pilnas vardas pakeistas.", + "Unable to change full name" : "Nepavyko pakeisti pilno vardo", "All" : "Viskas", "Please wait...." : "Prašome palaukti...", "Error while disabling app" : "Klaida išjungiant programą", @@ -88,7 +88,6 @@ OC.L10N.register( "Android app" : "Android programa", "iOS app" : "iOS programa", "Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą", - "You have used %s of the available %s" : "Jūs naudojate %s iš galimų %s", "Password" : "Slaptažodis", "Unable to change your password" : "Neįmanoma pakeisti slaptažodžio", "Current password" : "Dabartinis slaptažodis", diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json index cf38951209..4e6a45524a 100644 --- a/settings/l10n/lt_LT.json +++ b/settings/l10n/lt_LT.json @@ -10,12 +10,10 @@ "Log" : "Žurnalas", "Tips & tricks" : "Patarimai ir gudrybės", "Updates" : "Atnaujinimai", - "Authentication error" : "Autentikacijos klaida", - "Your full name has been changed." : "Pilnas vardas pakeistas.", - "Unable to change full name" : "Nepavyko pakeisti pilno vardo", "Couldn't remove app." : "Nepavyko pašalinti programėlės.", "Language changed" : "Kalba pakeista", "Invalid request" : "Klaidinga užklausa", + "Authentication error" : "Autentikacijos klaida", "Admins can't remove themself from the admin group" : "Administratoriai negali pašalinti savęs iš administratorių grupės", "Unable to add user to group %s" : "Nepavyko pridėti vartotojo prie grupės %s", "Unable to remove user from group %s" : "Nepavyko ištrinti vartotojo iš grupės %s", @@ -35,6 +33,8 @@ "Your %s account was created" : "Tavo paskyra %s sukurta", "Unable to delete user." : "Nepavyko ištrinti vartotojo.", "Email saved" : "El. paštas išsaugotas", + "Your full name has been changed." : "Pilnas vardas pakeistas.", + "Unable to change full name" : "Nepavyko pakeisti pilno vardo", "All" : "Viskas", "Please wait...." : "Prašome palaukti...", "Error while disabling app" : "Klaida išjungiant programą", @@ -86,7 +86,6 @@ "Android app" : "Android programa", "iOS app" : "iOS programa", "Show First Run Wizard again" : "Rodyti pirmo karto vedlį dar kartą", - "You have used %s of the available %s" : "Jūs naudojate %s iš galimų %s", "Password" : "Slaptažodis", "Unable to change your password" : "Neįmanoma pakeisti slaptažodžio", "Current password" : "Dabartinis slaptažodis", diff --git a/settings/l10n/lv.js b/settings/l10n/lv.js index 30cb20b645..52b7929f49 100644 --- a/settings/l10n/lv.js +++ b/settings/l10n/lv.js @@ -6,12 +6,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Žurnāls", "Updates" : "Atjauninājumi", - "Authentication error" : "Autentifikācijas kļūda", - "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.", - "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu", "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.", "Language changed" : "Valoda tika nomainīta", "Invalid request" : "Nederīgs vaicājums", + "Authentication error" : "Autentifikācijas kļūda", "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas", "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s", "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s", @@ -40,6 +38,8 @@ OC.L10N.register( "Invalid user" : "Nepareizs lietotājs", "Unable to change mail address" : "Nevar nomainīt e-pasta adresi", "Email saved" : "E-pasts tika saglabāts", + "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.", + "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?", "Add trusted domain" : "Pievienot uzticamu domēnu", "Sending..." : "Sūta...", @@ -128,7 +128,6 @@ OC.L10N.register( "Android app" : "Android lietotne", "iOS app" : "iOS lietotne", "Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni", - "You have used %s of the available %s" : "Jūs lietojat %s no pieejamajiem %s", "Password" : "Parole", "Unable to change your password" : "Nevar nomainīt jūsu paroli", "Current password" : "Pašreizējā parole", diff --git a/settings/l10n/lv.json b/settings/l10n/lv.json index 18b41b82f9..4313703833 100644 --- a/settings/l10n/lv.json +++ b/settings/l10n/lv.json @@ -4,12 +4,10 @@ "Cron" : "Cron", "Log" : "Žurnāls", "Updates" : "Atjauninājumi", - "Authentication error" : "Autentifikācijas kļūda", - "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.", - "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu", "Couldn't remove app." : "Nebija iespējams atslēgt lietoni.", "Language changed" : "Valoda tika nomainīta", "Invalid request" : "Nederīgs vaicājums", + "Authentication error" : "Autentifikācijas kļūda", "Admins can't remove themself from the admin group" : "Administratori nevar izņemt paši sevi no administratoru grupas", "Unable to add user to group %s" : "Nevar pievienot lietotāju grupai %s", "Unable to remove user from group %s" : "Nevar izņemt lietotāju no grupas %s", @@ -38,6 +36,8 @@ "Invalid user" : "Nepareizs lietotājs", "Unable to change mail address" : "Nevar nomainīt e-pasta adresi", "Email saved" : "E-pasts tika saglabāts", + "Your full name has been changed." : "Jūsu pilnais vārds tika mainīts.", + "Unable to change full name" : "Nav iespējams nomainīt jūsu pilno vārdu", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Vai esat pārliecināts, ka vēlaties pievienot \"{domain}\" kā uzticamu domēnu?", "Add trusted domain" : "Pievienot uzticamu domēnu", "Sending..." : "Sūta...", @@ -126,7 +126,6 @@ "Android app" : "Android lietotne", "iOS app" : "iOS lietotne", "Show First Run Wizard again" : "Vēlreiz rādīt pirmās palaišanas vedni", - "You have used %s of the available %s" : "Jūs lietojat %s no pieejamajiem %s", "Password" : "Parole", "Unable to change your password" : "Nevar nomainīt jūsu paroli", "Current password" : "Pašreizējā parole", diff --git a/settings/l10n/mk.js b/settings/l10n/mk.js index 65e9d4c09a..d3deefde6b 100644 --- a/settings/l10n/mk.js +++ b/settings/l10n/mk.js @@ -10,12 +10,10 @@ OC.L10N.register( "Log" : "Записник", "Tips & tricks" : "Совети и трикови", "Updates" : "Ажурирања", - "Authentication error" : "Грешка во автентикација", - "Your full name has been changed." : "Вашето целосно име е променето.", - "Unable to change full name" : "Не можам да го променам целото име", "Couldn't remove app." : "Не можам да ја отстранам апликацијата.", "Language changed" : "Јазикот е сменет", "Invalid request" : "Неправилно барање", + "Authentication error" : "Грешка во автентикација", "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата", "Unable to add user to group %s" : "Неможе да додадам корисник во група %s", "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s", @@ -28,6 +26,7 @@ OC.L10N.register( "Unable to change password" : "Вашата лозинка неможе да се смени", "Enabled" : "Овозможен", "Not enabled" : "Не е овозможено", + "Federated Cloud Sharing" : "Федерирано клауд споделување", "A problem occurred, please check your log files (Error: %s)" : "Се случи грешка, ве молам проверете ги вашите датотеки за логови (Грешка: %s)", "Migration Completed" : "Миграцијата заврши", "Group already exists." : "Групата веќе постои.", @@ -38,9 +37,24 @@ OC.L10N.register( "test email settings" : "провери ги нагодувањата за електронска пошта", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Се случи грешка при праќање на порака. Ве молам проверете ги вашите подесувања. (Error: %s)", "Email sent" : "Е-порака пратена", + "Invalid mail address" : "Неправилна електронска адреса/пошта", + "A user with that name already exists." : "Корисник со ова име веќе постои.", + "Unable to create user." : "Неможе да додадам корисник.", + "Your %s account was created" : "Вашата %s сметка е креирана", + "Unable to delete user." : "Неможам да избришам корисник", + "Forbidden" : "Забрането", + "Invalid user" : "Неправилен корисник", + "Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта", "Email saved" : "Електронската пошта е снимена", + "Your full name has been changed." : "Вашето целосно име е променето.", + "Unable to change full name" : "Не можам да го променам целото име", + "Migration started …" : "Миграцијата е започнаа ...", "Sending..." : "Испраќам...", + "Official" : "Официјален", + "Approved" : "Одобрен", + "Experimental" : "Експериментален", "All" : "Сите", + "No apps found for your version" : "За вашата верзија не се пронајдени апликации", "Please wait...." : "Ве молам почекајте ...", "Error while disabling app" : "Грешка при исклучувањето на апликацијата", "Disable" : "Оневозможи", @@ -49,23 +63,34 @@ OC.L10N.register( "Updating...." : "Надградувам ...", "Error while updating app" : "Грешка додека ја надградувам апликацијата", "Updated" : "Надграден", + "Uninstalling ...." : "Деинсталирам ...", + "Error while uninstalling app" : "Грешка при деинсталација на апликацијата", + "Uninstall" : "Деинсталирај", + "App update" : "Надградба на апликацијата", + "An error occurred: {message}" : "Се случи грешка: {message}", "Select a profile picture" : "Одбери фотографија за профилот", "Very weak password" : "Многу слаба лозинка", "Weak password" : "Слаба лозинка", "So-so password" : "Така така лозинка", "Good password" : "Добра лозинка", "Strong password" : "Јака лозинка", + "Valid until {date}" : "Валидно до {date}", "Delete" : "Избриши", "Groups" : "Групи", + "Unable to delete {objName}" : "Не можам да избришам {objName}", "Error creating group" : "Грешка при креирање на група", "A valid group name must be provided" : "Мора да се обезбеди валидно име на група", "undo" : "врати", + "no group" : "нема група", "never" : "никогаш", + "deleted {userName}" : "избришан {userName}", "add group" : "додади група", "A valid username must be provided" : "Мора да се обезбеди валидно корисничко име ", "Error creating user" : "Грешка при креирање на корисникот", "A valid password must be provided" : "Мора да се обезбеди валидна лозинка", "__language_name__" : "__language_name__", + "Sync clients" : "Клиенти за синхронизација", + "Personal info" : "Лични податоци", "SSL root certificates" : "SSL root сертификати", "Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи", "Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи", @@ -77,6 +102,7 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Менаџер", "SSL" : "SSL", "TLS" : "TLS", + "Open documentation" : "Отвори ја документацијата", "Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување", "Allow users to share via link" : "Допушти корисниците да споделуваат со линкови", "Enforce password protection" : "Наметни заштита на лозинка", @@ -113,7 +139,6 @@ OC.L10N.register( "Forum" : "Форум", "Get the apps to sync your files" : "Преземете апликации за синхронизирање на вашите датотеки", "Show First Run Wizard again" : "Прикажи го повторно волшебникот при првото стартување", - "You have used %s of the available %s" : "Имате искористено %s од достапните %s", "Password" : "Лозинка", "Unable to change your password" : "Вашата лозинка неможе да се смени", "Current password" : "Моментална лозинка", diff --git a/settings/l10n/mk.json b/settings/l10n/mk.json index 607808c736..24adf3431e 100644 --- a/settings/l10n/mk.json +++ b/settings/l10n/mk.json @@ -8,12 +8,10 @@ "Log" : "Записник", "Tips & tricks" : "Совети и трикови", "Updates" : "Ажурирања", - "Authentication error" : "Грешка во автентикација", - "Your full name has been changed." : "Вашето целосно име е променето.", - "Unable to change full name" : "Не можам да го променам целото име", "Couldn't remove app." : "Не можам да ја отстранам апликацијата.", "Language changed" : "Јазикот е сменет", "Invalid request" : "Неправилно барање", + "Authentication error" : "Грешка во автентикација", "Admins can't remove themself from the admin group" : "Администраторите неможе да се избришат себеси од админ групата", "Unable to add user to group %s" : "Неможе да додадам корисник во група %s", "Unable to remove user from group %s" : "Неможе да избришам корисник од група %s", @@ -26,6 +24,7 @@ "Unable to change password" : "Вашата лозинка неможе да се смени", "Enabled" : "Овозможен", "Not enabled" : "Не е овозможено", + "Federated Cloud Sharing" : "Федерирано клауд споделување", "A problem occurred, please check your log files (Error: %s)" : "Се случи грешка, ве молам проверете ги вашите датотеки за логови (Грешка: %s)", "Migration Completed" : "Миграцијата заврши", "Group already exists." : "Групата веќе постои.", @@ -36,9 +35,24 @@ "test email settings" : "провери ги нагодувањата за електронска пошта", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Се случи грешка при праќање на порака. Ве молам проверете ги вашите подесувања. (Error: %s)", "Email sent" : "Е-порака пратена", + "Invalid mail address" : "Неправилна електронска адреса/пошта", + "A user with that name already exists." : "Корисник со ова име веќе постои.", + "Unable to create user." : "Неможе да додадам корисник.", + "Your %s account was created" : "Вашата %s сметка е креирана", + "Unable to delete user." : "Неможам да избришам корисник", + "Forbidden" : "Забрането", + "Invalid user" : "Неправилен корисник", + "Unable to change mail address" : "Не можам да ја променам електронската адреса/пошта", "Email saved" : "Електронската пошта е снимена", + "Your full name has been changed." : "Вашето целосно име е променето.", + "Unable to change full name" : "Не можам да го променам целото име", + "Migration started …" : "Миграцијата е започнаа ...", "Sending..." : "Испраќам...", + "Official" : "Официјален", + "Approved" : "Одобрен", + "Experimental" : "Експериментален", "All" : "Сите", + "No apps found for your version" : "За вашата верзија не се пронајдени апликации", "Please wait...." : "Ве молам почекајте ...", "Error while disabling app" : "Грешка при исклучувањето на апликацијата", "Disable" : "Оневозможи", @@ -47,23 +61,34 @@ "Updating...." : "Надградувам ...", "Error while updating app" : "Грешка додека ја надградувам апликацијата", "Updated" : "Надграден", + "Uninstalling ...." : "Деинсталирам ...", + "Error while uninstalling app" : "Грешка при деинсталација на апликацијата", + "Uninstall" : "Деинсталирај", + "App update" : "Надградба на апликацијата", + "An error occurred: {message}" : "Се случи грешка: {message}", "Select a profile picture" : "Одбери фотографија за профилот", "Very weak password" : "Многу слаба лозинка", "Weak password" : "Слаба лозинка", "So-so password" : "Така така лозинка", "Good password" : "Добра лозинка", "Strong password" : "Јака лозинка", + "Valid until {date}" : "Валидно до {date}", "Delete" : "Избриши", "Groups" : "Групи", + "Unable to delete {objName}" : "Не можам да избришам {objName}", "Error creating group" : "Грешка при креирање на група", "A valid group name must be provided" : "Мора да се обезбеди валидно име на група", "undo" : "врати", + "no group" : "нема група", "never" : "никогаш", + "deleted {userName}" : "избришан {userName}", "add group" : "додади група", "A valid username must be provided" : "Мора да се обезбеди валидно корисничко име ", "Error creating user" : "Грешка при креирање на корисникот", "A valid password must be provided" : "Мора да се обезбеди валидна лозинка", "__language_name__" : "__language_name__", + "Sync clients" : "Клиенти за синхронизација", + "Personal info" : "Лични податоци", "SSL root certificates" : "SSL root сертификати", "Info, warnings, errors and fatal issues" : "Информации, предупредувања, грешки и фатални работи", "Warnings, errors and fatal issues" : "Предупредувања, грешки и фатални работи", @@ -75,6 +100,7 @@ "NT LAN Manager" : "NT LAN Менаџер", "SSL" : "SSL", "TLS" : "TLS", + "Open documentation" : "Отвори ја документацијата", "Allow apps to use the Share API" : "Дозволете апликациите да го користат API-то за споделување", "Allow users to share via link" : "Допушти корисниците да споделуваат со линкови", "Enforce password protection" : "Наметни заштита на лозинка", @@ -111,7 +137,6 @@ "Forum" : "Форум", "Get the apps to sync your files" : "Преземете апликации за синхронизирање на вашите датотеки", "Show First Run Wizard again" : "Прикажи го повторно волшебникот при првото стартување", - "You have used %s of the available %s" : "Имате искористено %s од достапните %s", "Password" : "Лозинка", "Unable to change your password" : "Вашата лозинка неможе да се смени", "Current password" : "Моментална лозинка", diff --git a/settings/l10n/mn.js b/settings/l10n/mn.js index 30c8a71df7..56695ede7a 100644 --- a/settings/l10n/mn.js +++ b/settings/l10n/mn.js @@ -4,14 +4,14 @@ OC.L10N.register( "Sharing" : "Түгээлт", "Cron" : "Крон", "Log" : "Лог бичилт", - "Authentication error" : "Нотолгооны алдаа", - "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.", - "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна", "Couldn't remove app." : "Апп-ыг устгаж чадсангүй", "Language changed" : "Хэл солигдлоо", "Invalid request" : "Буруу хүсэлт", + "Authentication error" : "Нотолгооны алдаа", "Admins can't remove themself from the admin group" : "Админууд өөрсдийгөө Админ бүлгээс хасаж чадахгүй", "Wrong password" : "Нууц үг буруу", + "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.", + "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна", "All" : "Бүгд", "Password" : "Нууц үг", "Email" : "И-мэйл", diff --git a/settings/l10n/mn.json b/settings/l10n/mn.json index 95400f3893..560c7c9cb2 100644 --- a/settings/l10n/mn.json +++ b/settings/l10n/mn.json @@ -2,14 +2,14 @@ "Sharing" : "Түгээлт", "Cron" : "Крон", "Log" : "Лог бичилт", - "Authentication error" : "Нотолгооны алдаа", - "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.", - "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна", "Couldn't remove app." : "Апп-ыг устгаж чадсангүй", "Language changed" : "Хэл солигдлоо", "Invalid request" : "Буруу хүсэлт", + "Authentication error" : "Нотолгооны алдаа", "Admins can't remove themself from the admin group" : "Админууд өөрсдийгөө Админ бүлгээс хасаж чадахгүй", "Wrong password" : "Нууц үг буруу", + "Your full name has been changed." : "Таны бүтэн нэр солигдлоо.", + "Unable to change full name" : "Бүтэн нэр солих боломжгүй байна", "All" : "Бүгд", "Password" : "Нууц үг", "Email" : "И-мэйл", diff --git a/settings/l10n/ms_MY.js b/settings/l10n/ms_MY.js index db26c502d3..a4c28176fc 100644 --- a/settings/l10n/ms_MY.js +++ b/settings/l10n/ms_MY.js @@ -2,9 +2,9 @@ OC.L10N.register( "settings", { "Log" : "Log", - "Authentication error" : "Ralat pengesahan", "Language changed" : "Bahasa diubah", "Invalid request" : "Permintaan tidak sah", + "Authentication error" : "Ralat pengesahan", "Email saved" : "Emel disimpan", "Disable" : "Nyahaktif", "Enable" : "Aktif", diff --git a/settings/l10n/ms_MY.json b/settings/l10n/ms_MY.json index 342d679ecb..9ee8415ef8 100644 --- a/settings/l10n/ms_MY.json +++ b/settings/l10n/ms_MY.json @@ -1,8 +1,8 @@ { "translations": { "Log" : "Log", - "Authentication error" : "Ralat pengesahan", "Language changed" : "Bahasa diubah", "Invalid request" : "Permintaan tidak sah", + "Authentication error" : "Ralat pengesahan", "Email saved" : "Emel disimpan", "Disable" : "Nyahaktif", "Enable" : "Aktif", diff --git a/settings/l10n/my_MM.js b/settings/l10n/my_MM.js index 88ad33d005..f95325bb8d 100644 --- a/settings/l10n/my_MM.js +++ b/settings/l10n/my_MM.js @@ -1,8 +1,8 @@ OC.L10N.register( "settings", { - "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်", "Invalid request" : "တောင်းဆိုချက်မမှန်ကန်ပါ", + "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်", "Password" : "စကားဝှက်", "New password" : "စကားဝှက်အသစ်", "Cancel" : "ပယ်ဖျက်မည်", diff --git a/settings/l10n/my_MM.json b/settings/l10n/my_MM.json index 0ded957958..503f7fcb4d 100644 --- a/settings/l10n/my_MM.json +++ b/settings/l10n/my_MM.json @@ -1,6 +1,6 @@ { "translations": { - "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်", "Invalid request" : "တောင်းဆိုချက်မမှန်ကန်ပါ", + "Authentication error" : "ခွင့်ပြုချက်မအောင်မြင်", "Password" : "စကားဝှက်", "New password" : "စကားဝှက်အသစ်", "Cancel" : "ပယ်ဖျက်မည်", diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js index 0cea17dbb4..a53f5dc1ee 100644 --- a/settings/l10n/nb_NO.js +++ b/settings/l10n/nb_NO.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Logg", "Tips & tricks" : "Tips og triks", "Updates" : "Oppdateringer", - "Authentication error" : "Autentiseringsfeil", - "Your full name has been changed." : "Ditt fulle navn er blitt endret.", - "Unable to change full name" : "Klarte ikke å endre fullt navn", "Couldn't remove app." : "Klarte ikke å fjerne app.", "Language changed" : "Språk endret", "Invalid request" : "Ugyldig forespørsel", + "Authentication error" : "Autentiseringsfeil", "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen", "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s", "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Ugyldig bruker", "Unable to change mail address" : "Kan ikke endre epost-adresse", "Email saved" : "Epost lagret", + "Your full name has been changed." : "Ditt fulle navn er blitt endret.", + "Unable to change full name" : "Klarte ikke å endre fullt navn", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?", "Add trusted domain" : "Legg til et tiltrodd domene", "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.", @@ -134,7 +134,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til web-roten for installasjonen din (Foreslått: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transaksjonsbasert fil-låsing bruker databasen som låsemekanisme. For best ytelse anbefales det å konfigurerer en memcache for låsing. Se dokumentasjonen ↗ for mer informasjon.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Vennligst dobbeltsjekk Installasjonsveiledningene ↗ og se etter feil og advarsler i loggen.", "All checks passed." : "Alle sjekker bestått.", "Open documentation" : "Åpne dokumentasjonen", @@ -229,7 +228,6 @@ OC.L10N.register( "iOS app" : "iOS-app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Hvis du vil støtte prosjektet kan du\n\t\tdelta i utviklingen\n\t\teller\n\t\tspre budskapet!", "Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt", - "You have used %s of the available %s" : "Du har brukt %s av de tilgjengelige %s", "Password" : "Passord", "Unable to change your password" : "Kunne ikke endre passordet ditt", "Current password" : "Nåværende passord", diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json index 0eca73177d..0cefaa7fca 100644 --- a/settings/l10n/nb_NO.json +++ b/settings/l10n/nb_NO.json @@ -10,12 +10,10 @@ "Log" : "Logg", "Tips & tricks" : "Tips og triks", "Updates" : "Oppdateringer", - "Authentication error" : "Autentiseringsfeil", - "Your full name has been changed." : "Ditt fulle navn er blitt endret.", - "Unable to change full name" : "Klarte ikke å endre fullt navn", "Couldn't remove app." : "Klarte ikke å fjerne app.", "Language changed" : "Språk endret", "Invalid request" : "Ugyldig forespørsel", + "Authentication error" : "Autentiseringsfeil", "Admins can't remove themself from the admin group" : "Admin kan ikke flytte seg selv fra admingruppen", "Unable to add user to group %s" : "Kan ikke legge bruker til gruppen %s", "Unable to remove user from group %s" : "Kan ikke slette bruker fra gruppen %s", @@ -51,6 +49,8 @@ "Invalid user" : "Ugyldig bruker", "Unable to change mail address" : "Kan ikke endre epost-adresse", "Email saved" : "Epost lagret", + "Your full name has been changed." : "Ditt fulle navn er blitt endret.", + "Unable to change full name" : "Klarte ikke å endre fullt navn", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ønsker du virkelig å legge til \"{domain}\" som tiltrodd domene?", "Add trusted domain" : "Legg til et tiltrodd domene", "Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.", @@ -132,7 +132,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler sterkt å installere de påkrevde pakkene på systemet ditt for å støtte en av følgende nasjonale innstillinger: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis installasjonen din ikke er installert i roten av domenet og bruker systemets cron, kan det bli problemer med URL-genereringen. For å unngå disse problemene, sett \"overwrite.cli.url\" i filen config.php til web-roten for installasjonen din (Foreslått: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke mulig å kjøre cron-jobben vi CLI. Følgende tekniske feil oppstod:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transaksjonsbasert fil-låsing bruker databasen som låsemekanisme. For best ytelse anbefales det å konfigurerer en memcache for låsing. Se dokumentasjonen ↗ for mer informasjon.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Vennligst dobbeltsjekk Installasjonsveiledningene ↗ og se etter feil og advarsler i loggen.", "All checks passed." : "Alle sjekker bestått.", "Open documentation" : "Åpne dokumentasjonen", @@ -227,7 +226,6 @@ "iOS app" : "iOS-app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Hvis du vil støtte prosjektet kan du\n\t\tdelta i utviklingen\n\t\teller\n\t\tspre budskapet!", "Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt", - "You have used %s of the available %s" : "Du har brukt %s av de tilgjengelige %s", "Password" : "Passord", "Unable to change your password" : "Kunne ikke endre passordet ditt", "Current password" : "Nåværende passord", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index f28a9f3b17..4d2105ba6f 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transactionele bestandslocking gebruikt de database als blokkeermechanisme. Voor de beste prestaties wordt geadviseerd om een memcache voor locking te configureren. Zie de documentatie ↗ voor meer informatie.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Lees de installatie handleiding goed door en controleer op fouten en waarschuwingen in de logging.", "All checks passed." : "Alle checks geslaagd", "Open documentation" : "Open documentatie", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "iOS app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Als u het project wilt ondersteunen\n\t\tontwikkel mee\n\t\tof\n\t\tverkondig het nieuws!", "Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw", - "You have used %s of the available %s" : "U heeft %s gebruikt van de beschikbare %s", "Password" : "Wachtwoord", "Unable to change your password" : "Niet in staat om uw wachtwoord te wijzigen", "Current password" : "Huidig wachtwoord", @@ -259,7 +257,7 @@ OC.L10N.register( "Issued By" : "Uitgegeven door", "Valid until %s" : "Geldig tot %s", "Import root certificate" : "Importeren root certificaat", - "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschaplinkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}AGPL{linkclose}.", + "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschap{linkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}AGPL{linkclose}.", "Show storage location" : "Toon opslaglocatie", "Show last log in" : "Toon laatste inlog", "Show user backend" : "Toon backend gebruiker", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index b9a7baadde..b64962f87d 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Transactionele bestandslocking gebruikt de database als blokkeermechanisme. Voor de beste prestaties wordt geadviseerd om een memcache voor locking te configureren. Zie de documentatie ↗ voor meer informatie.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Lees de installatie handleiding goed door en controleer op fouten en waarschuwingen in de logging.", "All checks passed." : "Alle checks geslaagd", "Open documentation" : "Open documentatie", @@ -229,7 +228,6 @@ "iOS app" : "iOS app", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Als u het project wilt ondersteunen\n\t\tontwikkel mee\n\t\tof\n\t\tverkondig het nieuws!", "Show First Run Wizard again" : "Toon de Eerste start Wizard opnieuw", - "You have used %s of the available %s" : "U heeft %s gebruikt van de beschikbare %s", "Password" : "Wachtwoord", "Unable to change your password" : "Niet in staat om uw wachtwoord te wijzigen", "Current password" : "Huidig wachtwoord", @@ -257,7 +255,7 @@ "Issued By" : "Uitgegeven door", "Valid until %s" : "Geldig tot %s", "Import root certificate" : "Importeren root certificaat", - "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschaplinkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}AGPL{linkclose}.", + "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Ontwikkeld door de {communityopen}ownCloud gemeenschap{linkclose}, de {githubopen}source code{linkclose} is gelicenseerd onder de {licenseopen}AGPL{linkclose}.", "Show storage location" : "Toon opslaglocatie", "Show last log in" : "Toon laatste inlog", "Show user backend" : "Toon backend gebruiker", diff --git a/settings/l10n/nn_NO.js b/settings/l10n/nn_NO.js index 7539ca7f09..3e36ed58b4 100644 --- a/settings/l10n/nn_NO.js +++ b/settings/l10n/nn_NO.js @@ -4,9 +4,9 @@ OC.L10N.register( "Sharing" : "Deling", "Cron" : "Cron", "Log" : "Logg", - "Authentication error" : "Autentiseringsfeil", "Language changed" : "Språk endra", "Invalid request" : "Ugyldig førespurnad", + "Authentication error" : "Autentiseringsfeil", "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa", "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s", "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s", @@ -54,7 +54,6 @@ OC.L10N.register( "Forum" : "Forum", "Get the apps to sync your files" : "Få app-ar som kan synkronisera filene dine", "Show First Run Wizard again" : "Vis Oppstartvegvisaren igjen", - "You have used %s of the available %s" : "Du har brukt %s av dine tilgjengelege %s", "Password" : "Passord", "Unable to change your password" : "Klarte ikkje endra passordet", "Current password" : "Passord", diff --git a/settings/l10n/nn_NO.json b/settings/l10n/nn_NO.json index 8d30f4c361..647b691335 100644 --- a/settings/l10n/nn_NO.json +++ b/settings/l10n/nn_NO.json @@ -2,9 +2,9 @@ "Sharing" : "Deling", "Cron" : "Cron", "Log" : "Logg", - "Authentication error" : "Autentiseringsfeil", "Language changed" : "Språk endra", "Invalid request" : "Ugyldig førespurnad", + "Authentication error" : "Autentiseringsfeil", "Admins can't remove themself from the admin group" : "Administratorar kan ikkje fjerna seg sjølve frå admin-gruppa", "Unable to add user to group %s" : "Klarte ikkje leggja til brukaren til gruppa %s", "Unable to remove user from group %s" : "Klarte ikkje fjerna brukaren frå gruppa %s", @@ -52,7 +52,6 @@ "Forum" : "Forum", "Get the apps to sync your files" : "Få app-ar som kan synkronisera filene dine", "Show First Run Wizard again" : "Vis Oppstartvegvisaren igjen", - "You have used %s of the available %s" : "Du har brukt %s av dine tilgjengelege %s", "Password" : "Passord", "Unable to change your password" : "Klarte ikkje endra passordet", "Current password" : "Passord", diff --git a/settings/l10n/oc.js b/settings/l10n/oc.js index 3805573944..ef5e0fa6b8 100644 --- a/settings/l10n/oc.js +++ b/settings/l10n/oc.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Log", "Tips & tricks" : "Estècs e astúcias", "Updates" : "Mesas a jorn", - "Authentication error" : "Error d'autentificacion", - "Your full name has been changed." : "Vòstre nom complet es estat modificat.", - "Unable to change full name" : "Impossible de cambiar lo nom complet", "Couldn't remove app." : "Impossible de suprimir l'aplicacion.", "Language changed" : "Lenga cambiada", "Invalid request" : "Requèsta invalida", + "Authentication error" : "Error d'autentificacion", "Admins can't remove themself from the admin group" : "Los administrators se pòdon pas levar eles-meteisses del grop admin", "Unable to add user to group %s" : "Impossible d'apondre l'utilizaire al grop %s", "Unable to remove user from group %s" : "Impossible de suprimir l'utilizaire del grop %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Utilizaire invalid", "Unable to change mail address" : "Impossible de modificar l'adreça de corrièl", "Email saved" : "Email salvat", + "Your full name has been changed." : "Vòstre nom complet es estat modificat.", + "Unable to change full name" : "Impossible de cambiar lo nom complet", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sètz segur que volètz apondre \"{domain}\" coma domeni de fisança ?", "Add trusted domain" : "Apondre un domeni de fisança", "Migration in progress. Please wait until the migration is finished" : "Migracion en cors. Esperatz qu'aquela s'acabe", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vos recomandam d'installar sus vòstre sistèma los paquets requesits a la presa en carga d'un dels paramètres regionals seguents : %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se vòstra installacion es pas estada efectuada a la raiç del domeni e qu'utiliza lo cron del sistèma, i pòt aver de problèmas amb la generacion d'URL. Per los evitar, configuratz l'opcion \"overwrite.cli.url\" de vòstre fichièr config.php amb lo camin de la raiç de vòstra installacion (suggerit : \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Lo prètzfach cron a pas pogut s'executar via CLI. Aquelas errors tecnicas son aparegudas :", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Lo verrolhatge transaccional de fichièrs utiliza la banca de donadas. Per obténer de performànciasmelhor il est recommandé d'utiliser plutôt memcache. Consultez la documentation ↗ pour plus d'informations.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Consultatz los guidas d'installacion ↗, e cercatz d'errors o avertiments dins los logs.", "All checks passed." : "Totes los tèsts an capitat.", "Open documentation" : "Veire la documentacion", @@ -230,7 +229,6 @@ OC.L10N.register( "iOS app" : "Aplicacion iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se volètz aportar vòstre supòrt al projècte\n rejonhètz lo desvolopament\n o\n fasètz passar l'informacion !", "Show First Run Wizard again" : "Reveire la fenèstra d'acuèlh afichada al moment de vòstra primièra connexion", - "You have used %s of the available %s" : "Utilizatz %s dels %s disponibles", "Password" : "Senhal", "Unable to change your password" : "Impossible de cambiar vòstre senhal", "Current password" : "Senhal actual", diff --git a/settings/l10n/oc.json b/settings/l10n/oc.json index e60cfb45ed..c8107aaa04 100644 --- a/settings/l10n/oc.json +++ b/settings/l10n/oc.json @@ -10,12 +10,10 @@ "Log" : "Log", "Tips & tricks" : "Estècs e astúcias", "Updates" : "Mesas a jorn", - "Authentication error" : "Error d'autentificacion", - "Your full name has been changed." : "Vòstre nom complet es estat modificat.", - "Unable to change full name" : "Impossible de cambiar lo nom complet", "Couldn't remove app." : "Impossible de suprimir l'aplicacion.", "Language changed" : "Lenga cambiada", "Invalid request" : "Requèsta invalida", + "Authentication error" : "Error d'autentificacion", "Admins can't remove themself from the admin group" : "Los administrators se pòdon pas levar eles-meteisses del grop admin", "Unable to add user to group %s" : "Impossible d'apondre l'utilizaire al grop %s", "Unable to remove user from group %s" : "Impossible de suprimir l'utilizaire del grop %s", @@ -51,6 +49,8 @@ "Invalid user" : "Utilizaire invalid", "Unable to change mail address" : "Impossible de modificar l'adreça de corrièl", "Email saved" : "Email salvat", + "Your full name has been changed." : "Vòstre nom complet es estat modificat.", + "Unable to change full name" : "Impossible de cambiar lo nom complet", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sètz segur que volètz apondre \"{domain}\" coma domeni de fisança ?", "Add trusted domain" : "Apondre un domeni de fisança", "Migration in progress. Please wait until the migration is finished" : "Migracion en cors. Esperatz qu'aquela s'acabe", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vos recomandam d'installar sus vòstre sistèma los paquets requesits a la presa en carga d'un dels paramètres regionals seguents : %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se vòstra installacion es pas estada efectuada a la raiç del domeni e qu'utiliza lo cron del sistèma, i pòt aver de problèmas amb la generacion d'URL. Per los evitar, configuratz l'opcion \"overwrite.cli.url\" de vòstre fichièr config.php amb lo camin de la raiç de vòstra installacion (suggerit : \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Lo prètzfach cron a pas pogut s'executar via CLI. Aquelas errors tecnicas son aparegudas :", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Lo verrolhatge transaccional de fichièrs utiliza la banca de donadas. Per obténer de performànciasmelhor il est recommandé d'utiliser plutôt memcache. Consultez la documentation ↗ pour plus d'informations.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Consultatz los guidas d'installacion ↗, e cercatz d'errors o avertiments dins los logs.", "All checks passed." : "Totes los tèsts an capitat.", "Open documentation" : "Veire la documentacion", @@ -228,7 +227,6 @@ "iOS app" : "Aplicacion iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se volètz aportar vòstre supòrt al projècte\n rejonhètz lo desvolopament\n o\n fasètz passar l'informacion !", "Show First Run Wizard again" : "Reveire la fenèstra d'acuèlh afichada al moment de vòstra primièra connexion", - "You have used %s of the available %s" : "Utilizatz %s dels %s disponibles", "Password" : "Senhal", "Unable to change your password" : "Impossible de cambiar vòstre senhal", "Current password" : "Senhal actual", diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js index 862d56fc84..1412cd0108 100644 --- a/settings/l10n/pl.js +++ b/settings/l10n/pl.js @@ -7,12 +7,10 @@ OC.L10N.register( "Cron" : "Cron", "Log" : "Logi", "Updates" : "Aktualizacje", - "Authentication error" : "Błąd uwierzytelniania", - "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.", - "Unable to change full name" : "Nie można zmienić pełnej nazwy", "Couldn't remove app." : "Nie można usunąć aplikacji.", "Language changed" : "Zmieniono język", "Invalid request" : "Nieprawidłowe żądanie", + "Authentication error" : "Błąd uwierzytelniania", "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów", "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s", "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s", @@ -40,6 +38,8 @@ OC.L10N.register( "Invalid user" : "Nieprawidłowy użytkownik", "Unable to change mail address" : "Nie można zmienić adresu email", "Email saved" : "E-mail zapisany", + "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.", + "Unable to change full name" : "Nie można zmienić pełnej nazwy", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Add trusted domain" : "Dodaj zaufaną domenę", "Sending..." : "Wysyłam...", @@ -162,7 +162,6 @@ OC.L10N.register( "Android app" : "Aplikacja Android", "iOS app" : "Aplikacja iOS", "Show First Run Wizard again" : "Uruchom ponownie kreatora pierwszego uruchomienia", - "You have used %s of the available %s" : "Wykorzystujesz %s z dostępnych %s", "Password" : "Hasło", "Unable to change your password" : "Nie można zmienić hasła", "Current password" : "Bieżące hasło", diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json index db527fa451..a4c6a7cfd3 100644 --- a/settings/l10n/pl.json +++ b/settings/l10n/pl.json @@ -5,12 +5,10 @@ "Cron" : "Cron", "Log" : "Logi", "Updates" : "Aktualizacje", - "Authentication error" : "Błąd uwierzytelniania", - "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.", - "Unable to change full name" : "Nie można zmienić pełnej nazwy", "Couldn't remove app." : "Nie można usunąć aplikacji.", "Language changed" : "Zmieniono język", "Invalid request" : "Nieprawidłowe żądanie", + "Authentication error" : "Błąd uwierzytelniania", "Admins can't remove themself from the admin group" : "Administratorzy nie mogą usunąć siebie samych z grupy administratorów", "Unable to add user to group %s" : "Nie można dodać użytkownika do grupy %s", "Unable to remove user from group %s" : "Nie można usunąć użytkownika z grupy %s", @@ -38,6 +36,8 @@ "Invalid user" : "Nieprawidłowy użytkownik", "Unable to change mail address" : "Nie można zmienić adresu email", "Email saved" : "E-mail zapisany", + "Your full name has been changed." : "Twoja pełna nazwa została zmieniona.", + "Unable to change full name" : "Nie można zmienić pełnej nazwy", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Add trusted domain" : "Dodaj zaufaną domenę", "Sending..." : "Wysyłam...", @@ -160,7 +160,6 @@ "Android app" : "Aplikacja Android", "iOS app" : "Aplikacja iOS", "Show First Run Wizard again" : "Uruchom ponownie kreatora pierwszego uruchomienia", - "You have used %s of the available %s" : "Wykorzystujesz %s z dostępnych %s", "Password" : "Hasło", "Unable to change your password" : "Nie można zmienić hasła", "Current password" : "Bieżące hasło", diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index 1e33ffb10c..16ece06a7f 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Registro", "Tips & tricks" : "Dicas & Truques", "Updates" : "Atualizações", - "Authentication error" : "Erro de autenticação", - "Your full name has been changed." : "Seu nome completo foi alterado.", - "Unable to change full name" : "Não é possível alterar o nome completo", "Couldn't remove app." : "Não foi possível remover aplicativos.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido inválido", + "Authentication error" : "Erro de autenticação", "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração", "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s", "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Usuário inválido", "Unable to change mail address" : "Não é possível trocar o endereço de email", "Email saved" : "E-mail salvo", + "Your full name has been changed." : "Seu nome completo foi alterado.", + "Unable to change full name" : "Não é possível alterar o nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?", "Add trusted domain" : "Adicionar domínio confiável", "Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor aguarde até que a migração seja finalizada", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwrite.cli.url\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cron via CLI. Os seguintes erros técnicos têm aparecido:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Bloqueio de arquivos transacional está usando o banco de dados como bloqueio de back-end, para o melhor o desempenho é aconselhável configurar um cache de memória para bloqueio. Veja a documentação ↗ para mais informação.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Por favor, verifique os guias de instalação ↗, e verificar se há erros ou avisos no log.", "All checks passed." : "Todas as verificações passaram.", "Open documentation" : "Abrir documentação", @@ -192,6 +191,7 @@ OC.L10N.register( "More" : "Mais", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", + "What to log" : "O que colocar no log", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the documentation ↗." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'db occ: converter-type', verifique a documentação ↗.", @@ -217,20 +217,19 @@ OC.L10N.register( "Uninstall App" : "Desinstalar Aplicativo", "Enable experimental apps" : "Habilitar aplicativos experimentais", "Hey there,

    just letting you know that you now have an %s account.

    Your username: %s
    Access it: %s

    " : "Olá,

    somente para lembrar que agora você tem uma conta %s.

    Seu nome de usuário é: %s
    Acesse em: %s

    ", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n", "Administrator documentation" : "Documentação do administrador", "Online documentation" : "Documentação online", "Forum" : "Fórum", "Issue tracker" : "Rastreador de tópicos", "Commercial support" : "Suporte comercial", - "Get the apps to sync your files" : "Faça com que os apps sincronizem seus arquivos", + "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos", "Desktop client" : "Cliente Desktop", "Android app" : "App Android", "iOS app" : "App iOS", - "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se você quiser dar suporte ao projeto\n⇥⇥juntese ao desenvolvimento\n⇥⇥ou\n⇥⇥espalhe para o mundo!", + "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se você quiser suportar o projeto, \n⇥⇥ajude com o desenvolvimento\n⇥⇥ou\n⇥⇥ajude a divulgá-lo!", "Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente", - "You have used %s of the available %s" : "Você usou %s do seu espaço de %s", "Password" : "Senha", "Unable to change your password" : "Não é possivel alterar a sua senha", "Current password" : "Senha atual", @@ -245,9 +244,9 @@ OC.L10N.register( "You are member of the following groups:" : "Você é membro dos seguintes grupos:", "Profile picture" : "Imagem para o perfil", "Upload new" : "Enviar nova foto", - "Select new from Files" : "Selecinar uma nova dos Arquivos", + "Select new from Files" : "Selecionar uma nova dos Arquivos", "Remove image" : "Remover imagem", - "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Ou png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.", + "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Formato png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.", "Your avatar is provided by your original account." : "Seu avatar é fornecido por sua conta original.", "Cancel" : "Cancelar", "Choose as profile image" : "Escolha como imagem para o perfil", diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index eaaf84d373..ef0e5571c5 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -10,12 +10,10 @@ "Log" : "Registro", "Tips & tricks" : "Dicas & Truques", "Updates" : "Atualizações", - "Authentication error" : "Erro de autenticação", - "Your full name has been changed." : "Seu nome completo foi alterado.", - "Unable to change full name" : "Não é possível alterar o nome completo", "Couldn't remove app." : "Não foi possível remover aplicativos.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido inválido", + "Authentication error" : "Erro de autenticação", "Admins can't remove themself from the admin group" : "Administradores não pode remover a si mesmos do grupo de administração", "Unable to add user to group %s" : "Não foi possível adicionar usuário ao grupo %s", "Unable to remove user from group %s" : "Não foi possível remover usuário do grupo %s", @@ -51,6 +49,8 @@ "Invalid user" : "Usuário inválido", "Unable to change mail address" : "Não é possível trocar o endereço de email", "Email saved" : "E-mail salvo", + "Your full name has been changed." : "Seu nome completo foi alterado.", + "Unable to change full name" : "Não é possível alterar o nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que você quer adicionar \"{domain}\" como domínio confiável?", "Add trusted domain" : "Adicionar domínio confiável", "Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor aguarde até que a migração seja finalizada", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Nós sugerimos a instalação dos pacotes necessários em seu sistema para suportar um dos seguintes locais: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Se a sua instalação não estiver instalada na raiz do domínio e usa cron do sistema, pode haver problemas com a geração de URL. Para evitar esses problemas, por favor, defina a opção \"overwrite.cli.url\" em seu arquivo config.php para o caminho webroot de sua instalação (Sugestão: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Não foi possível executar o cron via CLI. Os seguintes erros técnicos têm aparecido:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Bloqueio de arquivos transacional está usando o banco de dados como bloqueio de back-end, para o melhor o desempenho é aconselhável configurar um cache de memória para bloqueio. Veja a documentação ↗ para mais informação.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Por favor, verifique os guias de instalação ↗, e verificar se há erros ou avisos no log.", "All checks passed." : "Todas as verificações passaram.", "Open documentation" : "Abrir documentação", @@ -190,6 +189,7 @@ "More" : "Mais", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", + "What to log" : "O que colocar no log", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the documentation ↗." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'db occ: converter-type', verifique a documentação ↗.", @@ -215,20 +215,19 @@ "Uninstall App" : "Desinstalar Aplicativo", "Enable experimental apps" : "Habilitar aplicativos experimentais", "Hey there,

    just letting you know that you now have an %s account.

    Your username: %s
    Access it: %s

    " : "Olá,

    somente para lembrar que agora você tem uma conta %s.

    Seu nome de usuário é: %s
    Acesse em: %s

    ", - "Cheers!" : "Saúde!", + "Cheers!" : "Saudações!", "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Olá,\n\nsomente para lembrar que agora você tem uma conta %s.\n\nSeu nome de usuário é: %s\nAcesse em: %s\n\n", "Administrator documentation" : "Documentação do administrador", "Online documentation" : "Documentação online", "Forum" : "Fórum", "Issue tracker" : "Rastreador de tópicos", "Commercial support" : "Suporte comercial", - "Get the apps to sync your files" : "Faça com que os apps sincronizem seus arquivos", + "Get the apps to sync your files" : "Obtenha apps para sincronizar seus arquivos", "Desktop client" : "Cliente Desktop", "Android app" : "App Android", "iOS app" : "App iOS", - "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se você quiser dar suporte ao projeto\n⇥⇥juntese ao desenvolvimento\n⇥⇥ou\n⇥⇥espalhe para o mundo!", + "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se você quiser suportar o projeto, \n⇥⇥ajude com o desenvolvimento\n⇥⇥ou\n⇥⇥ajude a divulgá-lo!", "Show First Run Wizard again" : "Mostrar Assistente de Primeira Execução novamente", - "You have used %s of the available %s" : "Você usou %s do seu espaço de %s", "Password" : "Senha", "Unable to change your password" : "Não é possivel alterar a sua senha", "Current password" : "Senha atual", @@ -243,9 +242,9 @@ "You are member of the following groups:" : "Você é membro dos seguintes grupos:", "Profile picture" : "Imagem para o perfil", "Upload new" : "Enviar nova foto", - "Select new from Files" : "Selecinar uma nova dos Arquivos", + "Select new from Files" : "Selecionar uma nova dos Arquivos", "Remove image" : "Remover imagem", - "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Ou png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.", + "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Formato png ou jpg. Idealmente quadrada, mas você será capaz de cortá-la. O arquivo não pode exceder o tamanho máximo de 20 MB.", "Your avatar is provided by your original account." : "Seu avatar é fornecido por sua conta original.", "Cancel" : "Cancelar", "Choose as profile image" : "Escolha como imagem para o perfil", diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js index b0f2579690..630b0a3b30 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Registo", "Tips & tricks" : "Dicas e truqes", "Updates" : "Atualizações", - "Authentication error" : "Erro na autenticação", - "Your full name has been changed." : "O seu nome completo foi alterado.", - "Unable to change full name" : "Não foi possível alterar o seu nome completo", "Couldn't remove app." : "Não foi possível remover a aplicação.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido Inválido", + "Authentication error" : "Erro na autenticação", "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.", "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s", "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s", @@ -51,6 +49,8 @@ OC.L10N.register( "Invalid user" : "Utilizador inválido", "Unable to change mail address" : "Não foi possível alterar o teu endereço de email", "Email saved" : "E-mail guardado", + "Your full name has been changed." : "O seu nome completo foi alterado.", + "Unable to change full name" : "Não foi possível alterar o seu nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?", "Add trusted domain" : "Adicionar domínio confiável ", "Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..", @@ -207,7 +207,6 @@ OC.L10N.register( "iOS app" : "Aplicação iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se quer apoiar o projecto\n\t\tjunte-se ao desenvolvimento\n\t\tou\n\t\tespalhe a palavra!", "Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial", - "You have used %s of the available %s" : "Usou %s do disponivel %s", "Password" : "Palavra-passe", "Unable to change your password" : "Não foi possível alterar a sua palavra-passe", "Current password" : "Palavra-passe atual", diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 4df54b8100..65c0e3f664 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -10,12 +10,10 @@ "Log" : "Registo", "Tips & tricks" : "Dicas e truqes", "Updates" : "Atualizações", - "Authentication error" : "Erro na autenticação", - "Your full name has been changed." : "O seu nome completo foi alterado.", - "Unable to change full name" : "Não foi possível alterar o seu nome completo", "Couldn't remove app." : "Não foi possível remover a aplicação.", "Language changed" : "Idioma alterado", "Invalid request" : "Pedido Inválido", + "Authentication error" : "Erro na autenticação", "Admins can't remove themself from the admin group" : "Os administradores não se podem remover a eles próprios do grupo 'admin'.", "Unable to add user to group %s" : "Não é possível adicionar o utilizador ao grupo %s", "Unable to remove user from group %s" : "Não é possível remover o utilizador do grupo %s", @@ -49,6 +47,8 @@ "Invalid user" : "Utilizador inválido", "Unable to change mail address" : "Não foi possível alterar o teu endereço de email", "Email saved" : "E-mail guardado", + "Your full name has been changed." : "O seu nome completo foi alterado.", + "Unable to change full name" : "Não foi possível alterar o seu nome completo", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Você tem certeza que quer adicionar \"{domain}\" como domínio confiável?", "Add trusted domain" : "Adicionar domínio confiável ", "Migration in progress. Please wait until the migration is finished" : "Migração em progresso. Por favor, aguarde até que a mesma esteja concluída..", @@ -205,7 +205,6 @@ "iOS app" : "Aplicação iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Se quer apoiar o projecto\n\t\tjunte-se ao desenvolvimento\n\t\tou\n\t\tespalhe a palavra!", "Show First Run Wizard again" : "Mostrar novamente Wizard de Arranque Inicial", - "You have used %s of the available %s" : "Usou %s do disponivel %s", "Password" : "Palavra-passe", "Unable to change your password" : "Não foi possível alterar a sua palavra-passe", "Current password" : "Palavra-passe atual", diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js index 354c45092b..fde0c1df6a 100644 --- a/settings/l10n/ro.js +++ b/settings/l10n/ro.js @@ -8,11 +8,9 @@ OC.L10N.register( "Log" : "Jurnal de activitate", "Tips & tricks" : "Tips & tricks", "Updates" : "Actualizări", - "Authentication error" : "Eroare la autentificare", - "Your full name has been changed." : "Numele tău complet a fost schimbat.", - "Unable to change full name" : "Nu s-a puput schimba numele complet", "Language changed" : "Limba a fost schimbată", "Invalid request" : "Cerere eronată", + "Authentication error" : "Eroare la autentificare", "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul admin", "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul la grupul %s", "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s", @@ -34,6 +32,8 @@ OC.L10N.register( "Forbidden" : "Interzis", "Invalid user" : "Utilizator nevalid", "Email saved" : "E-mail salvat", + "Your full name has been changed." : "Numele tău complet a fost schimbat.", + "Unable to change full name" : "Nu s-a puput schimba numele complet", "Sending..." : "Se expediază...", "All" : "Toate ", "Please wait...." : "Aşteptaţi vă rog....", @@ -91,7 +91,6 @@ OC.L10N.register( "Desktop client" : "Client Desktop", "Android app" : "Aplicatie Android", "iOS app" : "Aplicație iOS", - "You have used %s of the available %s" : "Ați utilizat %s din %s disponibile", "Password" : "Parolă", "Unable to change your password" : "Imposibil de-ați schimbat parola", "Current password" : "Parola curentă", diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json index 05a736d9fd..c1010025fd 100644 --- a/settings/l10n/ro.json +++ b/settings/l10n/ro.json @@ -6,11 +6,9 @@ "Log" : "Jurnal de activitate", "Tips & tricks" : "Tips & tricks", "Updates" : "Actualizări", - "Authentication error" : "Eroare la autentificare", - "Your full name has been changed." : "Numele tău complet a fost schimbat.", - "Unable to change full name" : "Nu s-a puput schimba numele complet", "Language changed" : "Limba a fost schimbată", "Invalid request" : "Cerere eronată", + "Authentication error" : "Eroare la autentificare", "Admins can't remove themself from the admin group" : "Administratorii nu se pot șterge singuri din grupul admin", "Unable to add user to group %s" : "Nu s-a putut adăuga utilizatorul la grupul %s", "Unable to remove user from group %s" : "Nu s-a putut elimina utilizatorul din grupul %s", @@ -32,6 +30,8 @@ "Forbidden" : "Interzis", "Invalid user" : "Utilizator nevalid", "Email saved" : "E-mail salvat", + "Your full name has been changed." : "Numele tău complet a fost schimbat.", + "Unable to change full name" : "Nu s-a puput schimba numele complet", "Sending..." : "Se expediază...", "All" : "Toate ", "Please wait...." : "Aşteptaţi vă rog....", @@ -89,7 +89,6 @@ "Desktop client" : "Client Desktop", "Android app" : "Aplicatie Android", "iOS app" : "Aplicație iOS", - "You have used %s of the available %s" : "Ați utilizat %s din %s disponibile", "Password" : "Parolă", "Unable to change your password" : "Imposibil de-ați schimbat parola", "Current password" : "Parola curentă", diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index a6f62fd5e9..55b02afa33 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Журнал", "Tips & tricks" : "Советы и трюки", "Updates" : "Обновления", - "Authentication error" : "Ошибка аутентификации", - "Your full name has been changed." : "Ваше полное имя было изменено.", - "Unable to change full name" : "Невозможно изменить полное имя", "Couldn't remove app." : "Невозможно удалить приложение.", "Language changed" : "Язык изменён", "Invalid request" : "Неправильный запрос", + "Authentication error" : "Ошибка аутентификации", "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов", "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s", "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Неверный пользователь", "Unable to change mail address" : "Невозможно изменить адрес электронной почты", "Email saved" : "Email сохранен", + "Your full name has been changed." : "Ваше полное имя было изменено.", + "Unable to change full name" : "Невозможно изменить полное имя", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?", "Add trusted domain" : "Добавить доверенный домен", "Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует системный планировщик cron, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Механизм блокировки файлов во время передачи основан на базе данных, для лучшей производительности рекомендуется использование memcache. За подробной информацией обратитесь к документации.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Пожалуйста, перепроверьте инструкцию по установке и проверьте ошибки или предупреждения в журнале", "All checks passed." : "Все проверки пройдены.", "Open documentation" : "Открыть документацию", @@ -230,7 +229,6 @@ OC.L10N.register( "iOS app" : "iOS приложение", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Если Вы хотите поддержать проект\n\t\tсовместная разработка\n\t\tor\n\t\tсообщить!", "Show First Run Wizard again" : "Показать помощник настройки снова", - "You have used %s of the available %s" : "Вы использовали %s из доступных %s", "Password" : "Пароль", "Unable to change your password" : "Невозможно сменить пароль", "Current password" : "Текущий пароль", diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index 4ecc1dd619..470821a774 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -10,12 +10,10 @@ "Log" : "Журнал", "Tips & tricks" : "Советы и трюки", "Updates" : "Обновления", - "Authentication error" : "Ошибка аутентификации", - "Your full name has been changed." : "Ваше полное имя было изменено.", - "Unable to change full name" : "Невозможно изменить полное имя", "Couldn't remove app." : "Невозможно удалить приложение.", "Language changed" : "Язык изменён", "Invalid request" : "Неправильный запрос", + "Authentication error" : "Ошибка аутентификации", "Admins can't remove themself from the admin group" : "Администратор не может удалить сам себя из группы администраторов", "Unable to add user to group %s" : "Невозможно добавить пользователя в группу %s", "Unable to remove user from group %s" : "Невозможно удалить пользователя из группы %s", @@ -51,6 +49,8 @@ "Invalid user" : "Неверный пользователь", "Unable to change mail address" : "Невозможно изменить адрес электронной почты", "Email saved" : "Email сохранен", + "Your full name has been changed." : "Ваше полное имя было изменено.", + "Unable to change full name" : "Невозможно изменить полное имя", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Вы действительно хотите добавить домен \"{domain}\" как доверенный?", "Add trusted domain" : "Добавить доверенный домен", "Migration in progress. Please wait until the migration is finished" : "Миграция в процессе. Пожалуйста, подождите завершения миграции", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Мы рекомендуем установить требуемые пакеты для вашей системы для поддержки одного из следующих языков: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Если ваша копия ownCloud установлена не в корне домена и использует системный планировщик cron, возможны проблемы с правильной генерацией URL. Чтобы избежать этого, установите опцию \"overwrite.cli.url\" в файле config.php равной пути папки установки. (Предположительно: \"%s\".)", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Не удается запустить задачу планировщика через CLI. Произошли следующие технические ошибки:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "Механизм блокировки файлов во время передачи основан на базе данных, для лучшей производительности рекомендуется использование memcache. За подробной информацией обратитесь к документации.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Пожалуйста, перепроверьте инструкцию по установке и проверьте ошибки или предупреждения в журнале", "All checks passed." : "Все проверки пройдены.", "Open documentation" : "Открыть документацию", @@ -228,7 +227,6 @@ "iOS app" : "iOS приложение", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Если Вы хотите поддержать проект\n\t\tсовместная разработка\n\t\tor\n\t\tсообщить!", "Show First Run Wizard again" : "Показать помощник настройки снова", - "You have used %s of the available %s" : "Вы использовали %s из доступных %s", "Password" : "Пароль", "Unable to change your password" : "Невозможно сменить пароль", "Current password" : "Текущий пароль", diff --git a/settings/l10n/si_LK.js b/settings/l10n/si_LK.js index 8dc28f5ab1..9207b5ab18 100644 --- a/settings/l10n/si_LK.js +++ b/settings/l10n/si_LK.js @@ -4,9 +4,9 @@ OC.L10N.register( "Sharing" : "හුවමාරු කිරීම", "External Storage" : "භාහිර ගබඩාව", "Log" : "ලඝුව", - "Authentication error" : "සත්‍යාපන දෝෂයක්", "Language changed" : "භාෂාව ාවනස් කිරීම", "Invalid request" : "අවලංගු අයැදුමක්", + "Authentication error" : "සත්‍යාපන දෝෂයක්", "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක", "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක", "Email saved" : "වි-තැපෑල සුරකින ලදී", diff --git a/settings/l10n/si_LK.json b/settings/l10n/si_LK.json index afded14ebf..9b2287b13b 100644 --- a/settings/l10n/si_LK.json +++ b/settings/l10n/si_LK.json @@ -2,9 +2,9 @@ "Sharing" : "හුවමාරු කිරීම", "External Storage" : "භාහිර ගබඩාව", "Log" : "ලඝුව", - "Authentication error" : "සත්‍යාපන දෝෂයක්", "Language changed" : "භාෂාව ාවනස් කිරීම", "Invalid request" : "අවලංගු අයැදුමක්", + "Authentication error" : "සත්‍යාපන දෝෂයක්", "Unable to add user to group %s" : "පරිශීලකයා %s කණ්ඩායමට එකතු කළ නොහැක", "Unable to remove user from group %s" : "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක", "Email saved" : "වි-තැපෑල සුරකින ලදී", diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js index 2de64dd5a5..67930aebb1 100644 --- a/settings/l10n/sk_SK.js +++ b/settings/l10n/sk_SK.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Záznam", "Tips & tricks" : "Tipy a triky", "Updates" : "Aktualizácie", - "Authentication error" : "Chyba autentifikácie", - "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.", - "Unable to change full name" : "Nemožno zmeniť meno a priezvisko", "Couldn't remove app." : "Nemožno odstrániť aplikáciu.", "Language changed" : "Jazyk zmenený", "Invalid request" : "Neplatná požiadavka", + "Authentication error" : "Chyba autentifikácie", "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin", "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s", "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s", @@ -51,6 +49,8 @@ OC.L10N.register( "Invalid user" : "Neplatný používateľ", "Unable to change mail address" : "Nemožno zmeniť emailovú adresu", "Email saved" : "Email uložený", + "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.", + "Unable to change full name" : "Nemožno zmeniť meno a priezvisko", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?", "Add trusted domain" : "Pridať dôveryhodnú doménu", "Migration in progress. Please wait until the migration is finished" : "Prebieha migrácia. Počkajte prosím, kým sa skončí", @@ -201,7 +201,6 @@ OC.L10N.register( "iOS app" : "iOS aplikácia", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ak chcete projekt podporiť,\n\t\tzapojte sa do vývoja\n\t\talebo\n\t\tho propagujte!", "Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením", - "You have used %s of the available %s" : "Použili ste %s z %s dostupných ", "Password" : "Heslo", "Unable to change your password" : "Nie je možné zmeniť vaše heslo", "Current password" : "Aktuálne heslo", diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json index 2fc4064a03..61627bef95 100644 --- a/settings/l10n/sk_SK.json +++ b/settings/l10n/sk_SK.json @@ -10,12 +10,10 @@ "Log" : "Záznam", "Tips & tricks" : "Tipy a triky", "Updates" : "Aktualizácie", - "Authentication error" : "Chyba autentifikácie", - "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.", - "Unable to change full name" : "Nemožno zmeniť meno a priezvisko", "Couldn't remove app." : "Nemožno odstrániť aplikáciu.", "Language changed" : "Jazyk zmenený", "Invalid request" : "Neplatná požiadavka", + "Authentication error" : "Chyba autentifikácie", "Admins can't remove themself from the admin group" : "Administrátori nesmú odstrániť sami seba zo skupiny admin", "Unable to add user to group %s" : "Nie je možné pridať používateľa do skupiny %s", "Unable to remove user from group %s" : "Nie je možné odstrániť používateľa zo skupiny %s", @@ -49,6 +47,8 @@ "Invalid user" : "Neplatný používateľ", "Unable to change mail address" : "Nemožno zmeniť emailovú adresu", "Email saved" : "Email uložený", + "Your full name has been changed." : "Vaše meno a priezvisko bolo zmenené.", + "Unable to change full name" : "Nemožno zmeniť meno a priezvisko", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ste si istí, že chcete pridať \"{domain}\" medzi dôveryhodné domény?", "Add trusted domain" : "Pridať dôveryhodnú doménu", "Migration in progress. Please wait until the migration is finished" : "Prebieha migrácia. Počkajte prosím, kým sa skončí", @@ -199,7 +199,6 @@ "iOS app" : "iOS aplikácia", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ak chcete projekt podporiť,\n\t\tzapojte sa do vývoja\n\t\talebo\n\t\tho propagujte!", "Show First Run Wizard again" : "Znovu zobraziť sprievodcu prvým spustením", - "You have used %s of the available %s" : "Použili ste %s z %s dostupných ", "Password" : "Heslo", "Unable to change your password" : "Nie je možné zmeniť vaše heslo", "Current password" : "Aktuálne heslo", diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js index 2f6534eeee..d793dc3924 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -194,7 +194,6 @@ OC.L10N.register( "iOS app" : "Program za iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Če bi radi podprli projekt\n\t\tpristopite razvoju\n\t\tali\n\t\trazširite glas!", "Show First Run Wizard again" : "Zaženi čarovnika prvega zagona", - "You have used %s of the available %s" : "Uporabljenega je %s od razpoložljivih %s prostora.", "Password" : "Geslo", "Unable to change your password" : "Gesla ni mogoče spremeniti.", "Current password" : "Trenutno geslo", diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index afb978916f..9170aaa9d4 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -192,7 +192,6 @@ "iOS app" : "Program za iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Če bi radi podprli projekt\n\t\tpristopite razvoju\n\t\tali\n\t\trazširite glas!", "Show First Run Wizard again" : "Zaženi čarovnika prvega zagona", - "You have used %s of the available %s" : "Uporabljenega je %s od razpoložljivih %s prostora.", "Password" : "Geslo", "Unable to change your password" : "Gesla ni mogoče spremeniti.", "Current password" : "Trenutno geslo", diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js index 7addd9d7d3..a72cd4e2d5 100644 --- a/settings/l10n/sq.js +++ b/settings/l10n/sq.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Regjistër", "Tips & tricks" : "Ndihmëza & rrengje", "Updates" : "Përditësime", - "Authentication error" : "Gabim mirëfilltësimi", - "Your full name has been changed." : "Emri juaj i plotë u ndryshua.", - "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë", "Couldn't remove app." : "S’hoqi dot aplikacionin.", "Language changed" : "Gjuha u ndryshua", "Invalid request" : "Kërkesë e pavlefshme", + "Authentication error" : "Gabim mirëfilltësimi", "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin", "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s", "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s", @@ -31,6 +29,7 @@ OC.L10N.register( "Enabled" : "E aktivizuar", "Not enabled" : "E paaktivizuar", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalim dhe përditësim aplikacionesh përmes shitores së aplikacioneve ose Federated Cloud Sharing", + "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL-ja po përdor një version %s të vjetruar (%s). Ju lutemi, përditësoni sistemin tuaj operativ ose përndryshe veçori të tilla si %s nuk do të punojnë në mënyrë të qëndrueshme.", "A problem occurred, please check your log files (Error: %s)" : "Ndodhi një gabim, ju lutemi, kontrolloni kartelat tuaja regjistër (Error: %s)", "Migration Completed" : "Migrimi u Plotësua", @@ -52,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Përdorues i pavlefshëm", "Unable to change mail address" : "S’arrin të ndryshojë adresë email", "Email saved" : "Email-i u ruajt", + "Your full name has been changed." : "Emri juaj i plotë u ndryshua.", + "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?", "Add trusted domain" : "Shtoni përkatësi të besuar", "Migration in progress. Please wait until the migration is finished" : "Migrimi në rrugë e sipër. Ju lutemi, pritni, teksa migrimi përfundon", @@ -127,6 +128,7 @@ OC.L10N.register( "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Shërbyesi juaj xhiron nën Microsoft Windows. Këshillojmë fort Linux-in për punim optimal nga ana e përdoruesit.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the documentation ↗ for more information." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje race conditions. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni dokumentimin ↗.", "System locale can not be set to a one which supports UTF-8." : "Si vendore sistemi nuk mund të caktohet një që mbulon UTF-8.", "This means that there might be problems with certain characters in file names." : "Kjo do të thotë që mund të ketë probleme me disa shenja në emra kartelash.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Këshillojmë me forcë instalimin në sistemin tuaj të paketave të domosdoshme për mbulim të një prej vendoreve vijuese: %s.", @@ -227,7 +229,6 @@ OC.L10N.register( "iOS app" : "Aplikacion për iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Nëse doni ta përkrahni projektin\n\t\tmerrni pjesë te zhvillimi i tij\n\t\tor\n\t\tpërhapni fjalën për të!", "Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë", - "You have used %s of the available %s" : "Keni përdorur %s nga %s tuajat", "Password" : "Fjalëkalim", "Unable to change your password" : "S’arrin të ndryshojë fjalëkalimin tuaj", "Current password" : "Fjalëkalimi i tanishëm", diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json index c5017a053a..5bd7422a68 100644 --- a/settings/l10n/sq.json +++ b/settings/l10n/sq.json @@ -10,12 +10,10 @@ "Log" : "Regjistër", "Tips & tricks" : "Ndihmëza & rrengje", "Updates" : "Përditësime", - "Authentication error" : "Gabim mirëfilltësimi", - "Your full name has been changed." : "Emri juaj i plotë u ndryshua.", - "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë", "Couldn't remove app." : "S’hoqi dot aplikacionin.", "Language changed" : "Gjuha u ndryshua", "Invalid request" : "Kërkesë e pavlefshme", + "Authentication error" : "Gabim mirëfilltësimi", "Admins can't remove themself from the admin group" : "Administratorët s’mund të heqin veten prej grupit admin", "Unable to add user to group %s" : "S’arrin të shtojë përdorues te grupi %s", "Unable to remove user from group %s" : "S’arrin të heqë përdorues nga grupi %s", @@ -29,6 +27,7 @@ "Enabled" : "E aktivizuar", "Not enabled" : "E paaktivizuar", "installing and updating apps via the app store or Federated Cloud Sharing" : "instalim dhe përditësim aplikacionesh përmes shitores së aplikacioneve ose Federated Cloud Sharing", + "Federated Cloud Sharing" : "Ndarje Në Re e Federuar ", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL-ja po përdor një version %s të vjetruar (%s). Ju lutemi, përditësoni sistemin tuaj operativ ose përndryshe veçori të tilla si %s nuk do të punojnë në mënyrë të qëndrueshme.", "A problem occurred, please check your log files (Error: %s)" : "Ndodhi një gabim, ju lutemi, kontrolloni kartelat tuaja regjistër (Error: %s)", "Migration Completed" : "Migrimi u Plotësua", @@ -50,6 +49,8 @@ "Invalid user" : "Përdorues i pavlefshëm", "Unable to change mail address" : "S’arrin të ndryshojë adresë email", "Email saved" : "Email-i u ruajt", + "Your full name has been changed." : "Emri juaj i plotë u ndryshua.", + "Unable to change full name" : "S’arrin të ndryshojë emrin e plotë", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Jeni vërtet i sigurt se doni të shtoni \"{domain}\" si përkatësi të besuar?", "Add trusted domain" : "Shtoni përkatësi të besuar", "Migration in progress. Please wait until the migration is finished" : "Migrimi në rrugë e sipër. Ju lutemi, pritni, teksa migrimi përfundon", @@ -125,6 +126,7 @@ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Shërbyesi juaj xhiron nën Microsoft Windows. Këshillojmë fort Linux-in për punim optimal nga ana e përdoruesit.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the documentation ↗ for more information." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje race conditions. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni dokumentimin ↗.", "System locale can not be set to a one which supports UTF-8." : "Si vendore sistemi nuk mund të caktohet një që mbulon UTF-8.", "This means that there might be problems with certain characters in file names." : "Kjo do të thotë që mund të ketë probleme me disa shenja në emra kartelash.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Këshillojmë me forcë instalimin në sistemin tuaj të paketave të domosdoshme për mbulim të një prej vendoreve vijuese: %s.", @@ -225,7 +227,6 @@ "iOS app" : "Aplikacion për iOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Nëse doni ta përkrahni projektin\n\t\tmerrni pjesë te zhvillimi i tij\n\t\tor\n\t\tpërhapni fjalën për të!", "Show First Run Wizard again" : "Shfaqe sërish Ndihmësin e Herës së Parë", - "You have used %s of the available %s" : "Keni përdorur %s nga %s tuajat", "Password" : "Fjalëkalim", "Unable to change your password" : "S’arrin të ndryshojë fjalëkalimin tuaj", "Current password" : "Fjalëkalimi i tanishëm", diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js index 3a3bc29347..c74b9d04b5 100644 --- a/settings/l10n/sr.js +++ b/settings/l10n/sr.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Бележење", "Tips & tricks" : "Савети и трикови", "Updates" : "Ажурирања", - "Authentication error" : "Грешка при провери идентитета", - "Your full name has been changed." : "Ваше пуно име је промењено.", - "Unable to change full name" : "Не могу да променим пуно име", "Couldn't remove app." : "Не могу да уклоним апликацију.", "Language changed" : "Језик је промењен", "Invalid request" : "Неисправан захтев", + "Authentication error" : "Грешка при провери идентитета", "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе", "Unable to add user to group %s" : "Не могу да додам корисника у групу %s", "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s", @@ -51,6 +49,8 @@ OC.L10N.register( "Invalid user" : "Неисправан корисник", "Unable to change mail address" : "Не могу да изменим е-адресу", "Email saved" : "Е-порука сачувана", + "Your full name has been changed." : "Ваше пуно име је промењено.", + "Unable to change full name" : "Не могу да променим пуно име", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?", "Add trusted domain" : "Додај поуздан домен", "Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши", @@ -213,7 +213,6 @@ OC.L10N.register( "iOS app" : "иОС апликација", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ако желите да подржите пројект\n\t\tпридружите се развоју\n\t\tили\n\t\tразгласите свима!", "Show First Run Wizard again" : "Поново прикажи чаробњака за прво покретање", - "You have used %s of the available %s" : "Искористили сте %s од дозвољених %s", "Password" : "Лозинка", "Unable to change your password" : "Не могу да изменим вашу лозинку", "Current password" : "Тренутна лозинка", diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json index 5003066df7..9443e13469 100644 --- a/settings/l10n/sr.json +++ b/settings/l10n/sr.json @@ -10,12 +10,10 @@ "Log" : "Бележење", "Tips & tricks" : "Савети и трикови", "Updates" : "Ажурирања", - "Authentication error" : "Грешка при провери идентитета", - "Your full name has been changed." : "Ваше пуно име је промењено.", - "Unable to change full name" : "Не могу да променим пуно име", "Couldn't remove app." : "Не могу да уклоним апликацију.", "Language changed" : "Језик је промењен", "Invalid request" : "Неисправан захтев", + "Authentication error" : "Грешка при провери идентитета", "Admins can't remove themself from the admin group" : "Администратор не може себе да уклони из admin групе", "Unable to add user to group %s" : "Не могу да додам корисника у групу %s", "Unable to remove user from group %s" : "Не могу да уклоним корисника из групе %s", @@ -49,6 +47,8 @@ "Invalid user" : "Неисправан корисник", "Unable to change mail address" : "Не могу да изменим е-адресу", "Email saved" : "Е-порука сачувана", + "Your full name has been changed." : "Ваше пуно име је промењено.", + "Unable to change full name" : "Не могу да променим пуно име", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Да ли заиста желите да додате „{domain}“ као поуздан домен?", "Add trusted domain" : "Додај поуздан домен", "Migration in progress. Please wait until the migration is finished" : "Пресељење је у току. Сачекајте док се не заврши", @@ -211,7 +211,6 @@ "iOS app" : "иОС апликација", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Ако желите да подржите пројект\n\t\tпридружите се развоју\n\t\tили\n\t\tразгласите свима!", "Show First Run Wizard again" : "Поново прикажи чаробњака за прво покретање", - "You have used %s of the available %s" : "Искористили сте %s од дозвољених %s", "Password" : "Лозинка", "Unable to change your password" : "Не могу да изменим вашу лозинку", "Current password" : "Тренутна лозинка", diff --git a/settings/l10n/sr@latin.js b/settings/l10n/sr@latin.js index baacd0efdd..e7319b531f 100644 --- a/settings/l10n/sr@latin.js +++ b/settings/l10n/sr@latin.js @@ -3,9 +3,9 @@ OC.L10N.register( { "External Storage" : "Spoljašnje skladište", "Updates" : "Ažuriranja", - "Authentication error" : "Greška pri autentifikaciji", "Language changed" : "Jezik je izmenjen", "Invalid request" : "Neispravan zahtev", + "Authentication error" : "Greška pri autentifikaciji", "Saved" : "Sačuvano", "Email sent" : "Email poslat", "Very weak password" : "Veoma slaba lozinka", diff --git a/settings/l10n/sr@latin.json b/settings/l10n/sr@latin.json index 70392768da..f53b0f418c 100644 --- a/settings/l10n/sr@latin.json +++ b/settings/l10n/sr@latin.json @@ -1,9 +1,9 @@ { "translations": { "External Storage" : "Spoljašnje skladište", "Updates" : "Ažuriranja", - "Authentication error" : "Greška pri autentifikaciji", "Language changed" : "Jezik je izmenjen", "Invalid request" : "Neispravan zahtev", + "Authentication error" : "Greška pri autentifikaciji", "Saved" : "Sačuvano", "Email sent" : "Email poslat", "Very weak password" : "Veoma slaba lozinka", diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js index 414a1121fa..d152a14f51 100644 --- a/settings/l10n/sv.js +++ b/settings/l10n/sv.js @@ -151,7 +151,6 @@ OC.L10N.register( "Android app" : "Android-app", "iOS app" : "iOS-app", "Show First Run Wizard again" : "Visa Första uppstarts-guiden igen", - "You have used %s of the available %s" : "Du har använt %s av tillgängliga %s", "Password" : "Lösenord", "Unable to change your password" : "Kunde inte ändra ditt lösenord", "Current password" : "Nuvarande lösenord", diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json index 0b0c0ebb88..814096dbe7 100644 --- a/settings/l10n/sv.json +++ b/settings/l10n/sv.json @@ -149,7 +149,6 @@ "Android app" : "Android-app", "iOS app" : "iOS-app", "Show First Run Wizard again" : "Visa Första uppstarts-guiden igen", - "You have used %s of the available %s" : "Du har använt %s av tillgängliga %s", "Password" : "Lösenord", "Unable to change your password" : "Kunde inte ändra ditt lösenord", "Current password" : "Nuvarande lösenord", diff --git a/settings/l10n/ta_LK.js b/settings/l10n/ta_LK.js index f611af9eb1..0ef4abf7fe 100644 --- a/settings/l10n/ta_LK.js +++ b/settings/l10n/ta_LK.js @@ -2,9 +2,9 @@ OC.L10N.register( "settings", { "External Storage" : "வெளி சேமிப்பு", - "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு", "Language changed" : "மொழி மாற்றப்பட்டது", "Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்", + "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு", "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது", "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது", "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது", @@ -26,7 +26,6 @@ OC.L10N.register( "More" : "மேலதிக", "Less" : "குறைவான", "by" : "மூலம்", - "You have used %s of the available %s" : "நீங்கள் %s இலுள்ள %sபயன்படுத்தியுள்ளீர்கள்", "Password" : "கடவுச்சொல்", "Unable to change your password" : "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது", "Current password" : "தற்போதைய கடவுச்சொல்", diff --git a/settings/l10n/ta_LK.json b/settings/l10n/ta_LK.json index 1a16f5f7b3..a1c72071d5 100644 --- a/settings/l10n/ta_LK.json +++ b/settings/l10n/ta_LK.json @@ -1,8 +1,8 @@ { "translations": { "External Storage" : "வெளி சேமிப்பு", - "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு", "Language changed" : "மொழி மாற்றப்பட்டது", "Invalid request" : "செல்லுபடியற்ற வேண்டுகோள்", + "Authentication error" : "அத்தாட்சிப்படுத்தலில் வழு", "Unable to add user to group %s" : "குழு %s இல் பயனாளரை சேர்க்க முடியாது", "Unable to remove user from group %s" : "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது", "Email saved" : "மின்னஞ்சல் சேமிக்கப்பட்டது", @@ -24,7 +24,6 @@ "More" : "மேலதிக", "Less" : "குறைவான", "by" : "மூலம்", - "You have used %s of the available %s" : "நீங்கள் %s இலுள்ள %sபயன்படுத்தியுள்ளீர்கள்", "Password" : "கடவுச்சொல்", "Unable to change your password" : "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது", "Current password" : "தற்போதைய கடவுச்சொல்", diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js index f5fa8a547d..f8cf273c1f 100644 --- a/settings/l10n/th_TH.js +++ b/settings/l10n/th_TH.js @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "เราขอแนะนำให้ติดตั้งแพคเกจที่จำเป็นต้องใช้ในระบบของคุณ ให้การสนับสนุนตำแหน่งที่ตั้งดังต่อไปนี้: %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "หากการติดตั้งของคุณไม่ได้ติดตั้งในรากของโดเมนและใช้ระบบ cron อาจมีปัญหาเกี่ยวกับการสร้าง URL เพื่อหลีกเลี่ยงปัญหาเหล่านี้โปรดไปตั้งค่า \"overwrite.cli.url\" ในไฟล์ config.php ของคุณไปยังเส้นทาง webroot ของการติดตั้งของคุณ (แนะนำ: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "มันเป็นไปไม่ได้ที่จะดำเนินการ cronjob ผ่านทาง CLI ข้อผิดพลาดทางเทคนิคต่อไปนี้จะปรากฏ:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "การทำธุรกรรมล็อคไฟล์จะใช้ฐานข้อมูลเป็นล็อคแบ็กเอนด์ สำหรับประสิทธิภาพที่ดีที่สุดก็ควรที่จะกำหนดค่า memcache สำหรับล็อค ดูเพิ่มเติมได้จาก เอกสาร", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "กรุณาตรวจสอบ คู่มือการติดตั้ง และตรวจสอบข้อผิดพลาดหรือคำเตือนใน บันทึก", "All checks passed." : "ผ่านการตรวจสอบทั้งหมด", "Open documentation" : "เปิดเอกสาร", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "แอพฯ IOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "หากคุณต้องการที่จะสนับสนุนโครงการ เข้าร่วมการพัฒนา หรือ กระจายข่าวสาร!\n\t\t", "Show First Run Wizard again" : "แสดงหน้าจอวิซาร์ดนำทางครั้งแรกอีกครั้ง", - "You have used %s of the available %s" : "คุณได้ใช้งานไปแล้ว %s จากจำนวนที่สามารถใช้ได้ %s", "Password" : "รหัสผ่าน", "Unable to change your password" : "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้", "Current password" : "รหัสผ่านปัจจุบัน", diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json index 90eaa41ea9..a606a62f47 100644 --- a/settings/l10n/th_TH.json +++ b/settings/l10n/th_TH.json @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "เราขอแนะนำให้ติดตั้งแพคเกจที่จำเป็นต้องใช้ในระบบของคุณ ให้การสนับสนุนตำแหน่งที่ตั้งดังต่อไปนี้: %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "หากการติดตั้งของคุณไม่ได้ติดตั้งในรากของโดเมนและใช้ระบบ cron อาจมีปัญหาเกี่ยวกับการสร้าง URL เพื่อหลีกเลี่ยงปัญหาเหล่านี้โปรดไปตั้งค่า \"overwrite.cli.url\" ในไฟล์ config.php ของคุณไปยังเส้นทาง webroot ของการติดตั้งของคุณ (แนะนำ: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "มันเป็นไปไม่ได้ที่จะดำเนินการ cronjob ผ่านทาง CLI ข้อผิดพลาดทางเทคนิคต่อไปนี้จะปรากฏ:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "การทำธุรกรรมล็อคไฟล์จะใช้ฐานข้อมูลเป็นล็อคแบ็กเอนด์ สำหรับประสิทธิภาพที่ดีที่สุดก็ควรที่จะกำหนดค่า memcache สำหรับล็อค ดูเพิ่มเติมได้จาก เอกสาร", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "กรุณาตรวจสอบ คู่มือการติดตั้ง และตรวจสอบข้อผิดพลาดหรือคำเตือนใน บันทึก", "All checks passed." : "ผ่านการตรวจสอบทั้งหมด", "Open documentation" : "เปิดเอกสาร", @@ -229,7 +228,6 @@ "iOS app" : "แอพฯ IOS", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "หากคุณต้องการที่จะสนับสนุนโครงการ เข้าร่วมการพัฒนา หรือ กระจายข่าวสาร!\n\t\t", "Show First Run Wizard again" : "แสดงหน้าจอวิซาร์ดนำทางครั้งแรกอีกครั้ง", - "You have used %s of the available %s" : "คุณได้ใช้งานไปแล้ว %s จากจำนวนที่สามารถใช้ได้ %s", "Password" : "รหัสผ่าน", "Unable to change your password" : "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้", "Current password" : "รหัสผ่านปัจจุบัน", diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index eb003a1f2f..b138ce2ecd 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "Günlük", "Tips & tricks" : "İpuçları ve hileler", "Updates" : "Güncellemeler", - "Authentication error" : "Kimlik doğrulama hatası", - "Your full name has been changed." : "Tam adınız değiştirildi.", - "Unable to change full name" : "Tam adınız değiştirilirken hata", "Couldn't remove app." : "Uygulama kaldırılamadı.", "Language changed" : "Dil değiştirildi", "Invalid request" : "Geçersiz istek", + "Authentication error" : "Kimlik doğrulama hatası", "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz", "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor", "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "Geçersiz kullanıcı", "Unable to change mail address" : "Posta adresini değiştirme başarısız", "Email saved" : "E-posta kaydedildi", + "Your full name has been changed." : "Tam adınız değiştirildi.", + "Unable to change full name" : "Tam adınız değiştirilirken hata", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?", "Add trusted domain" : "Güvenilir alan adı ekle", "Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin", @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar oluşabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwrite.cli.url\" seçeneğini ayarlayın (Önerilen: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "İşlemsel dosya kilidi, kilitleme arkaucu olarak veritabanını kullanıyor. En iyi performans için kilitleme adına memcache yapılandırılması önerilir. Daha fazla bilgi için belgelendirmeye ↗ bakın.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Lütfen kurulum rehberlerini ↗ iki kez denetleyip günlük içerisindeki hata ve uyarılara bakın.", "All checks passed." : "Tüm kontroller geçildi.", "Open documentation" : "Belgelendirmeyi aç", @@ -231,7 +230,6 @@ OC.L10N.register( "iOS app" : "iOS uygulaması", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Projeyi desteklemek istiyorsanız\n\t\tgeliştirilmesine katılın\n\t\tveya\n\t\tduyurun!", "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", - "You have used %s of the available %s" : "Kullandığınız: %s. Kullanılabilir alan: %s", "Password" : "Parola", "Unable to change your password" : "Parolanız değiştirilemiyor", "Current password" : "Mevcut parola", diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index c96a4f566c..f079a48628 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -10,12 +10,10 @@ "Log" : "Günlük", "Tips & tricks" : "İpuçları ve hileler", "Updates" : "Güncellemeler", - "Authentication error" : "Kimlik doğrulama hatası", - "Your full name has been changed." : "Tam adınız değiştirildi.", - "Unable to change full name" : "Tam adınız değiştirilirken hata", "Couldn't remove app." : "Uygulama kaldırılamadı.", "Language changed" : "Dil değiştirildi", "Invalid request" : "Geçersiz istek", + "Authentication error" : "Kimlik doğrulama hatası", "Admins can't remove themself from the admin group" : "Yöneticiler kendilerini admin grubundan kaldıramaz", "Unable to add user to group %s" : "Kullanıcı %s grubuna eklenemiyor", "Unable to remove user from group %s" : "%s grubundan kullanıcı kaldırılamıyor", @@ -51,6 +49,8 @@ "Invalid user" : "Geçersiz kullanıcı", "Unable to change mail address" : "Posta adresini değiştirme başarısız", "Email saved" : "E-posta kaydedildi", + "Your full name has been changed." : "Tam adınız değiştirildi.", + "Unable to change full name" : "Tam adınız değiştirilirken hata", "Are you really sure you want add \"{domain}\" as trusted domain?" : "\"{domain}\" alan adını güvenilir alan adı olarak eklemek istediğinizden emin misiniz?", "Add trusted domain" : "Güvenilir alan adı ekle", "Migration in progress. Please wait until the migration is finished" : "Taşınma sürüyor. Lütfen taşınma tamamlanana kadar bekleyin", @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Şu dillerden birini desteklemesi için sisteminize gerekli paketleri kurmanızı şiddetle tavsiye ederiz: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar oluşabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwrite.cli.url\" seçeneğini ayarlayın (Önerilen: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "İşlemsel dosya kilidi, kilitleme arkaucu olarak veritabanını kullanıyor. En iyi performans için kilitleme adına memcache yapılandırılması önerilir. Daha fazla bilgi için belgelendirmeye ↗ bakın.", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "Lütfen kurulum rehberlerini ↗ iki kez denetleyip günlük içerisindeki hata ve uyarılara bakın.", "All checks passed." : "Tüm kontroller geçildi.", "Open documentation" : "Belgelendirmeyi aç", @@ -229,7 +228,6 @@ "iOS app" : "iOS uygulaması", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Projeyi desteklemek istiyorsanız\n\t\tgeliştirilmesine katılın\n\t\tveya\n\t\tduyurun!", "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", - "You have used %s of the available %s" : "Kullandığınız: %s. Kullanılabilir alan: %s", "Password" : "Parola", "Unable to change your password" : "Parolanız değiştirilemiyor", "Current password" : "Mevcut parola", diff --git a/settings/l10n/ug.js b/settings/l10n/ug.js index fafe6cf559..0182ed481c 100644 --- a/settings/l10n/ug.js +++ b/settings/l10n/ug.js @@ -3,9 +3,9 @@ OC.L10N.register( { "Sharing" : "ھەمبەھىر", "Log" : "خاتىرە", - "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى", "Language changed" : "تىل ئۆزگەردى", "Invalid request" : "ئىناۋەتسىز ئىلتىماس", + "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى", "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ", "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ", "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ", diff --git a/settings/l10n/ug.json b/settings/l10n/ug.json index f81f82ab70..30a13dd57f 100644 --- a/settings/l10n/ug.json +++ b/settings/l10n/ug.json @@ -1,9 +1,9 @@ { "translations": { "Sharing" : "ھەمبەھىر", "Log" : "خاتىرە", - "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى", "Language changed" : "تىل ئۆزگەردى", "Invalid request" : "ئىناۋەتسىز ئىلتىماس", + "Authentication error" : "سالاھىيەت دەلىللەش خاتالىقى", "Admins can't remove themself from the admin group" : "باشقۇرغۇچى ئۆزىنى باشقۇرۇش گۇرۇپپىسىدىن چىقىرىۋېتەلمەيدۇ", "Unable to add user to group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىغا قوشالمايدۇ", "Unable to remove user from group %s" : "ئىشلەتكۈچىنى %s گۇرۇپپىدىن چىقىرىۋېتەلمەيدۇ", diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js index 2775efd8fa..f9e542a946 100644 --- a/settings/l10n/uk.js +++ b/settings/l10n/uk.js @@ -11,12 +11,10 @@ OC.L10N.register( "Log" : "Журнал", "Tips & tricks" : "Поради і трюки", "Updates" : "Оновлення", - "Authentication error" : "Помилка автентифікації", - "Your full name has been changed." : "Ваше повне ім'я було змінено", - "Unable to change full name" : "Неможливо змінити повне ім'я", "Couldn't remove app." : "Неможливо видалити додаток.", "Language changed" : "Мову змінено", "Invalid request" : "Некоректний запит", + "Authentication error" : "Помилка автентифікації", "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів", "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s", "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s", @@ -52,6 +50,8 @@ OC.L10N.register( "Invalid user" : "Неправильний користувач", "Unable to change mail address" : "Неможливо поміняти email адресу", "Email saved" : "Адресу збережено", + "Your full name has been changed." : "Ваше повне ім'я було змінено", + "Unable to change full name" : "Неможливо змінити повне ім'я", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?", "Add trusted domain" : "Додати довірений домен", "Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться", @@ -210,7 +210,6 @@ OC.L10N.register( "iOS app" : "iOS додаток", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Якщо Ви хочете підтримати проект\n⇥⇥ спільна розробка \n⇥⇥або\n⇥ ⇥ повідомити у світі !", "Show First Run Wizard again" : "Показувати Майстер Налаштувань знову", - "You have used %s of the available %s" : "Ви використали %s із доступних %s", "Password" : "Пароль", "Unable to change your password" : "Не вдалося змінити Ваш пароль", "Current password" : "Поточний пароль", diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json index d2a594fffc..a16133952f 100644 --- a/settings/l10n/uk.json +++ b/settings/l10n/uk.json @@ -9,12 +9,10 @@ "Log" : "Журнал", "Tips & tricks" : "Поради і трюки", "Updates" : "Оновлення", - "Authentication error" : "Помилка автентифікації", - "Your full name has been changed." : "Ваше повне ім'я було змінено", - "Unable to change full name" : "Неможливо змінити повне ім'я", "Couldn't remove app." : "Неможливо видалити додаток.", "Language changed" : "Мову змінено", "Invalid request" : "Некоректний запит", + "Authentication error" : "Помилка автентифікації", "Admins can't remove themself from the admin group" : "Адміністратор не може видалити себе з групи адміністраторів", "Unable to add user to group %s" : "Не вдалося додати користувача у групу %s", "Unable to remove user from group %s" : "Не вдалося видалити користувача із групи %s", @@ -50,6 +48,8 @@ "Invalid user" : "Неправильний користувач", "Unable to change mail address" : "Неможливо поміняти email адресу", "Email saved" : "Адресу збережено", + "Your full name has been changed." : "Ваше повне ім'я було змінено", + "Unable to change full name" : "Неможливо змінити повне ім'я", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Ви дійсно бажаєте додати \"{domain}\" як довірений домен?", "Add trusted domain" : "Додати довірений домен", "Migration in progress. Please wait until the migration is finished" : "Міграція триває. Будь ласка, зачекайте доки процес міграції завершиться", @@ -208,7 +208,6 @@ "iOS app" : "iOS додаток", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "Якщо Ви хочете підтримати проект\n⇥⇥ спільна розробка \n⇥⇥або\n⇥ ⇥ повідомити у світі !", "Show First Run Wizard again" : "Показувати Майстер Налаштувань знову", - "You have used %s of the available %s" : "Ви використали %s із доступних %s", "Password" : "Пароль", "Unable to change your password" : "Не вдалося змінити Ваш пароль", "Current password" : "Поточний пароль", diff --git a/settings/l10n/vi.js b/settings/l10n/vi.js index c451a11e48..3fb0c65715 100644 --- a/settings/l10n/vi.js +++ b/settings/l10n/vi.js @@ -6,11 +6,9 @@ OC.L10N.register( "External Storage" : "Lưu trữ ngoài", "Cron" : "Cron", "Log" : "Log", - "Authentication error" : "Lỗi xác thực", - "Your full name has been changed." : "Họ và tên đã được thay đổi.", - "Unable to change full name" : "Họ và tên không thể đổi ", "Language changed" : "Ngôn ngữ đã được thay đổi", "Invalid request" : "Yêu cầu không hợp lệ", + "Authentication error" : "Lỗi xác thực", "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s", "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s", @@ -19,6 +17,8 @@ OC.L10N.register( "Saved" : "Đã lưu", "Email sent" : "Email đã được gửi", "Email saved" : "Lưu email", + "Your full name has been changed." : "Họ và tên đã được thay đổi.", + "Unable to change full name" : "Họ và tên không thể đổi ", "All" : "Tất cả", "Please wait...." : "Xin hãy đợi...", "Disable" : "Tắt", @@ -49,7 +49,6 @@ OC.L10N.register( "Forum" : "Diễn đàn", "Get the apps to sync your files" : "Nhận ứng dụng để đồng bộ file của bạn", "Show First Run Wizard again" : "Hiện lại việc chạy đồ thuật khởi đầu", - "You have used %s of the available %s" : "Bạn đã sử dụng %s có sẵn %s ", "Password" : "Mật khẩu", "Unable to change your password" : "Không thể đổi mật khẩu", "Current password" : "Mật khẩu cũ", diff --git a/settings/l10n/vi.json b/settings/l10n/vi.json index a86e778713..67c65407b0 100644 --- a/settings/l10n/vi.json +++ b/settings/l10n/vi.json @@ -4,11 +4,9 @@ "External Storage" : "Lưu trữ ngoài", "Cron" : "Cron", "Log" : "Log", - "Authentication error" : "Lỗi xác thực", - "Your full name has been changed." : "Họ và tên đã được thay đổi.", - "Unable to change full name" : "Họ và tên không thể đổi ", "Language changed" : "Ngôn ngữ đã được thay đổi", "Invalid request" : "Yêu cầu không hợp lệ", + "Authentication error" : "Lỗi xác thực", "Admins can't remove themself from the admin group" : "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý", "Unable to add user to group %s" : "Không thể thêm người dùng vào nhóm %s", "Unable to remove user from group %s" : "Không thể xóa người dùng từ nhóm %s", @@ -17,6 +15,8 @@ "Saved" : "Đã lưu", "Email sent" : "Email đã được gửi", "Email saved" : "Lưu email", + "Your full name has been changed." : "Họ và tên đã được thay đổi.", + "Unable to change full name" : "Họ và tên không thể đổi ", "All" : "Tất cả", "Please wait...." : "Xin hãy đợi...", "Disable" : "Tắt", @@ -47,7 +47,6 @@ "Forum" : "Diễn đàn", "Get the apps to sync your files" : "Nhận ứng dụng để đồng bộ file của bạn", "Show First Run Wizard again" : "Hiện lại việc chạy đồ thuật khởi đầu", - "You have used %s of the available %s" : "Bạn đã sử dụng %s có sẵn %s ", "Password" : "Mật khẩu", "Unable to change your password" : "Không thể đổi mật khẩu", "Current password" : "Mật khẩu cũ", diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index 624858c842..8ee804c190 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -135,7 +135,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "事务文件锁定正在使用的数据库作为锁定后端,为获得最佳的性能建议配置的 memcache 用来锁定。请参阅文档↗了解详情。", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "请点击检查 安装向导 ↗, 点击 日志 查看详细错误和警告。", "All checks passed." : "所有检查已通过。", "Open documentation" : "打开文档", @@ -226,7 +225,6 @@ OC.L10N.register( "iOS app" : "iOS 应用", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "想支持ownCloud项目?请\n\t\t参加开发\n\t\t或者\n\t\t帮助推广吧!", "Show First Run Wizard again" : "再次显示首次运行向导", - "You have used %s of the available %s" : "你已使用 %s,有效空间 %s", "Password" : "密码", "Unable to change your password" : "无法修改密码", "Current password" : "当前密码", diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index f927bb35a4..1ea648f098 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -133,7 +133,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "事务文件锁定正在使用的数据库作为锁定后端,为获得最佳的性能建议配置的 memcache 用来锁定。请参阅文档↗了解详情。", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "请点击检查 安装向导 ↗, 点击 日志 查看详细错误和警告。", "All checks passed." : "所有检查已通过。", "Open documentation" : "打开文档", @@ -224,7 +223,6 @@ "iOS app" : "iOS 应用", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "想支持ownCloud项目?请\n\t\t参加开发\n\t\t或者\n\t\t帮助推广吧!", "Show First Run Wizard again" : "再次显示首次运行向导", - "You have used %s of the available %s" : "你已使用 %s,有效空间 %s", "Password" : "密码", "Unable to change your password" : "无法修改密码", "Current password" : "当前密码", diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js index e863891e04..c3599c3d4e 100644 --- a/settings/l10n/zh_TW.js +++ b/settings/l10n/zh_TW.js @@ -12,12 +12,10 @@ OC.L10N.register( "Log" : "紀錄檔", "Tips & tricks" : "技巧 & 提示", "Updates" : "更新", - "Authentication error" : "認證錯誤", - "Your full name has been changed." : "您的全名已變更。", - "Unable to change full name" : "無法變更全名", "Couldn't remove app." : "無法移除應用程式", "Language changed" : "語言已變更", "Invalid request" : "無效請求", + "Authentication error" : "認證錯誤", "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除", "Unable to add user to group %s" : "使用者加入群組 %s 錯誤", "Unable to remove user from group %s" : "使用者移出群組 %s 錯誤", @@ -53,6 +51,8 @@ OC.L10N.register( "Invalid user" : "無效的使用者", "Unable to change mail address" : "無法更改 email 地址", "Email saved" : "Email 已儲存", + "Your full name has been changed." : "您的全名已變更。", + "Unable to change full name" : "無法變更全名", "Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?", "Add trusted domain" : "新增信任的網域", "Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束", @@ -133,7 +133,6 @@ OC.L10N.register( "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您不是使用root來安裝,而是透過系統自定義的排程的話,URL的生成可能會有問題,為了避免這樣的狀況,請您在config.php檔案裡設置 \"overwrite.cli.url\",設定您安裝的webroot的路徑 (建議值: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : " 不可能透過CLI來執行cronjob,發生以下技術性錯誤:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "事務型文件鎖定目前是使用後端資料庫的鎖定功能,為了達到最好的效能,建議鎖定功能使用記憶體快取,請看文件手冊 ↗ 來獲得更多的資訊。", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "請再次檢查 安裝導引手冊 ↗,並且確定沒有任何的錯誤或是警告訊息在 記錄檔。", "All checks passed." : "通過所有的檢查。", "Open documentation" : "開啟文件", @@ -228,7 +227,6 @@ OC.L10N.register( "iOS app" : "iOS 應用程式", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "若您想支援這個計畫\n\t\t加入開發者\n\t\t或\n\t\t替我們宣傳!", "Show First Run Wizard again" : "再次顯示首次使用精靈", - "You have used %s of the available %s" : "您已經使用了 %s ,總共可用空間為 %s", "Password" : "密碼", "Unable to change your password" : "無法變更您的密碼", "Current password" : "目前密碼", diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json index 312d93ea25..bf026bf262 100644 --- a/settings/l10n/zh_TW.json +++ b/settings/l10n/zh_TW.json @@ -10,12 +10,10 @@ "Log" : "紀錄檔", "Tips & tricks" : "技巧 & 提示", "Updates" : "更新", - "Authentication error" : "認證錯誤", - "Your full name has been changed." : "您的全名已變更。", - "Unable to change full name" : "無法變更全名", "Couldn't remove app." : "無法移除應用程式", "Language changed" : "語言已變更", "Invalid request" : "無效請求", + "Authentication error" : "認證錯誤", "Admins can't remove themself from the admin group" : "管理者帳號無法從管理者群組中移除", "Unable to add user to group %s" : "使用者加入群組 %s 錯誤", "Unable to remove user from group %s" : "使用者移出群組 %s 錯誤", @@ -51,6 +49,8 @@ "Invalid user" : "無效的使用者", "Unable to change mail address" : "無法更改 email 地址", "Email saved" : "Email 已儲存", + "Your full name has been changed." : "您的全名已變更。", + "Unable to change full name" : "無法變更全名", "Are you really sure you want add \"{domain}\" as trusted domain?" : "您確定要新增 \"{domain}' 為信任的網域?", "Add trusted domain" : "新增信任的網域", "Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束", @@ -131,7 +131,6 @@ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系: %s", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您不是使用root來安裝,而是透過系統自定義的排程的話,URL的生成可能會有問題,為了避免這樣的狀況,請您在config.php檔案裡設置 \"overwrite.cli.url\",設定您安裝的webroot的路徑 (建議值: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : " 不可能透過CLI來執行cronjob,發生以下技術性錯誤:", - "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the documentation ↗ for more information." : "事務型文件鎖定目前是使用後端資料庫的鎖定功能,為了達到最好的效能,建議鎖定功能使用記憶體快取,請看文件手冊 ↗ 來獲得更多的資訊。", "Please double check the installation guides ↗, and check for any errors or warnings in the log." : "請再次檢查 安裝導引手冊 ↗,並且確定沒有任何的錯誤或是警告訊息在 記錄檔。", "All checks passed." : "通過所有的檢查。", "Open documentation" : "開啟文件", @@ -226,7 +225,6 @@ "iOS app" : "iOS 應用程式", "If you want to support the project\n\t\tjoin development\n\t\tor\n\t\tspread the word!" : "若您想支援這個計畫\n\t\t加入開發者\n\t\t或\n\t\t替我們宣傳!", "Show First Run Wizard again" : "再次顯示首次使用精靈", - "You have used %s of the available %s" : "您已經使用了 %s ,總共可用空間為 %s", "Password" : "密碼", "Unable to change your password" : "無法變更您的密碼", "Current password" : "目前密碼", diff --git a/settings/templates/admin.php b/settings/templates/admin.php index f3de51a23c..2b813257a7 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -181,13 +181,7 @@ if ($_['cronErrors']) {
    - + diff --git a/settings/templates/email.new_user.php b/settings/templates/email.new_user.php index 74149632cb..8b13ac753e 100644 --- a/settings/templates/email.new_user.php +++ b/settings/templates/email.new_user.php @@ -4,7 +4,7 @@
    diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 09194ea3e3..96d26a933b 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -58,7 +58,7 @@
    80): ?> class="quota-warning" >

    - t('You have used %s of the available %s', + t('You are using %s of %s', array($_['usage'], $_['total_space'])));?>

    @@ -149,7 +149,7 @@ if($_['passwordChangeSupported']) { - +

    t('Profile picture')); ?>


    diff --git a/settings/users.php b/settings/users.php index ccf1bcd9e1..0e9823e73e 100644 --- a/settings/users.php +++ b/settings/users.php @@ -37,7 +37,7 @@ OC_Util::checkSubAdminUser(); \OC::$server->getNavigationManager()->setActiveEntry('core_users'); -$userManager = \OC_User::getManager(); +$userManager = \OC::$server->getUserManager(); $groupManager = \OC_Group::getManager(); // Set the sort option: SORT_USERCOUNT or SORT_GROUPNAME diff --git a/status.php b/status.php index f59dc16b6a..65418336e2 100644 --- a/status.php +++ b/status.php @@ -36,7 +36,7 @@ try { $values=array( 'installed'=>$installed, 'maintenance' => $maintenance, - 'version'=>implode('.', OC_Util::getVersion()), + 'version'=>implode('.', \OCP\Util::getVersion()), 'versionstring'=>OC_Util::getVersionString(), 'edition'=>OC_Util::getEditionString()); if (OC::$CLI) { diff --git a/tests/core/avatar/avatarcontrollertest.php b/tests/core/avatar/avatarcontrollertest.php index a113add72b..7f69ba0aad 100644 --- a/tests/core/avatar/avatarcontrollertest.php +++ b/tests/core/avatar/avatarcontrollertest.php @@ -26,8 +26,10 @@ use OCP\AppFramework\IAppContainer; use OCP\AppFramework\Http; use OCP\Files\Folder; use OCP\Files\File; +use OCP\Files\NotFoundException; use OCP\IUser; use OCP\IAvatar; +use Punic\Exception; use Test\Traits\UserTrait; /** @@ -56,6 +58,8 @@ class AvatarControllerTest extends \Test\TestCase { private $avatarMock; /** @var IUser */ private $userMock; + /** @var File */ + private $avatarFile; protected function setUp() { parent::setUp(); @@ -88,6 +92,10 @@ class AvatarControllerTest extends \Test\TestCase { ->willReturnMap([['userId', $this->userMock]]); $this->container['UserSession']->method('getUser')->willReturn($this->userMock); + $this->avatarFile = $this->getMock('OCP\Files\File'); + $this->avatarFile->method('getContnet')->willReturn('image data'); + $this->avatarFile->method('getMimeType')->willReturn('image type'); + $this->avatarFile->method('getEtag')->willReturn('my etag'); } public function tearDown() { @@ -100,6 +108,7 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testGetAvatarNoAvatar() { $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarMock->method('getFile')->will($this->throwException(new NotFoundException())); $response = $this->avatarController->getAvatar('userId', 32); //Comment out until JS is fixed @@ -112,12 +121,8 @@ class AvatarControllerTest extends \Test\TestCase { * Fetch the user's avatar */ public function testGetAvatar() { - $image = $this->getMock('OCP\IImage'); - $image->method('data')->willReturn('image data'); - $image->method('mimeType')->willReturn('image type'); - - $this->avatarMock->method('get')->willReturn($image); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarMock->method('getFile')->willReturn($this->avatarFile); + $this->container['AvatarManager']->method('getAvatar')->with('userId')->willReturn($this->avatarMock); $response = $this->avatarController->getAvatar('userId', 32); @@ -125,17 +130,19 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertArrayHasKey('Content-Type', $response->getHeaders()); $this->assertEquals('image type', $response->getHeaders()['Content-Type']); - $this->assertEquals(crc32('image data'), $response->getEtag()); + $this->assertEquals('my etag', $response->getEtag()); } /** * Fetch the avatar of a non-existing user */ public function testGetAvatarNoUser() { - $this->avatarMock->method('get')->willReturn(null); - $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $this->container['AvatarManager'] + ->method('getAvatar') + ->with('userDoesNotExist') + ->will($this->throwException(new \Exception('user does not exist'))); - $response = $this->avatarController->getAvatar('userDoesnotexist', 32); + $response = $this->avatarController->getAvatar('userDoesNotExist', 32); //Comment out until JS is fixed //$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); @@ -148,8 +155,9 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testGetAvatarSize() { $this->avatarMock->expects($this->once()) - ->method('get') - ->with($this->equalTo(32)); + ->method('getFile') + ->with($this->equalTo(32)) + ->willReturn($this->avatarFile); $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); @@ -161,8 +169,9 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testGetAvatarSizeMin() { $this->avatarMock->expects($this->once()) - ->method('get') - ->with($this->equalTo(64)); + ->method('getFile') + ->with($this->equalTo(64)) + ->willReturn($this->avatarFile); $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); @@ -174,8 +183,9 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testGetAvatarSizeMax() { $this->avatarMock->expects($this->once()) - ->method('get') - ->with($this->equalTo(2048)); + ->method('getFile') + ->with($this->equalTo(2048)) + ->willReturn($this->avatarFile); $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); diff --git a/tests/lib/allconfig.php b/tests/lib/allconfig.php index ca3dce12ea..0caf8163cf 100644 --- a/tests/lib/allconfig.php +++ b/tests/lib/allconfig.php @@ -28,7 +28,9 @@ class TestAllConfig extends \Test\TestCase { $connection = $this->connection; } if($systemConfig === null) { - $systemConfig = $this->getMock('\OC\SystemConfig'); + $systemConfig = $this->getMockBuilder('\OC\SystemConfig') + ->disableOriginalConstructor() + ->getMock(); } return new \OC\AllConfig($systemConfig, $connection); } @@ -89,7 +91,9 @@ class TestAllConfig extends \Test\TestCase { public function testSetUserValueWithPreCondition() { // mock the check for the database to run the correct SQL statements for each database type - $systemConfig = $this->getMock('\OC\SystemConfig'); + $systemConfig = $this->getMockBuilder('\OC\SystemConfig') + ->disableOriginalConstructor() + ->getMock(); $systemConfig->expects($this->once()) ->method('getValue') ->with($this->equalTo('dbtype'), @@ -133,7 +137,9 @@ class TestAllConfig extends \Test\TestCase { */ public function testSetUserValueWithPreConditionFailure() { // mock the check for the database to run the correct SQL statements for each database type - $systemConfig = $this->getMock('\OC\SystemConfig'); + $systemConfig = $this->getMockBuilder('\OC\SystemConfig') + ->disableOriginalConstructor() + ->getMock(); $systemConfig->expects($this->once()) ->method('getValue') ->with($this->equalTo('dbtype'), @@ -394,7 +400,9 @@ class TestAllConfig extends \Test\TestCase { public function testGetUsersForUserValue() { // mock the check for the database to run the correct SQL statements for each database type - $systemConfig = $this->getMock('\OC\SystemConfig'); + $systemConfig = $this->getMockBuilder('\OC\SystemConfig') + ->disableOriginalConstructor() + ->getMock(); $systemConfig->expects($this->once()) ->method('getValue') ->with($this->equalTo('dbtype'), diff --git a/tests/lib/app/dependencyanalyzer.php b/tests/lib/app/dependencyanalyzer.php index 58f1c0a7a9..fecba51885 100644 --- a/tests/lib/app/dependencyanalyzer.php +++ b/tests/lib/app/dependencyanalyzer.php @@ -12,8 +12,9 @@ namespace Test\App; use OC; use OC\App\Platform; use OCP\IL10N; +use Test\TestCase; -class DependencyAnalyzer extends \PHPUnit_Framework_TestCase { +class DependencyAnalyzer extends TestCase { /** @var Platform */ private $platformMock; diff --git a/tests/lib/app/infoparser.php b/tests/lib/app/infoparser.php index fb4ffe8af9..1e5257abec 100644 --- a/tests/lib/app/infoparser.php +++ b/tests/lib/app/infoparser.php @@ -10,8 +10,9 @@ namespace Test\App; use OC; +use Test\TestCase; -class InfoParser extends \PHPUnit_Framework_TestCase { +class InfoParser extends TestCase { /** * @var \OC\App\InfoParser diff --git a/tests/lib/app/manager.php b/tests/lib/app/manager.php index 38358fd61c..a3e55c6b89 100644 --- a/tests/lib/app/manager.php +++ b/tests/lib/app/manager.php @@ -11,8 +11,9 @@ namespace Test\App; use OC\Group\Group; use OC\User\User; +use Test\TestCase; -class Manager extends \PHPUnit_Framework_TestCase { +class Manager extends TestCase { /** * @return \OCP\IAppConfig | \PHPUnit_Framework_MockObject_MockObject */ diff --git a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php index a584b5481b..c643c362a9 100644 --- a/tests/lib/appframework/utility/ControllerMethodReflectorTest.php +++ b/tests/lib/appframework/utility/ControllerMethodReflectorTest.php @@ -104,6 +104,29 @@ class ControllerMethodReflectorTest extends \Test\TestCase { $this->assertEquals('int', $reader->getType('test')); } + /** + * @Annotation + * @param int $a + * @param int $b + */ + public function arguments3($a, float $b, int $c, $d){} + + /** + * @requires PHP 7 + */ + public function testReadTypeIntAnnotationsScalarTypes(){ + $reader = new ControllerMethodReflector(); + $reader->reflect( + '\OC\AppFramework\Utility\ControllerMethodReflectorTest', + 'arguments3' + ); + + $this->assertEquals('int', $reader->getType('a')); + $this->assertEquals('float', $reader->getType('b')); + $this->assertEquals('int', $reader->getType('c')); + $this->assertNull($reader->getType('d')); + } + /** * @Annotation diff --git a/tests/lib/avatartest.php b/tests/lib/avatartest.php index 49e8be98c8..3d77a282a7 100644 --- a/tests/lib/avatartest.php +++ b/tests/lib/avatartest.php @@ -60,12 +60,25 @@ class AvatarTest extends \Test\TestCase { $file = $this->getMock('\OCP\Files\File'); $file->method('getContent')->willReturn($expected->data()); - $this->folder->method('get')->with('avatar.png')->willReturn($file); + + $this->folder->method('get') + ->will($this->returnCallback( + function($path) use ($file) { + if ($path === 'avatar.png') { + return $file; + } else { + throw new \OCP\Files\NotFoundException; + } + } + )); $newFile = $this->getMock('\OCP\Files\File'); $newFile->expects($this->once()) ->method('putContent') ->with($expected2->data()); + $newFile->expects($this->once()) + ->method('getContent') + ->willReturn($expected2->data()); $this->folder->expects($this->once()) ->method('newFile') ->with('avatar.32.png') diff --git a/tests/lib/backgroundjob/job.php b/tests/lib/backgroundjob/job.php index fec9b0a792..912e0e13b5 100644 --- a/tests/lib/backgroundjob/job.php +++ b/tests/lib/backgroundjob/job.php @@ -23,10 +23,17 @@ class Job extends \Test\TestCase { }); $jobList->add($job); + $logger = $this->getMockBuilder('OCP\ILogger') + ->disableOriginalConstructor() + ->getMock(); + $logger->expects($this->once()) + ->method('error') + ->with('Error while running background job: '); + $this->assertCount(1, $jobList->getAll()); - $job->execute($jobList); + $job->execute($jobList, $logger); $this->assertTrue($this->run); - $this->assertCount(0, $jobList->getAll()); + $this->assertCount(1, $jobList->getAll()); } public function markRun() { diff --git a/tests/lib/backgroundjob/joblist.php b/tests/lib/backgroundjob/joblist.php index 73b3255c07..c0796d8253 100644 --- a/tests/lib/backgroundjob/joblist.php +++ b/tests/lib/backgroundjob/joblist.php @@ -15,26 +15,21 @@ use Test\TestCase; * Class JobList * * @group DB - * * @package Test\BackgroundJob */ class JobList extends TestCase { - /** - * @var \OC\BackgroundJob\JobList - */ + /** @var \OC\BackgroundJob\JobList */ protected $instance; - /** - * @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject $config - */ + /** @var \OCP\IConfig|\PHPUnit_Framework_MockObject_MockObject */ protected $config; protected function setUp() { parent::setUp(); - $conn = \OC::$server->getDatabaseConnection(); + $connection = \OC::$server->getDatabaseConnection(); $this->config = $this->getMock('\OCP\IConfig'); - $this->instance = new \OC\BackgroundJob\JobList($conn, $this->config); + $this->instance = new \OC\BackgroundJob\JobList($connection, $this->config); } protected function getAllSorted() { diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php index 7aa969df02..0880e7e128 100644 --- a/tests/lib/cache/file.php +++ b/tests/lib/cache/file.php @@ -71,7 +71,7 @@ class FileCache extends \Test_Cache { \OC_User::useBackend(new \Test\Util\User\Dummy()); //login - \OC_User::createUser('test', 'test'); + \OC::$server->getUserManager()->createUser('test', 'test'); $this->user = \OC_User::getUser(); \OC_User::setUserId('test'); diff --git a/tests/lib/comments/comment.php b/tests/lib/comments/comment.php new file mode 100644 index 0000000000..02adea8729 --- /dev/null +++ b/tests/lib/comments/comment.php @@ -0,0 +1,112 @@ + 'user', 'id' => 'alice']; + $creationDT = new \DateTime(); + $latestChildDT = new \DateTime('yesterday'); + $object = ['type' => 'file', 'id' => 'file64']; + + $comment + ->setId($id) + ->setParentId($parentId) + ->setChildrenCount($childrenCount) + ->setMessage($message) + ->setVerb($verb) + ->setActor($actor['type'], $actor['id']) + ->setCreationDateTime($creationDT) + ->setLatestChildDateTime($latestChildDT) + ->setObject($object['type'], $object['id']); + + $this->assertSame($id, $comment->getId()); + $this->assertSame($parentId, $comment->getParentId()); + $this->assertSame($childrenCount, $comment->getChildrenCount()); + $this->assertSame($message, $comment->getMessage()); + $this->assertSame($verb, $comment->getVerb()); + $this->assertSame($actor['type'], $comment->getActorType()); + $this->assertSame($actor['id'], $comment->getActorId()); + $this->assertSame($creationDT, $comment->getCreationDateTime()); + $this->assertSame($latestChildDT, $comment->getLatestChildDateTime()); + $this->assertSame($object['type'], $comment->getObjectType()); + $this->assertSame($object['id'], $comment->getObjectId()); + } + + /** + * @expectedException \OCP\Comments\IllegalIDChangeException + */ + public function testSetIdIllegalInput() { + $comment = new \OC\Comments\Comment(); + + $comment->setId('c23'); + $comment->setId('c17'); + } + + public function testResetId() { + $comment = new \OC\Comments\Comment(); + $comment->setId('c23'); + $comment->setId(''); + + $this->assertSame('', $comment->getId()); + } + + public function simpleSetterProvider() { + return [ + ['Id', true], + ['ParentId', true], + ['Message', true], + ['Verb', true], + ['Verb', ''], + ['ChildrenCount', true], + ]; + } + + /** + * @dataProvider simpleSetterProvider + * @expectedException \InvalidArgumentException + */ + public function testSimpleSetterInvalidInput($field, $input) { + $comment = new \OC\Comments\Comment(); + $setter = 'set' . $field; + + $comment->$setter($input); + } + + public function roleSetterProvider() { + return [ + ['Actor', true, true], + ['Actor', 'user', true], + ['Actor', true, 'alice'], + ['Actor', ' ', ' '], + ['Object', true, true], + ['Object', 'file', true], + ['Object', true, 'file64'], + ['Object', ' ', ' '], + ]; + } + + /** + * @dataProvider roleSetterProvider + * @expectedException \InvalidArgumentException + */ + public function testSetRoleInvalidInput($role, $type, $id){ + $comment = new \OC\Comments\Comment(); + $setter = 'set' . $role; + $comment->$setter($type, $id); + } + + + +} diff --git a/tests/lib/comments/fakefactory.php b/tests/lib/comments/fakefactory.php new file mode 100644 index 0000000000..837bcb1058 --- /dev/null +++ b/tests/lib/comments/fakefactory.php @@ -0,0 +1,13 @@ +getDatabaseConnection()->getDatabasePlatform()->getTruncateTableSQL('`*PREFIX*comments`'); + \OC::$server->getDatabaseConnection()->prepare($sql)->execute(); + } + + protected function addDatabaseEntry($parentId, $topmostParentId, $creationDT = null, $latestChildDT = null) { + if(is_null($creationDT)) { + $creationDT = new \DateTime(); + } + if(is_null($latestChildDT)) { + $latestChildDT = new \DateTime('yesterday'); + } + + $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $qb + ->insert('comments') + ->values([ + 'parent_id' => $qb->createNamedParameter($parentId), + 'topmost_parent_id' => $qb->createNamedParameter($topmostParentId), + 'children_count' => $qb->createNamedParameter(2), + 'actor_type' => $qb->createNamedParameter('user'), + 'actor_id' => $qb->createNamedParameter('alice'), + 'message' => $qb->createNamedParameter('nice one'), + 'verb' => $qb->createNamedParameter('comment'), + 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'), + 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'), + 'object_type' => $qb->createNamedParameter('file'), + 'object_id' => $qb->createNamedParameter('file64'), + ]) + ->execute(); + + return $qb->getLastInsertId(); + } + + protected function getManager() { + $factory = new \OC\Comments\ManagerFactory(); + return $factory->getManager(); + } + + /** + * @expectedException \OCP\Comments\NotFoundException + */ + public function testGetCommentNotFound() { + $manager = $this->getManager(); + $manager->get('22'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testGetCommentNotFoundInvalidInput() { + $manager = $this->getManager(); + $manager->get('unexisting22'); + } + + public function testGetComment() { + $manager = $this->getManager(); + + $creationDT = new \DateTime(); + $latestChildDT = new \DateTime('yesterday'); + + $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $qb + ->insert('comments') + ->values([ + 'parent_id' => $qb->createNamedParameter('2'), + 'topmost_parent_id' => $qb->createNamedParameter('1'), + 'children_count' => $qb->createNamedParameter(2), + 'actor_type' => $qb->createNamedParameter('user'), + 'actor_id' => $qb->createNamedParameter('alice'), + 'message' => $qb->createNamedParameter('nice one'), + 'verb' => $qb->createNamedParameter('comment'), + 'creation_timestamp' => $qb->createNamedParameter($creationDT, 'datetime'), + 'latest_child_timestamp' => $qb->createNamedParameter($latestChildDT, 'datetime'), + 'object_type' => $qb->createNamedParameter('file'), + 'object_id' => $qb->createNamedParameter('file64'), + ]) + ->execute(); + + $id = strval($qb->getLastInsertId()); + + $comment = $manager->get($id); + $this->assertTrue($comment instanceof \OCP\Comments\IComment); + $this->assertSame($comment->getId(), $id); + $this->assertSame($comment->getParentId(), '2'); + $this->assertSame($comment->getTopmostParentId(), '1'); + $this->assertSame($comment->getChildrenCount(), 2); + $this->assertSame($comment->getActorType(), 'user'); + $this->assertSame($comment->getActorId(), 'alice'); + $this->assertSame($comment->getMessage(), 'nice one'); + $this->assertSame($comment->getVerb(), 'comment'); + $this->assertSame($comment->getObjectType(), 'file'); + $this->assertSame($comment->getObjectId(), 'file64'); + $this->assertEquals($comment->getCreationDateTime(), $creationDT); + $this->assertEquals($comment->getLatestChildDateTime(), $latestChildDT); + } + + /** + * @expectedException \OCP\Comments\NotFoundException + */ + public function testGetTreeNotFound() { + $manager = $this->getManager(); + $manager->getTree('22'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testGetTreeNotFoundInvalidIpnut() { + $manager = $this->getManager(); + $manager->getTree('unexisting22'); + } + + public function testGetTree() { + $headId = $this->addDatabaseEntry(0, 0); + + $this->addDatabaseEntry($headId, $headId, new \DateTime('-3 hours')); + $this->addDatabaseEntry($headId, $headId, new \DateTime('-2 hours')); + $id = $this->addDatabaseEntry($headId, $headId, new \DateTime('-1 hour')); + + $manager = $this->getManager(); + $tree = $manager->getTree($headId); + + // Verifying the root comment + $this->assertTrue(isset($tree['comment'])); + $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment); + $this->assertSame($tree['comment']->getId(), strval($headId)); + $this->assertTrue(isset($tree['replies'])); + $this->assertSame(count($tree['replies']), 3); + + // one level deep + foreach($tree['replies'] as $reply) { + $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment); + $this->assertSame($reply['comment']->getId(), strval($id)); + $this->assertSame(count($reply['replies']), 0); + $id--; + } + } + + public function testGetTreeNoReplies() { + $id = $this->addDatabaseEntry(0, 0); + + $manager = $this->getManager(); + $tree = $manager->getTree($id); + + // Verifying the root comment + $this->assertTrue(isset($tree['comment'])); + $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment); + $this->assertSame($tree['comment']->getId(), strval($id)); + $this->assertTrue(isset($tree['replies'])); + $this->assertSame(count($tree['replies']), 0); + + // one level deep + foreach($tree['replies'] as $reply) { + throw new \Exception('This ain`t happen'); + } + } + + public function testGetTreeWithLimitAndOffset() { + $headId = $this->addDatabaseEntry(0, 0); + + $this->addDatabaseEntry($headId, $headId, new \DateTime('-3 hours')); + $this->addDatabaseEntry($headId, $headId, new \DateTime('-2 hours')); + $this->addDatabaseEntry($headId, $headId, new \DateTime('-1 hour')); + $idToVerify = $this->addDatabaseEntry($headId, $headId, new \DateTime()); + + $manager = $this->getManager(); + + for ($offset = 0; $offset < 3; $offset += 2) { + $tree = $manager->getTree(strval($headId), 2, $offset); + + // Verifying the root comment + $this->assertTrue(isset($tree['comment'])); + $this->assertTrue($tree['comment'] instanceof \OCP\Comments\IComment); + $this->assertSame($tree['comment']->getId(), strval($headId)); + $this->assertTrue(isset($tree['replies'])); + $this->assertSame(count($tree['replies']), 2); + + // one level deep + foreach ($tree['replies'] as $reply) { + $this->assertTrue($reply['comment'] instanceof \OCP\Comments\IComment); + $this->assertSame($reply['comment']->getId(), strval($idToVerify)); + $this->assertSame(count($reply['replies']), 0); + $idToVerify--; + } + } + } + + public function testGetForObject() { + $this->addDatabaseEntry(0, 0); + + $manager = $this->getManager(); + $comments = $manager->getForObject('file', 'file64'); + + $this->assertTrue(is_array($comments)); + $this->assertSame(count($comments), 1); + $this->assertTrue($comments[0] instanceof \OCP\Comments\IComment); + $this->assertSame($comments[0]->getMessage(), 'nice one'); + } + + public function testGetForObjectWithLimitAndOffset() { + $this->addDatabaseEntry(0, 0, new \DateTime('-6 hours')); + $this->addDatabaseEntry(0, 0, new \DateTime('-5 hours')); + $this->addDatabaseEntry(1, 1, new \DateTime('-4 hours')); + $this->addDatabaseEntry(0, 0, new \DateTime('-3 hours')); + $this->addDatabaseEntry(2, 2, new \DateTime('-2 hours')); + $this->addDatabaseEntry(2, 2, new \DateTime('-1 hours')); + $idToVerify = $this->addDatabaseEntry(3, 1, new \DateTime()); + + $manager = $this->getManager(); + $offset = 0; + do { + $comments = $manager->getForObject('file', 'file64', 3, $offset); + + $this->assertTrue(is_array($comments)); + foreach($comments as $comment) { + $this->assertTrue($comment instanceof \OCP\Comments\IComment); + $this->assertSame($comment->getMessage(), 'nice one'); + $this->assertSame($comment->getId(), strval($idToVerify)); + $idToVerify--; + } + $offset += 3; + } while(count($comments) > 0); + } + + public function testGetForObjectWithDateTimeConstraint() { + $this->addDatabaseEntry(0, 0, new \DateTime('-6 hours')); + $this->addDatabaseEntry(0, 0, new \DateTime('-5 hours')); + $id1 = $this->addDatabaseEntry(0, 0, new \DateTime('-3 hours')); + $id2 = $this->addDatabaseEntry(2, 2, new \DateTime('-2 hours')); + + $manager = $this->getManager(); + $comments = $manager->getForObject('file', 'file64', 0, 0, new \DateTime('-4 hours')); + + $this->assertSame(count($comments), 2); + $this->assertSame($comments[0]->getId(), strval($id2)); + $this->assertSame($comments[1]->getId(), strval($id1)); + } + + public function testGetForObjectWithLimitAndOffsetAndDateTimeConstraint() { + $this->addDatabaseEntry(0, 0, new \DateTime('-7 hours')); + $this->addDatabaseEntry(0, 0, new \DateTime('-6 hours')); + $this->addDatabaseEntry(1, 1, new \DateTime('-5 hours')); + $this->addDatabaseEntry(0, 0, new \DateTime('-3 hours')); + $this->addDatabaseEntry(2, 2, new \DateTime('-2 hours')); + $this->addDatabaseEntry(2, 2, new \DateTime('-1 hours')); + $idToVerify = $this->addDatabaseEntry(3, 1, new \DateTime()); + + $manager = $this->getManager(); + $offset = 0; + do { + $comments = $manager->getForObject('file', 'file64', 3, $offset, new \DateTime('-4 hours')); + + $this->assertTrue(is_array($comments)); + foreach($comments as $comment) { + $this->assertTrue($comment instanceof \OCP\Comments\IComment); + $this->assertSame($comment->getMessage(), 'nice one'); + $this->assertSame($comment->getId(), strval($idToVerify)); + $this->assertTrue(intval($comment->getId()) >= 4); + $idToVerify--; + } + $offset += 3; + } while(count($comments) > 0); + } + + public function testGetNumberOfCommentsForObject() { + for($i = 1; $i < 5; $i++) { + $this->addDatabaseEntry(0, 0); + } + + $manager = $this->getManager(); + + $amount = $manager->getNumberOfCommentsForObject('untype', '00'); + $this->assertSame($amount, 0); + + $amount = $manager->getNumberOfCommentsForObject('file', 'file64'); + $this->assertSame($amount, 4); + } + + public function invalidCreateArgsProvider() { + return [ + ['', 'aId-1', 'oType-1', 'oId-1'], + ['aType-1', '', 'oType-1', 'oId-1'], + ['aType-1', 'aId-1', '', 'oId-1'], + ['aType-1', 'aId-1', 'oType-1', ''], + [1, 'aId-1', 'oType-1', 'oId-1'], + ['aType-1', 1, 'oType-1', 'oId-1'], + ['aType-1', 'aId-1', 1, 'oId-1'], + ['aType-1', 'aId-1', 'oType-1', 1], + ]; + } + + /** + * @dataProvider invalidCreateArgsProvider + * @expectedException \InvalidArgumentException + */ + public function testCreateCommentInvalidArguments($aType, $aId, $oType, $oId) { + $manager = $this->getManager(); + $manager->create($aType, $aId, $oType, $oId); + } + + public function testCreateComment() { + $actorType = 'bot'; + $actorId = 'bob'; + $objectType = 'weather'; + $objectId = 'bielefeld'; + + $comment = $this->getManager()->create($actorType, $actorId, $objectType, $objectId); + $this->assertTrue($comment instanceof \OCP\Comments\IComment); + $this->assertSame($comment->getActorType(), $actorType); + $this->assertSame($comment->getActorId(), $actorId); + $this->assertSame($comment->getObjectType(), $objectType); + $this->assertSame($comment->getObjectId(), $objectId); + } + + /** + * @expectedException \OCP\Comments\NotFoundException + */ + public function testDelete() { + $manager = $this->getManager(); + + $done = $manager->delete('404'); + $this->assertFalse($done); + + $done = $manager->delete('%'); + $this->assertFalse($done); + + $done = $manager->delete(''); + $this->assertFalse($done); + + $id = strval($this->addDatabaseEntry(0, 0)); + $comment = $manager->get($id); + $this->assertTrue($comment instanceof \OCP\Comments\IComment); + $done = $manager->delete($id); + $this->assertTrue($done); + $manager->get($id); + } + + public function testSaveNew() { + $manager = $this->getManager(); + $comment = new \OC\Comments\Comment(); + $comment + ->setActor('user', 'alice') + ->setObject('file', 'file64') + ->setMessage('very beautiful, I am impressed!') + ->setVerb('comment'); + + $saveSuccessful = $manager->save($comment); + $this->assertTrue($saveSuccessful); + $this->assertTrue($comment->getId() !== ''); + $this->assertTrue($comment->getId() !== '0'); + $this->assertTrue(!is_null($comment->getCreationDateTime())); + + $loadedComment = $manager->get($comment->getId()); + $this->assertSame($comment->getMessage(), $loadedComment->getMessage()); + $this->assertEquals($comment->getCreationDateTime(), $loadedComment->getCreationDateTime()); + } + + public function testSaveUpdate() { + $manager = $this->getManager(); + $comment = new \OC\Comments\Comment(); + $comment + ->setActor('user', 'alice') + ->setObject('file', 'file64') + ->setMessage('very beautiful, I am impressed!') + ->setVerb('comment'); + + $manager->save($comment); + + $comment->setMessage('very beautiful, I am really so much impressed!'); + $manager->save($comment); + + $loadedComment = $manager->get($comment->getId()); + $this->assertSame($comment->getMessage(), $loadedComment->getMessage()); + } + + /** + * @expectedException \OCP\Comments\NotFoundException + */ + public function testSaveUpdateException() { + $manager = $this->getManager(); + $comment = new \OC\Comments\Comment(); + $comment + ->setActor('user', 'alice') + ->setObject('file', 'file64') + ->setMessage('very beautiful, I am impressed!') + ->setVerb('comment'); + + $manager->save($comment); + + $manager->delete($comment->getId()); + $comment->setMessage('very beautiful, I am really so much impressed!'); + $manager->save($comment); + } + + /** + * @expectedException \UnexpectedValueException + */ + public function testSaveIncomplete() { + $manager = $this->getManager(); + $comment = new \OC\Comments\Comment(); + $comment->setMessage('from no one to nothing'); + $manager->save($comment); + } + + public function testSaveAsChild() { + $id = $this->addDatabaseEntry(0, 0); + + $manager = $this->getManager(); + + for($i = 0; $i < 3; $i++) { + $comment = new \OC\Comments\Comment(); + $comment + ->setActor('user', 'alice') + ->setObject('file', 'file64') + ->setParentId(strval($id)) + ->setMessage('full ack') + ->setVerb('comment') + // setting the creation time avoids using sleep() while making sure to test with different timestamps + ->setCreationDateTime(new \DateTime('+' . $i . ' minutes')); + + $manager->save($comment); + + $this->assertSame($comment->getTopmostParentId(), strval($id)); + $parentComment = $manager->get(strval($id)); + $this->assertSame($parentComment->getChildrenCount(), $i + 1); + $this->assertEquals($parentComment->getLatestChildDateTime(), $comment->getCreationDateTime()); + } + } + + public function invalidActorArgsProvider() { + return + [ + ['', ''], + [1, 'alice'], + ['user', 1], + ]; + } + + /** + * @dataProvider invalidActorArgsProvider + * @expectedException \InvalidArgumentException + */ + public function testDeleteReferencesOfActorInvalidInput($type, $id) { + $manager = $this->getManager(); + $manager->deleteReferencesOfActor($type, $id); + } + + public function testDeleteReferencesOfActor() { + $ids = []; + $ids[] = $this->addDatabaseEntry(0, 0); + $ids[] = $this->addDatabaseEntry(0, 0); + $ids[] = $this->addDatabaseEntry(0, 0); + + $manager = $this->getManager(); + + // just to make sure they are really set, with correct actor data + $comment = $manager->get(strval($ids[1])); + $this->assertSame($comment->getActorType(), 'user'); + $this->assertSame($comment->getActorId(), 'alice'); + + $wasSuccessful = $manager->deleteReferencesOfActor('user', 'alice'); + $this->assertTrue($wasSuccessful); + + foreach($ids as $id) { + $comment = $manager->get(strval($id)); + $this->assertSame($comment->getActorType(), ICommentsManager::DELETED_USER); + $this->assertSame($comment->getActorId(), ICommentsManager::DELETED_USER); + } + + // actor info is gone from DB, but when database interaction is alright, + // we still expect to get true back + $wasSuccessful = $manager->deleteReferencesOfActor('user', 'alice'); + $this->assertTrue($wasSuccessful); + } + + public function testDeleteReferencesOfActorWithUserManagement() { + $user = \OC::$server->getUserManager()->createUser('xenia', '123456'); + $this->assertTrue($user instanceof \OCP\IUser); + + $manager = \OC::$server->getCommentsManager(); + $comment = $manager->create('user', $user->getUID(), 'file', 'file64'); + $comment + ->setMessage('Most important comment I ever left on the Internet.') + ->setVerb('comment'); + $status = $manager->save($comment); + $this->assertTrue($status); + + $commentID = $comment->getId(); + $user->delete(); + + $comment = $manager->get($commentID); + $this->assertSame($comment->getActorType(), \OCP\Comments\ICommentsManager::DELETED_USER); + $this->assertSame($comment->getActorId(), \OCP\Comments\ICommentsManager::DELETED_USER); + } + + public function invalidObjectArgsProvider() { + return + [ + ['', ''], + [1, 'file64'], + ['file', 1], + ]; + } + + /** + * @dataProvider invalidObjectArgsProvider + * @expectedException \InvalidArgumentException + */ + public function testDeleteCommentsAtObjectInvalidInput($type, $id) { + $manager = $this->getManager(); + $manager->deleteCommentsAtObject($type, $id); + } + + public function testDeleteCommentsAtObject() { + $ids = []; + $ids[] = $this->addDatabaseEntry(0, 0); + $ids[] = $this->addDatabaseEntry(0, 0); + $ids[] = $this->addDatabaseEntry(0, 0); + + $manager = $this->getManager(); + + // just to make sure they are really set, with correct actor data + $comment = $manager->get(strval($ids[1])); + $this->assertSame($comment->getObjectType(), 'file'); + $this->assertSame($comment->getObjectId(), 'file64'); + + $wasSuccessful = $manager->deleteCommentsAtObject('file', 'file64'); + $this->assertTrue($wasSuccessful); + + $verified = 0; + foreach($ids as $id) { + try { + $manager->get(strval($id)); + } catch (\OCP\Comments\NotFoundException $e) { + $verified++; + } + } + $this->assertSame($verified, 3); + + // actor info is gone from DB, but when database interaction is alright, + // we still expect to get true back + $wasSuccessful = $manager->deleteCommentsAtObject('file', 'file64'); + $this->assertTrue($wasSuccessful); + } + +} diff --git a/tests/lib/configtests.php b/tests/lib/configtests.php index 0269ae542f..c0251e693c 100644 --- a/tests/lib/configtests.php +++ b/tests/lib/configtests.php @@ -23,7 +23,7 @@ class ConfigTests extends TestCase { protected function setUp() { parent::setUp(); - $this->randomTmpDir = \OC_Helper::tmpFolder(); + $this->randomTmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $this->configFile = $this->randomTmpDir.'testconfig.php'; file_put_contents($this->configFile, self::TESTCONTENT); $this->config = new \OC\Config($this->randomTmpDir, 'testconfig.php'); diff --git a/tests/lib/db/querybuilder/querybuildertest.php b/tests/lib/db/querybuilder/querybuildertest.php index c8e029d9e4..de8f84ac34 100644 --- a/tests/lib/db/querybuilder/querybuildertest.php +++ b/tests/lib/db/querybuilder/querybuildertest.php @@ -1124,11 +1124,12 @@ class QueryBuilderTest extends \Test\TestCase { $this->assertTrue(true); } - $qB->insert('appconfig') + $qB->insert('properties') ->values([ - 'appid' => $qB->expr()->literal('testFirstResult'), - 'configkey' => $qB->expr()->literal('testing' . 50), - 'configvalue' => $qB->expr()->literal(100 - 50), + 'userid' => $qB->expr()->literal('testFirstResult'), + 'propertypath' => $qB->expr()->literal('testing'), + 'propertyname' => $qB->expr()->literal('testing'), + 'propertyvalue' => $qB->expr()->literal('testing'), ]) ->execute(); @@ -1136,7 +1137,18 @@ class QueryBuilderTest extends \Test\TestCase { $this->assertNotNull($actual); $this->assertInternalType('int', $actual); - $this->assertEquals($this->connection->lastInsertId('*PREFIX*appconfig'), $actual); + $this->assertEquals($this->connection->lastInsertId('*PREFIX*properties'), $actual); + + $qB->delete('properties') + ->where($qB->expr()->eq('userid', $qB->expr()->literal('testFirstResult'))) + ->execute(); + + try { + $qB->getLastInsertId(); + $this->fail('getLastInsertId() should throw an exception, when being called after delete()'); + } catch (\BadMethodCallException $e) { + $this->assertTrue(true); + } } public function dataGetTableName() { diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php index 503d25597c..d674ac27fa 100644 --- a/tests/lib/files/cache/cache.php +++ b/tests/lib/files/cache/cache.php @@ -317,7 +317,7 @@ class Cache extends \Test\TestCase { function testSearchByTag() { $userId = $this->getUniqueId('user'); - \OC_User::createUser($userId, $userId); + \OC::$server->getUserManager()->createUser($userId, $userId); $this->loginAsUser($userId); $user = new \OC\User\User($userId, null); @@ -373,7 +373,8 @@ class Cache extends \Test\TestCase { $tagManager->delete('tag2'); $this->logout(); - \OC_User::deleteUser($userId); + $user = \OC::$server->getUserManager()->get($userId); + if ($user !== null) { $user->delete(); } } function testMove() { diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php index 3adb25fa9d..e133d0afc5 100644 --- a/tests/lib/files/cache/homecache.php +++ b/tests/lib/files/cache/homecache.php @@ -69,7 +69,7 @@ class HomeCache extends \Test\TestCase { protected function setUp() { parent::setUp(); - $this->user = new DummyUser('foo', \OC_Helper::tmpFolder()); + $this->user = new DummyUser('foo', \OC::$server->getTempManager()->getTemporaryFolder()); $this->storage = new \OC\Files\Storage\Home(array('user' => $this->user)); $this->cache = $this->storage->getCache(); } diff --git a/tests/lib/files/cache/updaterlegacy.php b/tests/lib/files/cache/updaterlegacy.php index 1946913bba..09688afd46 100644 --- a/tests/lib/files/cache/updaterlegacy.php +++ b/tests/lib/files/cache/updaterlegacy.php @@ -57,7 +57,7 @@ class UpdaterLegacy extends \Test\TestCase { self::$user = $this->getUniqueID(); } - \OC_User::createUser(self::$user, 'password'); + \OC::$server->getUserManager()->createUser(self::$user, 'password'); $this->loginAsUser(self::$user); Filesystem::init(self::$user, '/' . self::$user . '/files'); @@ -72,7 +72,10 @@ class UpdaterLegacy extends \Test\TestCase { if ($this->cache) { $this->cache->clear(); } - $result = \OC_User::deleteUser(self::$user); + + $result = false; + $user = \OC::$server->getUserManager()->get(self::$user); + if ($user !== null) { $result = $user->delete(); } $this->assertTrue($result); $this->logout(); diff --git a/tests/lib/files/etagtest.php b/tests/lib/files/etagtest.php index c214a3d4da..d8e44000f9 100644 --- a/tests/lib/files/etagtest.php +++ b/tests/lib/files/etagtest.php @@ -39,7 +39,7 @@ class EtagTest extends \Test\TestCase { $config = \OC::$server->getConfig(); $this->datadir = $config->getSystemValue('datadirectory'); - $this->tmpDir = \OC_Helper::tmpFolder(); + $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $config->setSystemValue('datadirectory', $this->tmpDir); $this->userBackend = new \Test\Util\User\Dummy(); diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php index c5ebbdd1a2..db1f22f894 100644 --- a/tests/lib/files/filesystem.php +++ b/tests/lib/files/filesystem.php @@ -72,7 +72,7 @@ class Filesystem extends \Test\TestCase { * @return array */ private function getStorageData() { - $dir = \OC_Helper::tmpFolder(); + $dir = \OC::$server->getTempManager()->getTemporaryFolder(); $this->tmpDirs[] = $dir; return array('datadir' => $dir); } @@ -302,7 +302,7 @@ class Filesystem extends \Test\TestCase { \OC\Files\Filesystem::mkdir('/bar'); // \OC\Files\Filesystem::file_put_contents('/bar//foo', 'foo'); - $tmpFile = \OC_Helper::tmpFile(); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile(); file_put_contents($tmpFile, 'foo'); $fh = fopen($tmpFile, 'r'); // \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh); @@ -325,7 +325,7 @@ class Filesystem extends \Test\TestCase { public function testHomeMount() { $userId = $this->getUniqueID('user_'); - \OC_User::createUser($userId, $userId); + \OC::$server->getUserManager()->createUser($userId, $userId); \OC\Files\Filesystem::initMountPoints($userId); @@ -340,7 +340,8 @@ class Filesystem extends \Test\TestCase { $this->assertEquals('home::' . $userId, $homeMount->getId()); } - \OC_User::deleteUser($userId); + $user = \OC::$server->getUserManager()->get($userId); + if ($user !== null) { $user->delete(); } } /** @@ -360,7 +361,7 @@ class Filesystem extends \Test\TestCase { // this will trigger the insert $cache = $localStorage->getCache(); - \OC_User::createUser($userId, $userId); + \OC::$server->getUserManager()->createUser($userId, $userId); \OC\Files\Filesystem::initMountPoints($userId); $homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/'); @@ -368,7 +369,8 @@ class Filesystem extends \Test\TestCase { $this->assertTrue($homeMount->instanceOfStorage('\OC\Files\Storage\Home')); $this->assertEquals('local::' . $datadir . '/' . $userId . '/', $homeMount->getId()); - \OC_User::deleteUser($userId); + $user = \OC::$server->getUserManager()->get($userId); + if ($user !== null) { $user->delete(); } // delete storage entry $cache->clear(); } @@ -388,7 +390,7 @@ class Filesystem extends \Test\TestCase { // no cache path configured $config->setSystemValue('cache_path', ''); - \OC_User::createUser($userId, $userId); + \OC::$server->getUserManager()->createUser($userId, $userId); \OC\Files\Filesystem::initMountPoints($userId); $this->assertEquals( @@ -398,7 +400,8 @@ class Filesystem extends \Test\TestCase { list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath('/' . $userId . '/cache'); $this->assertTrue($storage->instanceOfStorage('\OCP\Files\IHomeStorage')); $this->assertEquals('cache', $internalPath); - \OC_User::deleteUser($userId); + $user = \OC::$server->getUserManager()->get($userId); + if ($user !== null) { $user->delete(); } $config->setSystemValue('cache_path', $oldCachePath); } @@ -413,10 +416,10 @@ class Filesystem extends \Test\TestCase { $config = \OC::$server->getConfig(); $oldCachePath = $config->getSystemValue('cache_path', ''); // set cache path to temp dir - $cachePath = \OC_Helper::tmpFolder() . '/extcache'; + $cachePath = \OC::$server->getTempManager()->getTemporaryFolder() . '/extcache'; $config->setSystemValue('cache_path', $cachePath); - \OC_User::createUser($userId, $userId); + \OC::$server->getUserManager()->createUser($userId, $userId); \OC\Files\Filesystem::initMountPoints($userId); $this->assertEquals( @@ -426,7 +429,8 @@ class Filesystem extends \Test\TestCase { list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath('/' . $userId . '/cache'); $this->assertTrue($storage->instanceOfStorage('\OC\Files\Storage\Local')); $this->assertEquals('', $internalPath); - \OC_User::deleteUser($userId); + $user = \OC::$server->getUserManager()->get($userId); + if ($user !== null) { $user->delete(); } $config->setSystemValue('cache_path', $oldCachePath); } diff --git a/tests/lib/files/node/file.php b/tests/lib/files/node/file.php index d0072949c7..ccc777c499 100644 --- a/tests/lib/files/node/file.php +++ b/tests/lib/files/node/file.php @@ -21,8 +21,16 @@ class File extends \Test\TestCase { $this->user = new \OC\User\User('', new \Test\Util\User\Dummy); } + protected function getMockStorage() { + $storage = $this->getMock('\OCP\Files\Storage'); + $storage->expects($this->any()) + ->method('getId') + ->will($this->returnValue('home::someuser')); + return $storage; + } + protected function getFileInfo($data) { - return new FileInfo('', null, '', $data, null); + return new FileInfo('', $this->getMockStorage(), '', $data, null); } public function testDelete() { diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php index d95e1b5d2b..09bf32561e 100644 --- a/tests/lib/files/node/folder.php +++ b/tests/lib/files/node/folder.php @@ -31,8 +31,16 @@ class Folder extends \Test\TestCase { $this->user = new \OC\User\User('', new \Test\Util\User\Dummy); } + protected function getMockStorage() { + $storage = $this->getMock('\OCP\Files\Storage'); + $storage->expects($this->any()) + ->method('getId') + ->will($this->returnValue('home::someuser')); + return $storage; + } + protected function getFileInfo($data) { - return new FileInfo('', null, '', $data, null); + return new FileInfo('', $this->getMockStorage(), '', $data, null); } public function testDelete() { diff --git a/tests/lib/files/node/node.php b/tests/lib/files/node/node.php index afcf4cbaba..a1693b034f 100644 --- a/tests/lib/files/node/node.php +++ b/tests/lib/files/node/node.php @@ -18,8 +18,16 @@ class Node extends \Test\TestCase { $this->user = new \OC\User\User('', new \Test\Util\User\Dummy); } + protected function getMockStorage() { + $storage = $this->getMock('\OCP\Files\Storage'); + $storage->expects($this->any()) + ->method('getId') + ->will($this->returnValue('home::someuser')); + return $storage; + } + protected function getFileInfo($data) { - return new FileInfo('', null, '', $data, null); + return new FileInfo('', $this->getMockStorage(), '', $data, null); } public function testStat() { diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php index 63332af68d..a63f584414 100644 --- a/tests/lib/files/objectstore/swift.php +++ b/tests/lib/files/objectstore/swift.php @@ -51,8 +51,9 @@ class Swift extends \Test\Files\Storage\Storage { // create users $users = array('test'); foreach($users as $userName) { - \OC_User::deleteUser($userName); - \OC_User::createUser($userName, $userName); + $user = \OC::$server->getUserManager()->get($userName); + if ($user !== null) { $user->delete(); } + \OC::$server->getUserManager()->createUser($userName, $userName); } // main test user @@ -76,7 +77,8 @@ class Swift extends \Test\Files\Storage\Storage { $users = array('test'); foreach($users as $userName) { - \OC_User::deleteUser($userName); + $user = \OC::$server->getUserManager()->get($userName); + if ($user !== null) { $user->delete(); } } parent::tearDown(); } diff --git a/tests/lib/files/storage/commontest.php b/tests/lib/files/storage/commontest.php index bbe6f2a73e..38faa9b0b2 100644 --- a/tests/lib/files/storage/commontest.php +++ b/tests/lib/files/storage/commontest.php @@ -37,7 +37,7 @@ class CommonTest extends Storage { protected function setUp() { parent::setUp(); - $this->tmpDir=\OC_Helper::tmpFolder(); + $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $this->instance=new \OC\Files\Storage\CommonTest(array('datadir'=>$this->tmpDir)); } diff --git a/tests/lib/files/storage/home.php b/tests/lib/files/storage/home.php index a51912ca1b..7e10f09d55 100644 --- a/tests/lib/files/storage/home.php +++ b/tests/lib/files/storage/home.php @@ -70,7 +70,7 @@ class Home extends Storage { protected function setUp() { parent::setUp(); - $this->tmpDir = \OC_Helper::tmpFolder(); + $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $this->userId = $this->getUniqueID('user_'); $this->user = new DummyUser($this->userId, $this->tmpDir); $this->instance = new \OC\Files\Storage\Home(array('user' => $this->user)); diff --git a/tests/lib/files/storage/homestoragequota.php b/tests/lib/files/storage/homestoragequota.php index 49e8f499ef..9a3c6b151f 100644 --- a/tests/lib/files/storage/homestoragequota.php +++ b/tests/lib/files/storage/homestoragequota.php @@ -32,7 +32,7 @@ class HomeStorageQuota extends \Test\TestCase { */ function testHomeStorageWrapperWithoutQuota() { $user1 = $this->getUniqueID(); - \OC_User::createUser($user1, 'test'); + \OC::$server->getUserManager()->createUser($user1, 'test'); \OC::$server->getConfig()->setUserValue($user1, 'files', 'quota', 'none'); \OC_User::setUserId($user1); @@ -44,7 +44,8 @@ class HomeStorageQuota extends \Test\TestCase { // clean up \OC_User::setUserId(''); - \OC_User::deleteUser($user1); + $user = \OC::$server->getUserManager()->get($user1); + if ($user !== null) { $user->delete(); } \OC::$server->getConfig()->deleteAllUserValues($user1); \OC_Util::tearDownFS(); } @@ -54,7 +55,7 @@ class HomeStorageQuota extends \Test\TestCase { */ function testHomeStorageWrapperWithQuota() { $user1 = $this->getUniqueID(); - \OC_User::createUser($user1, 'test'); + \OC::$server->getUserManager()->createUser($user1, 'test'); \OC::$server->getConfig()->setUserValue($user1, 'files', 'quota', '1024'); \OC_User::setUserId($user1); @@ -71,7 +72,8 @@ class HomeStorageQuota extends \Test\TestCase { // clean up \OC_User::setUserId(''); - \OC_User::deleteUser($user1); + $user = \OC::$server->getUserManager()->get($user1); + if ($user !== null) { $user->delete(); } \OC::$server->getConfig()->deleteAllUserValues($user1); \OC_Util::tearDownFS(); } diff --git a/tests/lib/files/storage/local.php b/tests/lib/files/storage/local.php index 36267dc660..2583863b55 100644 --- a/tests/lib/files/storage/local.php +++ b/tests/lib/files/storage/local.php @@ -38,7 +38,7 @@ class Local extends Storage { protected function setUp() { parent::setUp(); - $this->tmpDir = \OC_Helper::tmpFolder(); + $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $this->instance = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir)); } diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index d381b4cdf4..95dd70bfda 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -598,4 +598,17 @@ abstract class Storage extends \Test\TestCase { $this->instance->mkdir('source'); $this->assertTrue($this->instance->isSharable('source')); } + + public function testStatAfterWrite() { + $this->instance->file_put_contents('foo.txt', 'bar'); + $stat = $this->instance->stat('foo.txt'); + $this->assertEquals(3, $stat['size']); + + $fh = $this->instance->fopen('foo.txt', 'w'); + fwrite($fh, 'qwerty'); + fclose($fh); + + $stat = $this->instance->stat('foo.txt'); + $this->assertEquals(6, $stat['size']); + } } diff --git a/tests/lib/files/storage/wrapper/quota.php b/tests/lib/files/storage/wrapper/quota.php index b0a06b0d89..95bc2ff7a1 100644 --- a/tests/lib/files/storage/wrapper/quota.php +++ b/tests/lib/files/storage/wrapper/quota.php @@ -27,7 +27,7 @@ class Quota extends \Test\Files\Storage\Storage { protected function setUp() { parent::setUp(); - $this->tmpDir = \OC_Helper::tmpFolder(); + $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir)); $this->instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => 10000000)); } diff --git a/tests/lib/files/storage/wrapper/wrapper.php b/tests/lib/files/storage/wrapper/wrapper.php index 486cd0495c..a5a678cb9f 100644 --- a/tests/lib/files/storage/wrapper/wrapper.php +++ b/tests/lib/files/storage/wrapper/wrapper.php @@ -17,7 +17,7 @@ class Wrapper extends \Test\Files\Storage\Storage { protected function setUp() { parent::setUp(); - $this->tmpDir = \OC_Helper::tmpFolder(); + $this->tmpDir = \OC::$server->getTempManager()->getTemporaryFolder(); $storage = new \OC\Files\Storage\Local(array('datadir' => $this->tmpDir)); $this->instance = new \OC\Files\Storage\Wrapper\Wrapper(array('storage' => $storage)); } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 1fc4b9ab68..3e88a5306f 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -757,7 +757,7 @@ class View extends \Test\TestCase { * 228 is the max path length in windows */ $folderName = 'abcdefghijklmnopqrstuvwxyz012345678901234567890123456789'; - $tmpdirLength = strlen(\OC_Helper::tmpFolder()); + $tmpdirLength = strlen(\OC::$server->getTempManager()->getTemporaryFolder()); if (\OC_Util::runningOnWindows()) { $this->markTestSkipped('[Windows] '); $depth = ((260 - $tmpdirLength) / 57); diff --git a/tests/lib/group.php b/tests/lib/group.php index 066dddc738..4bb888ed72 100644 --- a/tests/lib/group.php +++ b/tests/lib/group.php @@ -31,7 +31,7 @@ class Test_Group extends \Test\TestCase { public function testSingleBackend() { $userBackend = new \Test\Util\User\Dummy(); - \OC_User::getManager()->registerBackend($userBackend); + \OC::$server->getUserManager()->registerBackend($userBackend); OC_Group::useBackend(new OC_Group_Dummy()); $group1 = $this->getUniqueID(); @@ -113,7 +113,7 @@ class Test_Group extends \Test\TestCase { public function testUsersInGroup() { OC_Group::useBackend(new OC_Group_Dummy()); $userBackend = new \Test\Util\User\Dummy(); - \OC_User::getManager()->registerBackend($userBackend); + \OC::$server->getUserManager()->registerBackend($userBackend); $group1 = $this->getUniqueID(); $group2 = $this->getUniqueID(); @@ -142,7 +142,7 @@ class Test_Group extends \Test\TestCase { public function testMultiBackend() { $userBackend = new \Test\Util\User\Dummy(); - \OC_User::getManager()->registerBackend($userBackend); + \OC::$server->getUserManager()->registerBackend($userBackend); $backend1 = new OC_Group_Dummy(); $backend2 = new OC_Group_Dummy(); OC_Group::useBackend($backend1); diff --git a/tests/lib/helper.php b/tests/lib/helper.php index b7deb3fc13..c262089615 100644 --- a/tests/lib/helper.php +++ b/tests/lib/helper.php @@ -71,37 +71,6 @@ class Test_Helper extends \Test\TestCase { ]; } - function testGetSecureMimeType() { - $dir=OC::$SERVERROOT.'/tests/data'; - - $result = OC_Helper::getSecureMimeType('image/svg+xml'); - $expected = 'text/plain'; - $this->assertEquals($result, $expected); - - $result = OC_Helper::getSecureMimeType('image/png'); - $expected = 'image/png'; - $this->assertEquals($result, $expected); - } - - function testGetFileNameMimeType() { - $this->assertEquals('text/plain', OC_Helper::getFileNameMimeType('foo.txt')); - $this->assertEquals('image/png', OC_Helper::getFileNameMimeType('foo.png')); - $this->assertEquals('image/png', OC_Helper::getFileNameMimeType('foo.bar.png')); - $this->assertEquals('application/octet-stream', OC_Helper::getFileNameMimeType('.png')); - $this->assertEquals('application/octet-stream', OC_Helper::getFileNameMimeType('foo')); - $this->assertEquals('application/octet-stream', OC_Helper::getFileNameMimeType('')); - } - - function testGetStringMimeType() { - if (\OC_Util::runningOnWindows()) { - $this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows'); - } - - $result = OC_Helper::getStringMimeType("/data/data.tar.gz"); - $expected = 'text/plain; charset=us-ascii'; - $this->assertEquals($result, $expected); - } - function testIsSubDirectory() { $result = OC_Helper::isSubDirectory("./data/", "/anotherDirectory/"); $this->assertFalse($result); @@ -252,172 +221,6 @@ class Test_Helper extends \Test\TestCase { // Url generator methods - /** - * @small - * test absolute URL construction - * @dataProvider provideDocRootURLs - */ - function testMakeAbsoluteURLDocRoot($url, $expectedResult) { - \OC::$WEBROOT = ''; - $result = \OC_Helper::makeURLAbsolute($url); - - $this->assertEquals($expectedResult, $result); - } - - /** - * @small - * test absolute URL construction - * @dataProvider provideSubDirURLs - */ - function testMakeAbsoluteURLSubDir($url, $expectedResult) { - \OC::$WEBROOT = '/owncloud'; - $result = \OC_Helper::makeURLAbsolute($url); - - $this->assertEquals($expectedResult, $result); - } - - public function provideDocRootURLs() { - return array( - array('index.php', 'http://localhost/index.php'), - array('/index.php', 'http://localhost/index.php'), - array('/apps/index.php', 'http://localhost/apps/index.php'), - array('apps/index.php', 'http://localhost/apps/index.php'), - ); - } - - public function provideSubDirURLs() { - return array( - array('index.php', 'http://localhost/owncloud/index.php'), - array('/index.php', 'http://localhost/owncloud/index.php'), - array('/apps/index.php', 'http://localhost/owncloud/apps/index.php'), - array('apps/index.php', 'http://localhost/owncloud/apps/index.php'), - ); - } - - /** - * @small - * test linkTo URL construction - * @dataProvider provideDocRootAppUrlParts - */ - public function testLinkToDocRoot($app, $file, $args, $expectedResult) { - \OC::$WEBROOT = ''; - $result = \OC_Helper::linkTo($app, $file, $args); - - $this->assertEquals($expectedResult, $result); - } - - /** - * @small - * test linkTo URL construction in sub directory - * @dataProvider provideSubDirAppUrlParts - */ - public function testLinkToSubDir($app, $file, $args, $expectedResult) { - \OC::$WEBROOT = '/owncloud'; - $result = \OC_Helper::linkTo($app, $file, $args); - - $this->assertEquals($expectedResult, $result); - } - - /** - * @return array - */ - public function provideDocRootAppUrlParts() { - return array( - array('files', 'ajax/list.php', array(), '/index.php/apps/files/ajax/list.php'), - array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'), - array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php?trut=trat&dut=dat'), - ); - } - - /** - * @return array - */ - public function provideSubDirAppUrlParts() { - return array( - array('files', 'ajax/list.php', array(), '/owncloud/index.php/apps/files/ajax/list.php'), - array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'), - array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php?trut=trat&dut=dat'), - ); - } - - /** - * @small - * test linkToAbsolute URL construction - * @dataProvider provideDocRootAppAbsoluteUrlParts - */ - public function testLinkToAbsoluteDocRoot($app, $file, $args, $expectedResult) { - \OC::$WEBROOT = ''; - $result = \OC_Helper::linkToAbsolute($app, $file, $args); - - $this->assertEquals($expectedResult, $result); - } - - /** - * @small - * test linkToAbsolute URL construction in sub directory - * @dataProvider provideSubDirAppAbsoluteUrlParts - */ - public function testLinkToAbsoluteSubDir($app, $file, $args, $expectedResult) { - \OC::$WEBROOT = '/owncloud'; - $result = \OC_Helper::linkToAbsolute($app, $file, $args); - - $this->assertEquals($expectedResult, $result); - } - - /** - * @return array - */ - public function provideDocRootAppAbsoluteUrlParts() { - return array( - array('files', 'ajax/list.php', array(), 'http://localhost/index.php/apps/files/ajax/list.php'), - array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'), - array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php?trut=trat&dut=dat'), - ); - } - - /** - * @return array - */ - public function provideSubDirAppAbsoluteUrlParts() { - return array( - array('files', 'ajax/list.php', array(), 'http://localhost/owncloud/index.php/apps/files/ajax/list.php'), - array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'), - array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php?trut=trat&dut=dat'), - ); - } - - /** - * @small - * test linkToRemoteBase URL construction - */ - public function testLinkToRemoteBase() { - \OC::$WEBROOT = ''; - $result = \OC_Helper::linkToRemoteBase('webdav'); - $this->assertEquals('/remote.php/webdav', $result); - - \OC::$WEBROOT = '/owncloud'; - $result = \OC_Helper::linkToRemoteBase('webdav'); - $this->assertEquals('/owncloud/remote.php/webdav', $result); - } - - /** - * @small - * test linkToRemote URL construction - */ - public function testLinkToRemote() { - \OC::$WEBROOT = ''; - $result = \OC_Helper::linkToRemote('webdav'); - $this->assertEquals('http://localhost/remote.php/webdav/', $result); - $result = \OC_Helper::linkToRemote('webdav', false); - $this->assertEquals('http://localhost/remote.php/webdav', $result); - - \OC::$WEBROOT = '/owncloud'; - $result = \OC_Helper::linkToRemote('webdav'); - $this->assertEquals('http://localhost/owncloud/remote.php/webdav/', $result); - $result = \OC_Helper::linkToRemote('webdav', false); - $this->assertEquals('http://localhost/owncloud/remote.php/webdav', $result); - } - /** * @small * test linkToPublic URL construction @@ -458,7 +261,7 @@ class Test_Helper extends \Test\TestCase { * Tests recursive folder deletion with rmdirr() */ public function testRecursiveFolderDeletion() { - $baseDir = \OC_Helper::tmpFolder() . '/'; + $baseDir = \OC::$server->getTempManager()->getTemporaryFolder() . '/'; mkdir($baseDir . 'a/b/c/d/e', 0777, true); mkdir($baseDir . 'a/b/c1/d/e', 0777, true); mkdir($baseDir . 'a/b/c2/d/e', 0777, true); diff --git a/tests/lib/helperstorage.php b/tests/lib/helperstorage.php index cf022109c2..3109b50954 100644 --- a/tests/lib/helperstorage.php +++ b/tests/lib/helperstorage.php @@ -23,7 +23,7 @@ class Test_Helper_Storage extends \Test\TestCase { parent::setUp(); $this->user = $this->getUniqueID('user_'); - \OC_User::createUser($this->user, $this->user); + \OC::$server->getUserManager()->createUser($this->user, $this->user); $this->storage = \OC\Files\Filesystem::getStorage('/'); \OC\Files\Filesystem::tearDown(); @@ -45,7 +45,8 @@ class Test_Helper_Storage extends \Test\TestCase { \OC\Files\Filesystem::mount($this->storage, array(), '/'); \OC_User::setUserId(''); - \OC_User::deleteUser($this->user); + $user = \OC::$server->getUserManager()->get($this->user); + if ($user !== null) { $user->delete(); } \OC::$server->getConfig()->deleteAllUserValues($this->user); parent::tearDown(); diff --git a/tests/lib/installer.php b/tests/lib/installer.php index c3c2f8a275..cfad4d7f0d 100644 --- a/tests/lib/installer.php +++ b/tests/lib/installer.php @@ -32,7 +32,7 @@ class Test_Installer extends \Test\TestCase { $pathOfTestApp .= '/../data/'; $pathOfTestApp .= 'testapp.zip'; - $tmp = OC_Helper::tmpFile('.zip'); + $tmp = \OC::$server->getTempManager()->getTemporaryFile('.zip'); OC_Helper::copyr($pathOfTestApp, $tmp); $data = array( @@ -51,7 +51,7 @@ class Test_Installer extends \Test\TestCase { $pathOfOldTestApp .= '/../data/'; $pathOfOldTestApp .= 'testapp.zip'; - $oldTmp = OC_Helper::tmpFile('.zip'); + $oldTmp = \OC::$server->getTempManager()->getTemporaryFile('.zip'); OC_Helper::copyr($pathOfOldTestApp, $oldTmp); $oldData = array( @@ -63,7 +63,7 @@ class Test_Installer extends \Test\TestCase { $pathOfNewTestApp .= '/../data/'; $pathOfNewTestApp .= 'testapp2.zip'; - $newTmp = OC_Helper::tmpFile('.zip'); + $newTmp = \OC::$server->getTempManager()->getTemporaryFile('.zip'); OC_Helper::copyr($pathOfNewTestApp, $newTmp); $newData = array( diff --git a/tests/lib/lock/dblockingprovider.php b/tests/lib/lock/dblockingprovider.php index d679b1ea67..2032110f4f 100644 --- a/tests/lib/lock/dblockingprovider.php +++ b/tests/lib/lock/dblockingprovider.php @@ -85,13 +85,7 @@ class DBLockingProvider extends LockingProvider { $this->assertEquals(3, $this->getLockEntryCount()); - $this->instance->cleanEmptyLocks(); - - $this->assertEquals(3, $this->getLockEntryCount()); - - $this->instance->releaseAll(); - - $this->instance->cleanEmptyLocks(); + $this->instance->cleanExpiredLocks(); $this->assertEquals(2, $this->getLockEntryCount()); } diff --git a/tests/lib/security/certificatemanager.php b/tests/lib/security/certificatemanager.php index 43b2f1cf98..f2e29cab18 100644 --- a/tests/lib/security/certificatemanager.php +++ b/tests/lib/security/certificatemanager.php @@ -24,7 +24,7 @@ class CertificateManagerTest extends \Test\TestCase { parent::setUp(); $this->username = $this->getUniqueID('', 20); - OC_User::createUser($this->username, $this->getUniqueID('', 20)); + \OC::$server->getUserManager()->createUser($this->username, $this->getUniqueID('', 20)); \OC_Util::tearDownFS(); \OC_User::setUserId(''); @@ -39,7 +39,8 @@ class CertificateManagerTest extends \Test\TestCase { } protected function tearDown() { - \OC_User::deleteUser($this->username); + $user = \OC::$server->getUserManager()->get($this->username); + if ($user !== null) { $user->delete(); } parent::tearDown(); } diff --git a/tests/lib/security/securerandom.php b/tests/lib/security/securerandom.php index d9bbd0e71e..af43764080 100644 --- a/tests/lib/security/securerandom.php +++ b/tests/lib/security/securerandom.php @@ -57,11 +57,10 @@ class SecureRandomTest extends \Test\TestCase { } /** - * @expectedException \Exception - * @expectedExceptionMessage Generator is not initialized + * @dataProvider stringGenerationProvider */ - function testUninitializedGenerate() { - $this->rng->generate(30); + function testUninitializedGenerate($length, $expectedLength) { + $this->assertEquals($expectedLength, strlen($this->rng->generate($length))); } /** diff --git a/tests/lib/security/stringutils.php b/tests/lib/security/stringutils.php deleted file mode 100644 index 060315debb..0000000000 --- a/tests/lib/security/stringutils.php +++ /dev/null @@ -1,38 +0,0 @@ - - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -use \OC\Security\StringUtils; - -class StringUtilsTest extends \Test\TestCase { - - public function dataProvider() - { - return array( - array('Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.', 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.'), - array('', ''), - array('我看这本书。 我看這本書', '我看这本书。 我看這本書'), - array('GpKY9fSnWNJbES99zVGvA', 'GpKY9fSnWNJbES99zVGvA') - ); - } - - /** - * @dataProvider dataProvider - */ - function testWrongEquals($string) { - $this->assertFalse(StringUtils::equals($string, 'A Completely Wrong String')); - $this->assertFalse(StringUtils::equals($string, null)); - } - - /** - * @dataProvider dataProvider - */ - function testTrueEquals($string, $expected) { - $this->assertTrue(StringUtils::equals($string, $expected)); - } - -} diff --git a/tests/lib/server.php b/tests/lib/server.php index b72bef8203..e2670061e8 100644 --- a/tests/lib/server.php +++ b/tests/lib/server.php @@ -38,7 +38,8 @@ class Server extends \Test\TestCase { public function setUp() { parent::setUp(); - $this->server = new \OC\Server(''); + $config = new \OC\Config(\OC::$configDir); + $this->server = new \OC\Server('', $config); } public function dataTestQuery() { @@ -61,6 +62,7 @@ class Server extends \Test\TestCase { ['CapabilitiesManager', '\OC\CapabilitiesManager'], ['ContactsManager', '\OC\ContactsManager'], ['ContactsManager', '\OCP\Contacts\IManager'], + ['CommentsManager', '\OCP\Comments\ICommentsManager'], ['Crypto', '\OC\Security\Crypto'], ['Crypto', '\OCP\Security\ICrypto'], ['CryptoWrapper', '\OC\Session\CryptoWrapper'], @@ -173,4 +175,16 @@ class Server extends \Test\TestCase { $this->assertInstanceOf('\OC_EventSource', $this->server->createEventSource(), 'service returned by "createEventSource" did not return the right class'); $this->assertInstanceOf('\OCP\IEventSource', $this->server->createEventSource(), 'service returned by "createEventSource" did not return the right class'); } + + public function testOverwriteDefaultCommentsManager() { + $config = $this->server->getConfig(); + $defaultManagerFactory = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory'); + + $config->setSystemValue('comments.managerFactory', '\Test\Comments\FakeFactory'); + + $manager = $this->server->getCommentsManager(); + $this->assertInstanceOf('\OCP\Comments\ICommentsManager', $manager); + + $config->setSystemValue('comments.managerFactory', $defaultManagerFactory); + } } diff --git a/tests/lib/setup.php b/tests/lib/setup.php index 72c8452005..bc78c14008 100644 --- a/tests/lib/setup.php +++ b/tests/lib/setup.php @@ -130,17 +130,4 @@ class Test_OC_Setup extends \Test\TestCase { ->will($this->returnValue('NotAnArray')); $this->setupClass->getSupportedDatabases(); } - - /** - * This is actual more an integration test whether the version parameter in the .htaccess - * was updated as well when the version has been incremented. - * If it hasn't this test will fail. - */ - public function testHtaccessIsCurrent() { - $result = self::invokePrivate( - $this->setupClass, - 'isCurrentHtaccess' - ); - $this->assertTrue($result); - } } diff --git a/tests/lib/share/MailNotificationsTest.php b/tests/lib/share/MailNotificationsTest.php index 8684886e79..66bec8653f 100644 --- a/tests/lib/share/MailNotificationsTest.php +++ b/tests/lib/share/MailNotificationsTest.php @@ -20,7 +20,6 @@ */ use OC\Share\MailNotifications; -use OCP\IConfig; use OCP\IL10N; use OCP\IUser; use OCP\Mail\IMailer; @@ -234,6 +233,9 @@ class MailNotificationsTest extends \Test\TestCase { } + /** + * @param string $subject + */ protected function setupMailerMock($subject, $to, $exceptionOnSend = true) { $message = $this->getMockBuilder('\OC\Mail\Message') ->disableOriginalConstructor()->getMock(); diff --git a/tests/lib/share/helper.php b/tests/lib/share/helper.php index e37a3db8bf..eaa29c8cb9 100644 --- a/tests/lib/share/helper.php +++ b/tests/lib/share/helper.php @@ -19,6 +19,10 @@ * License along with this library. If not, see . */ +/** + * @group DB + * Class Test_Share_Helper + */ class Test_Share_Helper extends \Test\TestCase { public function expireDateProvider() { @@ -121,4 +125,37 @@ class Test_Share_Helper extends \Test\TestCase { public function testSplitUserRemoteError($id) { \OC\Share\Helper::splitUserRemote($id); } + + /** + * @dataProvider dataTestCompareServerAddresses + * + * @param string $server1 + * @param string $server2 + * @param bool $expected + */ + public function testIsSameUserOnSameServer($user1, $server1, $user2, $server2, $expected) { + $this->assertSame($expected, + \OC\Share\Helper::isSameUserOnSameServer($user1, $server1, $user2, $server2) + ); + } + + public function dataTestCompareServerAddresses() { + return [ + ['user1', 'http://server1', 'user1', 'http://server1', true], + ['user1', 'https://server1', 'user1', 'http://server1', true], + ['user1', 'http://serVer1', 'user1', 'http://server1', true], + ['user1', 'http://server1/', 'user1', 'http://server1', true], + ['user1', 'server1', 'user1', 'http://server1', true], + ['user1', 'http://server1', 'user1', 'http://server2', false], + ['user1', 'https://server1', 'user1', 'http://server2', false], + ['user1', 'http://serVer1', 'user1', 'http://serer2', false], + ['user1', 'http://server1/', 'user1', 'http://server2', false], + ['user1', 'server1', 'user1', 'http://server2', false], + ['user1', 'http://server1', 'user2', 'http://server1', false], + ['user1', 'https://server1', 'user2', 'http://server1', false], + ['user1', 'http://serVer1', 'user2', 'http://server1', false], + ['user1', 'http://server1/', 'user2', 'http://server1', false], + ['user1', 'server1', 'user2', 'http://server1', false], + ]; + } } diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php index fa19577cb7..5162a03f36 100644 --- a/tests/lib/share/share.php +++ b/tests/lib/share/share.php @@ -54,13 +54,13 @@ class Test_Share extends \Test\TestCase { $this->user5 = $this->getUniqueID('user5_'); $this->user6 = $this->getUniqueID('user6_'); $this->groupAndUser = $this->getUniqueID('groupAndUser_'); - OC_User::createUser($this->user1, 'pass'); - OC_User::createUser($this->user2, 'pass'); - OC_User::createUser($this->user3, 'pass'); - OC_User::createUser($this->user4, 'pass'); - OC_User::createUser($this->user5, 'pass'); - OC_User::createUser($this->user6, 'pass'); // no group - OC_User::createUser($this->groupAndUser, 'pass'); + \OC::$server->getUserManager()->createUser($this->user1, 'pass'); + \OC::$server->getUserManager()->createUser($this->user2, 'pass'); + \OC::$server->getUserManager()->createUser($this->user3, 'pass'); + \OC::$server->getUserManager()->createUser($this->user4, 'pass'); + \OC::$server->getUserManager()->createUser($this->user5, 'pass'); + \OC::$server->getUserManager()->createUser($this->user6, 'pass'); // no group + \OC::$server->getUserManager()->createUser($this->groupAndUser, 'pass'); OC_User::setUserId($this->user1); OC_Group::clearBackends(); OC_Group::useBackend(new OC_Group_Dummy); @@ -94,13 +94,20 @@ class Test_Share extends \Test\TestCase { $query->execute(array('test')); \OC::$server->getAppConfig()->setValue('core', 'shareapi_allow_resharing', $this->resharing); - OC_User::deleteUser($this->user1); - OC_User::deleteUser($this->user2); - OC_User::deleteUser($this->user3); - OC_User::deleteUser($this->user4); - OC_User::deleteUser($this->user5); - OC_User::deleteUser($this->user6); - OC_User::deleteUser($this->groupAndUser); + $user = \OC::$server->getUserManager()->get($this->user1); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get($this->user2); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get($this->user3); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get($this->user4); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get($this->user5); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get($this->user6); + if ($user !== null) { $user->delete(); } + $user = \OC::$server->getUserManager()->get($this->groupAndUser); + if ($user !== null) { $user->delete(); } OC_Group::deleteGroup($this->group1); OC_Group::deleteGroup($this->group2); @@ -375,7 +382,8 @@ class Test_Share extends \Test\TestCase { // Remove user OC_User::setUserId($this->user1); - OC_User::deleteUser($this->user1); + $user = \OC::$server->getUserManager()->get($this->user1); + if ($user !== null) { $user->delete(); } OC_User::setUserId($this->user2); $this->assertEquals(array('test1.txt'), OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET)); } diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php index 9b09753528..7175683a60 100644 --- a/tests/lib/streamwrappers.php +++ b/tests/lib/streamwrappers.php @@ -55,7 +55,7 @@ class Test_StreamWrappers extends \Test\TestCase { public function testCloseStream() { //ensure all basic stream stuff works $sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt'; - $tmpFile = OC_Helper::TmpFile('.txt'); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile('.txt'); $file = 'close://' . $tmpFile; $this->assertTrue(file_exists($file)); file_put_contents($file, file_get_contents($sourceFile)); @@ -65,7 +65,7 @@ class Test_StreamWrappers extends \Test\TestCase { $this->assertFalse(file_exists($file)); //test callback - $tmpFile = OC_Helper::TmpFile('.txt'); + $tmpFile = \OC::$server->getTempManager()->getTemporaryFile('.txt'); $file = 'close://' . $tmpFile; $actual = false; $callback = function($path) use (&$actual) { $actual = $path; }; diff --git a/tests/lib/tags.php b/tests/lib/tags.php index a8f59ff16e..537c898da1 100644 --- a/tests/lib/tags.php +++ b/tests/lib/tags.php @@ -44,7 +44,7 @@ class Test_Tags extends \Test\TestCase { OC_User::clearBackends(); OC_User::useBackend('dummy'); $userId = $this->getUniqueID('user_'); - OC_User::createUser($userId, 'pass'); + \OC::$server->getUserManager()->createUser($userId, 'pass'); OC_User::setUserId($userId); $this->user = new OC\User\User($userId, null); $this->userSession = $this->getMock('\OCP\IUserSession'); @@ -290,7 +290,7 @@ class Test_Tags extends \Test\TestCase { $tagger->tagAs(1, $testTag); $otherUserId = $this->getUniqueID('user2_'); - OC_User::createUser($otherUserId, 'pass'); + \OC::$server->getUserManager()->createUser($otherUserId, 'pass'); OC_User::setUserId($otherUserId); $otherUserSession = $this->getMock('\OCP\IUserSession'); $otherUserSession diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php index 5d88fa08a6..93b354863a 100644 --- a/tests/lib/testcase.php +++ b/tests/lib/testcase.php @@ -33,7 +33,8 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { private $commandBus; /** @var IDBConnection */ - static private $realDatabase; + static protected $realDatabase = null; + static private $wasDatabaseAllowed = false; protected function getTestTraits() { $traits = []; @@ -52,7 +53,9 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { protected function setUp() { // detect database access + self::$wasDatabaseAllowed = true; if (!$this->IsDatabaseAccessAllowed()) { + self::$wasDatabaseAllowed = false; if (is_null(self::$realDatabase)) { self::$realDatabase = \OC::$server->getDatabaseConnection(); } @@ -92,6 +95,12 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { throw $hookExceptions[0]; } + // fail hard if xml errors have not been cleaned up + $errors = libxml_get_errors(); + libxml_clear_errors(); + $this->assertEquals([], $errors); + + // tearDown the traits $traits = $this->getTestTraits(); foreach ($traits as $trait) { $methodName = 'tearDown' . basename(str_replace('\\', '/', $trait)); @@ -149,12 +158,21 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { } public static function tearDownAfterClass() { + if (!self::$wasDatabaseAllowed && self::$realDatabase !== null) { + // in case an error is thrown in a test, PHPUnit jumps straight to tearDownAfterClass, + // so we need the database again + \OC::$server->registerService('DatabaseConnection', function () { + return self::$realDatabase; + }); + } $dataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest'); - $queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + if (self::$wasDatabaseAllowed && \OC::$server->getDatabaseConnection()) { + $queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); - self::tearDownAfterClassCleanShares($queryBuilder); - self::tearDownAfterClassCleanStorages($queryBuilder); - self::tearDownAfterClassCleanFileCache($queryBuilder); + self::tearDownAfterClassCleanShares($queryBuilder); + self::tearDownAfterClassCleanStorages($queryBuilder); + self::tearDownAfterClassCleanFileCache($queryBuilder); + } self::tearDownAfterClassCleanStrayDataFiles($dataDir); self::tearDownAfterClassCleanStrayHooks(); self::tearDownAfterClassCleanStrayLocks(); diff --git a/tests/lib/updater.php b/tests/lib/updater.php index 14ae3db327..313ffb6573 100644 --- a/tests/lib/updater.php +++ b/tests/lib/updater.php @@ -66,7 +66,7 @@ class UpdaterTest extends \Test\TestCase { * @return string */ private function buildUpdateUrl($baseUrl) { - return $baseUrl . '?version='.implode('x', \OC_Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'x'.\OC_Util::getEditionString().'x'; + return $baseUrl . '?version='.implode('x', \OCP\Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'x'.\OC_Util::getEditionString().'x'; } /** diff --git a/tests/lib/user.php b/tests/lib/user.php index bc1ba063c8..c4c74cbc25 100644 --- a/tests/lib/user.php +++ b/tests/lib/user.php @@ -26,7 +26,7 @@ class User extends TestCase { parent::setUp(); $this->backend = $this->getMock('\Test\Util\User\Dummy'); - $manager = \OC_User::getManager(); + $manager = \OC::$server->getUserManager(); $manager->registerBackend($this->backend); } @@ -51,30 +51,5 @@ class User extends TestCase { $uid = \OC_User::checkPassword('foo', 'bar'); $this->assertEquals($uid, 'foo'); } - - public function testDeleteUser() { - $fail = \OC_User::deleteUser('victim'); - $this->assertFalse($fail); - - $success = \OC_User::createUser('victim', 'password'); - - $success = \OC_User::deleteUser('victim'); - $this->assertTrue($success); - } - - public function testCreateUser(){ - $this->backend->expects($this->any()) - ->method('implementsActions') - ->will($this->returnCallback(function ($actions) { - if ($actions === \OC_USER_BACKEND_CREATE_USER) { - return true; - } else { - return false; - } - })); - - $user = \OC_User::createUser('newuser', 'newpassword'); - $this->assertEquals('newuser', $user->getUid()); - } } diff --git a/tests/lib/util.php b/tests/lib/util.php index fa559c17c8..cb5d28b48a 100644 --- a/tests/lib/util.php +++ b/tests/lib/util.php @@ -8,7 +8,7 @@ */ class Test_Util extends \Test\TestCase { public function testGetVersion() { - $version = \OC_Util::getVersion(); + $version = \OCP\Util::getVersion(); $this->assertTrue(is_array($version)); foreach ($version as $num) { $this->assertTrue(is_int($num)); diff --git a/tests/lib/utilcheckserver.php b/tests/lib/utilcheckserver.php index a5ec529ff8..94e7fd2f77 100644 --- a/tests/lib/utilcheckserver.php +++ b/tests/lib/utilcheckserver.php @@ -37,7 +37,7 @@ class Test_Util_CheckServer extends \Test\TestCase { protected function setUp() { parent::setUp(); - $this->datadir = \OC_Helper::tmpFolder(); + $this->datadir = \OC::$server->getTempManager()->getTemporaryFolder(); file_put_contents($this->datadir . '/.ocdata', ''); \OC::$server->getSession()->set('checkServer_succeeded', false); @@ -123,7 +123,7 @@ class Test_Util_CheckServer extends \Test\TestCase { $result = \OC_Util::checkServer($this->getConfig(array( 'installed' => true, - 'version' => implode('.', OC_Util::getVersion()) + 'version' => implode('.', \OCP\Util::getVersion()) ))); $this->assertCount(1, $result); } @@ -134,7 +134,7 @@ class Test_Util_CheckServer extends \Test\TestCase { public function testDataDirWritable() { $result = \OC_Util::checkServer($this->getConfig(array( 'installed' => true, - 'version' => implode('.', OC_Util::getVersion()) + 'version' => implode('.', \OCP\Util::getVersion()) ))); $this->assertEmpty($result); } @@ -150,7 +150,7 @@ class Test_Util_CheckServer extends \Test\TestCase { chmod($this->datadir, 0300); $result = \OC_Util::checkServer($this->getConfig(array( 'installed' => true, - 'version' => implode('.', OC_Util::getVersion()) + 'version' => implode('.', \OCP\Util::getVersion()) ))); $this->assertCount(1, $result); } @@ -162,7 +162,7 @@ class Test_Util_CheckServer extends \Test\TestCase { chmod($this->datadir, 0300); $result = \OC_Util::checkServer($this->getConfig(array( 'installed' => false, - 'version' => implode('.', OC_Util::getVersion()) + 'version' => implode('.', \OCP\Util::getVersion()) ))); chmod($this->datadir, 0700); //needed for cleanup $this->assertEmpty($result); diff --git a/tests/phpunit-autotest-external.xml b/tests/phpunit-autotest-external.xml index b9402bfa57..31d2e395a0 100644 --- a/tests/phpunit-autotest-external.xml +++ b/tests/phpunit-autotest-external.xml @@ -1,6 +1,5 @@
      -<?php p($theme->getName()); ?> +<?php p($theme->getName()); ?>
     
      -<?php p($theme->getName()); ?> +<?php p($theme->getName()); ?>
     
      - <?php p($theme->getName()); ?> + <?php p($theme->getName()); ?>