diff options
62 files changed, 457 insertions, 245 deletions
diff --git a/apps/comments/js/commentstabview.js b/apps/comments/js/commentstabview.js index 9475dc53fc0..f71567f04d1 100644 --- a/apps/comments/js/commentstabview.js +++ b/apps/comments/js/commentstabview.js @@ -337,10 +337,10 @@ $comment.data('commentEl').remove(); $comment.remove(); }, - error: function(msg) { + error: function() { $loading.addClass('hidden'); $comment.removeClass('disabled'); - OC.Notification.showTemporary(msg); + OC.Notification.showTemporary(t('comments', 'Error occurred while retrieving comment with id {id}', {id: commentId})); } }); @@ -388,12 +388,12 @@ .html(self._formatMessage(model.get('message'))); $row.remove(); }, - error: function(msg) { + error: function() { $submit.removeClass('hidden'); $loading.addClass('hidden'); $textArea.prop('disabled', false); - OC.Notification.showTemporary(msg); + OC.Notification.showTemporary(t('comments', 'Error occurred while updating comment with id {id}', {id: commentId})); } }); } else { @@ -413,12 +413,12 @@ $loading.addClass('hidden'); $textArea.val('').prop('disabled', false); }, - error: function(msg) { + error: function() { $submit.removeClass('hidden'); $loading.addClass('hidden'); $textArea.prop('disabled', false); - OC.Notification.showTemporary(msg); + OC.Notification.showTemporary(t('comments', 'Error occurred while posting comment')); } }); } diff --git a/apps/comments/l10n/bg_BG.js b/apps/comments/l10n/bg_BG.js index c5fbba69f7b..ca60bb48bf6 100644 --- a/apps/comments/l10n/bg_BG.js +++ b/apps/comments/l10n/bg_BG.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Type in a new comment..." : "Напиши нов коментар...", "Delete comment" : "Изтрий коментар", + "Post" : "Публикация", "Cancel" : "Отказ", "Edit comment" : "Редактирай коментра", "[Deleted user]" : "[Изтрит потребител]", diff --git a/apps/comments/l10n/bg_BG.json b/apps/comments/l10n/bg_BG.json index 64f516861ca..2b79857f6bb 100644 --- a/apps/comments/l10n/bg_BG.json +++ b/apps/comments/l10n/bg_BG.json @@ -1,6 +1,7 @@ { "translations": { "Type in a new comment..." : "Напиши нов коментар...", "Delete comment" : "Изтрий коментар", + "Post" : "Публикация", "Cancel" : "Отказ", "Edit comment" : "Редактирай коментра", "[Deleted user]" : "[Изтрит потребител]", diff --git a/apps/comments/l10n/cs_CZ.js b/apps/comments/l10n/cs_CZ.js index d41b0f99f42..0653209616c 100644 --- a/apps/comments/l10n/cs_CZ.js +++ b/apps/comments/l10n/cs_CZ.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Více komentářů...", "Save" : "Uložit", "Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}", + "Error occurred while retrieving comment with id {id}" : "Došlo k chybě při načítání komentáře s id {id}", + "Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}", + "Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře", "{count} unread comments" : "{count} nepřečtených komentářů", "Comment" : "Komentář", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentáře</strong> pro soubory <em>(vždy uvedeny v proudu)</em>", diff --git a/apps/comments/l10n/cs_CZ.json b/apps/comments/l10n/cs_CZ.json index c695e50c646..efdd227bfb7 100644 --- a/apps/comments/l10n/cs_CZ.json +++ b/apps/comments/l10n/cs_CZ.json @@ -10,6 +10,9 @@ "More comments..." : "Více komentářů...", "Save" : "Uložit", "Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}", + "Error occurred while retrieving comment with id {id}" : "Došlo k chybě při načítání komentáře s id {id}", + "Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}", + "Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře", "{count} unread comments" : "{count} nepřečtených komentářů", "Comment" : "Komentář", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentáře</strong> pro soubory <em>(vždy uvedeny v proudu)</em>", diff --git a/apps/comments/l10n/de.js b/apps/comments/l10n/de.js index ebf473c6b9c..b46dcb20905 100644 --- a/apps/comments/l10n/de.js +++ b/apps/comments/l10n/de.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Weitere Kommentare...", "Save" : "Speichern", "Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}", + "Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten", + "Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten", + "Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten", "{count} unread comments" : "{count} ungelesene Kommentare", "Comment" : "Kommentar", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>", diff --git a/apps/comments/l10n/de.json b/apps/comments/l10n/de.json index 0e4bc1b53bd..ff7d59cf5c5 100644 --- a/apps/comments/l10n/de.json +++ b/apps/comments/l10n/de.json @@ -10,6 +10,9 @@ "More comments..." : "Weitere Kommentare...", "Save" : "Speichern", "Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}", + "Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten", + "Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten", + "Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten", "{count} unread comments" : "{count} ungelesene Kommentare", "Comment" : "Kommentar", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>", diff --git a/apps/comments/l10n/de_DE.js b/apps/comments/l10n/de_DE.js index 74e129e0a29..7330b6ab068 100644 --- a/apps/comments/l10n/de_DE.js +++ b/apps/comments/l10n/de_DE.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Weitere Kommentare...", "Save" : "Speichern", "Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt", + "Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten", + "Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten", + "Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten", "{count} unread comments" : "[count] ungelesene Kommentare", "Comment" : "Kommentar", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>", diff --git a/apps/comments/l10n/de_DE.json b/apps/comments/l10n/de_DE.json index 6c18cf15fc1..611521dc907 100644 --- a/apps/comments/l10n/de_DE.json +++ b/apps/comments/l10n/de_DE.json @@ -10,6 +10,9 @@ "More comments..." : "Weitere Kommentare...", "Save" : "Speichern", "Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt", + "Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten", + "Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten", + "Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten", "{count} unread comments" : "[count] ungelesene Kommentare", "Comment" : "Kommentar", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>", diff --git a/apps/comments/l10n/fi_FI.js b/apps/comments/l10n/fi_FI.js index 7b4de946763..b541b9987fe 100644 --- a/apps/comments/l10n/fi_FI.js +++ b/apps/comments/l10n/fi_FI.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Lisää kommentteja...", "Save" : "Tallenna", "Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}", + "Error occurred while retrieving comment with id {id}" : "Virhe noutaessa kommenttia tunnisteella {id}", + "Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}", + "Error occurred while posting comment" : "Virhe kommenttia lähettäessä", "{count} unread comments" : "{count} lukematonta kommenttia", "Comment" : "Kommentti", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentit</strong> tiedostoille <em>(aina listattu luettelossa)</em>", diff --git a/apps/comments/l10n/fi_FI.json b/apps/comments/l10n/fi_FI.json index 5e9bcc74402..b5be601d905 100644 --- a/apps/comments/l10n/fi_FI.json +++ b/apps/comments/l10n/fi_FI.json @@ -10,6 +10,9 @@ "More comments..." : "Lisää kommentteja...", "Save" : "Tallenna", "Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}", + "Error occurred while retrieving comment with id {id}" : "Virhe noutaessa kommenttia tunnisteella {id}", + "Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}", + "Error occurred while posting comment" : "Virhe kommenttia lähettäessä", "{count} unread comments" : "{count} lukematonta kommenttia", "Comment" : "Kommentti", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentit</strong> tiedostoille <em>(aina listattu luettelossa)</em>", diff --git a/apps/comments/l10n/he.js b/apps/comments/l10n/he.js index 02168b4f8ec..e7b2454b1c4 100644 --- a/apps/comments/l10n/he.js +++ b/apps/comments/l10n/he.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "תגובות נוספות...", "Save" : "שמירה", "Allowed characters {count} of {max}" : "תווים מותרים {count} מתוך {max}", + "Error occurred while retrieving comment with id {id}" : "שגיאה אירעה כאשר אוחזרה תגובה עם מספר זיהוי {id}", + "Error occurred while updating comment with id {id}" : "שגיאה אירעה כאשר עודכנה תגובה עם מספר זיהוי {id}", + "Error occurred while posting comment" : "אירעה שגיאה בזמן פרסום תגובה", "{count} unread comments" : "{count} תגובות שלא נקראו", "Comment" : "תגובה", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>תגובות</strong> עבור קבצים <em>(תמיד נרשמים בהזרמת מדיה)</em>", diff --git a/apps/comments/l10n/he.json b/apps/comments/l10n/he.json index 66ac46ce2d6..075e86f9672 100644 --- a/apps/comments/l10n/he.json +++ b/apps/comments/l10n/he.json @@ -10,6 +10,9 @@ "More comments..." : "תגובות נוספות...", "Save" : "שמירה", "Allowed characters {count} of {max}" : "תווים מותרים {count} מתוך {max}", + "Error occurred while retrieving comment with id {id}" : "שגיאה אירעה כאשר אוחזרה תגובה עם מספר זיהוי {id}", + "Error occurred while updating comment with id {id}" : "שגיאה אירעה כאשר עודכנה תגובה עם מספר זיהוי {id}", + "Error occurred while posting comment" : "אירעה שגיאה בזמן פרסום תגובה", "{count} unread comments" : "{count} תגובות שלא נקראו", "Comment" : "תגובה", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>תגובות</strong> עבור קבצים <em>(תמיד נרשמים בהזרמת מדיה)</em>", diff --git a/apps/comments/l10n/it.js b/apps/comments/l10n/it.js index 27844003c03..ce98270c06d 100644 --- a/apps/comments/l10n/it.js +++ b/apps/comments/l10n/it.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Altri commenti...", "Save" : "Salva", "Allowed characters {count} of {max}" : "Caratteri consentiti {count} di {max}", + "Error occurred while retrieving comment with id {id}" : "Si è verificato un errore durante il tentativo di recupero del commento con id {id}", + "Error occurred while updating comment with id {id}" : "Si è verificato un errore durante il tentativo di aggiornamento del commento con id {id}", + "Error occurred while posting comment" : "Si è verificato un errore durante la pubblicazione del commento.", "{count} unread comments" : "{count} commenti non letti", "Comment" : "Commento", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Commenti</strong> sui file <em>(elencati sempre nel flusso)</em>", diff --git a/apps/comments/l10n/it.json b/apps/comments/l10n/it.json index 73605cd6f03..50b8aa17698 100644 --- a/apps/comments/l10n/it.json +++ b/apps/comments/l10n/it.json @@ -10,6 +10,9 @@ "More comments..." : "Altri commenti...", "Save" : "Salva", "Allowed characters {count} of {max}" : "Caratteri consentiti {count} di {max}", + "Error occurred while retrieving comment with id {id}" : "Si è verificato un errore durante il tentativo di recupero del commento con id {id}", + "Error occurred while updating comment with id {id}" : "Si è verificato un errore durante il tentativo di aggiornamento del commento con id {id}", + "Error occurred while posting comment" : "Si è verificato un errore durante la pubblicazione del commento.", "{count} unread comments" : "{count} commenti non letti", "Comment" : "Commento", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Commenti</strong> sui file <em>(elencati sempre nel flusso)</em>", diff --git a/apps/comments/l10n/pl.js b/apps/comments/l10n/pl.js index d4a492e1da2..b8df4dea02b 100644 --- a/apps/comments/l10n/pl.js +++ b/apps/comments/l10n/pl.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Więcej komentarzy...", "Save" : "Zapisz", "Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}", + "Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd", "{count} unread comments" : "{count} nieprzeczytanych komentarzy", "Comment" : "Komentarz", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>", diff --git a/apps/comments/l10n/pl.json b/apps/comments/l10n/pl.json index 78e9f0ff210..47e4b101f98 100644 --- a/apps/comments/l10n/pl.json +++ b/apps/comments/l10n/pl.json @@ -10,6 +10,9 @@ "More comments..." : "Więcej komentarzy...", "Save" : "Zapisz", "Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}", + "Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.", + "Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd", "{count} unread comments" : "{count} nieprzeczytanych komentarzy", "Comment" : "Komentarz", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>", diff --git a/apps/comments/l10n/sq.js b/apps/comments/l10n/sq.js index 0f0366d87f6..1cc9966f1d7 100644 --- a/apps/comments/l10n/sq.js +++ b/apps/comments/l10n/sq.js @@ -12,6 +12,9 @@ OC.L10N.register( "More comments..." : "Më tepër komente…", "Save" : "Ruaje", "Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}", + "Error occurred while retrieving comment with id {id}" : "Ndodhi një gabim teksa merrej komenti me id{id}", + "Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id{id}", + "Error occurred while posting comment" : "Ndodhi një gabim teksa postohej komenti", "{count} unread comments" : "{count} komente të palexuar", "Comment" : "Koment", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komente</strong> për kartela <em>(përherë të pranishme në rrjedhë)</em>", diff --git a/apps/comments/l10n/sq.json b/apps/comments/l10n/sq.json index e4fdcbaeb52..71f01a27223 100644 --- a/apps/comments/l10n/sq.json +++ b/apps/comments/l10n/sq.json @@ -10,6 +10,9 @@ "More comments..." : "Më tepër komente…", "Save" : "Ruaje", "Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}", + "Error occurred while retrieving comment with id {id}" : "Ndodhi një gabim teksa merrej komenti me id{id}", + "Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id{id}", + "Error occurred while posting comment" : "Ndodhi një gabim teksa postohej komenti", "{count} unread comments" : "{count} komente të palexuar", "Comment" : "Koment", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komente</strong> për kartela <em>(përherë të pranishme në rrjedhë)</em>", diff --git a/apps/dav/lib/Comments/CommentNode.php b/apps/dav/lib/Comments/CommentNode.php index edf46d210fc..5c22f8a8a71 100644 --- a/apps/dav/lib/Comments/CommentNode.php +++ b/apps/dav/lib/Comments/CommentNode.php @@ -185,7 +185,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties { $msg = 'Message exceeds allowed character limit of '; throw new BadRequest($msg . IComment::MAX_MESSAGE_LENGTH, 0, $e); } - return false; + throw $e; } } diff --git a/apps/dav/tests/unit/Comments/CommentsNodeTest.php b/apps/dav/tests/unit/Comments/CommentsNodeTest.php index 6bf06375a43..18b18ab8d3b 100644 --- a/apps/dav/tests/unit/Comments/CommentsNodeTest.php +++ b/apps/dav/tests/unit/Comments/CommentsNodeTest.php @@ -166,6 +166,10 @@ class CommentsNodeTest extends \Test\TestCase { $this->assertTrue($this->node->updateComment($msg)); } + /** + * @expectedException Exception + * @expectedExceptionMessage buh! + */ public function testUpdateCommentLogException() { $msg = null; @@ -198,7 +202,7 @@ class CommentsNodeTest extends \Test\TestCase { $this->logger->expects($this->once()) ->method('logException'); - $this->assertFalse($this->node->updateComment($msg)); + $this->node->updateComment($msg); } /** diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index 4892908c329..01737256769 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -473,6 +473,8 @@ class FederatedShareProvider implements IShareProvider { $isOwner = false; + $this->removeShareFromTable($share); + // if the local user is the owner we can send the unShare request directly... if ($this->userManager->userExists($share->getShareOwner())) { $this->notifications->sendRemoteUnShare($remote, $share->getId(), $share->getToken()); @@ -494,8 +496,6 @@ class FederatedShareProvider implements IShareProvider { } $this->notifications->sendRevokeShare($remote, $remoteId, $share->getToken()); } - - $this->removeShareFromTable($share); } /** diff --git a/apps/files/js/search.js b/apps/files/js/search.js index 394bcb48603..625e4b13f4b 100644 --- a/apps/files/js/search.js +++ b/apps/files/js/search.js @@ -133,7 +133,7 @@ this.handleFolderClick = function($row, result, event) { // open folder - if (self.fileAppLoaded()) { + if (self.fileAppLoaded() && self.fileList.id === 'files') { self.fileList.changeDirectory(result.path); return false; } else { @@ -142,7 +142,7 @@ }; this.handleFileClick = function($row, result, event) { - if (self.fileAppLoaded()) { + if (self.fileAppLoaded() && self.fileList.id === 'files') { self.fileList.changeDirectory(OC.dirname(result.path)); self.fileList.scrollTo(result.name); return false; @@ -184,6 +184,13 @@ search.setHandler('folder', this.handleFolderClick.bind(this)); search.setHandler(['file', 'audio', 'image'], this.handleFileClick.bind(this)); + + if (self.fileAppLoaded()) { + // hide results when switching directory outside of search results + $('#app-content').delegate('>div', 'changeDirectory', function() { + search.clear(); + }); + } } }; OCA.Search.Files = Files; diff --git a/apps/files_external/lib/Command/Export.php b/apps/files_external/lib/Command/Export.php index 09c5ea8a9df..89655c1efc7 100644 --- a/apps/files_external/lib/Command/Export.php +++ b/apps/files_external/lib/Command/Export.php @@ -41,6 +41,11 @@ class Export extends ListCommand { 'user_id', InputArgument::OPTIONAL, 'user id to export the personal mounts for, if no user is provided admin mounts will be exported' + )->addOption( + 'all', + 'a', + InputOption::VALUE_NONE, + 'show both system wide mounts and all personal mounts' ); } @@ -48,6 +53,7 @@ class Export extends ListCommand { $listCommand = new ListCommand($this->globalService, $this->userService, $this->userSession, $this->userManager); $listInput = new ArrayInput([], $listCommand->getDefinition()); $listInput->setArgument('user_id', $input->getArgument('user_id')); + $listInput->setOption('all', $input->getOption('all')); $listInput->setOption('output', 'json_pretty'); $listInput->setOption('show-password', true); $listInput->setOption('full', true); diff --git a/apps/files_external/lib/Command/ListCommand.php b/apps/files_external/lib/Command/ListCommand.php index bb43db17a8a..e29a5f58f40 100644 --- a/apps/files_external/lib/Command/ListCommand.php +++ b/apps/files_external/lib/Command/ListCommand.php @@ -56,6 +56,8 @@ class ListCommand extends Base { */ protected $userManager; + const ALL = -1; + function __construct(GlobalStoragesService $globalService, UserStoragesService $userService, IUserSession $userSession, IUserManager $userManager) { parent::__construct(); $this->globalService = $globalService; @@ -67,7 +69,7 @@ class ListCommand extends Base { protected function configure() { $this ->setName('files_external:list') - ->setDescription('List configured mounts') + ->setDescription('List configured admin or personal mounts') ->addArgument( 'user_id', InputArgument::OPTIONAL, @@ -82,16 +84,27 @@ class ListCommand extends Base { null, InputOption::VALUE_NONE, 'don\'t truncate long values in table output' + )->addOption( + 'all', + 'a', + InputOption::VALUE_NONE, + 'show both system wide mounts and all personal mounts' ); parent::configure(); } protected function execute(InputInterface $input, OutputInterface $output) { - $userId = $input->getArgument('user_id'); - $storageService = $this->getStorageService($userId); + if ($input->getOption('all')) { + /** @var $mounts StorageConfig[] */ + $mounts = $this->globalService->getStorageForAllUsers(); + $userId = self::ALL; + } else { + $userId = $input->getArgument('user_id'); + $storageService = $this->getStorageService($userId); - /** @var $mounts StorageConfig[] */ - $mounts = $storageService->getAllStorages(); + /** @var $mounts StorageConfig[] */ + $mounts = $storageService->getAllStorages(); + } $this->listMounts($userId, $mounts, $input, $output); } @@ -102,13 +115,15 @@ class ListCommand extends Base { * @param InputInterface $input * @param OutputInterface $output */ - public function listMounts($userId, array $mounts, InputInterface $input, OutputInterface $output){ + public function listMounts($userId, array $mounts, InputInterface $input, OutputInterface $output) { $outputType = $input->getOption('output'); if (count($mounts) === 0) { if ($outputType === self::OUTPUT_FORMAT_JSON || $outputType === self::OUTPUT_FORMAT_JSON_PRETTY) { $output->writeln('[]'); } else { - if ($userId) { + if ($userId === self::ALL) { + $output->writeln("<info>No mounts configured</info>"); + } else if ($userId) { $output->writeln("<info>No mounts configured by $userId</info>"); } else { $output->writeln("<info>No admin mounts configured</info>"); @@ -119,10 +134,13 @@ class ListCommand extends Base { $headers = ['Mount ID', 'Mount Point', 'Storage', 'Authentication Type', 'Configuration', 'Options']; - if (!$userId) { + if (!$userId || $userId === self::ALL) { $headers[] = 'Applicable Users'; $headers[] = 'Applicable Groups'; } + if ($userId === self::ALL) { + $headers[] = 'Type'; + } if (!$input->getOption('show-password')) { $hideKeys = ['password', 'refresh_token', 'token', 'client_secret', 'public_key', 'private_key']; @@ -150,10 +168,13 @@ class ListCommand extends Base { $config->getBackendOptions(), $config->getMountOptions() ]; - if (!$userId) { + if (!$userId || $userId === self::ALL) { $values[] = $config->getApplicableUsers(); $values[] = $config->getApplicableGroups(); } + if ($userId === self::ALL) { + $values[] = $config->getType() === StorageConfig::MOUNT_TYPE_ADMIN ? 'admin' : 'personal'; + } return array_combine($keys, $values); }, $mounts); @@ -215,7 +236,7 @@ class ListCommand extends Base { $optionsString ]; - if (!$userId) { + if (!$userId || $userId === self::ALL) { $applicableUsers = implode(', ', $config->getApplicableUsers()); $applicableGroups = implode(', ', $config->getApplicableGroups()); if ($applicableUsers === '' && $applicableGroups === '') { @@ -224,6 +245,9 @@ class ListCommand extends Base { $values[] = $applicableUsers; $values[] = $applicableGroups; } + if ($userId === self::ALL) { + $values[] = $config->getType() === StorageConfig::MOUNT_TYPE_ADMIN ? 'Admin' : 'Personal'; + } return $values; }, $mounts); diff --git a/apps/files_external/lib/Service/DBConfigService.php b/apps/files_external/lib/Service/DBConfigService.php index 9f7061eb938..3e38f4aed94 100644 --- a/apps/files_external/lib/Service/DBConfigService.php +++ b/apps/files_external/lib/Service/DBConfigService.php @@ -77,6 +77,18 @@ class DBConfigService { } /** + * Get all configured mounts + * + * @return array + */ + public function getAllMounts() { + $builder = $this->connection->getQueryBuilder(); + $query = $builder->select(['mount_id', 'mount_point', 'storage_backend', 'auth_backend', 'priority', 'type']) + ->from('external_mounts'); + return $this->getMountsFromQuery($query); + } + + /** * Get admin defined mounts * * @return array diff --git a/apps/files_external/lib/Service/GlobalStoragesService.php b/apps/files_external/lib/Service/GlobalStoragesService.php index 96d7aa46e8d..39d3da5d803 100644 --- a/apps/files_external/lib/Service/GlobalStoragesService.php +++ b/apps/files_external/lib/Service/GlobalStoragesService.php @@ -162,4 +162,23 @@ class GlobalStoragesService extends StoragesService { protected function isApplicable(StorageConfig $config) { return true; } + + /** + * Get all configured admin and personal mounts + * + * @return array map of storage id to storage config + */ + public function getStorageForAllUsers() { + $mounts = $this->dbConfig->getAllMounts(); + $configs = array_map([$this, 'getStorageConfigFromDBMount'], $mounts); + $configs = array_filter($configs, function ($config) { + return $config instanceof StorageConfig; + }); + + $keys = array_map(function (StorageConfig $config) { + return $config->getId(); + }, $configs); + + return array_combine($keys, $configs); + } } diff --git a/apps/files_external/tests/Service/DBConfigServiceTest.php b/apps/files_external/tests/Service/DBConfigServiceTest.php index b088a7078d1..3cfa33f0bc8 100644 --- a/apps/files_external/tests/Service/DBConfigServiceTest.php +++ b/apps/files_external/tests/Service/DBConfigServiceTest.php @@ -282,4 +282,14 @@ class DBConfigServiceTest extends TestCase { $this->assertCount(1, $mounts); $this->assertEquals($id1, $mounts[0]['mount_id']); } + + public function testGetAllMounts() { + $id1 = $this->addMount('/test', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN); + $id2 = $this->addMount('/test2', 'foo2', 'bar2', 100, DBConfigService::MOUNT_TYPE_PERSONAl); + + $mounts = $this->dbConfig->getAllMounts(); + $this->assertCount(2, $mounts); + $this->assertEquals($id1, $mounts[0]['mount_id']); + $this->assertEquals($id2, $mounts[1]['mount_id']); + } } diff --git a/apps/systemtags/l10n/pl.js b/apps/systemtags/l10n/pl.js index f5e4775d540..fca05665ec8 100644 --- a/apps/systemtags/l10n/pl.js +++ b/apps/systemtags/l10n/pl.js @@ -14,6 +14,7 @@ OC.L10N.register( "%1$s updated system tag %3$s to %2$s" : "%1$s zaktualizowany system etykiet%3$s do %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s przypisywalny system etykiet%3$s do %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s nieprzypisany system etykiet %3$s z %2$s", + "%s (restricted)" : "%s (ograniczone)", "%s (invisible)" : "%s (niewidoczny)", "No files in here" : "Brak plików", "No entries found in this folder" : "Brak wpisów w tym folderze", diff --git a/apps/systemtags/l10n/pl.json b/apps/systemtags/l10n/pl.json index 6cb103ed4a5..97ae0230be4 100644 --- a/apps/systemtags/l10n/pl.json +++ b/apps/systemtags/l10n/pl.json @@ -12,6 +12,7 @@ "%1$s updated system tag %3$s to %2$s" : "%1$s zaktualizowany system etykiet%3$s do %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s przypisywalny system etykiet%3$s do %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s nieprzypisany system etykiet %3$s z %2$s", + "%s (restricted)" : "%s (ograniczone)", "%s (invisible)" : "%s (niewidoczny)", "No files in here" : "Brak plików", "No entries found in this folder" : "Brak wpisów w tym folderze", diff --git a/apps/updatenotification/l10n/bg_BG.js b/apps/updatenotification/l10n/bg_BG.js index bfe17bf4533..00e2fbf90d9 100644 --- a/apps/updatenotification/l10n/bg_BG.js +++ b/apps/updatenotification/l10n/bg_BG.js @@ -6,6 +6,7 @@ OC.L10N.register( "A new version is available: %s" : "Има Нова Версия: %s", "Open updater" : "Отвори обновяването", "Your version is up to date." : "Вие разполагате с последна версия", - "Update channel:" : "Обновяване отказано:" + "Update channel:" : "Обновяване отказано:", + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Винаги може да оновите до по-нова версия / експирементален канал. Но неможете вече да върнете до по-стабилен канал.." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/bg_BG.json b/apps/updatenotification/l10n/bg_BG.json index 7d4b4a5940b..f4b312190d6 100644 --- a/apps/updatenotification/l10n/bg_BG.json +++ b/apps/updatenotification/l10n/bg_BG.json @@ -4,6 +4,7 @@ "A new version is available: %s" : "Има Нова Версия: %s", "Open updater" : "Отвори обновяването", "Your version is up to date." : "Вие разполагате с последна версия", - "Update channel:" : "Обновяване отказано:" + "Update channel:" : "Обновяване отказано:", + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Винаги може да оновите до по-нова версия / експирементален канал. Но неможете вече да върнете до по-стабилен канал.." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ast.js b/apps/user_ldap/l10n/ast.js index 9f7b3e66934..d7c76703db1 100644 --- a/apps/user_ldap/l10n/ast.js +++ b/apps/user_ldap/l10n/ast.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Failed to clear the mappings." : "Hebo un fallu al desaniciar les asignaciones.", "Failed to delete the server configuration" : "Fallu al desaniciar la configuración del sirvidor", + "The configuration is invalid: anonymous bind is not allowed." : "La configuración nun ye válida: nun s'almite l'enllaz anónimu ", "The configuration is valid and the connection could be established!" : "¡La configuración ye válida y pudo afitase la conexón!", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración ye válida, pero falló'l vínculu. Por favor, comprueba la configuración y les credenciales nel sirvidor.", "The configuration is invalid. Please have a look at the logs for further details." : "La configuración nun ye válida. Por favor, écha-y un güeyu a los rexistros pa más detalles.", @@ -10,15 +11,42 @@ OC.L10N.register( "No configuration specified" : "Nun s'especificó la configuración", "No data specified" : "Nun s'especificaron los datos", " Could not set configuration %s" : "Nun pudo afitase la configuración %s", + "Action does not exist" : "L'acción nun esiste", + "The Base DN appears to be wrong" : "La base DN paez tar mal", + "Testing configuration…" : "Probando configuración...", "Configuration incorrect" : "Configuración incorreuta", "Configuration incomplete" : "Configuración incompleta", "Configuration OK" : "Configuración correuta", "Select groups" : "Esbillar grupos", "Select object classes" : "Seleicionar la clas d'oxetu", + "Please check the credentials, they seem to be wrong." : "Por favor, compruebe les credenciales, que paecen tar mal.", + "Please specify the port, it could not be auto-detected." : "Por favor especifica'l puertu, nun puede ser detectáu automáticamente .", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nun puede ser detectada automáticamente, por favor revisa les credenciales, host yá'l puertu.", + "Could not detect Base DN, please enter it manually." : "Nun se detectó base DN, por favor introduzla manualmente .", "{nthServer}. Server" : "{nthServer}. Sirvidor", + "No object found in the given Base DN. Please revise." : "Nun s'atopó nengún oxetu na Base DN dada. Por favor, revísalo.", + "More than 1,000 directory entries available." : "Más de 1.000 entraes de directoriu disponibles.", + " entries available within the provided Base DN" : "entraes disponibles dientro la Base DN proporcionada", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Asocedió un erru. Por favor, compruebe la Base DN , amás de la configuración de conexón y les credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Daveres que quies desaniciar la configuración actual del sirvidor?", "Confirm Deletion" : "Confirmar desaniciu", + "Mappings cleared successfully!" : "¡Asignaciones borraes correutamente!", + "Error while clearing the mappings." : "Fallu mientres desaniciaben les asignaciones.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Nun s'almite l'enllaz anónimu. Por favor apurre un usuariu DN y contraseña.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Erru d'operaciones LDAP . Enllaz anónimu nun s'almite.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Nun pudo guardase. Por favor asegúrate que la base de datos ta en funcionamientu. Actualiza enantes de siguir.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar el mou va habilitar les consultes LDAP automátiques . Dependiendo del to tamañu de LDAP puede llevar un tiempu. ¿Inda deseya camudar el mou?", + "Mode switch" : "Conmutar mou", "Select attributes" : "Esbillar atributos", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Nun s'alcuentra l'usuariu. Encamiéntase consultar los atributos d'accesu y nome d'usuariu. Filtru efectivu (copiar y pegar pa la validación de llínea de comandos): <br/>", + "User found and settings verified." : "Usuariu atopáu y la configuración verificada.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Axustes verificaos, pero atopose un usuariu . Namá'l primeru d'ellos va ser capaz d'empecipiar sesión. Considere un filtru más acutáu.", + "An unspecified error occurred. Please check the settings and the log." : "Asocedió un erru. Por favor, compruebe la configuración y el rexistru.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Asocedió un erru de conexón a LDAP / AD, por favor, comprueba'l host, el puertu y les credenciales.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El marcador de posición %uid nun s'atopa. Va ser trocáu col nome d'entamu de sesión cuando se consulta LDAP / AD.", + "Please provide a login name to test against" : "Por favor, proporcione un nombre de inicio de sesión para comprobar en contra", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadru de grupu taba desactiváu , por mor qu'el servidor LDAP / AD nun almite memberOf .", "_%s group found_::_%s groups found_" : ["%s grupu alcontráu","%s grupos alcontraos"], "_%s user found_::_%s users found_" : ["%s usuariu alcontráu","%s usuarios alcontraos"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nun deteutamos el nome d'atributu na pantalla d'usuariu. Por favor especifícalu nos axustes avanzaos de ldap", @@ -26,27 +54,52 @@ OC.L10N.register( "Invalid Host" : "Host inválidu", "Server" : "Sirvidor", "Users" : "Usuarios", + "Login Attributes" : "Los atributos d'aniciu de sesión", "Groups" : "Grupos", "Test Configuration" : "Configuración de prueba", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:", + "Only these object classes:" : "Namái d'estes clases d'oxetu:", + "Only from these groups:" : "Namái d'estos grupos:", + "Search groups" : "Esbillar grupos", + "Available groups" : "Grupos disponibles", + "Selected groups" : "Grupos seleicionaos", + "Edit LDAP Query" : "Editar consulta LDAP", + "LDAP Filter:" : "Filtru LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtru especifica qué grupos LDAP van tener accesu a %s.", + "Verify settings and count groups" : "Comprobar la configuración y grupos de recuentu", + "When logging in, %s will find the user based on the following attributes:" : "Al empecipiar sesión, %s atópase l'usuariu en función de los siguientes atributos :", + "LDAP / AD Username:" : "Nome d'usuariu LDAP / AD:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Permite la entrada en contra'l nome d'usuariu LDAP / AD, yá sía uid o samaccountname y va ser detectada.", + "LDAP / AD Email Address:" : "Direición e-mail LDAP / AD:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Almite la entrada contra un atributu de corréu electrónicu. Almitirase corréu electrónicu y mailPrimaryAddress.", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Define'l filtru a aplicar cuando s'intenta identificar. %%uid va trocar al nome d'usuariu nel procesu d'identificación. Por exemplu: \"uid=%%uid\"", + "Test Loginname" : "Preba de Nome d'Aniciu de Sesión", + "Verify settings" : "Comprobar los axustes", "1. Server" : "1. Sirvidor", "%s. Server:" : "%s. Sirvidor:", + "Add a new and blank configuration" : "Amestar una configuración nueva y en blancu", + "Copy current configuration into new directory binding" : "Copiar configuración actual nel nuevu directoriu obligatoriu", + "Delete the current configuration" : "Desaniciar la configuración actual", "Host" : "Equipu", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Pues omitir el protocolu, sacantes si necesites SSL. Nesi casu, entama con ldaps://", "Port" : "Puertu", + "Detect Port" : "Detectar Puertu", "User DN" : "DN usuariu", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del usuariu veceru col que va facese l'asociación, p.ex. uid=axente,dc=exemplu,dc=com. P'accesu anónimu, dexa DN y contraseña baleros.", "Password" : "Contraseña", "For anonymous access, leave DN and Password empty." : "Pa un accesu anónimu, dexar el DN y la contraseña baleros.", "One Base DN per line" : "Un DN Base por llinia", "You can specify Base DN for users and groups in the Advanced tab" : "Pues especificar el DN base pa usuarios y grupos na llingüeta Avanzáu", + "Detect Base DN" : "Detectar Base DN", + "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)", + "%s access is limited to users meeting these criteria:" : "%s accesos llendaos a los usuarios que cumplan estos criterios:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.", + "Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu", "Saving" : "Guardando", "Back" : "Atrás", "Continue" : "Continuar", @@ -70,6 +123,8 @@ OC.L10N.register( "Directory Settings" : "Axustes del direutoriu", "User Display Name Field" : "Campu de nome d'usuariu a amosar", "The LDAP attribute to use to generate the user's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del usuariu.", + "2nd User Display Name Field" : "2ª usuariu amuesa Nome del campu", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributu LDAP que s'amesta al nome de visualización ente paréntesis. Los resultaos en, por exemplu, »John Doe (john.doe@example.org)«.", "Base User Tree" : "Árbol base d'usuariu", "One User Base DN per line" : "Un DN Base d'Usuariu por llinia", "User Search Attributes" : "Atributos de la gueta d'usuariu", @@ -80,6 +135,8 @@ OC.L10N.register( "One Group Base DN per line" : "Un DN Base de Grupu por llinia", "Group Search Attributes" : "Atributos de gueta de grupu", "Group-Member association" : "Asociación Grupu-Miembru", + "Dynamic Group Member URL" : "URL Dinámica de Grupu d'Usuarios", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atributu LDAP que nos oxetos de grupu contien una gueta de URLs de LDAP que determina qué oxetos pertenecen al grupu. (Un axuste vacíu desanicia la funcionalidá dinámica de pertenencia al grupu.)", "Nested Groups" : "Grupos añeraos", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando s'active, van permitise grupos que contengan otros grupos (namái funciona si l'atributu de miembru de grupu contién DNs).", "Paging chunksize" : "Tamañu de los fragmentos de paxinación", diff --git a/apps/user_ldap/l10n/ast.json b/apps/user_ldap/l10n/ast.json index 7b097287bb7..c1fbc128506 100644 --- a/apps/user_ldap/l10n/ast.json +++ b/apps/user_ldap/l10n/ast.json @@ -1,6 +1,7 @@ { "translations": { "Failed to clear the mappings." : "Hebo un fallu al desaniciar les asignaciones.", "Failed to delete the server configuration" : "Fallu al desaniciar la configuración del sirvidor", + "The configuration is invalid: anonymous bind is not allowed." : "La configuración nun ye válida: nun s'almite l'enllaz anónimu ", "The configuration is valid and the connection could be established!" : "¡La configuración ye válida y pudo afitase la conexón!", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración ye válida, pero falló'l vínculu. Por favor, comprueba la configuración y les credenciales nel sirvidor.", "The configuration is invalid. Please have a look at the logs for further details." : "La configuración nun ye válida. Por favor, écha-y un güeyu a los rexistros pa más detalles.", @@ -8,15 +9,42 @@ "No configuration specified" : "Nun s'especificó la configuración", "No data specified" : "Nun s'especificaron los datos", " Could not set configuration %s" : "Nun pudo afitase la configuración %s", + "Action does not exist" : "L'acción nun esiste", + "The Base DN appears to be wrong" : "La base DN paez tar mal", + "Testing configuration…" : "Probando configuración...", "Configuration incorrect" : "Configuración incorreuta", "Configuration incomplete" : "Configuración incompleta", "Configuration OK" : "Configuración correuta", "Select groups" : "Esbillar grupos", "Select object classes" : "Seleicionar la clas d'oxetu", + "Please check the credentials, they seem to be wrong." : "Por favor, compruebe les credenciales, que paecen tar mal.", + "Please specify the port, it could not be auto-detected." : "Por favor especifica'l puertu, nun puede ser detectáu automáticamente .", + "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN nun puede ser detectada automáticamente, por favor revisa les credenciales, host yá'l puertu.", + "Could not detect Base DN, please enter it manually." : "Nun se detectó base DN, por favor introduzla manualmente .", "{nthServer}. Server" : "{nthServer}. Sirvidor", + "No object found in the given Base DN. Please revise." : "Nun s'atopó nengún oxetu na Base DN dada. Por favor, revísalo.", + "More than 1,000 directory entries available." : "Más de 1.000 entraes de directoriu disponibles.", + " entries available within the provided Base DN" : "entraes disponibles dientro la Base DN proporcionada", + "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Asocedió un erru. Por favor, compruebe la Base DN , amás de la configuración de conexón y les credenciales.", "Do you really want to delete the current Server Configuration?" : "¿Daveres que quies desaniciar la configuración actual del sirvidor?", "Confirm Deletion" : "Confirmar desaniciu", + "Mappings cleared successfully!" : "¡Asignaciones borraes correutamente!", + "Error while clearing the mappings." : "Fallu mientres desaniciaben les asignaciones.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Nun s'almite l'enllaz anónimu. Por favor apurre un usuariu DN y contraseña.", + "LDAP Operations error. Anonymous bind might not be allowed." : "Erru d'operaciones LDAP . Enllaz anónimu nun s'almite.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Nun pudo guardase. Por favor asegúrate que la base de datos ta en funcionamientu. Actualiza enantes de siguir.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Cambiar el mou va habilitar les consultes LDAP automátiques . Dependiendo del to tamañu de LDAP puede llevar un tiempu. ¿Inda deseya camudar el mou?", + "Mode switch" : "Conmutar mou", "Select attributes" : "Esbillar atributos", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Nun s'alcuentra l'usuariu. Encamiéntase consultar los atributos d'accesu y nome d'usuariu. Filtru efectivu (copiar y pegar pa la validación de llínea de comandos): <br/>", + "User found and settings verified." : "Usuariu atopáu y la configuración verificada.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Axustes verificaos, pero atopose un usuariu . Namá'l primeru d'ellos va ser capaz d'empecipiar sesión. Considere un filtru más acutáu.", + "An unspecified error occurred. Please check the settings and the log." : "Asocedió un erru. Por favor, compruebe la configuración y el rexistru.", + "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtru de busca nun ye válidu , probablemente por cuenta de problemes de sintaxis como'l númberu impar de soportes abiertos y zarraos. Por favor revisalo.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Asocedió un erru de conexón a LDAP / AD, por favor, comprueba'l host, el puertu y les credenciales.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "El marcador de posición %uid nun s'atopa. Va ser trocáu col nome d'entamu de sesión cuando se consulta LDAP / AD.", + "Please provide a login name to test against" : "Por favor, proporcione un nombre de inicio de sesión para comprobar en contra", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "El cuadru de grupu taba desactiváu , por mor qu'el servidor LDAP / AD nun almite memberOf .", "_%s group found_::_%s groups found_" : ["%s grupu alcontráu","%s grupos alcontraos"], "_%s user found_::_%s users found_" : ["%s usuariu alcontráu","%s usuarios alcontraos"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Nun deteutamos el nome d'atributu na pantalla d'usuariu. Por favor especifícalu nos axustes avanzaos de ldap", @@ -24,27 +52,52 @@ "Invalid Host" : "Host inválidu", "Server" : "Sirvidor", "Users" : "Usuarios", + "Login Attributes" : "Los atributos d'aniciu de sesión", "Groups" : "Grupos", "Test Configuration" : "Configuración de prueba", "Help" : "Ayuda", "Groups meeting these criteria are available in %s:" : "Los grupos que cumplen estos criterios tán disponibles en %s:", + "Only these object classes:" : "Namái d'estes clases d'oxetu:", + "Only from these groups:" : "Namái d'estos grupos:", + "Search groups" : "Esbillar grupos", + "Available groups" : "Grupos disponibles", + "Selected groups" : "Grupos seleicionaos", + "Edit LDAP Query" : "Editar consulta LDAP", + "LDAP Filter:" : "Filtru LDAP:", "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtru especifica qué grupos LDAP van tener accesu a %s.", + "Verify settings and count groups" : "Comprobar la configuración y grupos de recuentu", + "When logging in, %s will find the user based on the following attributes:" : "Al empecipiar sesión, %s atópase l'usuariu en función de los siguientes atributos :", + "LDAP / AD Username:" : "Nome d'usuariu LDAP / AD:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Permite la entrada en contra'l nome d'usuariu LDAP / AD, yá sía uid o samaccountname y va ser detectada.", + "LDAP / AD Email Address:" : "Direición e-mail LDAP / AD:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Almite la entrada contra un atributu de corréu electrónicu. Almitirase corréu electrónicu y mailPrimaryAddress.", "Other Attributes:" : "Otros atributos:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Define'l filtru a aplicar cuando s'intenta identificar. %%uid va trocar al nome d'usuariu nel procesu d'identificación. Por exemplu: \"uid=%%uid\"", + "Test Loginname" : "Preba de Nome d'Aniciu de Sesión", + "Verify settings" : "Comprobar los axustes", "1. Server" : "1. Sirvidor", "%s. Server:" : "%s. Sirvidor:", + "Add a new and blank configuration" : "Amestar una configuración nueva y en blancu", + "Copy current configuration into new directory binding" : "Copiar configuración actual nel nuevu directoriu obligatoriu", + "Delete the current configuration" : "Desaniciar la configuración actual", "Host" : "Equipu", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Pues omitir el protocolu, sacantes si necesites SSL. Nesi casu, entama con ldaps://", "Port" : "Puertu", + "Detect Port" : "Detectar Puertu", "User DN" : "DN usuariu", "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del usuariu veceru col que va facese l'asociación, p.ex. uid=axente,dc=exemplu,dc=com. P'accesu anónimu, dexa DN y contraseña baleros.", "Password" : "Contraseña", "For anonymous access, leave DN and Password empty." : "Pa un accesu anónimu, dexar el DN y la contraseña baleros.", "One Base DN per line" : "Un DN Base por llinia", "You can specify Base DN for users and groups in the Advanced tab" : "Pues especificar el DN base pa usuarios y grupos na llingüeta Avanzáu", + "Detect Base DN" : "Detectar Base DN", + "Test Base DN" : "Probar Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita peticiones automátiques de LDAP. Meyor pa grandes configuraciones, pero rique mayor conocimientu de LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Inxerta manualmente los filtros de LDAP (recomendáu pa direutorios llargos)", + "%s access is limited to users meeting these criteria:" : "%s accesos llendaos a los usuarios que cumplan estos criterios:", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Les clases d'oxetos más comunes pa los usuarios d'Internet son organizationalPerson, persona, usuariu y inetOrgPerson . Si nun ta seguro de qué clase d'oxetu escoyer, por favor consulte al so alministrador de directorios.", "The filter specifies which LDAP users shall have access to the %s instance." : "El filtru especifica qué usuarios LDAP puen tener accesu a %s.", + "Verify settings and count users" : "Comprobar la configuración y usuarios de recuentu", "Saving" : "Guardando", "Back" : "Atrás", "Continue" : "Continuar", @@ -68,6 +121,8 @@ "Directory Settings" : "Axustes del direutoriu", "User Display Name Field" : "Campu de nome d'usuariu a amosar", "The LDAP attribute to use to generate the user's display name." : "El campu LDAP a usar pa xenerar el nome p'amosar del usuariu.", + "2nd User Display Name Field" : "2ª usuariu amuesa Nome del campu", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributu LDAP que s'amesta al nome de visualización ente paréntesis. Los resultaos en, por exemplu, »John Doe (john.doe@example.org)«.", "Base User Tree" : "Árbol base d'usuariu", "One User Base DN per line" : "Un DN Base d'Usuariu por llinia", "User Search Attributes" : "Atributos de la gueta d'usuariu", @@ -78,6 +133,8 @@ "One Group Base DN per line" : "Un DN Base de Grupu por llinia", "Group Search Attributes" : "Atributos de gueta de grupu", "Group-Member association" : "Asociación Grupu-Miembru", + "Dynamic Group Member URL" : "URL Dinámica de Grupu d'Usuarios", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "L'atributu LDAP que nos oxetos de grupu contien una gueta de URLs de LDAP que determina qué oxetos pertenecen al grupu. (Un axuste vacíu desanicia la funcionalidá dinámica de pertenencia al grupu.)", "Nested Groups" : "Grupos añeraos", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando s'active, van permitise grupos que contengan otros grupos (namái funciona si l'atributu de miembru de grupu contién DNs).", "Paging chunksize" : "Tamañu de los fragmentos de paxinación", diff --git a/core/css/apps.css b/core/css/apps.css index e8b33ecba65..3ffa7d87098 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -162,7 +162,6 @@ text-overflow: ellipsis; overflow: hidden; display: inline-block; - width: 201px; /* fallback for IE8 */ width: calc(100% - 49px); line-height: 44px; float: left; @@ -309,12 +308,6 @@ .edge #app-navigation .app-navigation-entry-menu:after { border: 1px solid #eee; } -.ie8 .bubble { - margin-top: 18px; -} -.ie8 .bubble:after { - display: none; -} /* miraculous border arrow stuff */ .bubble:after, #app-navigation .app-navigation-entry-menu:after { @@ -392,7 +385,6 @@ #app-navigation .app-navigation-entry-edit input { border-bottom-right-radius: 0; border-top-right-radius: 0; - width: 204px; /* fallback for IE8 */ width: calc(100% - 36px); padding: 5px; margin-right: 0; diff --git a/core/css/fixes.css b/core/css/fixes.css index 71cb09cae76..7b4540395a8 100644 --- a/core/css/fixes.css +++ b/core/css/fixes.css @@ -10,131 +10,8 @@ select { height: 32px; } -/* reset typeface for IE8 because OpenSans renders too small */ -.ie8 body { - font-family: Frutiger, Calibri, 'Myriad Pro', Myriad, Arial, sans-serif; -} - -.lte8 .icon-delete { background-image: url('../img/actions/delete.png'); } -.lte8 .icon-delete:hover, .icon-delete:focus { - background-image: url('../img/actions/delete-hover.png'); -} - -.ie8 .icon-checkmark { - background-image: url('../img/actions/checkmark.png'); -} - -.ie8 .icon-close { - background-image: url('../img/actions/close.png'); -} - -.lte9 .icon-triangle-e { - background-image: url('../img/actions/triangle-e.png'); -} -.lte9 .icon-triangle-n { - background-image: url('../img/actions/triangle-n.png'); -} -.lte9 .icon-triangle-s { - background-image: url('../img/actions/triangle-s.png'); -} -.lte9 .icon-settings, -.lte9 .settings-button { - background-image: url('../img/actions/settings.png'); -} - -.lte9 input[type="submit"], .lte9 input[type="button"], -.lte9 button, .lte9 .button, -.lte9 #quota, .lte9 select, .lte9 .pager li a { - background-color: #f1f1f1; -} - -/* IE8 needs PNG image for header logo */ -.ie8 #header .logo { - background-image: url(../img/logo-icon-175px.png); -} - -/* IE8 needs background to be set to same color to make transparency look good. */ -.lte9 #body-login form input[type="text"] { - border: 1px solid lightgrey; /* use border to add 1px line between input fields */ - background-color: white; /* don't change background on hover */ -} -.lte9 #body-login form input[type="password"] { - /* leave out top border for 1px line between input fields*/ - border-left: 1px solid lightgrey; - border-right: 1px solid lightgrey; - border-bottom: 1px solid lightgrey; - background-color: white; /* don't change background on hover */ -} -.ie8 #body-login input[type="submit"] { - padding: 10px 5px; - margin-top: 3px; -} -/* for whatever unexplained reason */ -.ie8 #password { - width: 271px !important; - min-width: auto !important; -} - -/* disable opacity of info text on gradient - since we cannot set a good backround color to use the filter&background hack as with the input labels */ -.lte9 #body-login p.info { - filter: initial; -} - /* deactivate show password toggle for IE. Does not work for 8 and 9+ have their own implementation. */ .ie #show, .ie #show+label { display: none; visibility: hidden; } - -/* fix installation screen rendering issue for IE8+9 */ -.lte9 #body-login { - min-height: 100%; - height: auto !important; -} - -/* oc-dialog only uses box shadow which is not supported by ie8 */ -.ie8 .oc-dialog { - border: 1px solid #888888; -} - -/* IE8 doesn't support transparent background - let's emulate black with an opacity of .3 on a dark blue background*/ -.ie8 fieldset .warning, .ie8 #body-login .error { - background-color: #1B314D; -} - -/* IE8 isn't able to display transparent background. So it is specified using a gradient */ -.ie8 #nojavascript { - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#4c320000', endColorstr='#4c320000'); -} - -/* IE8 doesn't have rounded corners, so the strengthify bar should be wider */ -.lte8 #body-login .strengthify-wrapper { - width: 271px; - left: 6px; -} - -/* fix background of navigation popup in IE8 */ -.ie8 #navigation, -.ie8 #expanddiv { - background-color: #111; -} - -/* needed else IE8 will randomly hide the borders... */ -.ie8 table th#headerDate, table td.date, -.ie8 table th.column-last, table td.column-last { - position: static; -} - -.ie8 #controls { - background-color: white; -} - -.ie8 #content-wrapper { - overflow-y: auto; -} - -.ie8 #app-navigation .app-navigation-entry-edit input { - line-height: 38px; -} - diff --git a/core/css/multiselect.css b/core/css/multiselect.css index a4b03319156..ef56044fd05 100644 --- a/core/css/multiselect.css +++ b/core/css/multiselect.css @@ -111,10 +111,3 @@ ul.multiselectoptions > li.creator > input { padding: 5px; margin: -5px; } - -.ie8 div.multiselect span:first-child { - display:block; - position:relative; - width: 90%; - margin-right:-1px; -} diff --git a/core/css/styles.css b/core/css/styles.css index 32d4deb79e3..e339c888ec7 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -187,7 +187,6 @@ a.two-factor-cancel { .emptycontent { color: #888; text-align: center; - margin-top: 100px; /* ie8 */ margin-top: 30vh; width: 100%; } @@ -416,14 +415,7 @@ label.infield { -ms-user-select: none; user-select: none; } -html.ie8 #body-login form input[type="checkbox"]+label { - margin-left: -28px; - margin-top: -3px; - vertical-align: auto; -} -html.ie8 #body-login form input[type="checkbox"] { - margin-top: 5px; -} + #body-login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; } #body-login .success { background:#d7fed7; border:1px solid #0f0; width: 35%; margin: 30px auto; padding:1em; text-align: center;} diff --git a/core/js/js.js b/core/js/js.js index 1c49d38f950..7f98668dcb2 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -788,7 +788,6 @@ var OC={ $(document).trigger(new $.Event('ajaxError'), xhr); }; - // FIXME: also needs an IE8 way if (xhr.addEventListener) { xhr.addEventListener('load', loadCallback); xhr.addEventListener('error', errorCallback); @@ -1857,30 +1856,10 @@ OC.Util = { * This scales the image to the element's actual size, the URL is * taken from the "background-image" CSS attribute. * + * @deprecated IE8 isn't supported since 9.0 * @param {Object} $el image element */ - scaleFixForIE8: function($el) { - if (!this.isIE8()) { - return; - } - var self = this; - $($el).each(function() { - var url = $(this).css('background-image'); - var r = url.match(/url\(['"]?([^'")]*)['"]?\)/); - if (!r) { - return; - } - url = r[1]; - url = self.replaceSVGIcon(url); - // TODO: escape - url = url.replace(/'/g, '%27'); - $(this).css({ - 'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + url + '\', sizingMethod=\'scale\')', - 'background-image': '' - }); - }); - return $el; - }, + scaleFixForIE8: function($el) {}, /** * Returns whether this is IE @@ -1894,10 +1873,11 @@ OC.Util = { /** * Returns whether this is IE8 * - * @return {bool} true if this is IE8, false otherwise + * @deprecated IE8 isn't supported since 9.0 + * @return {bool} false (IE8 isn't supported anymore) */ isIE8: function() { - return $('html').hasClass('ie8'); + return false; }, /** diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 3b284163b4f..da251abd079 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -166,9 +166,13 @@ OC.L10N.register( "delete" : "usuń", "access control" : "kontrola dostępu", "Could not unshare" : "Nie udało się usunąć udostępnienia", + "Share details could not be loaded for this item." : "Szczegóły udziału nie mogły zostać wczytane dla tego obiektu.", "No users or groups found for {search}" : "Nie znaleziono użytkowników lub grup dla {search}", "No users found for {search}" : "Nie znaleziono użytkowników dla {search}", "An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.", + "{sharee} (group)" : "{sharee} (grupa)", + "{sharee} (at {server})" : "{sharee} (na {server})", + "{sharee} (remote)" : "{sharee} (zdalny)", "Share" : "Udostępnij", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Współdziel z użytkownikami innych chmur ownCloud używając wzorca uzytkownik@example.com/owncloud", "Share with users…" : "Współdziel z użytkownikami...", @@ -181,6 +185,7 @@ OC.L10N.register( "Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje", "restricted" : "ograniczone", "invisible" : "niewidoczny", + "({scope})" : "({scope})", "Delete" : "Usuń", "Rename" : "Zmień nazwę", "The object type is not specified." : "Nie określono typu obiektu.", @@ -237,6 +242,7 @@ OC.L10N.register( "Data folder" : "Katalog danych", "Configure the database" : "Skonfiguruj bazę danych", "Only %s is available." : "Dostępne jest wyłącznie %s.", + "Install and activate additional PHP modules to choose other database types." : "Zainstaluj lub aktywuj dodatkowe moduły PHP, aby uzyskać możliwość wyboru innych typów baz danych.", "For more details check out the documentation." : "Aby uzyskać więcej informacji zapoznaj się z dokumentacją.", "Database user" : "Użytkownik bazy danych", "Database password" : "Hasło do bazy danych", @@ -289,6 +295,7 @@ OC.L10N.register( "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby uniknąć timeout-ów przy większych instalacjach, możesz zamiast tego uruchomić następującą komendę w katalogu Twojej instalacji:", "Detailed logs" : "Szczegółowe logi", "Update needed" : "Wymagana aktualizacja", + "Please use the command line updater because you have a big instance." : "Ze względu na rozmiar Twojej instalacji użyj programu do aktualizacji z linii poleceń.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Aby uzyskać pomoc, zajrzyj do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentacji</a>.", "This page will refresh itself when the %s instance is available again." : "Strona odświeży się gdy instancja %s będzie ponownie dostępna." }, diff --git a/core/l10n/pl.json b/core/l10n/pl.json index 6833611713d..9f06fcf2d66 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -164,9 +164,13 @@ "delete" : "usuń", "access control" : "kontrola dostępu", "Could not unshare" : "Nie udało się usunąć udostępnienia", + "Share details could not be loaded for this item." : "Szczegóły udziału nie mogły zostać wczytane dla tego obiektu.", "No users or groups found for {search}" : "Nie znaleziono użytkowników lub grup dla {search}", "No users found for {search}" : "Nie znaleziono użytkowników dla {search}", "An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.", + "{sharee} (group)" : "{sharee} (grupa)", + "{sharee} (at {server})" : "{sharee} (na {server})", + "{sharee} (remote)" : "{sharee} (zdalny)", "Share" : "Udostępnij", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Współdziel z użytkownikami innych chmur ownCloud używając wzorca uzytkownik@example.com/owncloud", "Share with users…" : "Współdziel z użytkownikami...", @@ -179,6 +183,7 @@ "Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje", "restricted" : "ograniczone", "invisible" : "niewidoczny", + "({scope})" : "({scope})", "Delete" : "Usuń", "Rename" : "Zmień nazwę", "The object type is not specified." : "Nie określono typu obiektu.", @@ -235,6 +240,7 @@ "Data folder" : "Katalog danych", "Configure the database" : "Skonfiguruj bazę danych", "Only %s is available." : "Dostępne jest wyłącznie %s.", + "Install and activate additional PHP modules to choose other database types." : "Zainstaluj lub aktywuj dodatkowe moduły PHP, aby uzyskać możliwość wyboru innych typów baz danych.", "For more details check out the documentation." : "Aby uzyskać więcej informacji zapoznaj się z dokumentacją.", "Database user" : "Użytkownik bazy danych", "Database password" : "Hasło do bazy danych", @@ -287,6 +293,7 @@ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby uniknąć timeout-ów przy większych instalacjach, możesz zamiast tego uruchomić następującą komendę w katalogu Twojej instalacji:", "Detailed logs" : "Szczegółowe logi", "Update needed" : "Wymagana aktualizacja", + "Please use the command line updater because you have a big instance." : "Ze względu na rozmiar Twojej instalacji użyj programu do aktualizacji z linii poleceń.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Aby uzyskać pomoc, zajrzyj do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentacji</a>.", "This page will refresh itself when the %s instance is available again." : "Strona odświeży się gdy instancja %s będzie ponownie dostępna." },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" diff --git a/core/l10n/ro.js b/core/l10n/ro.js index e73ec5cf79f..fad21a73e58 100644 --- a/core/l10n/ro.js +++ b/core/l10n/ro.js @@ -9,6 +9,11 @@ OC.L10N.register( "Invalid image" : "Imagine invalidă", "An error occurred. Please contact your admin." : "A apărut o eroare. Te rugăm să contactezi administratorul.", "No temporary profile picture available, try again" : "Nu este disponibilă nicio imagine temporară a profilului, încearcă din nou", + "Crop is not square" : "Selecția nu este pătrată", + "Couldn't reset password because the token is invalid" : "Parola nu a putut fi resetată deoarece token-ul este invalid", + "Couldn't reset password because the token is expired" : "Parola nu a putut fi resetată deoarece token-ul a expirat", + "Couldn't send reset email. Please make sure your username is correct." : "Nu a putut fi trimis un email pentru resetare. Asigură-te că numele de utilizator este corect.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nu a putut fi trimis un email pentru resetare deoarece nu există o adresă email pentru acest utilizator. Contactează-ți administratorul.", "%s password reset" : "%s resetare parola", "Couldn't send reset email. Please contact your administrator." : "Expedierea email-ului de resetare a eşuat. Vă rugăm să contactaţi administratorul dvs.", "Error loading tags" : "Eroare la încărcarea etichetelor", @@ -115,6 +120,7 @@ OC.L10N.register( "So-so password" : "Parolă medie", "Good password" : "Parolă bună", "Strong password" : "Parolă puternică", + "Error occurred while checking server setup" : "A apărut o eroare la verificarea configurației serverului", "Shared" : "Partajat", "Shared with {recipients}" : "Partajat cu {recipients}", "Error" : "Eroare", @@ -151,6 +157,8 @@ OC.L10N.register( "access control" : "control acces", "Could not unshare" : "Nu s-a putut elimina partajarea", "Share details could not be loaded for this item." : "Nu s-au putut încărca detaliile de partajare pentru acest element.", + "No users or groups found for {search}" : "Nu au fost găsiți utilizatori sau grupuri pentru {search}", + "No users found for {search}" : "Nu au fost găsiți utilizatori pentru {search}", "An error occurred. Please try again" : "A apărut o eroare. Încearcă din nou", "Share" : "Partajează", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partajează cu persoane din alte instanțe ownCloud folosind sintaxa nume_utilizator@exemplu.com/owncloud", @@ -175,6 +183,7 @@ OC.L10N.register( "sunny" : "însorit", "Hello {name}" : "Salut {name}", "new" : "nou", + "_download %n file_::_download %n files_" : ["descarcă %n fișier","descarcă %n fișiere","descarcă %n fișiere"], "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Actualizarea este în progres, părăsirea acestei pagini ar putea duce la întreruperea procesului în unele medii.", "Updating to {version}" : "Actualizare la {version}", "An error occurred." : "A apărut o eroare.", @@ -238,8 +247,12 @@ OC.L10N.register( "New password" : "Noua parolă", "New Password" : "Noua parolă", "Reset password" : "Resetează parola", + "This ownCloud instance is currently in single user mode." : "Această instanță ownCloud este momentan în modul de utilizare de către un singur utilizator.", + "This means only administrators can use the instance." : "Asta înseamnă că doar administratorii pot folosi instanța.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Contactează-ți administratorul de sistem dacă acest mesaj persistă sau a apărut neașteptat.", "Thank you for your patience." : "Îți mulțumim pentru răbdare.", "Two-step verification" : "Verificare în doi pași", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A fost activată securitatea sporită pentru contul tău. Te rugăm să te autentifici folosind un al doilea factor.", "Cancel login" : "Anulează autentificarea", "Please authenticate using the selected factor." : "Autentifică-te folosind factorul ales.", "An error occured while verifying the token" : "A apărut o eroare la verificarea jetonului", @@ -254,6 +267,7 @@ OC.L10N.register( "Detailed logs" : "Loguri detaliate", "Update needed" : "E necesară actualizarea", "Please use the command line updater because you have a big instance." : "Folosește actualizarea din linia de comandă deoarece ai o instanță mare.", - "This %s instance is currently in maintenance mode, which may take a while." : "Instanța %s este acum în modul de mentenanță, ceea ce ar putea dura o vreme." + "This %s instance is currently in maintenance mode, which may take a while." : "Instanța %s este acum în modul de mentenanță, ceea ce ar putea dura o vreme.", + "This page will refresh itself when the %s instance is available again." : "Această pagină se va reîmprospăta atunci când %s instance e disponibil din nou." }, "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/core/l10n/ro.json b/core/l10n/ro.json index c154312dab6..b922cf154a6 100644 --- a/core/l10n/ro.json +++ b/core/l10n/ro.json @@ -7,6 +7,11 @@ "Invalid image" : "Imagine invalidă", "An error occurred. Please contact your admin." : "A apărut o eroare. Te rugăm să contactezi administratorul.", "No temporary profile picture available, try again" : "Nu este disponibilă nicio imagine temporară a profilului, încearcă din nou", + "Crop is not square" : "Selecția nu este pătrată", + "Couldn't reset password because the token is invalid" : "Parola nu a putut fi resetată deoarece token-ul este invalid", + "Couldn't reset password because the token is expired" : "Parola nu a putut fi resetată deoarece token-ul a expirat", + "Couldn't send reset email. Please make sure your username is correct." : "Nu a putut fi trimis un email pentru resetare. Asigură-te că numele de utilizator este corect.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Nu a putut fi trimis un email pentru resetare deoarece nu există o adresă email pentru acest utilizator. Contactează-ți administratorul.", "%s password reset" : "%s resetare parola", "Couldn't send reset email. Please contact your administrator." : "Expedierea email-ului de resetare a eşuat. Vă rugăm să contactaţi administratorul dvs.", "Error loading tags" : "Eroare la încărcarea etichetelor", @@ -113,6 +118,7 @@ "So-so password" : "Parolă medie", "Good password" : "Parolă bună", "Strong password" : "Parolă puternică", + "Error occurred while checking server setup" : "A apărut o eroare la verificarea configurației serverului", "Shared" : "Partajat", "Shared with {recipients}" : "Partajat cu {recipients}", "Error" : "Eroare", @@ -149,6 +155,8 @@ "access control" : "control acces", "Could not unshare" : "Nu s-a putut elimina partajarea", "Share details could not be loaded for this item." : "Nu s-au putut încărca detaliile de partajare pentru acest element.", + "No users or groups found for {search}" : "Nu au fost găsiți utilizatori sau grupuri pentru {search}", + "No users found for {search}" : "Nu au fost găsiți utilizatori pentru {search}", "An error occurred. Please try again" : "A apărut o eroare. Încearcă din nou", "Share" : "Partajează", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partajează cu persoane din alte instanțe ownCloud folosind sintaxa nume_utilizator@exemplu.com/owncloud", @@ -173,6 +181,7 @@ "sunny" : "însorit", "Hello {name}" : "Salut {name}", "new" : "nou", + "_download %n file_::_download %n files_" : ["descarcă %n fișier","descarcă %n fișiere","descarcă %n fișiere"], "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Actualizarea este în progres, părăsirea acestei pagini ar putea duce la întreruperea procesului în unele medii.", "Updating to {version}" : "Actualizare la {version}", "An error occurred." : "A apărut o eroare.", @@ -236,8 +245,12 @@ "New password" : "Noua parolă", "New Password" : "Noua parolă", "Reset password" : "Resetează parola", + "This ownCloud instance is currently in single user mode." : "Această instanță ownCloud este momentan în modul de utilizare de către un singur utilizator.", + "This means only administrators can use the instance." : "Asta înseamnă că doar administratorii pot folosi instanța.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Contactează-ți administratorul de sistem dacă acest mesaj persistă sau a apărut neașteptat.", "Thank you for your patience." : "Îți mulțumim pentru răbdare.", "Two-step verification" : "Verificare în doi pași", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A fost activată securitatea sporită pentru contul tău. Te rugăm să te autentifici folosind un al doilea factor.", "Cancel login" : "Anulează autentificarea", "Please authenticate using the selected factor." : "Autentifică-te folosind factorul ales.", "An error occured while verifying the token" : "A apărut o eroare la verificarea jetonului", @@ -252,6 +265,7 @@ "Detailed logs" : "Loguri detaliate", "Update needed" : "E necesară actualizarea", "Please use the command line updater because you have a big instance." : "Folosește actualizarea din linia de comandă deoarece ai o instanță mare.", - "This %s instance is currently in maintenance mode, which may take a while." : "Instanța %s este acum în modul de mentenanță, ceea ce ar putea dura o vreme." + "This %s instance is currently in maintenance mode, which may take a while." : "Instanța %s este acum în modul de mentenanță, ceea ce ar putea dura o vreme.", + "This page will refresh itself when the %s instance is available again." : "Această pagină se va reîmprospăta atunci când %s instance e disponibil din nou." },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" }
\ No newline at end of file diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index 29c2ca6696d..7301ae690cc 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -1,7 +1,5 @@ <!DOCTYPE html> -<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> +<html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" > <head data-requesttoken="<?php p($_['requesttoken']); ?>"> <meta charset="utf-8"> <title> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index 3f9c47f9aa6..985e95294ad 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -1,7 +1,5 @@ <!DOCTYPE html> -<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> +<html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" > <head data-requesttoken="<?php p($_['requesttoken']); ?>"> <meta charset="utf-8"> <title> diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 601af6077f4..b19095dee8e 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -1,7 +1,5 @@ <!DOCTYPE html> -<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> +<html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" > <head data-user="<?php p($_['user_uid']); ?>" data-user-displayname="<?php p($_['user_displayname']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>"> <meta charset="utf-8"> <title> diff --git a/lib/private/IntegrityCheck/Checker.php b/lib/private/IntegrityCheck/Checker.php index ab68f752206..57127f280c4 100644 --- a/lib/private/IntegrityCheck/Checker.php +++ b/lib/private/IntegrityCheck/Checker.php @@ -108,7 +108,11 @@ class Checker { * applicable for very specific scenarios and we should not advertise it * too prominent. So please do not add it to config.sample.php. */ - $isIntegrityCheckDisabled = $this->config->getSystemValue('integrity.check.disabled', false); + if ($this->config !== null) { + $isIntegrityCheckDisabled = $this->config->getSystemValue('integrity.check.disabled', false); + } else { + $isIntegrityCheckDisabled = false; + } if($isIntegrityCheckDisabled === true) { return false; } @@ -401,7 +405,10 @@ class Checker { return json_decode($cachedResults, true); } - return json_decode($this->config->getAppValue('core', self::CACHE_KEY, '{}'), true); + if ($this->config !== null) { + return json_decode($this->config->getAppValue('core', self::CACHE_KEY, '{}'), true); + } + return []; } /** @@ -416,7 +423,9 @@ class Checker { if(!empty($result)) { $resultArray[$scope] = $result; } - $this->config->setAppValue('core', self::CACHE_KEY, json_encode($resultArray)); + if ($this->config !== null) { + $this->config->setAppValue('core', self::CACHE_KEY, json_encode($resultArray)); + } $this->cache->set(self::CACHE_KEY, json_encode($resultArray)); } diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index 2b65f31af28..6219a89e5b3 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -280,7 +280,7 @@ class Session implements IUserSession, Emitter { */ public function login($uid, $password) { $this->session->regenerateId(); - if ($this->validateToken($password)) { + if ($this->validateToken($password, $uid)) { // When logging in with token, the password must be decrypted first before passing to login hook try { $token = $this->tokenProvider->getToken($password); @@ -584,15 +584,24 @@ class Session implements IUserSession, Emitter { * Invalidates the token if checks fail * * @param string $token + * @param string $user login name * @return boolean */ - private function validateToken($token) { + private function validateToken($token, $user = null) { try { $dbToken = $this->tokenProvider->getToken($token); } catch (InvalidTokenException $ex) { return false; } + // Check if login names match + if (!is_null($user) && $dbToken->getLoginName() !== $user) { + // TODO: this makes it imposssible to use different login names on browser and client + // e.g. login by e-mail 'user@example.com' on browser for generating the token will not + // allow to use the client token with the login name 'user'. + return false; + } + if (!$this->checkTokenCredentials($dbToken, $token)) { return false; } diff --git a/settings/css/settings.css b/settings/css/settings.css index e4ddec9152a..3bb88b46283 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -161,10 +161,6 @@ table.nostyle td { padding: 0.2em 0; } width: 32px; } -.ie8 #newgroup-form .icon-add { - height: 30px; -} - .isgroup .groupname { width: 85%; display: block; @@ -281,10 +277,6 @@ input.userFilter {width: 200px;} width: 32px; } - -.ie8 table.hascontrols{border-collapse:collapse;width: 100%;} -.ie8 table.hascontrols tbody tr{border-collapse:collapse;border: 1px solid #ddd !important;} - /* used to highlight a user row in red */ #userlist tr.row-warning { background-color: #FDD; @@ -540,18 +532,6 @@ span.indeterminate { margin-top: -7px; } -.ie8 .strengthify-wrapper { - left: 389px; -} - -.onlyInIE8 { - display: none; -} - -.ie8 .onlyInIE8 { - display: inline; -} - /* OPERA hack for strengthify*/ doesnotexist:-o-prefocus, .strengthify-wrapper { left: 185px; diff --git a/settings/js/authtoken.js b/settings/js/authtoken.js index 215192d7163..1d958a4d675 100644 --- a/settings/js/authtoken.js +++ b/settings/js/authtoken.js @@ -20,14 +20,14 @@ * */ -(function(OC, Backbone) { +(function(OC) { 'use strict'; OC.Settings = OC.Settings || {}; - var AuthToken = Backbone.Model.extend({ + var AuthToken = OC.Backbone.Model.extend({ }); OC.Settings.AuthToken = AuthToken; -})(OC, Backbone); +})(OC); diff --git a/settings/js/authtoken_collection.js b/settings/js/authtoken_collection.js index a78e053995f..ab7f7d5804a 100644 --- a/settings/js/authtoken_collection.js +++ b/settings/js/authtoken_collection.js @@ -20,12 +20,12 @@ * */ -(function(OC, Backbone) { +(function(OC) { 'use strict'; OC.Settings = OC.Settings || {}; - var AuthTokenCollection = Backbone.Collection.extend({ + var AuthTokenCollection = OC.Backbone.Collection.extend({ model: OC.Settings.AuthToken, @@ -49,4 +49,4 @@ OC.Settings.AuthTokenCollection = AuthTokenCollection; -})(OC, Backbone); +})(OC); diff --git a/settings/js/authtoken_view.js b/settings/js/authtoken_view.js index da5861689a0..8fc23bd490e 100644 --- a/settings/js/authtoken_view.js +++ b/settings/js/authtoken_view.js @@ -1,4 +1,4 @@ -/* global Backbone, Handlebars, moment */ +/* global Handlebars, moment */ /** * @author Christoph Wurst <christoph@owncloud.com> @@ -20,7 +20,7 @@ * */ -(function(OC, _, Backbone, $, Handlebars, moment) { +(function(OC, _, $, Handlebars, moment) { 'use strict'; OC.Settings = OC.Settings || {}; @@ -32,7 +32,7 @@ + '<td><a class="icon-delete has-tooltip" title="' + t('core', 'Disconnect') + '"></a></td>' + '<tr>'; - var SubView = Backbone.View.extend({ + var SubView = OC.Backbone.View.extend({ collection: null, /** @@ -94,7 +94,7 @@ } }); - var AuthTokenView = Backbone.View.extend({ + var AuthTokenView = OC.Backbone.View.extend({ collection: null, _views: [], @@ -220,6 +220,8 @@ var destroyingToken = token.destroy(); + $row.find('.icon-delete').tooltip('hide'); + var _this = this; $.when(destroyingToken).fail(function() { OC.Notification.showTemporary(t('core', 'Error while deleting the token')); @@ -237,4 +239,4 @@ OC.Settings.AuthTokenView = AuthTokenView; -})(OC, _, Backbone, $, Handlebars, moment); +})(OC, _, $, Handlebars, moment); diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 9ffb1a38b19..704b1970b14 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -119,6 +119,7 @@ OC.L10N.register( "Unlimited" : "Neomezeně", "Personal info" : "Osobní informace", "Sessions" : "Sezení", + "App passwords" : "Hesla aplikací", "Sync clients" : "Synchronizační klienti", "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)", "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy", @@ -273,7 +274,11 @@ OC.L10N.register( "These are the web, desktop and mobile clients currently logged in to your ownCloud." : "Toto jsou klienti aktuálně přihlášení do této instance ownCloud přes web, počítač, či telefon.", "Browser" : "Prohlížeč", "Most recent activity" : "Nejnovější aktivity", + "You've linked these apps." : "Připojili jste tyto aplikace.", "Name" : "Název", + "An app password is a passcode that gives an app or device permissions to access your %s account." : "Heslo aplikace je přihlašovací údaj umožňující aplikaci nebo přístroji přístup k %s účtu.", + "App name" : "Jméno aplikace", + "Create new app password" : "Vytvořit nové heslo aplikace", "Done" : "Dokončeno", "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", "Desktop client" : "Aplikace pro počítač", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index 55d0af36c77..30380cf6e36 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -117,6 +117,7 @@ "Unlimited" : "Neomezeně", "Personal info" : "Osobní informace", "Sessions" : "Sezení", + "App passwords" : "Hesla aplikací", "Sync clients" : "Synchronizační klienti", "Everything (fatal issues, errors, warnings, info, debug)" : "Vše (fatální problémy, chyby, varování, informační, ladící)", "Info, warnings, errors and fatal issues" : "Informace, varování, chyby a fatální problémy", @@ -271,7 +272,11 @@ "These are the web, desktop and mobile clients currently logged in to your ownCloud." : "Toto jsou klienti aktuálně přihlášení do této instance ownCloud přes web, počítač, či telefon.", "Browser" : "Prohlížeč", "Most recent activity" : "Nejnovější aktivity", + "You've linked these apps." : "Připojili jste tyto aplikace.", "Name" : "Název", + "An app password is a passcode that gives an app or device permissions to access your %s account." : "Heslo aplikace je přihlašovací údaj umožňující aplikaci nebo přístroji přístup k %s účtu.", + "App name" : "Jméno aplikace", + "Create new app password" : "Vytvořit nové heslo aplikace", "Done" : "Dokončeno", "Get the apps to sync your files" : "Získat aplikace pro synchronizaci vašich souborů", "Desktop client" : "Aplikace pro počítač", diff --git a/settings/l10n/he.js b/settings/l10n/he.js index c78e89b6ea9..644c3219a4c 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -119,6 +119,7 @@ OC.L10N.register( "Unlimited" : "ללא הגבלה", "Personal info" : "מידע אישי", "Sessions" : "שיחות", + "App passwords" : "סיסמת יישום", "Sync clients" : "סנכרון לקוחות", "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", "Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים", @@ -273,7 +274,12 @@ OC.L10N.register( "These are the web, desktop and mobile clients currently logged in to your ownCloud." : "אלו הם לקוחות האינטרנט, המחשב השולחני והטלפון שכרגע מחוברים ל- ownCloud שלך.", "Browser" : "דפדפן", "Most recent activity" : "פעילות אחרונה", + "You've linked these apps." : "יישומים אלו כבר קושרו על ידך.", "Name" : "שם", + "An app password is a passcode that gives an app or device permissions to access your %s account." : "סיסמת יישום הנה קוד סיסמא שמאפשרת ליישום או התקן הרשאות גישה לחשבון %s שלך.", + "App name" : "שם יישום", + "Create new app password" : "יצירת סיסמת יישום חדשה", + "Done" : "הסתיים", "Get the apps to sync your files" : "קבלת היישומים לסנכרון הקבצים שלך", "Desktop client" : "מחשב אישי", "Android app" : "יישום אנדרואיד", diff --git a/settings/l10n/he.json b/settings/l10n/he.json index 60b4ecc8dec..48953344b83 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -117,6 +117,7 @@ "Unlimited" : "ללא הגבלה", "Personal info" : "מידע אישי", "Sessions" : "שיחות", + "App passwords" : "סיסמת יישום", "Sync clients" : "סנכרון לקוחות", "Everything (fatal issues, errors, warnings, info, debug)" : "הכול (נושאים חמורים, שגיאות, אזהרות, מידע, ניפוי שגיאות)", "Info, warnings, errors and fatal issues" : "מידע, אזהרות, שגיאות ונושאים חמורים", @@ -271,7 +272,12 @@ "These are the web, desktop and mobile clients currently logged in to your ownCloud." : "אלו הם לקוחות האינטרנט, המחשב השולחני והטלפון שכרגע מחוברים ל- ownCloud שלך.", "Browser" : "דפדפן", "Most recent activity" : "פעילות אחרונה", + "You've linked these apps." : "יישומים אלו כבר קושרו על ידך.", "Name" : "שם", + "An app password is a passcode that gives an app or device permissions to access your %s account." : "סיסמת יישום הנה קוד סיסמא שמאפשרת ליישום או התקן הרשאות גישה לחשבון %s שלך.", + "App name" : "שם יישום", + "Create new app password" : "יצירת סיסמת יישום חדשה", + "Done" : "הסתיים", "Get the apps to sync your files" : "קבלת היישומים לסנכרון הקבצים שלך", "Desktop client" : "מחשב אישי", "Android app" : "יישום אנדרואיד", diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js index 0d68b384931..903b374e0af 100644 --- a/settings/l10n/pl.js +++ b/settings/l10n/pl.js @@ -28,6 +28,7 @@ OC.L10N.register( "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", + "Redis" : "Redis", "Security & setup warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji", "Sharing" : "Udostępnianie", "Server-side encryption" : "Szyfrowanie po stronie serwera", @@ -48,6 +49,7 @@ OC.L10N.register( "Migration in progress. Please wait until the migration is finished" : "Trwa migracja. Proszę poczekać, aż migracja dobiegnie końca.", "Migration started …" : "Migracja rozpoczęta...", "Sending..." : "Wysyłam...", + "Experimental" : "Eksperymentalny", "All" : "Wszystkie", "No apps found for your version" : "Nie znaleziono aplikacji dla twojej wersji", "Update to %s" : "Uaktualnij do %s", diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json index bdae17d4eef..f1c1994dd1d 100644 --- a/settings/l10n/pl.json +++ b/settings/l10n/pl.json @@ -26,6 +26,7 @@ "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", + "Redis" : "Redis", "Security & setup warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji", "Sharing" : "Udostępnianie", "Server-side encryption" : "Szyfrowanie po stronie serwera", @@ -46,6 +47,7 @@ "Migration in progress. Please wait until the migration is finished" : "Trwa migracja. Proszę poczekać, aż migracja dobiegnie końca.", "Migration started …" : "Migracja rozpoczęta...", "Sending..." : "Wysyłam...", + "Experimental" : "Eksperymentalny", "All" : "Wszystkie", "No apps found for your version" : "Nie znaleziono aplikacji dla twojej wersji", "Update to %s" : "Uaktualnij do %s", diff --git a/settings/l10n/ro.js b/settings/l10n/ro.js index b16986e611d..d0a0b107d0a 100644 --- a/settings/l10n/ro.js +++ b/settings/l10n/ro.js @@ -58,6 +58,7 @@ OC.L10N.register( "All" : "Toate ", "No apps found for your version" : "Nu au fost găsite aplicații pentru versiunea ta", "The app will be downloaded from the app store" : "Aplicația va fi descărcată din magazin", + "_You have %n app update pending_::_You have %n app updates pending_" : ["Ai %n actualizare de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare"], "Please wait...." : "Aşteptaţi vă rog....", "Error while disabling app" : "Eroare în timpul dezactivării aplicației", "Disable" : "Dezactivați", @@ -67,7 +68,10 @@ OC.L10N.register( "Error while updating app" : "Eroare în timpul actualizării aplicaţiei", "Updated" : "Actualizat", "Uninstalling ...." : "Dezinstalaza ....", + "Error while uninstalling app" : "Eroare la dezinstalarea aplicației", "Uninstall" : "Dezinstalați", + "App update" : "Actualizare aplicație", + "Disconnect" : "Deconectare", "Valid until {date}" : "Valabil până la {date}", "Delete" : "Șterge", "An error occurred: {message}" : "A apărut o eroare: {message}", @@ -79,26 +83,40 @@ OC.L10N.register( "Strong password" : "Parolă puternică", "Groups" : "Grupuri", "Unable to delete {objName}" : "Nu s-a putut șterge {objName}", + "Error creating group: {message}" : "Eroare la crearea grupului: {message}", + "A valid group name must be provided" : "Trebuie furnizat un nume de grup valid", "deleted {groupName}" : "{groupName} s-a șters", "undo" : "Anulează ultima acțiune", "no group" : "niciun grup", "never" : "niciodată", "deleted {userName}" : "{userName} șters", "add group" : "adăugaţi grupul", + "Changing the password will result in data loss, because data recovery is not available for this user" : "Schimbarea parolei va rezulta în pierderea datelor deoarece recuperarea acestora nu este disponibilă pentru acest utilizator", "A valid username must be provided" : "Trebuie să furnizaţi un nume de utilizator valid", + "Error creating user: {message}" : "Eroare la crearea utilizatorului: {message}", "A valid password must be provided" : "Trebuie să furnizaţi o parolă validă", + "A valid email must be provided" : "Trebuie furnizată o adresă email validă", "__language_name__" : "_language_name_", "Unlimited" : "Nelimitată", "Personal info" : "Informații personale", "Sessions" : "Sesiuni", + "App passwords" : "Parole aplicații", "Sync clients" : "Sincronizează clienții", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)", + "Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale", + "Warnings, errors and fatal issues" : "Avertizări, erori și erori fatale", + "Errors and fatal issues" : "Erori și erori fatale", + "Fatal issues only" : "Doar erori fatale", "None" : "Niciuna", "Login" : "Autentificare", + "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Modulul PHP \"Fileinfo\" lipsește. Va recomandam sa activaţi acest modul pentru a obține cele mai bune rezultate cu detectarea mime-type.", + "All checks passed." : "Toate verificările s-au terminat fără erori.", "Open documentation" : "Deschide documentația", "Allow apps to use the Share API" : "Permite aplicațiilor să folosească API-ul de partajare", + "Allow users to share via link" : "Permite utilizatorilor să partajeze via link", "Allow public uploads" : "Permite încărcări publice", "Enforce password protection" : "Impune protecția prin parolă", "Set default expiration date" : "Setează data implicită de expirare", diff --git a/settings/l10n/ro.json b/settings/l10n/ro.json index aa38c2ec739..4f3a30ab5c3 100644 --- a/settings/l10n/ro.json +++ b/settings/l10n/ro.json @@ -56,6 +56,7 @@ "All" : "Toate ", "No apps found for your version" : "Nu au fost găsite aplicații pentru versiunea ta", "The app will be downloaded from the app store" : "Aplicația va fi descărcată din magazin", + "_You have %n app update pending_::_You have %n app updates pending_" : ["Ai %n actualizare de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare","Ai %n actualizări de aplicație în așteptare"], "Please wait...." : "Aşteptaţi vă rog....", "Error while disabling app" : "Eroare în timpul dezactivării aplicației", "Disable" : "Dezactivați", @@ -65,7 +66,10 @@ "Error while updating app" : "Eroare în timpul actualizării aplicaţiei", "Updated" : "Actualizat", "Uninstalling ...." : "Dezinstalaza ....", + "Error while uninstalling app" : "Eroare la dezinstalarea aplicației", "Uninstall" : "Dezinstalați", + "App update" : "Actualizare aplicație", + "Disconnect" : "Deconectare", "Valid until {date}" : "Valabil până la {date}", "Delete" : "Șterge", "An error occurred: {message}" : "A apărut o eroare: {message}", @@ -77,26 +81,40 @@ "Strong password" : "Parolă puternică", "Groups" : "Grupuri", "Unable to delete {objName}" : "Nu s-a putut șterge {objName}", + "Error creating group: {message}" : "Eroare la crearea grupului: {message}", + "A valid group name must be provided" : "Trebuie furnizat un nume de grup valid", "deleted {groupName}" : "{groupName} s-a șters", "undo" : "Anulează ultima acțiune", "no group" : "niciun grup", "never" : "niciodată", "deleted {userName}" : "{userName} șters", "add group" : "adăugaţi grupul", + "Changing the password will result in data loss, because data recovery is not available for this user" : "Schimbarea parolei va rezulta în pierderea datelor deoarece recuperarea acestora nu este disponibilă pentru acest utilizator", "A valid username must be provided" : "Trebuie să furnizaţi un nume de utilizator valid", + "Error creating user: {message}" : "Eroare la crearea utilizatorului: {message}", "A valid password must be provided" : "Trebuie să furnizaţi o parolă validă", + "A valid email must be provided" : "Trebuie furnizată o adresă email validă", "__language_name__" : "_language_name_", "Unlimited" : "Nelimitată", "Personal info" : "Informații personale", "Sessions" : "Sesiuni", + "App passwords" : "Parole aplicații", "Sync clients" : "Sincronizează clienții", + "Everything (fatal issues, errors, warnings, info, debug)" : "Tot (erori fatale, erori, avertizări, informări, depanare)", + "Info, warnings, errors and fatal issues" : "Informări, avertizări, erori și erori fatale", + "Warnings, errors and fatal issues" : "Avertizări, erori și erori fatale", + "Errors and fatal issues" : "Erori și erori fatale", + "Fatal issues only" : "Doar erori fatale", "None" : "Niciuna", "Login" : "Autentificare", + "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Modulul PHP \"Fileinfo\" lipsește. Va recomandam sa activaţi acest modul pentru a obține cele mai bune rezultate cu detectarea mime-type.", + "All checks passed." : "Toate verificările s-au terminat fără erori.", "Open documentation" : "Deschide documentația", "Allow apps to use the Share API" : "Permite aplicațiilor să folosească API-ul de partajare", + "Allow users to share via link" : "Permite utilizatorilor să partajeze via link", "Allow public uploads" : "Permite încărcări publice", "Enforce password protection" : "Impune protecția prin parolă", "Set default expiration date" : "Setează data implicită de expirare", diff --git a/settings/templates/personal.php b/settings/templates/personal.php index b9b8429d943..e93155f0f39 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -121,11 +121,11 @@ if($_['passwordChangeSupported']) { <div class="hidden icon-checkmark" id="password-changed"></div> <div class="hidden" id="password-error"><?php p($l->t('Unable to change your password'));?></div> <br> - <label for="pass1" class="onlyInIE8"><?php echo $l->t('Current password');?>: </label> + <label for="pass1" class="hidden-visually"><?php echo $l->t('Current password');?>: </label> <input type="password" id="pass1" name="oldpassword" placeholder="<?php echo $l->t('Current password');?>" autocomplete="off" autocapitalize="off" autocorrect="off" /> - <label for="pass2" class="onlyInIE8"><?php echo $l->t('New password');?>: </label> + <label for="pass2" class="hidden-visually"><?php echo $l->t('New password');?>: </label> <input type="password" id="pass2" name="personal-password" placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#personal-show" diff --git a/tests/lib/User/SessionTest.php b/tests/lib/User/SessionTest.php index eef4c7ff5ea..447c6142f34 100644 --- a/tests/lib/User/SessionTest.php +++ b/tests/lib/User/SessionTest.php @@ -315,6 +315,36 @@ class SessionTest extends \Test\TestCase { } /** + * When using a device token, the loginname must match the one that was used + * when generating the token on the browser. + */ + public function testLoginWithDifferentTokenLoginName() { + $session = $this->getMock('\OC\Session\Memory', array(), array('')); + $manager = $this->getMock('\OC\User\Manager'); + $backend = $this->getMock('\Test\Util\User\Dummy'); + $userSession = new \OC\User\Session($manager, $session, $this->timeFactory, $this->tokenProvider, $this->config); + $username = 'user123'; + $token = new \OC\Authentication\Token\DefaultToken(); + $token->setLoginName($username); + + $session->expects($this->never()) + ->method('set'); + $session->expects($this->once()) + ->method('regenerateId'); + $this->tokenProvider->expects($this->once()) + ->method('getToken') + ->with('bar') + ->will($this->returnValue($token)); + + $manager->expects($this->once()) + ->method('checkPassword') + ->with('foo', 'bar') + ->will($this->returnValue(false)); + + $userSession->login('foo', 'bar'); + } + + /** * @expectedException \OC\Authentication\Exceptions\PasswordLoginForbiddenException */ public function testLogClientInNoTokenPasswordWith2fa() { |