diff options
-rw-r--r-- | apps/comments/l10n/sr.js | 1 | ||||
-rw-r--r-- | apps/comments/l10n/sr.json | 1 | ||||
-rw-r--r-- | apps/dav/l10n/sr.js | 1 | ||||
-rw-r--r-- | apps/dav/l10n/sr.json | 1 | ||||
-rw-r--r-- | apps/dav/lib/Files/FileSearchBackend.php | 2 | ||||
-rw-r--r-- | apps/federation/l10n/sr.js | 1 | ||||
-rw-r--r-- | apps/federation/l10n/sr.json | 1 | ||||
-rw-r--r-- | apps/files/css/files.scss | 5 | ||||
-rw-r--r-- | apps/files/l10n/sr.js | 1 | ||||
-rw-r--r-- | apps/files/l10n/sr.json | 1 | ||||
-rw-r--r-- | apps/oauth2/l10n/nb.js | 1 | ||||
-rw-r--r-- | apps/oauth2/l10n/nb.json | 1 | ||||
-rw-r--r-- | apps/theming/lib/ThemingDefaults.php | 11 | ||||
-rw-r--r-- | apps/theming/tests/ThemingDefaultsTest.php | 29 | ||||
-rw-r--r-- | core/css/guest.css | 2 | ||||
-rw-r--r-- | core/css/inputs.scss | 4 | ||||
-rw-r--r-- | core/css/mobile.scss | 5 | ||||
-rw-r--r-- | core/css/styles.scss | 5 | ||||
-rw-r--r-- | core/js/jquery.avatar.js | 1 | ||||
-rw-r--r-- | core/l10n/nb.js | 3 | ||||
-rw-r--r-- | core/l10n/nb.json | 3 | ||||
-rw-r--r-- | core/l10n/sr.js | 3 | ||||
-rw-r--r-- | core/l10n/sr.json | 3 | ||||
-rw-r--r-- | lib/private/Settings/Manager.php | 23 | ||||
-rw-r--r-- | tests/lib/Settings/ManagerTest.php | 41 |
25 files changed, 129 insertions, 21 deletions
diff --git a/apps/comments/l10n/sr.js b/apps/comments/l10n/sr.js index 82ae7cc212d..7aebd4e5b69 100644 --- a/apps/comments/l10n/sr.js +++ b/apps/comments/l10n/sr.js @@ -29,6 +29,7 @@ OC.L10N.register( "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Поменути сте на фајлу \"{file}\", у коментару који је оставио корисник који је од тада избрисан", "%1$s mentioned you in a comment on “%2$s”" : "%1$s Вас је поменуо у коментару на \"%2$s\"", "{user} mentioned you in a comment on “{file}”" : "{user} Вас је поменуо у коментару на “{file}”", + "Files app plugin to add comments to files" : "Додатак апликацији за фајлове да додајете коментаре на фајлове", "Unknown user" : "Непознат корисник", "A (now) deleted user mentioned you in a comment on “%s”" : "(Сада) обрисани корисник Вас је поменуо у коментару на “%s”", "A (now) deleted user mentioned you in a comment on “{file}”" : "(Сада) обрисани корисник Вас је поменуо у коментару на “{file}”" diff --git a/apps/comments/l10n/sr.json b/apps/comments/l10n/sr.json index 0f2a7735382..b8d0af4b5c9 100644 --- a/apps/comments/l10n/sr.json +++ b/apps/comments/l10n/sr.json @@ -27,6 +27,7 @@ "You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Поменути сте на фајлу \"{file}\", у коментару који је оставио корисник који је од тада избрисан", "%1$s mentioned you in a comment on “%2$s”" : "%1$s Вас је поменуо у коментару на \"%2$s\"", "{user} mentioned you in a comment on “{file}”" : "{user} Вас је поменуо у коментару на “{file}”", + "Files app plugin to add comments to files" : "Додатак апликацији за фајлове да додајете коментаре на фајлове", "Unknown user" : "Непознат корисник", "A (now) deleted user mentioned you in a comment on “%s”" : "(Сада) обрисани корисник Вас је поменуо у коментару на “%s”", "A (now) deleted user mentioned you in a comment on “{file}”" : "(Сада) обрисани корисник Вас је поменуо у коментару на “{file}”" diff --git a/apps/dav/l10n/sr.js b/apps/dav/l10n/sr.js index b44c5cb8729..45827818454 100644 --- a/apps/dav/l10n/sr.js +++ b/apps/dav/l10n/sr.js @@ -60,6 +60,7 @@ OC.L10N.register( "More options at %s" : "Још опција на %s", "Contacts" : "Контакти", "WebDAV" : "ВебДАВ", + "WebDAV endpoint" : "WebDAV крајња тачка", "Technical details" : "Технички детаљи", "Remote Address: %s" : "Удаљена адреса: %s", "Request ID: %s" : "ИД захтева: %s", diff --git a/apps/dav/l10n/sr.json b/apps/dav/l10n/sr.json index 97dc87419e1..43265e74ecd 100644 --- a/apps/dav/l10n/sr.json +++ b/apps/dav/l10n/sr.json @@ -58,6 +58,7 @@ "More options at %s" : "Још опција на %s", "Contacts" : "Контакти", "WebDAV" : "ВебДАВ", + "WebDAV endpoint" : "WebDAV крајња тачка", "Technical details" : "Технички детаљи", "Remote Address: %s" : "Удаљена адреса: %s", "Request ID: %s" : "ИД захтева: %s", diff --git a/apps/dav/lib/Files/FileSearchBackend.php b/apps/dav/lib/Files/FileSearchBackend.php index cac6e8ac52b..0157ae038cb 100644 --- a/apps/dav/lib/Files/FileSearchBackend.php +++ b/apps/dav/lib/Files/FileSearchBackend.php @@ -355,7 +355,7 @@ class FileSearchBackend implements ISearchBackend { return max(0, 0 + $value); } $date = \DateTime::createFromFormat(\DateTime::ATOM, $value); - return ($date instanceof \DateTime) ? $date->getTimestamp() : 0; + return ($date instanceof \DateTime && $date->getTimestamp() !== false) ? $date->getTimestamp() : 0; default: return $value; } diff --git a/apps/federation/l10n/sr.js b/apps/federation/l10n/sr.js index 0feea35298f..4d3bf695848 100644 --- a/apps/federation/l10n/sr.js +++ b/apps/federation/l10n/sr.js @@ -6,6 +6,7 @@ OC.L10N.register( "No server to federate with found" : "Није нађен сервер за здруживање", "Could not add server" : "Неуспело додавање сервера", "Federation" : "Здруживање", + "Federation allows you to connect with other trusted servers to exchange the user directory." : "Здруживање омогућава да се повежете са другим серверима од поверења и да размењујете корисничке директоријуме.", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Здруживање омогућава да се повежете са другим серверима од поверења и да мењате корисничке директоријуме.", "Trusted servers" : "Сервери од поверења", "Add server automatically once a federated share was created successfully" : "Додај сервер аутоматски по успешном прављењу здруженог дељења", diff --git a/apps/federation/l10n/sr.json b/apps/federation/l10n/sr.json index ffb64b96b39..45207c0c61b 100644 --- a/apps/federation/l10n/sr.json +++ b/apps/federation/l10n/sr.json @@ -4,6 +4,7 @@ "No server to federate with found" : "Није нађен сервер за здруживање", "Could not add server" : "Неуспело додавање сервера", "Federation" : "Здруживање", + "Federation allows you to connect with other trusted servers to exchange the user directory." : "Здруживање омогућава да се повежете са другим серверима од поверења и да размењујете корисничке директоријуме.", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Здруживање омогућава да се повежете са другим серверима од поверења и да мењате корисничке директоријуме.", "Trusted servers" : "Сервери од поверења", "Add server automatically once a federated share was created successfully" : "Додај сервер аутоматски по успешном прављењу здруженог дељења", diff --git a/apps/files/css/files.scss b/apps/files/css/files.scss index 47120ede7a0..c41255b9868 100644 --- a/apps/files/css/files.scss +++ b/apps/files/css/files.scss @@ -612,12 +612,15 @@ table tr.summary td { table.dragshadow { width:auto; - z-index: 100; + z-index: 2000; } table.dragshadow td.filename { padding-left:60px; padding-right:16px; height: 36px; + + /* Override "max-width: 0" to prevent file name and size from overlapping */ + max-width: unset; } table.dragshadow td.size { padding-right:8px; diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index c9871c0e397..ac0cbc6d4c4 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -127,6 +127,7 @@ OC.L10N.register( "A file or folder has been <strong>restored</strong>" : "Фајл или фасцикла су <strong>враћени</strong>", "Unlimited" : "Неограничено", "Upload (max. %s)" : "Отпремање (макс. %s)", + "File Management" : "Управљање фајловима", "File handling" : "Руковање фајловима", "Maximum upload size" : "Највећа величина отпремања", "max. possible: " : "највише могуће:", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index ecda1377717..0597bef11f1 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -125,6 +125,7 @@ "A file or folder has been <strong>restored</strong>" : "Фајл или фасцикла су <strong>враћени</strong>", "Unlimited" : "Неограничено", "Upload (max. %s)" : "Отпремање (макс. %s)", + "File Management" : "Управљање фајловима", "File handling" : "Руковање фајловима", "Maximum upload size" : "Највећа величина отпремања", "max. possible: " : "највише могуће:", diff --git a/apps/oauth2/l10n/nb.js b/apps/oauth2/l10n/nb.js index ea1d7a57de8..8a7040fecd6 100644 --- a/apps/oauth2/l10n/nb.js +++ b/apps/oauth2/l10n/nb.js @@ -1,6 +1,7 @@ OC.L10N.register( "oauth2", { + "Your redirect URL needs to be a full URL for example: https://yourdomain.com/path" : "URL for videresending må være en fullstendig URL. For eksempel https://yourdomain.com/path", "OAuth 2.0" : "OAuth 2.0", "OAuth 2.0 clients" : "OAuth 2.0-klienter", "Name" : "Navn", diff --git a/apps/oauth2/l10n/nb.json b/apps/oauth2/l10n/nb.json index 0aec1d3727c..0fa1155655d 100644 --- a/apps/oauth2/l10n/nb.json +++ b/apps/oauth2/l10n/nb.json @@ -1,4 +1,5 @@ { "translations": { + "Your redirect URL needs to be a full URL for example: https://yourdomain.com/path" : "URL for videresending må være en fullstendig URL. For eksempel https://yourdomain.com/path", "OAuth 2.0" : "OAuth 2.0", "OAuth 2.0 clients" : "OAuth 2.0-klienter", "Name" : "Navn", diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 72286ece4b8..fe1b1d4c17f 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -151,9 +151,14 @@ class ThemingDefaults extends \OC_Defaults { public function getShortFooter() { $slogan = $this->getSlogan(); - $footer = '<a href="'. $this->getBaseUrl() . '" target="_blank"' . - ' rel="noreferrer noopener">' .$this->getEntity() . '</a>'. - ($slogan !== '' ? ' – ' . $slogan : ''); + $baseUrl = $this->getBaseUrl(); + if ($baseUrl !== '') { + $footer = '<a href="' . $baseUrl . '" target="_blank"' . + ' rel="noreferrer noopener" class="entity-name">' . $this->getEntity() . '</a>'; + } else { + $footer = '<span class="entity-name">' .$this->getEntity() . '</span>'; + } + $footer .= ($slogan !== '' ? ' – ' . $slogan : ''); $links = [ [ diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php index 87b2003ded2..5d075709dc5 100644 --- a/apps/theming/tests/ThemingDefaultsTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -262,7 +262,22 @@ class ThemingDefaultsTest extends TestCase { ['theming', 'privacyUrl', '', ''], ]); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a> – Slogan', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan', $this->template->getShortFooter()); + } + + public function testGetShortFooterEmptyUrl() { + $this->config + ->expects($this->exactly(5)) + ->method('getAppValue') + ->willReturnMap([ + ['theming', 'url', $this->defaults->getBaseUrl(), ''], + ['theming', 'name', 'Nextcloud', 'Name'], + ['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'], + ['theming', 'imprintUrl', '', ''], + ['theming', 'privacyUrl', '', ''], + ]); + + $this->assertEquals('<span class="entity-name">Name</span> – Slogan', $this->template->getShortFooter()); } public function testGetShortFooterEmptySlogan() { @@ -277,7 +292,7 @@ class ThemingDefaultsTest extends TestCase { ['theming', 'privacyUrl', '', ''], ]); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a>', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a>', $this->template->getShortFooter()); } public function testGetShortFooterImprint() { @@ -297,7 +312,7 @@ class ThemingDefaultsTest extends TestCase { ->method('t') ->willReturnArgument(0); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a> – Slogan<br/><a href="https://example.com/imprint" class="legal" target="_blank" rel="noreferrer noopener">Legal notice</a>', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan<br/><a href="https://example.com/imprint" class="legal" target="_blank" rel="noreferrer noopener">Legal notice</a>', $this->template->getShortFooter()); } public function testGetShortFooterPrivacy() { @@ -317,7 +332,7 @@ class ThemingDefaultsTest extends TestCase { ->method('t') ->willReturnArgument(0); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a> – Slogan<br/><a href="https://example.com/privacy" class="legal" target="_blank" rel="noreferrer noopener">Privacy policy</a>', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan<br/><a href="https://example.com/privacy" class="legal" target="_blank" rel="noreferrer noopener">Privacy policy</a>', $this->template->getShortFooter()); } public function testGetShortFooterAllLegalLinks() { @@ -337,7 +352,7 @@ class ThemingDefaultsTest extends TestCase { ->method('t') ->willReturnArgument(0); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a> – Slogan<br/><a href="https://example.com/imprint" class="legal" target="_blank" rel="noreferrer noopener">Legal notice</a> · <a href="https://example.com/privacy" class="legal" target="_blank" rel="noreferrer noopener">Privacy policy</a>', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan<br/><a href="https://example.com/imprint" class="legal" target="_blank" rel="noreferrer noopener">Legal notice</a> · <a href="https://example.com/privacy" class="legal" target="_blank" rel="noreferrer noopener">Privacy policy</a>', $this->template->getShortFooter()); } public function invalidLegalUrlProvider() { @@ -363,7 +378,7 @@ class ThemingDefaultsTest extends TestCase { ['theming', 'privacyUrl', '', ''], ]); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a> – Slogan', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan', $this->template->getShortFooter()); } /** @@ -382,7 +397,7 @@ class ThemingDefaultsTest extends TestCase { ['theming', 'privacyUrl', '', $invalidPrivacyUrl], ]); - $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener">Name</a> – Slogan', $this->template->getShortFooter()); + $this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan', $this->template->getShortFooter()); } public function testgetColorPrimaryWithDefault() { diff --git a/core/css/guest.css b/core/css/guest.css index 5f4eaefe80a..fc926688c44 100644 --- a/core/css/guest.css +++ b/core/css/guest.css @@ -746,7 +746,7 @@ footer { margin-top: auto; } -footer .info a { +footer .info .entity-name { font-weight: 600; } diff --git a/core/css/inputs.scss b/core/css/inputs.scss index 925069917e0..365a7c9c426 100644 --- a/core/css/inputs.scss +++ b/core/css/inputs.scss @@ -469,7 +469,7 @@ input { white-space: nowrap; text-overflow: ellipsis; background: var(--color-main-background); - color: var(--color-text-lighter); + color: var(--color-text-lighter) !important; box-sizing: content-box; border-radius: var(--border-radius); border: 1px solid var(--color-border-dark); @@ -514,7 +514,7 @@ input { white-space: nowrap; text-overflow: ellipsis; background: var(--color-main-background); - color: var(--color-text-lighter); + color: var(--color-text-lighter) !important; box-sizing: content-box; border-radius: var(--border-radius); border: 1px solid var(--color-border-dark); diff --git a/core/css/mobile.scss b/core/css/mobile.scss index 8fff98af4d6..6f061abc75c 100644 --- a/core/css/mobile.scss +++ b/core/css/mobile.scss @@ -166,4 +166,9 @@ right: 27px; } } + + #notification-container { + max-width: 100%; + width: 100%; + } } diff --git a/core/css/styles.scss b/core/css/styles.scss index 6a72df0e177..2d6df4c3932 100644 --- a/core/css/styles.scss +++ b/core/css/styles.scss @@ -399,16 +399,17 @@ td.avatar { } #notification-container { + left: 50%; + max-width: 60%; position: fixed; top: 0; - width: 100%; text-align: center; + transform: translateX(-50%); z-index: 8000; } #notification { margin: 0 auto; - max-width: 60%; z-index: 8000; background-color: var(--color-main-background); border: 0; diff --git a/core/js/jquery.avatar.js b/core/js/jquery.avatar.js index 7384804c9d4..a821a41cc86 100644 --- a/core/js/jquery.avatar.js +++ b/core/js/jquery.avatar.js @@ -141,5 +141,6 @@ img.width = size; img.height = size; img.src = url; + img.alt = ''; }; }(jQuery)); diff --git a/core/l10n/nb.js b/core/l10n/nb.js index c81f499f903..9fd491dd498 100644 --- a/core/l10n/nb.js +++ b/core/l10n/nb.js @@ -144,6 +144,8 @@ OC.L10N.register( "This is particularly recommended when using the desktop client for file synchronisation." : "Dette anbefales spesielt når du bruker skrivebordsklienten for filsynkronisering.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db: convert-type', eller se <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentasjon ↗</a>.", "Use of the the built in php mailer is no longer supported. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Please update your email server settings ↗<a/>." : "Bruk av den innebygde php e-post sending støttes ikke lenger. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Vennligst oppdater innstillinger for e-postserver ↗<a/>.", + "The PHP memory limit is below the recommended value of 512MB." : "PHP er satt opp med mindre minne enn anbefalt minste verdi på 512MB.", + "Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Enkelte mapper er eid av annen bruker enn den vev tjener kjøre under. Dette kan kan oppstå hvis program/utvidelser er installert manuelt. Sjekk eierskap og tillatelser på følgende mapper:", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett", "Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan nås eller at du flytter datamappen ut av vev-tjenerens dokumentrot.", "The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "HTTP-hodet \"{header}\" er ikke satt opp likt \"{expected}\". Dette kan være en sikkerhet- eller personvernsrisiko og det anbefales at denne innstillingen endres.", @@ -211,6 +213,7 @@ OC.L10N.register( "{sharee} (remote group)" : "{sharee} (remote group)", "{sharee} (email)" : "{sharee} (email)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", + "{sharee} (conversation)" : "{sharee} (conversation)", "Share" : "Del", "Name or email address..." : "Navn eller e-postadresse…", "Name or federated cloud ID..." : "Navn eller sammenknyttet sky-ID…", diff --git a/core/l10n/nb.json b/core/l10n/nb.json index d51e2cb955a..291a9dbb009 100644 --- a/core/l10n/nb.json +++ b/core/l10n/nb.json @@ -142,6 +142,8 @@ "This is particularly recommended when using the desktop client for file synchronisation." : "Dette anbefales spesielt når du bruker skrivebordsklienten for filsynkronisering.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db: convert-type', eller se <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">dokumentasjon ↗</a>.", "Use of the the built in php mailer is no longer supported. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Please update your email server settings ↗<a/>." : "Bruk av den innebygde php e-post sending støttes ikke lenger. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Vennligst oppdater innstillinger for e-postserver ↗<a/>.", + "The PHP memory limit is below the recommended value of 512MB." : "PHP er satt opp med mindre minne enn anbefalt minste verdi på 512MB.", + "Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Enkelte mapper er eid av annen bruker enn den vev tjener kjøre under. Dette kan kan oppstå hvis program/utvidelser er installert manuelt. Sjekk eierskap og tillatelser på følgende mapper:", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett", "Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Det anbefales sterkt at du setter opp vev-tjeneren slik at datamappen ikke kan nås eller at du flytter datamappen ut av vev-tjenerens dokumentrot.", "The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "HTTP-hodet \"{header}\" er ikke satt opp likt \"{expected}\". Dette kan være en sikkerhet- eller personvernsrisiko og det anbefales at denne innstillingen endres.", @@ -209,6 +211,7 @@ "{sharee} (remote group)" : "{sharee} (remote group)", "{sharee} (email)" : "{sharee} (email)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", + "{sharee} (conversation)" : "{sharee} (conversation)", "Share" : "Del", "Name or email address..." : "Navn eller e-postadresse…", "Name or federated cloud ID..." : "Navn eller sammenknyttet sky-ID…", diff --git a/core/l10n/sr.js b/core/l10n/sr.js index 53a2324364b..5434f82c025 100644 --- a/core/l10n/sr.js +++ b/core/l10n/sr.js @@ -144,6 +144,8 @@ OC.L10N.register( "This is particularly recommended when using the desktop client for file synchronisation." : "Ово се нарочито порепоручује ако се користи клијент програм у графичком окружењу за синхронизацију.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation ↗</a>." : "За пресељење на другу базу података, користите алат командне линије: 'occ db:convert-type', или погледајте <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документацију ↗</a>.", "Use of the the built in php mailer is no longer supported. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Please update your email server settings ↗<a/>." : "Коришћење уграђеног php mailer-а више није подржано. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Молимо ажурирајте и-мејл сервер поставке ↗<a/>.", + "The PHP memory limit is below the recommended value of 512MB." : "Меморијски лимит PHP-а је испод препоручене вредности од 512MB.", + "Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Власник неких апликативних директоријума је корисник који није исти као и корисник по којим ради веб сервер. Ово је могуће ако су се апликације инсталирале ручно. Проверите привилегије над следећим апликативним директоријумима:", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", "Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Ваша фасцикла са подацима и фајлови су вероватно доступни са интернета. .htaccess фајл не ради. Препоручујемо да подесите Ваш веб сервер тако да је фасцикла са подацима ван фасцикле кореног документа веб сервера.", "The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "HTTP заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручује се да подесите ову поставку.", @@ -211,6 +213,7 @@ OC.L10N.register( "{sharee} (remote group)" : "{sharee} (удаљена група)", "{sharee} (email)" : "{sharee} (е-пошта)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", + "{sharee} (conversation)" : "{sharee} (разговор)", "Share" : "Дели", "Name or email address..." : "Име или адреса е-поште...", "Name or federated cloud ID..." : "Име или ID здруженог облака...", diff --git a/core/l10n/sr.json b/core/l10n/sr.json index 7c4870e639e..f02e4170c66 100644 --- a/core/l10n/sr.json +++ b/core/l10n/sr.json @@ -142,6 +142,8 @@ "This is particularly recommended when using the desktop client for file synchronisation." : "Ово се нарочито порепоручује ако се користи клијент програм у графичком окружењу за синхронизацију.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">documentation ↗</a>." : "За пресељење на другу базу података, користите алат командне линије: 'occ db:convert-type', или погледајте <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">документацију ↗</a>.", "Use of the the built in php mailer is no longer supported. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Please update your email server settings ↗<a/>." : "Коришћење уграђеног php mailer-а више није подржано. <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">Молимо ажурирајте и-мејл сервер поставке ↗<a/>.", + "The PHP memory limit is below the recommended value of 512MB." : "Меморијски лимит PHP-а је испод препоручене вредности од 512MB.", + "Some app directories are owned by a different user than the web server one. This may be the case if apps have been installed manually. Check the permissions of the following app directories:" : "Власник неких апликативних директоријума је корисник који није исти као и корисник по којим ради веб сервер. Ово је могуће ако су се апликације инсталирале ручно. Проверите привилегије над следећим апликативним директоријумима:", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", "Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root." : "Ваша фасцикла са подацима и фајлови су вероватно доступни са интернета. .htaccess фајл не ради. Препоручујемо да подесите Ваш веб сервер тако да је фасцикла са подацима ван фасцикле кореног документа веб сервера.", "The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "HTTP заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручује се да подесите ову поставку.", @@ -209,6 +211,7 @@ "{sharee} (remote group)" : "{sharee} (удаљена група)", "{sharee} (email)" : "{sharee} (е-пошта)", "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", + "{sharee} (conversation)" : "{sharee} (разговор)", "Share" : "Дели", "Name or email address..." : "Име или адреса е-поште...", "Name or federated cloud ID..." : "Име или ID здруженог облака...", diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 260e33d1929..f1baf35b7ab 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -133,7 +133,11 @@ class Manager implements IManager { * @return void */ public function registerSection(string $type, string $section) { - $this->sectionClasses[$section] = $type; + if (!isset($this->sectionClasses[$type])) { + $this->sectionClasses[$type] = []; + } + + $this->sectionClasses[$type][] = $section; } /** @@ -145,7 +149,11 @@ class Manager implements IManager { $this->sections[$type] = []; } - foreach ($this->sectionClasses as $class => $sectionType) { + if (!isset($this->sectionClasses[$type])) { + return $this->sections[$type]; + } + + foreach ($this->sectionClasses[$type] as $index => $class) { try { /** @var ISection $section */ $section = \OC::$server->query($class); @@ -159,9 +167,16 @@ class Manager implements IManager { continue; } - $this->sections[$sectionType][$section->getID()] = $section; + $sectionID = $section->getID(); + + if (isset($this->sections[$type][$sectionID])) { + $this->log->logException(new \InvalidArgumentException('Section with the same ID already registered'), ['level' => ILogger::INFO]); + continue; + } + + $this->sections[$type][$sectionID] = $section; - unset($this->sectionClasses[$class]); + unset($this->sectionClasses[$type][$index]); } return $this->sections[$type]; diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php index df7e59841ce..6f9af39d591 100644 --- a/tests/lib/Settings/ManagerTest.php +++ b/tests/lib/Settings/ManagerTest.php @@ -220,4 +220,45 @@ class ManagerTest extends TestCase { 10 => [new Security($this->userManager)], ], $this->manager->getPersonalSettings('security')); } + + public function testSameSectionAsPersonalAndAdmin() { + $this->l10n + ->expects($this->any()) + ->method('t') + ->will($this->returnArgument(0)); + + $this->manager->registerSection('personal', \OCA\WorkflowEngine\Settings\Section::class); + $this->manager->registerSection('admin', \OCA\WorkflowEngine\Settings\Section::class); + + $this->url->expects($this->exactly(9)) + ->method('imagePath') + ->willReturnMap([ + ['core', 'actions/info.svg', '1'], + ['settings', 'password.svg', '2'], + ['core', 'clients/phone.svg', '3'], + ['settings', 'admin.svg', '0'], + ['core', 'actions/settings-dark.svg', '1'], + ['core', 'actions/share.svg', '2'], + ['core', 'actions/password.svg', '3'], + ['core', 'places/contacts.svg', '5'], + ['settings', 'help.svg', '4'], + ]); + + $this->assertEquals([ + 0 => [new Section('personal-info', 'Personal info', 0, '1')], + 5 => [new Section('security', 'Security', 0, '2')], + 15 => [new Section('sync-clients', 'Mobile & desktop', 0, '3')], + 55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)], + ], $this->manager->getPersonalSections()); + + $this->assertEquals([ + 0 => [new Section('overview', 'Overview', 0, '0')], + 1 => [new Section('server', 'Basic settings', 0, '1')], + 5 => [new Section('sharing', 'Sharing', 0, '2')], + 10 => [new Section('security', 'Security', 0, '3')], + 50 => [new Section('groupware', 'Groupware', 0, '5')], + 55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)], + 98 => [new Section('additional', 'Additional settings', 0, '1')], + ], $this->manager->getAdminSections()); + } } |