From 559e56949f4fcea91e362b4c39f0e608c4a6589d Mon Sep 17 00:00:00 2001 From: Anders Brohus Date: Tue, 7 Feb 2023 09:14:41 +0100 Subject: [PATCH 01/96] 2FA translations Added and changed some translations about 2FA --- src/Umbraco.Core/EmbeddedResources/Lang/da.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/da.xml b/src/Umbraco.Core/EmbeddedResources/Lang/da.xml index 0555ea3934..cf0518613d 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/da.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/da.xml @@ -342,6 +342,7 @@ Opret et nyt medlem Alle medlemmer Medlemgrupper har ingen yderligere egenskaber til redigering. + Totrinsbekræftelse Kopiering af indholdstypen fejlede @@ -1902,6 +1903,7 @@ Mange hilsner fra Umbraco robotten genkende dig. Klik på cirklen ovenfor for at uploade et billede. Forfatter + Konfigurer totrinsbekræftelse Skift Din profil Din historik @@ -1929,11 +1931,11 @@ Mange hilsner fra Umbraco robotten Ældste Sidst logget ind Ingen brugere er blevet tilføjet - Hvis du ønsker at slå denne autentificeringsmetode fra, så skal du nu indtaste koden fra dit device: - Denne autentificeringsmetode er slået til - Den valgte autentificeringsmetode er nu slået fra - Der skete en ukendt fejl da denne autentificeringsmetode skulles slåes fra - Er du sikker på, at du vil fjerne denne autentificeringsmetode for denne bruger? + Hvis du ønsker at slå denne totrinsbekræftelse fra, så skal du nu indtaste koden fra din enhed: + Denne totrinsbekræftelse er slået til + Den valgte totrinsbekræftelse er nu slået fra + Der skete en ukendt fejl da denne totrinsbekræftelse skulles slåes fra + Er du sikker på, at du vil fjerne denne totrinsbekræftelse for denne bruger? Validering From 280fbdd8706d74547b117d7a366cf35df247705d Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Wed, 8 Feb 2023 12:47:46 +0100 Subject: [PATCH 02/96] Remove special characters in avatar [part 2] (#13796) * Update regex * Update src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js Co-authored-by: Ronald Barendse --------- Co-authored-by: Ronald Barendse --- .../src/common/directives/components/umbavatar.directive.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js index 2c561d3505..9ad475ad85 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js @@ -70,8 +70,8 @@ Use this directive to render an avatar. function getNameInitials(name) { if (name) { - const notAllowed = /[\[\]\{\}\*\?\&\$\@\!\(\)\%\#]+/g; - var names = name.replace(notAllowed,'').trim().split(' '), + const notAllowedRegex = /[^\p{Letter}\p{Number} ]+/gu; + var names = name.replace(notAllowedRegex, '').trim().split(' '), initials = names[0].substring(0, 1); if (names.length > 1) { From e9f5b562ada7dcc4be95dc77432824e46863c3aa Mon Sep 17 00:00:00 2001 From: tristanjthompson Date: Mon, 13 Feb 2023 14:50:37 +0000 Subject: [PATCH 03/96] Update JITOptimizerValidator error message. --- .../Runtime/RuntimeModeValidators/JITOptimizerValidator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs b/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs index d075001ecd..98f3b5c2d0 100644 --- a/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs +++ b/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs @@ -19,7 +19,7 @@ public class JITOptimizerValidator : RuntimeModeProductionValidatorBase DebuggableAttribute? debuggableAttribute = Assembly.GetEntryAssembly()?.GetCustomAttribute(); if (debuggableAttribute != null && debuggableAttribute.IsJITOptimizerDisabled) { - validationErrorMessage = "The JIT/runtime optimizer of the entry assembly needs to be enabled in production mode."; + validationErrorMessage = "The JIT/runtime optimizer of the entry assembly needs to be enabled in production mode. The project should be built/published in Release (or similar) configuration in production mode."; return false; } From 23cacf892f6339f5bbc95aebf2d2146593a99072 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 15 Feb 2023 14:28:42 +0100 Subject: [PATCH 04/96] Update issues-first-response.yml --- .github/workflows/issues-first-response.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/issues-first-response.yml b/.github/workflows/issues-first-response.yml index 134a368785..30eee62afe 100644 --- a/.github/workflows/issues-first-response.yml +++ b/.github/workflows/issues-first-response.yml @@ -18,8 +18,6 @@ jobs: uses: actions/github-script@v6 with: script: | - const fetch = require('node-fetch') - const response = await fetch('https://collaboratorsv2.euwest01.umbraco.io/umbraco/api/comments/PostComment', { method: 'post', body: JSON.stringify({ From 09d15b5e302d607107f3925ab383b2fa485ef59c Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 15 Feb 2023 14:29:10 +0100 Subject: [PATCH 05/96] Update pr-first-response.yml --- .github/workflows/pr-first-response.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pr-first-response.yml b/.github/workflows/pr-first-response.yml index 991a5d0808..f880c5e7bf 100644 --- a/.github/workflows/pr-first-response.yml +++ b/.github/workflows/pr-first-response.yml @@ -18,8 +18,6 @@ jobs: uses: actions/github-script@v6 with: script: | - const fetch = require('node-fetch') - const response = await fetch('https://collaboratorsv2.euwest01.umbraco.io/umbraco/api/comments/PostComment', { method: 'post', body: JSON.stringify({ From 37b34aea1124f73c5e32e299fe366cc50ae1ce57 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Wed, 15 Feb 2023 14:29:28 +0100 Subject: [PATCH 06/96] Update up-for-grabs-response.yml --- .github/workflows/up-for-grabs-response.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/up-for-grabs-response.yml b/.github/workflows/up-for-grabs-response.yml index eb16eb7779..b571a7bf9f 100644 --- a/.github/workflows/up-for-grabs-response.yml +++ b/.github/workflows/up-for-grabs-response.yml @@ -20,7 +20,6 @@ jobs: uses: actions/github-script@v6 with: script: | - const fetch = require('node-fetch'); const response = await fetch('https://collaboratorsv2.euwest01.umbraco.io/umbraco/api/comments/PostComment', { method: 'post', body: JSON.stringify({ From de27eb697ee5554258793edbba4404c4725a898e Mon Sep 17 00:00:00 2001 From: Nuklon Date: Thu, 16 Feb 2023 23:09:26 +0100 Subject: [PATCH 07/96] Fixes #13732 - IsBackOfficeRequest is extremely inefficient (#13743) * Update UmbracoRequestPaths.cs * Update UmbracoRequestPaths.cs * remove redundant check --------- Co-authored-by: Michael --- .../Routing/UmbracoRequestPaths.cs | 76 +++++++++++-------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/src/Umbraco.Core/Routing/UmbracoRequestPaths.cs b/src/Umbraco.Core/Routing/UmbracoRequestPaths.cs index 960be851ff..b70970673a 100644 --- a/src/Umbraco.Core/Routing/UmbracoRequestPaths.cs +++ b/src/Umbraco.Core/Routing/UmbracoRequestPaths.cs @@ -16,9 +16,9 @@ public class UmbracoRequestPaths private readonly string _appPath; private readonly string _backOfficeMvcPath; private readonly string _backOfficePath; - private readonly List _defaultUmbPaths; + private readonly string _defaultUmbPath; + private readonly string _defaultUmbPathWithSlash; private readonly string _installPath; - private readonly string _mvcArea; private readonly string _previewMvcPath; private readonly string _surfaceMvcPath; private readonly IOptions _umbracoRequestPathsOptions; @@ -34,18 +34,19 @@ public class UmbracoRequestPaths /// public UmbracoRequestPaths(IOptions globalSettings, IHostingEnvironment hostingEnvironment, IOptions umbracoRequestPathsOptions) { - var applicationPath = hostingEnvironment.ApplicationVirtualPath; - _appPath = applicationPath.TrimStart(Constants.CharArrays.ForwardSlash); + _appPath = hostingEnvironment.ApplicationVirtualPath; _backOfficePath = globalSettings.Value.GetBackOfficePath(hostingEnvironment) - .EnsureStartsWith('/').TrimStart(_appPath.EnsureStartsWith('/')).EnsureStartsWith('/'); + .EnsureStartsWith('/').TrimStart(_appPath).EnsureStartsWith('/'); - _mvcArea = globalSettings.Value.GetUmbracoMvcArea(hostingEnvironment); - _defaultUmbPaths = new List { "/" + _mvcArea, "/" + _mvcArea + "/" }; - _backOfficeMvcPath = "/" + _mvcArea + "/BackOffice/"; - _previewMvcPath = "/" + _mvcArea + "/Preview/"; - _surfaceMvcPath = "/" + _mvcArea + "/Surface/"; - _apiMvcPath = "/" + _mvcArea + "/Api/"; + string mvcArea = globalSettings.Value.GetUmbracoMvcArea(hostingEnvironment); + + _defaultUmbPath = "/" + mvcArea; + _defaultUmbPathWithSlash = "/" + mvcArea + "/"; + _backOfficeMvcPath = "/" + mvcArea + "/BackOffice/"; + _previewMvcPath = "/" + mvcArea + "/Preview/"; + _surfaceMvcPath = "/" + mvcArea + "/Surface/"; + _apiMvcPath = "/" + mvcArea + "/Api/"; _installPath = hostingEnvironment.ToAbsolute(Constants.SystemDirectories.Install); _umbracoRequestPathsOptions = umbracoRequestPathsOptions; } @@ -78,34 +79,28 @@ public class UmbracoRequestPaths /// public bool IsBackOfficeRequest(string absPath) { - var fullUrlPath = absPath.TrimStart(Constants.CharArrays.ForwardSlash); - var urlPath = fullUrlPath.TrimStart(_appPath).EnsureStartsWith('/'); + string urlPath = absPath.TrimStart(_appPath).EnsureStartsWith('/'); // check if this is in the umbraco back office - var isUmbracoPath = urlPath.InvariantStartsWith(_backOfficePath); - - // if not, then def not back office - if (isUmbracoPath == false) + if (!urlPath.InvariantStartsWith(_backOfficePath)) { return false; } // if its the normal /umbraco path - if (_defaultUmbPaths.Any(x => urlPath.InvariantEquals(x))) + if (urlPath.InvariantEquals(_defaultUmbPath) || urlPath.InvariantEquals(_defaultUmbPathWithSlash)) { return true; } // check for special back office paths - if (urlPath.InvariantStartsWith(_backOfficeMvcPath) - || urlPath.InvariantStartsWith(_previewMvcPath)) + if (urlPath.InvariantStartsWith(_backOfficeMvcPath) || urlPath.InvariantStartsWith(_previewMvcPath)) { return true; } // check for special front-end paths - if (urlPath.InvariantStartsWith(_surfaceMvcPath) - || urlPath.InvariantStartsWith(_apiMvcPath)) + if (urlPath.InvariantStartsWith(_surfaceMvcPath) || urlPath.InvariantStartsWith(_apiMvcPath)) { return false; } @@ -115,18 +110,39 @@ public class UmbracoRequestPaths return true; } - // if its none of the above, we will have to try to detect if it's a PluginController route, we can detect this by - // checking how many parts the route has, for example, all PluginController routes will be routed like + // if its none of the above, we will have to try to detect if it's a PluginController route + return !IsPluginControllerRoute(urlPath); + } + + /// + /// Checks if the path is from a PluginController route. + /// + private static bool IsPluginControllerRoute(string path) + { + // Detect this by checking how many parts the route has, for example, all PluginController routes will be routed like // Umbraco/MYPLUGINAREA/MYCONTROLLERNAME/{action}/{id} - // so if the path contains at a minimum 3 parts: Umbraco + MYPLUGINAREA + MYCONTROLLERNAME then we will have to assume it is a - // plugin controller for the front-end. - if (urlPath.Split(Constants.CharArrays.ForwardSlash, StringSplitOptions.RemoveEmptyEntries).Length >= 3) + // so if the path contains at a minimum 3 parts: Umbraco + MYPLUGINAREA + MYCONTROLLERNAME then we will have to assume it is a plugin controller for the front-end. + + int count = 0; + + for (int i = 0; i < path.Length; i++) { - return false; + char chr = path[i]; + + if (chr == '/') + { + count++; + continue; + } + + // Check last char so we can properly determine the number of parts, e.g. /url/path/ has two parts, /url/path/test has three. + if (count == 3) + { + return true; + } } - // if its anything else we can assume it's back office - return true; + return false; } /// From d61c32c1e463e222a12bec556666b2cfd74c9fa3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Feb 2023 07:23:11 +0000 Subject: [PATCH 08/96] Bump @sideway/formula in /tests/Umbraco.Tests.AcceptanceTest Bumps [@sideway/formula](https://github.com/sideway/formula) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/sideway/formula/releases) - [Commits](https://github.com/sideway/formula/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: "@sideway/formula" dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 8fd22e6b0c..9957594987 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -111,9 +111,9 @@ } }, "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", "dev": true }, "node_modules/@sideway/pinpoint": { @@ -1037,9 +1037,9 @@ } }, "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", "dev": true }, "@sideway/pinpoint": { From 362832b594a37a59dd709fa3db8a87e8b2427b6e Mon Sep 17 00:00:00 2001 From: Simone Chiaretta Date: Tue, 21 Feb 2023 08:05:56 +0100 Subject: [PATCH 09/96] Changed modifier for ContentPickerValueConverter (#13864) Changed internal to public for ContentPickerValueConverter, which was the only property value converter defined as `internal` Fixes issue umbraco#13858 --- .../ValueConverters/ContentPickerValueConverter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs index eded7b7329..d66c76c905 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs @@ -5,7 +5,7 @@ using Umbraco.Extensions; namespace Umbraco.Cms.Core.PropertyEditors.ValueConverters; -internal class ContentPickerValueConverter : PropertyValueConverterBase +public class ContentPickerValueConverter : PropertyValueConverterBase { private static readonly List PropertiesToExclude = new() { From 42d143c6b2dfac790bd4c0f239ea16edbbc3bc5f Mon Sep 17 00:00:00 2001 From: Smayke95 Date: Tue, 21 Feb 2023 12:42:01 +0100 Subject: [PATCH 10/96] Add Bosnian language (#13854) * Add Bosnian language * fix * Fix issue with Marketplace --- .../EmbeddedResources/Lang/bs.xml | 2878 +++++++++++++++++ .../EmbeddedResources/Lang/en.xml | 6 +- 2 files changed, 2881 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Core/EmbeddedResources/Lang/bs.xml diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/bs.xml b/src/Umbraco.Core/EmbeddedResources/Lang/bs.xml new file mode 100644 index 0000000000..f7b763bdfa --- /dev/null +++ b/src/Umbraco.Core/EmbeddedResources/Lang/bs.xml @@ -0,0 +1,2878 @@ + + + + Smayke95 + https://github.com/Smayke95 + + + Kultura i imena hostova + Revizije + Pregledaj čvor + Promijeni Tip Dokumenta + Kopiraj + Kreiraj + Izvezi + Kreiraj Paket + Kreiraj grupu + Obriši + Onemogući + Uredi postavke + Isprazni kantu za smeće + Omogući + Izvezi Tip Dokumenta + Uvezi Tip Dokumenta + Uvezi Paket + Uredi u Platnu + Izađi + Pomakni + Obavještenja + Ograničite javni pristup + Objavi + Poništi objavu + Ponovo učitaj + Ponovo objavite cijelu stranicu + Ukloni + Preimenuj + Vrati + Odaberite gdje ćete kopirati + Odaberite gdje ćete pomaknuti + Odaberite gdje ćete uvesti + do u strukturi stabla ispod + Odaberite gdje želite kopirati odabrane stavke + Odaberite gdje želite pomaknuti odabrane stavke + je pomaknuta u + je kopirana u + je obrisana + Dozvole + Vraćanje unazad + Pošalji na objavljivanje + Pošalji na prijevod + Postavi grupu + Sortiraj + Prevedi + Ažuriraj + Postavi dozvole + Otključaj + Kreirajte Predložak Sadržaja + Ponovo pošaljite pozivnicu + + + Sadržaj + Administracija + Struktura + Ostalo + + + Dozvolite pristup za dodjelu kulture i imena hostova + Dozvolite pristup za pregled dnevnika historije čvora + Dozvolite pristup za pregled čvora + Dozvolite pristup za promjenu Tipa Dokumenta za čvor + Dozvolite pristup za kopiranje čvora + Dozvolite pristup za kreiranje čvora + Dozvolite pristup za brisanje čvora + Dozvolite pristup za pomicanje čvora + Dozvolite pristup za postavljanje i promjenu ograničenja pristupa za čvor + Dozvolite pristup za objavljivanje čvora + Dozvolite pristup da poništavanje objave čvora + Dozvolite pristup za promjenu dozvola za čvor + Dozvolite pristup za vraćanje čvora u prethodno stanje + Dozvolite pristup za slanje čvora na odobrenje prije objavljivanja + Dozvolite pristup za slanje čvora na prijevod + Dozvolite pristup za promjenu sortiranja čvorova + Dozvolite pristup za prevođenje čvora + Dozvolite pristup za spremanje čvora + Dozvolite pristup za kreiranje Predloška Sadržaja + Dozvolite pristup za podešavanje obaviještenja za čvorove + + + Sadržaj + Info + + + Dozvola odbijena. + Dodaj novu domenu + Dodaj postojeću domenu + ukloni + Nevažeći čvor. + Jedna ili više domena imaju nevažeći format. + Domena je već dodijeljena. + Jezik + Domena + Nova domena '%0%' je kreirana + Domena '%0%' je obrisana + Domena '%0%' je već dodijeljena + Domena '%0%' je ažurirana + Uredi trenutne domene + + + Naslijedi + Kultura + + ili naslijedite kulturu od roditeljskih čvorova. Također će se primijeniti
+ na trenutni čvor, osim ako se domena u nastavku ne primjenjuje.]]> +
+ Domene + + + Obriši odabir + Odaberi + Uradi nešto drugo + Boldiraj + Otkaži uvlačenje pasusa + Umetni polje obrasca + Umetnite grafički naslov + Uredi Html + Uvuci pasus + Kurziv + Centriraj + Poravnaj lijevo + Poravnaj desno + Umetni link + Umetni lokalni link (sidro) + Lista + Numerička lista + Umetni makro + Umetni sliku + Objavi i zatvori + Objavi sa potomcima + Uredite odnose + Povratak na listu + Spremi + Spremi i zatvori + Spremi i objavi + Spremi i pošalji na odobrenje + Spremi prikaz liste + Zakaži + Spremi i pregledaj + Pregled je onemogućen jer nije dodijeljen predložak + Odaberi stil + Prikaži stilove + Umetni tabelu + Spremi i generiši modele + Poništi + Ponovi + Obriši tag + Otkaži + Potvrdi + Više opcija za objavljivanje + Pošalji + + + Pregled za + Sadržaj je izbrisan + Sadržaj nije objavljen + Sadržaj spremljen i objavljen + Sadržaj spremljen i objavljen za jezike: %0% + Sadržaj spremljen + Sadržaj spremljen za jezike: %0% + Sadržaj premješten + Sadržaj kopiran + Sadržaj vraćen + Sadržaj poslan na objavljivanje + Sadržaj poslan na objavljivanje za jezike: %0% + Sortiranje podređenih stavki je izvršio korisnik + %0% + Čišćenje je onemogućeno za verziju: %0% + Čišćenje je omogućeno za verziju: %0% + Kopiraj + Objavljeno + Objavi + Pomakni + Spremljeno + Spremi + Obriši + Poništi objavu + Vrat + Pošalji na objavljivanje + Pošalji na objavljivanje + Sortiraj + Prilagođeno + Spremi + Spremi + Historija (sve varijante) + + + Naziv mape ne može sadržavati nedozvoljene znakove. + Nije uspjelo brisanje stavke: %0% + + + Da li je objavljeno + O ovoj stranici + Alias + (kako biste opisali sliku preko telefona) + Alternativni linkovi + Kliknite da uredite ovu stavku + Kreirao + Originalni autor + Ažurirao + Kreirano + Datum i vrijeme kreiranja ovog dokumenta + Tip dokumenta + Uređivanje + Ukloni na + Ova stavka je promijenjena nakon objavljivanja + Ova stavka nije objavljena + Posljednje objavljeno + Nema stavki za prikaz + Nema stavki za prikaz na listi. + Nije dodan sadržaj + Nijedan član nije dodan + Tip medija + Link do medijske stavke + Grupa članova + Uloga + Tip člana + Nisu napravljene nikakve promjene + Nije odabran datum + Naslov stranice + Ova medijska stavka nema vezu + Svojstva + Ovaj dokument je objavljen, ali nije vidljiv jer nadređeni '%0%' nije objavljen + Ova kultura je objavljena, ali nije vidljiva jer nije objavljena na nadređenom '%0%' + Ovaj dokument je objavljen, ali nije u kešu + Nije moguće dobiti URL + Ovaj dokument je objavljen, ali njegov URL je u koliziji sa sadržajem %0% + Ovaj dokument je objavljen, ali njegov URL se ne može preusmjeriti + Objavi + Objavljeno + Objavljeno (čeka izmjene) + Status publikacije + + %0% i sve stavke sadržaja ispod i time čineći njihov sadržaj javno dostupnim.]]> + + + Objavi na + Poništi objavu na + Obriši datum + Postavi datum + Sortiranje je ažurirano + Da biste sortirali čvorove, jednostavno prevucite čvorove ili kliknite na jedno od zaglavlja kolona. Možete odabrati + više čvorova držeći tipku "shift" ili "control" dok birate + + Statistika + Naslov (opcionalno) + Alternativni tekst (opcionalno) + Natpis (opcionalno) + Tip + Poništi objavu + Neobjavljeno + Nije kreirano + Poslednji put uređeno + Datum/vrijeme uređivanja ovog dokumenta + Ukloni fajlove + Kliknite ovdje da uklonite sliku iz medijske stavke + Kliknite ovdje da uklonite fajl iz medijske stavke + Link do dokumenta + Član grupe + Nije član grupe + Dječiji artikli + Meta + Ovo se prevodi kao sljedeće vrijeme na serveru: + + Šta ovo znači?]]> + Jeste li sigurni da želite izbrisati ovu stavku? + Svojstvo %0% koristi uređivač %1% koji nije podržan za Ugniježđeni + Sadržaj. + + Jeste li sigurni da želite izbrisati sve stavke? + Za ovo svojstvo nisu konfigurirani tipovi sadržaja. + Dodajte tip elementa + Odaberi tip elementa + Odaberite grupu čija svojstva trebaju biti prikazana. Ako je ostavljeno prazno, + koristit će se prva grupa na tipu elementa. + + Unesite angular izraz za procjenu svake stavke za njeno + ime. Koristi + + za prikaz indeksa stavke + Odabrani tip elementa ne sadrži nijednu podržanu grupu (ovaj uređivač ne podržava kartice, promijenite ih u grupe ili koristite uređivač liste blokova). + Dodajte još jedan okvir za tekst + Uklonite ovaj okvir za tekst + Korijen Sadržaja + Uključite neobjavljeni sadržaj. + Ova vrijednost je skrivena. Ako vam je potreban pristup da vidite ovu vrijednost, obratite se + administratoru web stranice. + + Ova vrijednost je skrivena. + Koje jezike želite da objavite? + Koje jezike želite poslati na odobrenje? + Koje jezike želite da zakažete? + Odaberite jezike za poništavanje objavljivanja. Poništavanje objavljivanja obaveznog jezika će + poništiti objavljivanje svih jezika. + + Sve nove varijante će biti sačuvane. + Koje varijante želite da objavite? + Odaberite koje varijante želite sačuvati. + Za objavljivanje su potrebne sljedeće varijante: + Nismo spremni za objavljivanje + Spremno za objavljivanje? + Spremno za spremanje? + Resetuj fokusnu tačku + Pošalji na odobrenje + Odaberite datum i vrijeme za objavljivanje i/ili poništavanje objave stavke sadržaja. + Napravi novi + Zalijepi iz međuspremnika + Ova stavka je u korpi za otpatke + + + %0%]]> + Prazno + Odaberite predložak sadržaja + Predložak sadržaja kreiran + Predložak sadržaja je kreiran od '%0%' + Drugi predložak sadržaja sa istim imenom već postoji + Predložak sadržaja je unaprijed definiran sadržaj koji uređivač može odabrati da koristi + kao osnovu za kreiranje novog sadržaja + + + + Kliknite za učitavanje + ili kliknite ovdje da odaberete fajlove + Nije moguće učitati ovu datoteku, ona nema odobreni tip datoteke + Nije moguće učitati ovu datoteku, tip medija sa pseudonimom '%0%' nije dozvoljen ovdje + Nije moguće učitati ovu datoteku, ona nema važeći naziv datoteke + Maksimalna veličina datoteke je + Korijen medija + Kreiranje foldera pod ID-om roditelja nije uspjelo %0% + Preimenovanje foldera sa ID-om %0% nije uspjelo + Prevucite i ispustite svoje datoteke u područje + + + Kreirajte novog člana + Svi članovi + Grupe članova nemaju dodatna svojstva za uređivanje. + Dvostruka provjera autentičnosti + + + Kopiranje tipa sadržaja nije uspjelo + Premještanje tipa sadržaja nije uspjelo + + + Kopiranje tipa medija nije uspjelo + Premještanje tipa medija nije uspjelo + Automatski odabir + + + Kopiranje tipa člana nije uspjelo + + + Gdje želite kreirati novi %0% + Kreirajte stavku pod + Odaberite vrstu dokumenta za koju želite da napravite predložak sadržaja + Unesite naziv foldera + Odaberite vrstu i naslov + + Dokument Tip unutar sekcije Postavke, uređivanjem Dozvoljeni tipovi podređenih čvorova unutar Dozvole.]]> + + Dokument Tip unutar sekcije Postavke.]]> + Odabrana stranica u stablu sadržaja ne dozvoljava nijednu stranicu + biti kreiran ispod njega. + + Uredi dozvole za ovaj tip dokumenta + Kreiraj novi tip dokumenta + + Dokument Tip unutar sekcije Postavke, izmjenom Dozvoli kao root opcije unutar Dozvole.]]> + + Media Tip unutar sekcije Postavke, uređivanjem Dozvoljeni tipovi podređenih čvorova unutar Dozvole.]]> + Odabrani medij u stablu ne dopušta bilo koji drugi medij + kreiran ispod njega. + + Uredi dozvole za ovaj tip medija + Tip dokumenta bez predloška + Tip dokumenta sa predloškom + Definicija podataka za stranicu sadržaja koja se može kreirati + uređivača u stablu sadržaja i direktno je dostupan preko URL-a. + + Tip dokumenta + Definicija podataka za komponentu sadržaja koju mogu kreirati urednici u + stablo sadržaja i biti izabran na drugim stranicama, ali nema direktan URL. + + Tip elementa + Definira shemu za ponavljajući skup svojstava, na primjer, u 'Bloku + Uređivač svojstava Lista' ili 'Ugniježđeni sadržaj'. + + Kompozicija + Definira višekratni skup svojstava koja se mogu uključiti u definiciju + više drugih vrsta dokumenata. Na primjer, skup 'Common Page Settings'. + + Mapa + Koristi se za organiziranje tipova dokumenata, sastava i tipova elemenata kreiranih u ovome + Stablo vrste dokumenta. + + Nova mapa + Novi tip podatka + Novi JavaScript fajl + Novi prazan djelomični prikaz + Novi djelomični prikaz za makro + Novi djelomični prikaz iz isječka + Novi djelomični prikaz za makro iz isječka + Novi djelomični prikaz za makro (bez makroa) + Novi CSS fajl + Novi Rich Text Editor CSS fajl + + + Pregledajte svoju web stranicu + - Sakrij + Ako se Umbraco ne otvara, možda ćete morati dozvoliti iskačuće prozore sa ove stranice + je otvoren u novom prozoru + Restart + Posjetite + Dobrodošli + + + Ostani + Odbacite promjene + Imate nesačuvane promjene + Jeste li sigurni da želite otići s ove stranice? - imate nesačuvane + promjene + + Objavljivanjem će odabrane stavke biti vidljive na stranici. + Poništavanje objavljivanja će ukloniti odabrane stavke i sve njihove potomke sa + stranice. + + Poništavanje objavljivanja će ukloniti ovu stranicu i sve njene potomke sa stranice. + Imate nesačuvane promjene. Promjenom vrste dokumenta odbacit će se promjene. + + + Završeno + Izbrisana %0% stavka + Izbrisano %0% stavki + Izbrisana %0% od %1% stavka + Izbrisano %0% od %1% stavki + Objavljeno %0% stavka + Objavljeno %0% stavki + Objavljeno %0% od %1% stavka + Objavljeno %0% od %1% stavki + Ukinuta objava za %0% stavku + Ukinuta objava za %0% stavki + Ukinuta objava za %0% od %1% stavku + Ukinuta objava za %0% od %1% stavki + Pomjerena %0% stavka + Pomjereno %0% stavki + Pomjereno %0% od %1% stavku + Pomjereno %0% od %1% stavki + Kopirana %0% stavka + Kopirano %0% stavki + Kopirano %0% od %1% stavku + Kopirano %0% od %1% stavki + + + Naslov linka + Link + Anchor / querystring + Naziv + Upravljajte imenima hostova + Zatvorite ovaj prozor + Jeste li sigurni da želite izbrisati + %0% od %1% stavki]]> + Jeste li sigurni da želite onemogućiti + Jeste li sigurni da želite ukloniti + %0%]]> + Jeste li sigurni? + Jeste li sigurni? + Izreži + Uredi stavku iz rječnika + Uredi jezik + Uredite odabrane medije + Umetnite lokalnu vezu + Umetni znak + Umetnite grafički naslov + Umetnite sliku + Umetnite link + Kliknite da dodate makro + Umetnite tabelu + Ovo će izbrisati jezik + Promjena kulture jezika može biti skupa operacija i rezultirat će + u kešu sadržaja i indeksima koji se rekonstruišu + + Posljednji put uređeno + Link + Interni link: + Kada koristite lokalne veze, umetnite "#" ispred linka + Otvori u novom prozoru? + Ovaj makro ne sadrži svojstva koja možete uređivati + Zalijepi + Uredite dozvole za + Postavite dozvole za + Postavite dozvole za %0% za grupu korisnika %1% + Odaberite grupe korisnika za koje želite postaviti dozvole + Stavke u korpi za otpatke se sada brišu. Molimo vas da ne zatvarate ovaj prozor + dok se ova operacija odvija + + Korpa za otpatke je sada prazna + Kada se predmeti izbrišu iz korpe za otpatke, oni će nestati zauvijek + + regexlib.com web servis trenutno ima nekih problema, nad kojima nemamo kontrolu. Veoma nam je žao zbog ove neugodnosti.]]> + Potražite regularni izraz da dodate provjeru valjanosti u polje obrasca. Primjer: 'e-pošta, + 'poštanski broj', 'URL'. + + Ukloni makro + Obavezno polje + Stranica je ponovo indeksirana + Predmemorija web stranice je osvježena. Sav objavljeni sadržaj je sada ažuriran. Dok će sav + neobjavljen sadržaj ostati neobjavljen + + Keš web stranice će biti osvježen. Svi objavljeni sadržaji će biti ažurirani, dok će sav + neobjavljeni sadržaj ostati neobjavljen. + + Broj kolona + Broj redova + Kliknite na sliku da vidite punu veličinu + Izaberite stavku + Prikaži keš stavku + Odnosi se na original + Uključiti potomke + Najljubaznija zajednica + Link na stranicu + Otvara povezani dokument u novom prozoru ili kartici + Link do medija + Odaberite početni čvor sadržaja + Odaberite medije + Odaberite tip medija + Odaberite ikonu + Odaberite stavku + Odaberite vezu + Odaberite makro + Odaberite sadržaj + Odaberite tip sadržaja + Odaberite početni čvor medija + Odaberite člana + Odaberite grupu članova + Odaberite tip članova + Odaberite čvor + Odaberite jezike + Odaberite sekcije + Odaberite korisnika + Odaberite korisnike + Ikone nisu pronađene + Nema parametara za ovaj makro + Nema dostupnih makroa za umetanje + Eksterni provajderi prijave + Detalji o izuzetku + Stacktrace + Inner Exception + Povežite svoje + Odspojite svoju vezu + račun + Odaberite uređivač + Odaberite isječak + Ovo će izbrisati čvor i sve njegove jezike. Ako želite da izbrišete samo jedan + jezik, trebali biste poništiti objavljivanje čvora na tom jeziku. + + %0%.]]> + %0% iz grupe %1%]]> + Da, ukloni + Brišete izgled + Promjena izgleda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji je zasnovan na ovoj konfiguraciji. + + + + Da biste uvezli stavku iz rječnika, pronađite ".udt" datoteku na svom računaru klikom na + Dugme "Uvezi" (na sljedećem ekranu će se tražiti da potvrdite) + + Stavka iz rječnika ne postoji. + Nadređena stavka ne postoji. + Ne postoje stavke iz rječnika. + U ovoj datoteci nema stavki iz rječnika. + Nisu pronađene stavke iz rječnika. + Kreirajte stavku iz rječnika + + + %0%' ispod + ]]> + Kultura + + Pregled riječnika + + + Konfigurisani pretraživači + Prikazuje svojstva i alate za bilo koji konfigurirani pretraživač (tj + višeindeksni pretraživač) + + Vrijednosti polja + Zdravstveno stanje + Zdravstveno stanje indeksa i da li se može pročitati + Indeksi + Indeks info + Sadržaj u indeksu + Navodi svojstva indeksa + Upravljajte Examine-ovim indeksima + Omogućava vam da vidite detalje svakog indeksa i pruža neke alate za + upravljanje indeksima + + Ponovo izgradi indeks + + Ovisno o tome koliko sadržaja ima na vašoj web lokaciji, to može potrajati.
+ Ne preporučuje se obnavljanje indeksa u vrijeme velikog prometa na web stranici ili kada urednici uređuju sadržaj. + ]]> +
+ Pretraživači + Pretražite indeks i pogledajte rezultate + Alati + Alati za upravljanje indeksom + polja + Indeks se ne može pročitati i morat će se ponovo izgraditi + Proces traje duže od očekivanog, provjerite Umbraco dnevnik da vidite + je li bilo grešaka tokom ove operacije + + Ovaj indeks se ne može ponovo izgraditi jer mu nije dodijeljen + IIndexPopulator + + + Unesite svoje korisničko ime + Unesite svoju lozinku + Potvrdite lozinku + Imenujte %0%... + Unesite ime... + Unesite email... + Unesite korisničko ime... + Labela... + Unesite opis... + Unesite za pretragu... + Unesite za filtriranje... + Unesite da dodate oznake (pritisnite enter nakon svake oznake)... + Unesite vaš email + Unesite poruku... + Vaše korisničko ime je obično vaš email + #value ili ?key=value + Unesite alias... + Generišite alias... + Kreiraj stavku + Uredi + Ime + + + Kreirajte prilagođeni prikaz liste + Ukloni prilagođeni prikaz liste + Tip sadržaja, tip medija ili tip člana s ovim aliasom već postoji + + + Preimenovano + Ovdje unesite novi naziv mape + %0% je preimenovan u %1% + + + Dodajte vrijednost + Tip podataka baze podataka + Uređivač osobine GUID + Uređivač osobina + Dugmad + Omogući napredne postavke za + Omogući kontekstni meni + Maksimalna zadana veličina umetnutih slika + Povezani stilovi + Prikaži oznaku + Širina i visina + Odaberite mapu za premještanje + do u strukturi stabla ispod + je premeštena ispod + + + Vaši podaci su sačuvani, ali prije nego što možete objaviti ovu stranicu postoje neke + greške koje prvo morate ispraviti: + + Trenutni provajder članstva ne podržava promjenu lozinke + (Omogući preuzimanje lozinke mora biti uključeno) + + %0% već postoji + Bilo je grešaka: + Bilo je grešaka: + Lozinka treba da ima najmanje %0% znakova i da sadrži najmanje %1% + znakova koji nisu alfanumerički + + %0% mora biti cijeli broj + Polje %0% na kartici %1% je obavezno + %0% je obavezno polje + %0% na %1% nije u ispravnom formatu + %0% nije u ispravnom formatu + + + Primljena greška sa servera + Administrator je zabranio navedeni tip datoteke + NAPOMENA! Iako je CodeMirror omogućen konfiguracijom, on je onemogućen u + Internet Explorer-u jer nije dovoljno stabilan. + + Unesite i pseudonim i ime na novu vrstu osobine! + Postoji problem sa pristupom za čitanje/pisanje određenoj datoteci ili fascikli + Greška pri učitavanju skripte djelomičnog prikaza (fajl: %0%) + Unesite naslov + Molimo odaberite tip + Napravit ćete sliku veću od originalne veličine. Jeste li sigurni + da želite nastaviti? + + Početni čvor je obrisan, kontaktirajte svog administratora + Molimo označite sadržaj prije promjene stila + Nema dostupnih aktivnih stilova + Postavite kursor lijevo od dvije ćelije koje želite spojiti + Ne možete podijeliti ćeliju koja nije spojena. + Ovo svojstvo je nevažeće + + + O + Akcija + Akcije + Dodaj + Alias + Sve + Da li ste sigurni? + Nazad + Nazad na pregled + Rub + od + Otkaži + Margina ćelije + Odaberi + Očisti + Zatvori + Zatvori prozor + Zatvori okno + Komentar + Potvrdi + Ograniči + Ograniči proporcije + Sadržaj + Nastavi + Kopiraj + Kreiraj + Baza podataka + Datum + Podrazumjevano + Obriši + Obrisano + Brisanje... + Dizajn + Riječnik + Dimenzije + Otkaži + Dole + Preuzimanje + Uredi + Uređeno + Elementi + Email + Greška + Polje + Pronađi + Prvi + Fokusna tačka + Generalno + Grupe + Grupa + Visina + Pomoć + Sakrij + Historija + Ikona + Id + Uvezi + Pretraži samo ovu mapu + Info + Unutrašnja margina + Umetni + Instaliraj + Nevažeći + Poravnaj + Labela + Jezik + Zadnji + Izgled + Linkovi + Učitavanje + Zaključano + Prijava + Odjavi se + Odjavi se + Makro + Obavezno + Poruka + Pomakni + Ime + Novi + Sljedeći + Ne + Ime čvora + od + Isključeno + OK + Otvori + Opcije + Uključeno + ili + Poredaj po + Lozinka + Putanja + Jedan momenat molim... + Prethodni + Svojstva + Pročitaj više + Ponovo izgradi + Email za primanje obrasca + Kanta za smeće + Vaša kanta za smeće je prazna + Ponovo učitaj + Preostalo + Izbriši + Preimenuj + Obnovi + Obavezno + Povratiti + Pokušaj ponovo + Permisije + Planirano objavljivanje + Umbraco info + Pretraga + Žao nam je, ne možemo pronaći ono što tražite. + Nije dodana nijedna stavka + Server + Postavke + Prikaži + Prikaži stranicu na Pošalji + Veličina + Sortiranje + Status + Potvrdi + Uspjeh + Tip + Ime tipa + Unesite za pretragu... + ispod + Gore + Ažuriraj + Nadogradi + Prenesi + URL + Korisnik + Korisničko ime + Vrijednost + Pogled + Dobrodošli... + Širina + Da + Mapa + Rezultati pretrage + Promijeni redosljed + Završio sam sa promjenom redosljeda + Pregled + Promijeni lozinku + do + Prikaz liste + Spremanje... + trenutni + Ugradi + odabran + Ostalo + Članci + Videi + Avatar za + Zaglavlje + sistemsko polje + Posljednje ažurirano + + + Plava + + + Dodaj grupu + Dodaj svojstvo + Dodaj urednika + Dodaj šablon + Dodajte podređeni čvor + Dodaj dijete + Uredite tip podataka + Krećite se po odjeljcima + Prečice + prikaži prečice + Uključi prikaz liste + Uključi dozvoli kao root + Redovi za komentarisanje/dekomentarisanje + Uklonite liniju + Kopiraj linije gore + Kopiraj linije dole + Pomakni linije gore + Pomakni linije dole + Općenito + Uređivač + Uključi dozvoli varijante kulture + + + Boja pozadine + Boldirano + Boja teksta + Font + Tekst + + + Stranica + + + Instalacija se ne može povezati s bazom podataka. + Nije moguće sačuvati web.config datoteku. Molimo izmijenite konekcijski string + ručno. + + Vaša baza podataka je pronađena i identificirana je kao + Konfiguracija baze podataka + + Instaliraj za instalaciju Umbraco %0% baze podataka + ]]> + + + Dalje da nastavite.]]> + Baza podataka nije pronađena! Provjerite jesu li informacije u "konekcijskom string" u "web.config" fajlu ispravne.

+

Da nastavite, uredite "web.config" fajl. (koristeći Visual Studio ili vaš omiljeni uređivač teksta), skrolujte do dna, dodajte konekcijski string za vašu bazu podataka u ključ nazvan "UmbracoDbDSN" i sačuvajte fajl.

+

+ Kliknite na pokušaj ponovo dugme kada završite.
+ + Više informacija o uređivanju web.config fajla možete pronaći ovdje.

]]>
+ + Molimo kontaktirajte svog ISP-a ako je potrebno. + Ako instalirate na lokalnoj mašini ili serveru, možda će vam trebati informacije od administratora sistema.]]> + + Pritisnite nadogradnja za nadogradnju vaše baze podataka na Umbraco %0%

+

+ Ne brinite - nijedan sadržaj neće biti obrisan i sve će nastaviti raditi nakon toga! +

+ ]]>
+ Pritisnite Dalje da nastavite.]]> + + Dalje da nastavite sa čarobnjakom za konfiguraciju]]> + + Zadanu korisničku lozinku treba promijeniti!]]> + + Zadani korisnik je onemogućen ili nema pristup Umbraco!

Ne treba preduzimati nikakve daljnje radnje. Pritisnite Dalje da nastavite.]]> + + Zadana korisnička lozinka je uspješno promijenjena od instalacije!

Ne treba preduzimati nikakve daljnje radnje. Pritisnite Dalje da nastavite.]]> + Lozinka je promijenjena! + Započnite odlično, pogledajte naše uvodne video zapise + Klikom na sljedeće dugme (ili modifikacijom umbracoConfigurationStatus u web.config), + prihvatate licencu za ovaj softver kao što je navedeno u polju ispod. Primijetite da je ova Umbraco distribucija + sastoji se od dvije različite licence, open source MIT licence za okvir i licence za besplatni softver Umbraco + koji pokriva korisničko sučelje. + + Još nije instalirano. + Zahvaćeni datoteke i mape + Više informacija o postavljanju dozvola za Umbraco ovdje + Morate dodijeliti dozvole za izmjenu ASP.NET-a za sljedeće + datoteke/mape + + Vaše postavke dozvola su gotovo savršene!

+ Možete pokrenuti Umbraco bez problema, ali nećete moći instalirati pakete koji se preporučuju da biste u potpunosti iskoristili Umbraco.]]>
+ Kako riješiti + Kliknite ovdje da pročitate tekstualnu verziju + + video tutorijale o postavljanju dozvola foldera za Umbraco ili pročitajte tekstualnu verziju.]]> + Vaše postavke dozvola mogu biti problem! +

+ Možete pokrenuti Umbraco bez problema, ali nećete moći kreirati foldere ili instalirati pakete koji se preporučuju da biste u potpunosti iskoristili Umbraco.]]>
+ Vaše postavke dozvola nisu spremne za Umbraco! +

+ Da biste pokrenuli Umbraco, morat ćete ažurirati postavke dozvola.]]>
+ Vaše postavke dozvola su savršene!

+ Spremni ste da pokrenete Umbraco i instalirate pakete!]]>
+ Rješavanje problema sa mapom + Pratite ovu vezu za više informacija o problemima sa ASP.NET i + kreiranje foldera + + Postavljanje dozvola za foldere + + Želim da počnem od nule + naučite kako) + I dalje možete odabrati da kasnije instalirate Runway. Molimo idite na odjeljak Developer i odaberite Paketi. + ]]> + Upravo ste postavili čistu Umbraco platformu. Šta želite sljedeće učiniti? + Runway je instaliran + + Ovo je naša lista preporučenih modula, označite one koje želite da instalirate ili pogledajte punu listu modula + ]]> + Preporučuje se samo iskusnim korisnicima + Želim početi s jednostavnom web-stranicom + + "Runway" je jednostavna web stranica koja nudi neke osnovne tipove dokumenata i predloške. Instalater može postaviti Runway za vas automatski, + ali ga možete lako urediti, proširiti ili ukloniti. Nije potrebno i možete savršeno koristiti Umbraco i bez njega. Kako god, + Runway nudi laku osnovu zasnovanu na najboljim praksama za početak brže nego ikad. + Ako se odlučite za instalaciju Runway, opciono možete odabrati osnovne građevne blokove tzv. Runway Modules da poboljšate svoje Runway stranice. +

+ + Uključeno u Runway: Početna stranica, Stranica za početak, Stranica za instaliranje modula.
+ Dodatni moduli: Navigacija, Sitemap, Kontakt, Galerija. +
+ ]]>
+ Šta je Runway + Korak 1/5: Prihvatite licencu + Korak 2/5: Konfiguracija baze podataka + Korak 3/5: Potvrđivanje dozvola za fajlove + Korak 4/5: Provjerite Umbraco sigurnost + Korak 5/5: Umbraco je spreman za početak + Hvala vam što ste odabrali Umbraco + Pregledajte svoju novu stranicu +Instalirali ste Runway, pa zašto ne biste vidjeli kako izgleda vaša nova web stranica.]]> + Dodatna pomoć i informacije +Potražite pomoć od naše nagrađivane zajednice, pregledajte dokumentaciju ili pogledajte nekoliko besplatnih videozapisa o tome kako napraviti jednostavnu stranicu, kako koristiti pakete i brzi vodič za terminologiju Umbraco]]> + Umbraco %0% je instaliran i spreman za upotrebu + /web.config fajl i ažurirate ključ unutar AppSetting UmbracoConfigurationStatus na dnu do vrijednosti od '%0%'.]]> + započeto odmah klikom na "Pokreni Umbraco" dugme ispod.
Ako ste novi u Umbraco-u, +možete pronaći mnogo resursa na našim stranicama za početak.]]>
+ Pokreni Umbraco +Da upravljate svojom web lokacijom, jednostavno otvorite Umbraco backoffice i počnite dodavati sadržaj, ažurirati predloške i stilove ili dodati novu funkcionalnost]]> + Povezivanje s bazom podataka nije uspjelo. + Umbraco Verzija 3 + Umbraco Verzija 4 + Gledaj + Umbraco %0% za novu instalaciju ili nadogradnju sa verzije 3.0. +

+ Pritisnite "Dalje" da pokrenete čarobnjaka.]]>
+ + + Kod kulture + Naziv kulture + + + Bili ste u stanju mirovanja i automatski će doći do odjave + Obnovite sada da sačuvate svoj rad + + + Sretna super nedelja + Sretan divan ponedeljak + Sretan specifičan utorak + Sretna divna srijeda + Sretan gromoglasan četvrtak + Sretan zanimljiv petak + Sretna opuštena subota + Prijavite se ispod + Prijavite se sa + Isteklo je vrijeme sesije + + © 2001 - %0%
Umbraco.com

]]>
+ Zaboravljena lozinka? + E-mail će biti poslan na adresu navedenu sa vezom za reset + lozinke + + E-mail s uputama za poništavanje lozinke će biti poslan na + navedenu adresu ukoliko odgovara našoj evidenciji + + Prikaži lozinku + Sakrij lozinku + Vratite se na obrazac za prijavu + Molimo unesite novu lozinku + Vaša lozinka je ažurirana + Link na koji ste kliknuli je nevažeći ili je istekao + Umbraco: Reset lozinke + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Zatraženo je ponovno postavljanje lozinke +

+

+ Vaše korisničko ime za prijavu na Umbraco backoffice je: %0% +

+

+ + + + + + +
+ + Kliknite na ovaj link da poništite lozinku + +
+

+

Ukoliko ne možete kliknuti na link, kopirajte i zalijepite ovaj URL u prozor vašeg pretraživača:

+ + + + +
+ +%1% + +
+

+
+
+


+
+
+ + + ]]>
+ Umbraco: Sigurnosni kod + Vaš sigurnosni kod je: %0% + Poslednji korak + Omogućili ste 2-faktorsku autentifikaciju i morate potvrditi svoj identitet. + Molimo odaberite 2-faktor provajdera + Verifikacijski kod + Unesite verifikacioni kod + Unesen je nevažeći kod + + + Kontrolna tabla + Sekcije + Sadržaj + + + Odaberite stranicu iznad... + %0% je kopiran u %1% + Odaberite gdje dokument %0% treba kopirati ispod + %0% je premješten u %1% + Odaberite gdje dokument %0% treba premjestiti ispod + je odabrano kao korijen vašeg novog sadržaja, kliknite na 'Uredu' ispod. + Još nije odabran čvor, molimo odaberite čvor na gornjoj listi prije nego kliknete na 'Uredu' + Trenutni čvor nije dozvoljen pod odabranim čvorom zbog njegovog tipa + Trenutni čvor se ne može premjestiti na jednu od njegovih podstranica niti roditelj i odredište mogu biti isti + Trenutni čvor ne može postojati u korijenu + Radnja nije dozvoljena jer nemate dovoljna dopuštenja za 1 ili više djece + dokumenata. + + Povežite kopirane stavke s originalom + + + %0%]]> + Postavke obavještenja su sačuvane za + + Sljedeći jezici su izmijenjeni %0% + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Zdravo %0%, +

+

+ Ovo je automatiziran email koja vas obavještava da je zadatak '%1%' izvršen na stranici '%2%' od korisnika '%3%' +

+ + + + + + +
+ +
+EDIT
+
+

+

Sažetak izmjena:

+ %6% +

+

+ Ugodan dan!

+ Pozdrav od Umbraco robota +

+
+
+


+
+
+ + + ]]>
+ Sljedeći jezici su izmijenjeni:

+ %0% + ]]>
+ [%0%] Obavještenje o %1% izvedena na %2% + Obavještenja + + + Akcije + Kreirano + Kreiraj paket + + i locirajte paket. Umbraco paketi uglavnom imaju ".umb" ili ".zip" ekstenziju. + ]]> + Ovo će izbrisati paket + Uključi sve podređene čvorove + Instalirano + Instalirani paketi + Uputstvo za instalaciju + Ovaj paket nema prikaz konfiguracije + Još nije kreiran nijedan paket + Nijedan paket nije instaliran + + 'Paketi' u gornjem desnom uglu ekrana]]> + Sadržaj paketa + Licenca + Pretražite pakete + Rezultati za + Nismo mogli pronaći ništa za + Pokušajte potražiti drugi paket ili pregledajte kategorije + + Popularno + Promocije + Nova izdanja + ima + karma poeni + Informacije + Vlasnik + Saradnici + Kreirano + Trenutna verzija + .NET verzija + Preuzimanja + Lajkovi + Kompatibilnost + Ovaj paket je kompatibilan sa sljedećim verzijama Umbraco-a, kako su + prijavili članovi zajednice. Potpuna kompatibilnost se ne može garantirati za dolje navedene verzije 100% + + Eksterni izvori + Autor + Dokumentacija + Meta podaci paketa + Naziv paketa + Paket ne sadrži nikakve stavke +
+ Ovo možete bezbjedno ukloniti iz sistema klikom na "deinstaliraj paket".]]>
+ Opcije paketa + Pokrenite migracije paketa na čekanju + Readme paketa + Repozitorij paketa + Potvrdi deinstalaciju paketa + Paket je deinstaliran + Paket je uspješno deinstaliran + Deinstaliraj paket + + Bilješka: svi dokumenti, mediji itd. u zavisnosti od stavki koje uklonite, prestat će raditi i mogu dovesti do nestabilnosti sistema, + pa deinstalirajte sa oprezom. Ako ste u nedoumici, kontaktirajte autora paketa.]]> + Verzija paketa + Provjereno za rad na Umbraco Cloud + + + Zalijepi s punim formatiranjem (nije preporučljivo) + Tekst koji pokušavate zalijepiti sadrži posebne znakove ili formatiranje. Ovo bi moglo biti + uzrokovano kopiranjem teksta iz programa Microsoft Word. Umbraco može automatski ukloniti posebne znakove ili formatiranje, tako da + zalijepljeni sadržaj će biti prikladniji za web. + + Zalijepite kao sirovi tekst bez ikakvog oblikovanja + Zalijepi, ali ukloni oblikovanje (preporučeno) + + + Grupna zaštita + Ako želite dodijeliti pristup svim članovima određenih grupa članova + Morate kreirati grupu članova prije nego što možete koristiti grupnu autentifikaciju + Stranica sa greškom + Koristi se kada su ljudi prijavljeni, ali nemaju pristup + %0%]]> + %0% je sada zaštićen]]> + %0%]]> + Stranica za prijavu + Odaberite stranicu koja sadrži obrazac za prijavu + Uklonite zaštitu... + + %0%?]]> + Odaberite stranice koje sadrže obrazac za prijavu i poruke o greškama + %0%]]> + %0%]]> + Posebna zaštita članova + Ako želite dati pristup određenim članovima + + + + + + + + + + Uključite neobjavljene podstranice + Objavljivanje u toku - molimo sačekajte... + %0% od %1% stranica je objavljeno... + %0% je objavljeno + %0% i objavljene su podstranice + Objavi %0% i sve njegove podstranice + Objavi za objavu %0% i na taj način svoj sadržaj učiniti javno dostupnim.

+ Ovu stranicu i sve njene podstranice možete objaviti odabirom Uključi neobjavljene podstranice. + ]]>
+ + + Niste konfigurirali nijednu odobrenu boju + + + Možete odabrati samo stavke tipa: %0% + Odabrali ste stavku sadržaja koja je trenutno izbrisana ili je u korpi za otpatke + Odabrali ste stavke sadržaja koje su trenutno izbrisane ili su u korpi za otpatke + + + Izbrisana stavka + Odabrali ste medijsku stavku koja je trenutno izbrisana ili je u korpi za otpatke + Odabrali ste medijske stavke koje su trenutno izbrisane ili su u korpi za otpatke + Otpad + Otvorite u biblioteci medija + Promjena medijske stavke + Uredi %0% od %1% + Odbaci kreiranje? + + Izmijenili ste ovaj sadržaj. Jeste li sigurni da ga želite + odbaciti? + + Uklonite sve medije? + Međuspremnik + Nije dozvoljeno + Otvorite birač medija + + + unesite eksterni link + izaberite internu stranicu + Naslov + Link + Otvori u novom prozoru + unesite natpis na ekranu + Unesite link + + + Resetujte izrezivanje + Gotovo + Poništi izmjene + Korisnički definisano + + + Promjene + Kreirano + Trenutna verzija + + Crveni tekst će biti uklonjen u odabranoj verziji, zeleni tekst će biti dodan]]> + Nema razlike između trenutne verzije (nacrta) i odabrane verzije + Dokument je vraćen + Odaberite verziju koju želite usporediti sa trenutnom verzijom + Ovo prikazuje odabranu verziju kao HTML, ako želite vidjeti razliku između dvije + verzije u isto vrijeme, koristite pogled diff + + Vratite se na + Odaberite verziju + Pogled + + + Uredite datoteku skripte + + + Portirnica + Sadržaj + Kurir + Developer + Forme + Pomoć + Umbraco Konfiguracijski Čarobnjak + Mediji + Članovi + Bilteni + Paketi + Marketplace + Postavke + Statistika + Prevodi + Korisnici + + + Ture + Najbolji Umbraco video tutorijali + Posjetite our.umbraco.com + Posjetite umbraco.tv + Pogledajte naše besplatne video tutoriale + na Umbraco Learning Base + + + Podrazumevani šablon + Da biste uvezli vrstu dokumenta, pronađite ".udt" datoteku na svom računaru klikom na + dugme "Uvezi" (na sljedećem ekranu će se tražiti da potvrdite) + + Naslov nove kartice + Tip čvora + Tip + Stilovi + Skripte + Kartica + Naslov kartice + Kartice + Glavni tip sadržaja je omogućen + Ovaj tip sadržaja koristi + Nema definiranih svojstava na ovoj kartici. Kliknite na vezu "dodaj novu nekretninu" na + vrh za kreiranje novog svojstva. + + Kreirajte odgovarajući šablon + Dodaj ikonu + + + Redoslijed sortiranja + Datum kreiranja + Sortiranje završeno. + Povucite različite stavke gore ili dolje ispod da postavite kako bi trebale biti raspoređene. Ili kliknite na + zaglavlja kolona za sortiranje cijele kolekcije stavki + + + + + Validacija + Greške u validaciji moraju biti ispravljene pre nego što se stavka može sačuvati + Nije uspjelo + Sačuvano + Nedovoljne korisničke dozvole, ne mogu dovršiti operaciju + Otkazano + Operaciju je otkazao dodatak treće strane + Ovaj fajl se učitava kao deo fascikle, ali kreiranje novog foldera ovde nije dozvoljeno + Kreiranje novog foldera ovdje nije dozvoljeno + Objavljivanje je otkazao dodatak treće strane + Tip svojstva već postoji + Tip svojstva kreiran + Tip podatka: %1%]]> + Tip svojstva obrisan + Tip dokumenta sačuvan + Kartica kreirana + Kartica je izbrisana + Kartica sa id-em: %0% je obrisana + Stilovi nisu sačuvani + Stilovi sačuvani + Stilovi sačuvani bez ikakvih grešaka + Tip podatka sačuvan + Stavka rječnika je sačuvana + Objavljivanje nije uspjelo jer nadređena stranica nije objavljena + Sadržaj objavljen + i vidljivo na web stranici + Šablon sadržaja je sačuvan + Promjene su uspješno sačuvane + Sadržaj sačuvan + Ne zaboravite objaviti da promjene budu vidljive + Poslano na odobrenje + Promjene su poslane na odobrenje + Medij sačuvan + Medij sačuvan bez ikakvih grešaka + Član sačuvan + Svojstvo stilova sačuvano + Stilovi sačuvani + Šablon sačuvan + Greška pri spremanju korisnika (provjerite log) + Korisnik sačuvan + Tip korisnika sačuvan + Grupa korisnika sačuvana + Kulture i imena hostova su sačuvani + Greška pri spremanju kultura i imena hostova + Fajl nije sačuvan + fajl nije mogao biti sačuvan. Molimo provjerite dozvole za fajlove + Fajl sačuvan + Fajl sačuvan bez ikakvih grešaka + Jezik sačuvan + Tip medija sačuvan + Tip člana sačuvan + Grupa članova sačuvana + Druga grupa članova sa istim imenom već postoji + Šablon nije sačuvan + Uvjerite se da nemate 2 šablona sa istim pseudonimom + Šablon sačuvan + Šablon sačuvan bez ikakvih grešaka! + Sadržaj nije objavljen + Djelomični prikaz sačuvan + Djelomični prikaz sačuvan bez ikakvih grešaka! + Djelomični prikaz nije sačuvan + Došlo je do greške prilikom spremanja fajla. + Dozvole su sačuvane za + Izbrisano je %0% grupa korisnika + %0% je obrisano + Omogućeno %0% korisnika + Onemogućeno %0% korisnika + %0% je sada omogućen + %0% je sada onemogućen + Grupe korisnika su postavljene + Otključano %0% korisnika + %0% je sada otključan + Član je izvezen u fajl + Došlo je do greške prilikom izvoza člana + Korisnik %0% je obrisan + Pozovi korisnika + Pozivnica je ponovo poslana na %0% + Tip dokumenta je izvezen u fajl + Došlo je do greške prilikom izvoza tipa dokumenta + Stavke iz rječnika su izvezene u fajl + Došlo je do greške prilikom izvoza stavki rječnika + Sljedeće stavke iz rječnika su uvezene! + Domene nisu konfigurirane za višejezične stranice, molimo kontaktirajte administratora, + pogledajte dnevnik za više informacija + + Nijedan domen nije konfigurisan za %0%, molimo kontaktirajte administratora, pogledajte + prijavite se za više informacija + + Vaše sistemske informacije su uspješno kopirane u međuspremnik + Nije moguće kopirati vaše sistemske informacije u međuspremnik + + + Dodaj stil + Uredi stil + Stilovi za uređivanje bogatog teksta + Definirajte stilove koji bi trebali biti dostupni u uređivaču obogaćenog teksta za ove + stilove + + Uredi stilove + Uredi svojstvo stilova + Ime prikazano u uređivaču birača stilova + Pregled + Kako će tekst izgledati u uređivaču obogaćenog teksta. + Selektor + Koristite CSS sintaksu, npr. "h1" ili ".redHeader" + Stilovi + CSS koji treba primijeniti u uređivaču obogaćenog teksta, npr. "color:red;" + Kod + Uređivač + + + Produkcija.]]> + Brisanje šablona sa ID-om %0% nije uspjelo + Uredi šablon + Sekcije + Umetnite područje sadržaja + Umetnite čuvar mjesta u području sadržaja + Umetni + Odaberite šta ćete umetnuti u svoj šablon + Stavka iz rječnika + Stavka rječnika je čuvar mjesta za prevodljiv dio teksta, koji + olakšava kreiranje dizajna za višejezične web stranice. + + Makro + + Makro je komponenta koja se može konfigurirati i odlična je za + višekratni dijelovi vašeg dizajna, gdje vam je potrebna opcija za pružanje parametara, + kao što su galerije, obrasci i liste. + + Vrijednost + Prikazuje vrijednost imenovanog polja sa trenutne stranice, s opcijama za izmjenu + vrijednost ili povratak na alternativne vrijednosti. + + Djelomičan pogled + + Djelomični prikaz je zasebna datoteka šablona koja se može prikazati unutar druge + predložak, odličan je za ponovnu upotrebu markupa ili za odvajanje složenih predložaka u zasebne datoteke. + + Master šablon + Nema mastera + Renderirajte podređeni predložak + @RenderBody(). + ]]> + Definirajte imenovanu sekciju + @section { ... }. Ovo se može prikazati u + određenom području nadređenog predloška, koristeći @RenderSection. + ]]> + Renderirajte imenovanu sekciju + @RenderSection(name). + Ovo prikazuje područje podređenog šablona koje je umotano u odgovarajuću @section [name]{ ... } definiciju. + ]]> + Naziv sekcije + Sekcija je obavezna + @section, u suprotnom se prikazuje greška. + ]]> + Kreator upita + stavke vraćene, u + želim + sav sadržaj + sadržaj tipa "%0%" + iz + moja web stranica + gdje + i + je + nije + prije + prije (uključujući odabrani datum) + poslije + poslije (uključujući odabrani datum) + jednako + nije jednako + sadrži + ne sadrži + veće od + veće ili jednako + manje od + manje ili jednako + Id + Naziv + Kreirano + Ažurirano + poredaj po + uzlazno + silazno + Predložak + + + Slika + Makro + Odaberite tip sadržaja + Odaberite izgled + Dodaj red + Dodaj sadržaj + Ispusti sadržaj + Postavke su primijenjene + Ovaj sadržaj ovdje nije dozvoljen + Ovaj sadržaj je ovdje dozvoljen + Kliknite za ugradnju + Kliknite da umetnete sliku + Kliknite da umetnete makro + Pišite ovdje... + Raspored mreže + Izgledi su cjelokupno radno područje za uređivač mreže, obično vam je potreban samo jedan ili + dva različita izgleda + + Dodajte raspored mreže + Uredite raspored mreže + Prilagodite izgled postavljanjem širine kolona i dodavanjem dodatnih odjeljaka + Konfiguracije redova + Redovi su predefinirani za raspored vodoravno + Dodajte konfiguraciju reda + Uredite konfiguraciju reda + Podesite red postavljanjem širine ćelija i dodavanjem dodatnih ćelija + Nije dostupna dodatna konfiguracija + Kolone + Ukupan kombinovani broj kolona u rasporedu mreže + Postavke + Konfigurirajte koje postavke urednici mogu promijeniti + Stilovi + Konfigurirajte šta uređivači stilova mogu promijeniti + Dozvoli svim urednicima + Dozvoli sve konfiguracije redaka + Maksimalan broj stavki + Ostavite prazno ili postavite na 0 za neograničeno + Postavi kao zadano + Odaberite extra + Odaberite zadano + su dodani + Upozorenje + + Promjena imena konfiguracije reda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji se temelji na ovoj konfiguraciji.

Izmjena samo oznake neće rezultirati gubitkom podataka.

]]>
+ Brišete konfiguraciju reda + + Brisanje imena konfiguracije reda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji je zasnovan na ovome + konfiguraciju. + + Brišete izgled + Izmjena izgleda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji je zasnovan + na ovoj konfiguraciji. + + + + Kompozicije + Grupa + Niste dodali nijednu grupu + Dodaj grupu + Naslijeđeno od + Dodaj svojstvo + Obavezna oznaka + Omogući prikaz liste + Konfiguriše stavku sadržaja da prikaže njenu listu koja se može sortirati i pretraživati + djeco, djeca neće biti prikazana na drvetu + + Dozvoljeni predlošci + Odaberite koje predloške urednici mogu koristiti na sadržaju ove vrste + + Dozvoli kao korijen + Dozvolite urednicima da kreiraju sadržaj ovog tipa u korijenu stabla sadržaja. + + Dozvoljeni tipovi podređenih čvorova + Dozvolite da se sadržaj navedenih tipova kreira ispod sadržaja ovog + tip. + + Odaberite podređeni čvor + Naslijediti kartice i svojstva iz postojeće vrste dokumenta. Nove kartice će biti + dodano trenutnoj vrsti dokumenta ili spojeno ako postoji kartica s identičnim imenom. + + Ovaj tip sadržaja se koristi u kompoziciji i stoga se ne može sam sastaviti. + + Nema dostupnih tipova sadržaja za upotrebu kao kompozicija. + Uklanjanje kompozicije će izbrisati sve povezane podatke o svojstvu. Jednom ti + sačuvajte tip dokumenta, nema povratka. + + Napravi novi + Koristite postojeće + Postavke urednika + Konfiguracija + Da, izbriši + je premještena ispod + je kopirano ispod + Odaberite folder za premještanje + Odaberite folder za kopiranje + do u strukturi stabla ispod + Svi tipovi dokumenata + Svi dokumenti + Sve medijske stavke + korištenje ovog tipa dokumenta će biti trajno izbrisano, potvrdite da želite + izbrišite i ove. + + korištenje ove vrste medija će biti trajno izbrisano, potvrdite da želite izbrisati + ovi takođe. + + korištenje ove vrste člana će biti trajno izbrisano, potvrdite da želite izbrisati + ovi takođe + + i svi dokumenti koji koriste ovu vrstu + i sve medijske stavke koje koriste ovu vrstu + i svi članovi koji koriste ovaj tip + Član može uređivati + Dozvolite da ovu vrijednost svojstva uređuje član na svojoj stranici profila + + Osjetljivi podaci + Sakrij ovu vrijednost svojstva od uređivača sadržaja koji nemaju pristup pregledu + osjetljive informacije + + Prikaži na profilu člana + Dozvolite da se ova vrijednost svojstva prikaže na stranici profila člana + + kartica nema redoslijed sortiranja + Gdje se koristi ovaj sastav? + Ovaj sastav se trenutno koristi u sastavu sljedećih + tipa sadržaja: + + Dozvoli varijacije + Dozvolite varirati u zavisnosti od kulture + Dozvoli segmentaciju + Varijacije po kulturi + Varijacije po segmentima + Dozvolite urednicima da kreiraju sadržaj ove vrste na različitim jezicima. + Dozvolite urednicima da kreiraju sadržaj na različitim jezicima. + Dozvolite urednicima da kreiraju segmente ovog sadržaja. + Dozvolite varijaciju po kulturi + Dozvoli segmentaciju + Tip elementa + Je li tip elementa + Tip elementa je namijenjen za korištenje na primjer u ugniježđenom sadržaju, a ne u + drvo. + + Tip dokumenta se ne može promijeniti u tip elementa nakon što je naviknut + kreirati jednu ili više stavki sadržaja. + + Ovo nije primjenjivo za tip elementa + Napravili ste promjene u ovoj nekretnini. Jeste li sigurni da ih želite odbaciti? + Izgled + Oznaka iznad (puna širina) + Uklanjate podređeni čvor + Uklanjanje podređenog čvora ograničit će opcije urednika da kreiraju drugačiji sadržaj + tipovi ispod čvora. + + korišćenjem ovog uređivača biće ažurirane nove postavke. + Čišćenje istorije + Dozvoli zaobilaženje postavki čišćenja globalne historije. + Neka sve verzije budu novije od dana + Čuvajte najnoviju verziju po danu danima + Spriječi čišćenje + Omogući čišćenje + BILJEŠKA! Čišćenje istorijskih verzija sadržaja onemogućeno je globalno. Ove postavke neće stupiti na snagu prije nego što se omogući.]]> + + + Dodaj jezik + ISO kod + Obavezan jezik + Svojstva na ovom jeziku moraju biti popunjena prije nego što se čvor može ispuniti + objavljeno. + + Zadani jezik + Umbraco stranica može imati samo jedan zadani jezik. + Promjena zadanog jezika može rezultirati nedostatkom zadanog sadržaja. + Vraća se na + Nema zamjenskog jezika + Da se omogući višejezični sadržaj da se vrati na drugi jezik ako ne + bude prisutan na traženom jeziku, odaberite ga ovdje. + + Zamjenski jezik + nijedan + + + Dodaj parameter + Uredi parameter + Unesite naziv makroa + Parametri + Definišite parametre koji bi trebali biti dostupni kada koristite ovaj makro. + Odaberite djelimični prikaz makro datoteke + + + Kreiranje modela + ovo može potrajati, ne brinite + Modeli generisani + Models nije mogao biti generisani + Generisanje modela nije uspjelo, pogledajte izuzetak u log dnevniku + + + Dodajte zadanu vrijednost + Zadana vrijednost + Rezervno polje + Zadana vrijednost + Veličina slova + Kodiranje + Odaberite polje + Pretvorite prijelome redaka + Zamjenjuje prijelome reda sa 'br' html oznakom + Prilagođena polja + Samo datum + Formatiraj kao datum + Kodirati kao HTML + Zamijenit će specijalne znakove njihovim HTML ekvivalentom. + Biće umetnuto iza vrednosti polja + Biće umetnuto ispred vrednosti polja + Mala slova + Nema + Izlazni uzorak + Umetnuti nakon polja + Umetnuti ispred polja + Rekurzivno + Da, neka bude rekurzivno + Standardna polja + Velika slova + Kodirati kao URL + Formatirati će posebne znakove u URL-ovima + Koristit će se samo kada su vrijednosti polja iznad prazne + Ovo polje će se koristiti samo ako je primarno polje prazno + Datum i vrijeme + + + Detalji prijevoda + Preuzmi XML DTD + Polja + Uključi podstranice + + Nije pronađen nijedan korisnik prevodioca. Molimo kreirajte korisnika prevodioca prije nego počnete slati + sadržaj u prijevod + + Stranica '%0%' je poslana na prijevod + Pošaljite stranicu '%0%' u prijevod + Ukupno riječi + Prevedi na + Prevod završen. + Možete pregledati stranice koje ste upravo preveli klikom ispod. Ako je + originalna stranica je pronađena, dobićete poređenje 2 stranice. + + Prevod nije uspio, XML datoteka je možda oštećena + Opcije prevođenja + Prevodilac + Uvezite XML prijevod + + + Sadržaj + Predlošci sadržaja + Mediji + Pretraživač keša + Kanta za smeće + Kreirani paketi + Tipovi podataka + Riječnik + Instalirani paketi + Instaliraj skin + Instaliraj početnički kit + Jezici + Instaliraj lokalni paket + Makroi + Tipovi medija + Članovi + Grupe članova + Uloge članova + Tipovi članova + Tipovi dokumenata + Tipovi relacija + Paketi + Paketi + Parcijalni pogledi + Parcijalni pregledi makro fajlova + Instaliraj iz repozitorija + Instaliraj Runway + Runway moduli + Skripte + Skripte + Stilovi + Predlošci + Log preglednik + Korisnici + Postavke + Predložak + Treća strana + + + Novo ažuriranje spremno + %0% je spremno, kliknite ovdje za preuzimanje + Nema konekcije sa serverom + Greška pri provjeri ažuriranja. Molimo pregledajte log za dodatne informacije + + + Pristup + Na osnovu dodijeljenih grupa i početnih čvorova, korisnik ima pristup sljedećim čvorovima + + Dodijeli pristup + Administrator + Polje kategorije + Korisnik kreiran + Promijeni lozinku + Promijeni sliku + Nova lozinka + Najmanje %0% znakova! + Trebalo bi biti najmanje %0% specijalnih znakova. + nije zaključan + Lozinka nije promijenjena + Potvrdite novu lozinku + Možete promijeniti lozinku za pristup Umbraco backofficeu popunjavanjem + izađite iz donjeg obrasca i kliknite na dugme 'Promijeni lozinku' + + Kanal sadržaja + Kreirajte drugog korisnika + Kreirajte nove korisnike da im date pristup Umbraco. Kada se novom korisniku kreira lozinka + će biti generisano koje možete podijeliti s korisnikom. + + Polje za opis + Onemogući korisnika + Tip dokumenta + Urednik + Obavezno - unesite email adresu za ovog korisnika + Polje izvoda + Neuspjeli pokušaji prijave + Idite na korisnički profil + Dodajte grupe za dodjelu pristupa i dozvola + Pozovite drugog korisnika + Pozovite nove korisnike da im daju pristup Umbraco. E-mail sa pozivom će biti poslan na + korisnik s informacijama o tome kako se prijaviti na Umbraco. Pozivnice traju 72 sata. + + Jezik + Podesite jezik koji ćete videti u menijima i dijalozima + Zadnji datum zaključavanja + Zadnja prijava + Lozinka zadnji put promijenjena + Korisničko ime + Medijski startni čvor + Ograničite biblioteku medija na određeni početni čvor + Medijski startni čvorovi + Ograničite biblioteku medija na određene početne čvorove + Sekcije + Obavezno - unesite ime za ovog korisnika + Onemogućite pristup Umbraco-u + se još nije prijavio + Stara lozinka + Lozinka + Reset lozinke + Vaša lozinka je promijenjena! + Lozinka je promijenjena + Molimo potvrdite novu lozinku + Unesite novu lozinku + Vaša nova lozinka ne može biti prazna! + Trenutna lozinka + Nevažeća trenutna lozinka + Postojala je razlika između nove lozinke i potvrđene lozinke. Molim te + pokušaj ponovo! + + Potvrđena lozinka ne odgovara novoj lozinki! + Zamijenite dozvole podređenog čvora + Trenutno mijenjate dozvole za stranice: + Odaberite stranice da promijenite njihove dozvole + Ukloni sliku + Zadane dozvole + Detaljne dozvole + Postavite dozvole za određene čvorove + Profil + Pretražite svu djecu + Ograničite jezike kojima korisnici imaju pristup za uređivanje + Dodajte odjeljke da korisnicima omogućite pristup + Odaberite grupe korisnika + Nije odabran početni čvor + Nije odabran nijedan početni čvor + Početni čvor sadržaja + Ograničite stablo sadržaja na određeni početni čvor + Početni čvorovi sadržaja + Ograničite stablo sadržaja na određene početne čvorove + Korisnik zadnji put ažuriran + je kreiran + Novi korisnik je uspješno kreiran. Za prijavu na Umbraco koristite + lozinka ispod. + + Upravljanje korisnicima + Korisničko ime + Korisničke dozvole + Grupa korisnika + je pozvan + Novom korisniku je poslana pozivnica s detaljima o tome kako se prijaviti + Umbraco. + + Pozdrav i dobrodošli u Umbraco! Za samo 1 minut možete krenuti, mi + samo trebate postaviti lozinku i dodati sliku za svoj avatar. + + Dobrodošli u Umbraco! Nažalost, vaš poziv je istekao. Molimo kontaktirajte svoju + administratora i zamolite ih da ga ponovo pošalju. + + Ako otpremite svoju fotografiju, drugi korisnici će ga lako prepoznati + ti. Kliknite na krug iznad da otpremite svoju fotografiju. + + Pisac + Promjena + Vaš profil + Vaša nedavna istorija + Sesija ističe za + Pozovi korisnika + Kreiraj korisnika + Pošalji pozivnicu + Nazad na korisnike + Umbraco: Pozivnica + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Zdravo %0%, +

+

+ Pozvani ste od %1% u Umbraco Back Office. +

+

+ Poruka od %1%: +
+%2% +

+ + + + + + +
+ + + + + + +
+ + Kliknite na ovaj link da prihvatite pozivnicu + +
+
+

Ukoliko ne možete kliknuti na link, kopirajte i zalijepite ovaj URL u prozor vašeg pretraživača:

+ + + + +
+ +%3% + +
+

+
+
+


+
+
+ +]]>
+ Ponovno slanje pozivnice... + Izbriši korisnika + Jeste li sigurni da želite izbrisati ovaj korisnički račun? + Sve + Aktivan + Onemogućen + Zaključan + Odobren + Pozvan + Neaktivan + Ime (A-Z) + Ime (Z-A) + Najnovije + Najstarije + Zadnja prijava + Nijedna korisnička grupa nije dodana + Ako želite da onemogućite ovog dvofaktorskog provajdera, onda morate uneti kod prikazan na vašem uređaju za autentifikaciju: + Ovaj dvofaktorski provajder je omogućen + Ovaj dvofaktorski provajder je sada onemogućen + Nešto je pošlo po zlu s pokušajem da se onemogući ovaj dvofaktorski provajder + Želite li onemogućiti ovog dvofaktorskog provajdera za ovog korisnika? + + + Validacija + Nema validacije + Potvrdi kao adresu e-pošte + Potvrdite kao broj + Potvrdi kao URL + ...ili unesite prilagođenu validaciju + Polje je obavezno + Unesite prilagođenu poruku o grešci validacije (opcionalno) + Unesite regularni izraz + Unesite prilagođenu poruku o grešci validacije (opcionalno) + Morate dodati barem + Samo možeš imati + Dodajte do + stavke + URL-ovi + Odabrani URL-ovi + odabrane stavke + Nevažeći datum + Nije broj + Nije važeća brojčana veličina koraka + Nevažeći email + Vrijednost ne može biti null + Vrijednost ne može biti prazna + Vrijednost je nevažeća, ne odgovara ispravnom uzorku + Prilagođena validacija + %1% više.]]> + %1% previše.]]> + Zahtjevi za količinu sadržaja nisu ispunjeni za jedno ili više područja. + + + + Vrijednost je postavljena na preporučenu vrijednost: '%0%'. + Očekivana vrijednost '%1%' za '%2%' u konfiguracijskoj datoteci '%3%', ali + pronađeno '%0%'. + + Pronađena neočekivana vrijednost '%0%' za '%2%' u konfiguracijskoj datoteci '%3%'. + + + Makro greške su postavljene na '%0%'. + Greške makroa su postavljene na '%0%' što će spriječiti potpuno učitavanje nekih ili svih stranica + na vašem sajtu ako postoje greške u makroima. Ako ovo ispravite, vrijednost će biti postavljena na '%1%'. + + + + Certifikat Vaše web stranice je važeći. + Greška u validaciji certifikata: '%0%' + SSL certifikat vaše web stranice je istekao. + SSL certifikat vaše web stranice ističe za %0% dana. + Greška pri pingovanju URL-a %0% - '%1%' + Trenutno %0% pregledavate stranicu koristeći HTTPS šemu. + AppSetting 'Umbraco:CMS:Global:UseHttps' je postavljen na 'false' u + vašem appSettings.json fajl. Jednom kada pristupite ovoj stranici koristeći HTTPS šemu, to bi trebalo biti postavljeno na 'true'. + + Postavka aplikacije 'Umbraco:CMS:Global:UseHttps' je postavljena na '%0%' u vašem + appSettings.json datoteku, vaši kolačići su %1% označeni kao sigurni. + + + Način kompilacije otklanjanja grešaka je onemogućen. + Način kompilacije za otklanjanje grešaka je trenutno omogućen. Preporučuje se da se + onemogućite ovu postavku prije emitiranja uživo. + + + + + %0%.]]> + AppSetting 'Umbraco:CMS:WebRouting:UmbracoApplicationUrl' nije postavljen. + + X-Frame-Options koji se koristi za kontrolu da li neko mjesto može biti IFRAMED od strane drugog je pronađen.]]> + + X-Frame-Options koji se koristi za kontrolu da li neko mjesto može biti IFRAMED od strane drugog nije pronađen.]]> + + X-Content-Type-Options koji se koristi za zaštitu od ranjivosti MIME sniffinga je pronađen.]]> + + X-Content-Type-Options koji se koristi za zaštitu od ranjivosti MIME sniffinga nije pronađen.]]> + + Strict-Transport-Security, takođe poznat kao HSTS-header, je pronađen.]]> + + Strict-Transport-Security nije pronađeno.]]> + + Strict-Transport-Security, takođe poznat kao HSTS-header, je pronađen. Ovo zaglavlje ne bi trebalo biti prisutno na lokalnom hostu.]]> + + + Strict-Transport-Security nije pronađeno. Ovo zaglavlje ne bi trebalo biti prisutno na lokalnom hostu.]]> + + X-XSS-Protection je pronađeno.]]> + + X-XSS-Protection nije pronađeno.]]> + + + %0%.]]> + Nisu pronađena zaglavlja koja otkrivaju informacije o tehnologiji web stranice. + + U datoteci Web.config, system.net/mailsettings nije moguće pronaći. + U datoteci Web.config, system.net/mailsettings, host + nije konfigurisan. + + SMTP postavke su ispravno konfigurisane i usluga radi + kao što je očekivano. + + SMTP server konfigurisan sa hostom '%0%' i portom '%1%' ne može biti + dosegnut. Provjerite jesu li SMTP postavke u datoteci Web.config, system.net/mailsettings ispravne. + + + %0%.]]> + + %0%.]]> + +

Rezultati zakazanih Umbraco provjera zdravlja koji se pokreću na %0% na %1% su sljedeći:

%2%]]>
+ Status provjere zdravlja Umbraco: %0% + Provjerite grupu + + Provjera zdravlja procjenjuje različita područja vaše web lokacije u pogledu postavki najbolje prakse, konfiguracije, potencijalnih problema itd. Možete jednostavno riješiti probleme pritiskom na dugme. + Možete dodati svoje zdravstvene preglede, pogledajte dokumentaciju za više informacija o prilagođenim zdravstvenim pregledima.

+ ]]> +
+ + + Onemogući URL tragač + Omogući URL tragač + Originalni URL + Preusmjeri na + Preusmjeravanje URL-ova + Sljedeći URL-ovi preusmjeravaju na ovu stavku sadržaja: + Nisu napravljena nikakva preusmjeravanja + Kada se objavljena stranica preimenuje ili premjesti, preusmjeravanje će automatski biti + napravljen na novu stranicu. + + Preusmjeravanje uklonjeno. + Greška pri uklanjanju preusmjeravanja. + Ovo će ukloniti preusmjeravanje + Jeste li sigurni da želite onemogućiti URL tragač? + URL tragač je sada onemogućen. + Greška pri onemogućavanju URL tragača, više informacija možete pronaći u vašem log fajlu. + URL tragač je sada omogućen. + Greška pri omogućavanju URL tragača, više informacija možete pronaći u vašem log fajlu. + + + Nema stavki iz rječnika za odabir + + + %0% preostalih znakova.]]> + %1% previše.]]> + + + Sadržaj u otpadu s ID-om: {0} povezan je s originalnim nadređenim sadržajem s ID-om: {1} + Medij u otpadu s ID-om: {0} povezan je s originalnim nadređenim medijem s ID-om: {1} + Nije moguće automatski vratiti ovu stavku + Ne postoji lokacija na kojoj se ova stavka može automatski vratiti. Vi + može ručno premjestiti stavku koristeći stablo ispod. + + je restauriran pod + + + Smjer + Roditelj djetetu + Bidirectional + Roditelj + Dijete + Broj + Relacija + Relacije + Kreirano + Komentar + Naziv + Nema relacija za ovu vrstu odnosa + Tip relacije + Relacije + Je zavisan + Da + Ne + + + Početak rada + Preusmjeravanje URL-ova + Sadržaj + Dobrodošli + Examine menadžment + Status stranice + Generator modela + Provjera zdravlja + Profilisanje + Početak rada + Instaliraj Umbraco Forms + + + Vrati se + Aktivan raspored: + Skoči na + grupa + prošao + upozorenje + neuspješno + prijedlog + Provjera prošla + Provjera nije uspjela + Otvorite backoffice pretragu + Otvori/Zatvori pomoć za backoffice + Opcije otvaranja/zatvaranja profila + Postavite kulturu i imena hostova za %0% + Kreirajte novi čvor ispod %0% + Postavite ograničenja pristupa uključena %0% + Dozvole za postavljanje su uključene %0% + Promijenite redoslijed sortiranja za %0% + Kreirajte predložak sadržaja na osnovu %0% + Otvorite kontekstni meni za + Trenutni jezik + Prebaci jezik na + Kreirajte novi folder + Parcijalni pogled + Makro za djelomični prikaz + Član + Tip podatka + Pretražite kontrolnu tablu za preusmjeravanje + Pretražite odjeljak korisničke grupe + Pretražite odjeljak korisnika + Kreiraj stavku + Kreiraj + Uredi + Naziv + Dodaj novi red + Pogledajte više opcija + Pogledajte više opcija + Potražite čvorove sadržaja, medijske čvorove itd. u backofficeu. + Kada su dostupni rezultati autodovršavanja, pritisnite strelice gore i dolje ili koristite + taster tab i koristite taster enter da izaberete. + + Putanja: + Pronađeno u + Ima prevod + Nedostaje prijevod + Stavke iz rječnika + Odaberite jednu od opcija za uređivanje čvora. + Izvršite akciju %0% na čvoru %1%. + Dodajte natpis slike + Pretraži stablo sadržaja + Maksimalni iznos + + + Reference + Ovaj tip podataka nema reference. + Ova stavka nema reference. + Koristi se u tipovima dokumenata + Koristi se u tipovima medija + Koristi se u tipovima članova + Koristi + Stavke u upotrebi + Potomci u upotrebi + Ova stavka ili njeni potomci se koriste. Brisanje može dovesti do neispravnih veza na vašoj web stranici. + Ova stavka ili njeni potomci se koriste. Poništavanje objavljivanja može dovesti do neispravnih veza na vašoj web stranici. Molimo poduzmite odgovarajuće radnje. + Ova stavka ili njeni potomci se koriste. Stoga je brisanje onemogućeno. + Sljedeće stavke koje pokušavate %0% koriste drugi sadržaj. + + + Izbriši sačuvane pretrage + Nivoi loga + Označi sve + Odznači sve + Sačuvane pretrage + Sačuvaj pretragu + Unesite prijateljski naziv za vaš upit za pretragu + Filtriraj pretragu + Ukupno + Vrijeme + Nivo + Uređaj + Poruka + Izuzetak + Svojstva + Pretraži pomoću Google-a + Pretraži ovu poruku pomoću Google-a + Pretraži pomoću Bing-a + Pretraži ovu poruku pomoću Bing-a + Pretraži Our Umbraco + Pretraži ovu poruku na Our Umbraco forumu i dokumentaciji + Pretraži Our Umbraco pomoću Google-a + Pretraži Our Umbraco forume pomoću Google-a + Pretraži Umbraco Source + Pretraži Umbraco source code on Github-u + Pretraži Umbraco Issues + Pretraži Umbraco Issues na Github-u + Obriši ovu pretragu + Pronađi logove sa ID-om zatjeva + Pronađi logove sa namespace-om + Pronađi logove sa nazivom uređaja + Otvori + Provjera + Svako 2 sekunde + Svako 5 sekundi + Svako 10 sekundi + Svako 20 sekundi + Svako 30 sekundi + Provjera svako 2s + Provjera svako 5s + Provjera svako 10s + Provjera svako 20s + Provjera svako 30s + + + Kopiraj %0% + %0% od %1% + Zbirka od %0% + Uklonite sve stavke + Očisti međuspremnik + + + Otvorite radnje svojstva + Zatvorite Property Actions + + + Osvježi status + Memorijski keš + + + + Ponovo učitaj + Keš baze podataka + + Obnova može biti skupa. + Koristite ga kada ponovno učitavanje nije dovoljno, a mislite da keš baze podataka nije bio + pravilno generisan—što bi ukazivalo na neko kritično pitanje Umbraco. + ]]> + + Ponovo sagradi + Unutrašnjost + + ne morate koristiti. + ]]> + + Skupiti + Objavljeni status keša + Predmemorije + + + Profiliranje performansi + + + Umbraco trenutno radi u načinu za otklanjanje grešaka. To znači da možete koristiti ugrađeni profiler performansi za procjenu performansi prilikom renderiranja stranica. +

+

+ Ako želite da aktivirate profiler za određeno prikazivanje stranice, jednostavno dodajte umbDebug=true na string upita kada tražite stranicu. +

+

+ Ako želite da se profilator aktivira prema zadanim postavkama za sve prikaze stranica, možete koristiti prekidač ispod. + On će postaviti kolačić u vaš pretraživač, koji zatim automatski aktivira profiler. + Drugim riječima, profiler će biti aktivan samo po defaultu u vašen pretraživaču - ne svačijem drugom. +

+ ]]> +
+ Podrazumevano aktivirajte profiler + Prijateljski podsjetnik + + + Nikada ne biste trebali dozvoliti da proizvodna lokacija radi u načinu za otklanjanje grešaka. Režim za otklanjanje grešaka se isključuje podešavanjem Umbraco:CMS:Hosting:Debug na false u appsettings.json, appsettings.{Environment}.json ili preko varijable okruženja. +

+ ]]> +
+ + + Umbraco trenutno ne radi u načinu za otklanjanje grešaka, tako da ne možete koristiti ugrađeni profiler. Ovako bi trebalo da bude za proizvodnu lokaciju. +

+

+ Režim za otklanjanje grešaka se uključuje podešavanjem Umbraco:CMS:Hosting:Debug na true u appsettings.json, appsettings.{Environment}.json ili preko varijable okruženja. +

+ ]]> +
+ + + Sati Umbraco trening videa udaljeni su samo jedan klik + + Želite savladati Umbraco? Provedite nekoliko minuta učeći neke najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a. I posjetite umbraco.tv za još više Umbraco videa

+ ]]> +
+ + Želite savladati Umbraco? Provedite nekoliko minuta učeći neke najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a Umbraco Learning Base Youtube kanal. Ovdje možete pronaći gomilu video materijala koji pokriva mnoge aspekte Umbraco-a.

+ ]]> +
+ Za početak + + + Počni ovdje + Ovaj odjeljak sadrži blokove za izgradnju vaše Umbraco stranice. Slijedite dolje + veze da saznate više o radu sa stavkama u odjeljku Postavke + + Saznajte više + + u odjeljku Dokumentacija na Our Umbraco + ]]> + + + Forumu zajednice + ]]> + + + video tutorijale na Umbraco Learning Base + ]]> + + + alatima za povećanje produktivnosti i komercijalna podrška + ]]> + + + obuke i certifikacije + ]]> + + + + Dobrodošli u The Friendly CMS + Hvala vam što ste odabrali Umbraco - mislimo da bi ovo mogao biti početak nečega + predivno. Iako se u početku može činiti neodoljivim, učinili smo mnogo da kriva učenja bude što glatka i brza + što je moguće. + + + + Umbraco Forms + Kreirajte obrasce pomoću intuitivnog drag and drop interfejsa. Od jednostavnih kontakt obrazaca + koji šalje e-mail do naprednih obrazaca koji se integrišu sa CRM sistemima. Vašim klijentima će se svidjeti! + + + + Odaberite tip elementa + Priložite postavke na tip elementa + Odaberite prikaz + Odaberite stil + Odaberite sličicu + Kreirajte novi tip elementa + Prilagođeni stil + Dodaj stil + Izgled bloka + Modeli podataka + Izgled kataloga + Boja pozadine + Boja ikone + Model sadržaja + Labela + Prilagođeni prikaz + Prikaži opis prilagođenog prikaza + Zamenite način na koji se ovaj blok pojavljuje u korisničkom sučelju backofficea. Odaberite .html datoteku + koji sadrži vašu prezentaciju. + + Model postavki + Veličina uređivača preklapanja + Dodaj prilagođeni prikaz + Dodaj postavke + + %0%?]]> + + %0%?]]> + Sadržaj ovog bloka će i dalje biti prisutan, uređivanje ovog sadržaja + više neće biti dostupan i bit će prikazan kao nepodržani sadržaj. + + + %0% i sve konfiguracije ovog bloka?]]> + Sadržaj ovih blokova će i dalje biti prisutan, uređivanje ovog sadržaja + više neće biti dostupan i bit će prikazan kao nepodržani sadržaj. + + + Ne može se uređivati jer tip elementa ne postoji. + Sličica + Dodaj sličicu + Kreiraj prazno + Međuspremnik + Postavke + Napredno + Sakrij uređivač sadržaja + Sakrijte dugme za uređivanje sadržaja i uređivač sadržaja iz preklapanja Block Editor. + Inline editovanje + Omogućava inline uređivanje za prvo svojstvo. Dodatna svojstva se mogu uređivati u prekrivaču. + Izmijenili ste ovaj sadržaj. Jeste li sigurni da ih želite odbaciti? + Odbaciti kreiranje? + + Greška! + Tip elementa ovog bloka više ne postoji + Dodaj sadržaj + Dodaj %0% + Svojstvo '%0%' koristi uređivač '%1%' koji nije podržan u blokovima. + Postavite fokus na blok kontejnera + Identifikacija + Validacija + %0% mora biti prisutan barem %2% puta.]]> + %0% mora biti maksimalno prisutan %3% puta.]]> + Broj blokova + Dozvolite samo određene tipove blokova + Dozvoljene vrste blokova + Definirajte tipove blokova koji su dozvoljeni u ovoj oblasti i opciono koliko svakog tipa treba biti prisutan. + Jeste li sigurni da želite izbrisati ovo područje? + Svi blokovi koji su trenutno kreirani unutar ovog područja bit će obrisani. + Opcije rasporeda + Strukturno + Opcije veličine + Definirajte jednu ili više opcija veličine, ovo omogućava promjenu veličine bloka + Definirajte jednu ili više opcija veličine, ovo omogućava promjenu veličine bloka + Definirajte različit broj kolona preko kojih ovaj blok može da se proteže. Ovo ne sprječava postavljanje blokova u područja s manjim rasponom kolona. + Dostupni rasponi redova + Definirajte raspon redova rasporeda preko kojih se ovaj blok može prostirati. + Dozvolite u korijenu + Učinite ovaj blok dostupnim u korijenu izgleda. + Dozvolite u područjima + Učinite ovaj blok dostupnim prema zadanim postavkama unutar područja drugih blokova (osim ako za ove oblasti nisu postavljene eksplicitne dozvole). + Prema zadanim postavkama, svi tipovi blokova su dozvoljeni u području. Koristite ovu opciju da dozvolite samo odabrane tipove. + Područja + Mrežne kolone za područja + Definirajte koliko će stupaca biti dostupno za područja. Ako nije definiran, koristit će se broj kolona definiranih za cijeli izgled. + Područja + Da biste omogućili ugniježđenje blokova unutar ovog bloka, definirajte jedno ili više područja. Područja slijede raspored definiran njihovom vlastitom konfiguracijom stupca mreže. 'Raspon kolone' i 'raspon reda' za svaku oblast može se podesiti korištenjem okvira za rukovanje skalom u donjem desnom uglu odabranog područja. + %0% nije dozvoljeno na ovom mestu.]]> + Zadani raspored stilova + Nedozvoljeni sadržaj je odbijen + + + + + Povucite za skaliranje + Kreiraj oznaku dugmeta + Nadjačajte tekst oznake za dodavanje novog bloka u ovo područje, primjer: 'Dodaj widget' + Prikaži opcije promjene veličine + Dodaj blok + Dodaj grupu + Odaberi grupu ili blok + Postavite minimalni zahtjev + Postavite maksimalan zahtjev + Blok + Blok + Postavke + Područja + Napredno + Dozvole + Instalirajte uzorak konfiguracije + + Instaliraj + Način sortiranja + Završi način sortiranja + Ovaj pseudonim oblasti mora biti jedinstven u poređenju sa drugim oblastima ovog bloka. + Konfiguriraj područje + Obriši područje + Dodajte opciju raspona %0% kolona + + + Šta su predlošci sadržaja? + Predlošci sadržaja su unaprijed definirani sadržaj koji se može odabrati prilikom kreiranja novog + sadržaj čvora. + + Kako da kreiram predložak sadržaja? + + Postoje dva načina za kreiranje predloška sadržaja:

+
    +
  • Desnom tipkom miša kliknite čvor sadržaja i odaberite "Kreiraj predložak sadržaja" da kreirate novi predložak sadržaja.
  • +
  • Kliknite desnim tasterom miša na stablo predložaka sadržaja u odjeljku Postavke i odaberite vrstu dokumenta za koju želite da kreirate predložak sadržaja.
  • +
+

Nakon što dobiju ime, urednici mogu početi koristiti predložak sadržaja kao osnovu za svoju novu stranicu.

+ ]]> +
+ Kako da upravljam predlošcima sadržaja? + Možete uređivati i brisati predloške sadržaja iz stabla "Šabloni sadržaja" u + odjeljak postavki. Proširite vrstu dokumenta na kojoj se temelji predložak sadržaja i kliknite na nju da biste uredili ili izbrisali to. + + + + Kraj + Završi način pregleda + Pregledajte web stranicu + Otvorite web stranicu u načinu pregleda + Pregledajte web stranicu? + Završili ste način pregleda, želite li ga ponovo omogućiti da vidite + najnovija sačuvana verzija vaše web stranice? + + Pregledajte najnoviju verziju + Pogledajte objavljenu verziju + Pogledajte objavljenu verziju? + Nalazite se u načinu pregleda, želite li izaći da biste vidjeli + objavljena verzija Vaše web stranice? + + Pogledajte objavljenu verziju + Ostanite u načinu pregleda + + + Kreiranje foldera + Pisanje datoteka za pakete + Pisanje fajlova + Kreiranje medijskog foldera + + + stavka vraćena + stavke vraćene + +
diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index d568f48102..0f90e815a0 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -1329,7 +1329,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Likes Compatibility This package is compatible with the following versions of Umbraco, as - reported by community members. Full compatability cannot be guaranteed for versions reported below 100% + reported by community members. Full compatibility cannot be guaranteed for versions reported below 100% External sources Author @@ -1540,7 +1540,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Property type already exists Property type created DataType: %1%]]> - Propertytype deleted + Property type deleted Document Type saved Tab created Tab deleted @@ -2775,7 +2775,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Set focus on the container block Identification Validation - %0% must be present atleast %2% time(s).]]> + %0% must be present at least %2% time(s).]]> %0% must maximum be present %3% time(s).]]> Number of blocks Only allow specific block types From 81b28df6abfd0a8e51f05d3104c02aca83115afe Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Tue, 21 Feb 2023 13:49:03 +0100 Subject: [PATCH 11/96] Merge dev into contrib (#13871) * Removed path so we can generate templates * Remove old proj ref to core from cs proj (#13870) Co-authored-by: Zeegaan --------- Co-authored-by: Andreas Zerbst Co-authored-by: Bjarke Berg Co-authored-by: Zeegaan From 62fdbd159c5b3788302fd6a74be323f7ffff587c Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Wed, 22 Feb 2023 14:54:47 +0100 Subject: [PATCH 12/96] Reset selected index/searcher (#13866) --- .../views/dashboard/settings/examinemanagement.controller.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js index cff40baf45..9588dea6eb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js @@ -85,9 +85,11 @@ function ExamineManagementController($http, $q, $timeout, umbRequestHelper, loca function nextSearchResultPage(pageNumber) { search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } + function prevSearchResultPage(pageNumber) { search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } + function goToPageSearchResultPage(pageNumber) { search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } @@ -137,11 +139,13 @@ function ExamineManagementController($http, $q, $timeout, umbRequestHelper, loca } function showIndexInfo(index) { + vm.selectedSearcher = null; vm.selectedIndex = index; setViewState("index-details"); } function showSearcherInfo(searcher) { + vm.selectedIndex = null; vm.selectedSearcher = searcher; setViewState("searcher-details"); } From 2a3c0358b1c68fe2f3045acbaffa3a2af4a4dad7 Mon Sep 17 00:00:00 2001 From: jomehmet Date: Wed, 22 Feb 2023 15:21:53 +0100 Subject: [PATCH 13/96] Add support for Inline Macro - To enable: Add a Macro Parameter called: enableInlineMacro with Umbraco.TrueFalse set to True (value:"1") (#13628) - Custom Macro Parameter with true as default value can be created for those prefering that in their project Co-authored-by: Jo Mehmet Sollihagen --- .../Macros/MacroTagParser.cs | 11 ++++-- .../src/common/services/tinymce.service.js | 38 +++++++++++-------- .../src/less/rte-content.less | 6 ++- .../Macros/MacroParserTests.cs | 21 ++++++++++ 4 files changed, 57 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Infrastructure/Macros/MacroTagParser.cs b/src/Umbraco.Infrastructure/Macros/MacroTagParser.cs index 07109729b6..08559f786a 100644 --- a/src/Umbraco.Infrastructure/Macros/MacroTagParser.cs +++ b/src/Umbraco.Infrastructure/Macros/MacroTagParser.cs @@ -40,10 +40,15 @@ public class MacroTagParser { if (match.Groups.Count >= 3) { + var macroCanBeInlinedInParagraph = match.Value?.Contains("enableInlineMacro=\"1\"") ?? false; + var macroElementType = macroCanBeInlinedInParagraph ? "span" : "div"; //
var alias = match.Groups[2].Value; - var sb = new StringBuilder("
htmlAttribute in htmlAttributes) @@ -64,7 +69,7 @@ public class MacroTagParser sb.Append("Macro alias: "); sb.Append(""); sb.Append(alias); - sb.Append("
"); + sb.Append($""); return sb.ToString(); } diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index ea284ee2ce..e23e712046 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -766,14 +766,20 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s } var e = $(element).closest(".umb-macro-holder"); + if (e.length > 0) { - if (e.get(0).parentNode.nodeName === "P") { + var macroHolder = e.get(0); + // In case of Inline Macro we don't need the be backward compliant + if(macroHolder.tagName === 'SPAN'){ + return macroHolder; + } + if (macroHolder.parentNode.nodeName === "P") { //now check if we're the only element if (element.parentNode.childNodes.length === 1) { - return e.get(0).parentNode; + return macroHolder.parentNode; } } - return e.get(0); + return macroHolder; } return null; } @@ -830,35 +836,37 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s var macroSyntaxComment = ""; //create an id class for this element so we can re-select it after inserting var uniqueId = "umb-macro-" + editor.dom.uniqueId(); - var macroDiv = editor.dom.create('div', + var isInlined = macroObject.macroParamsDictionary["enableInlineMacro"] === "1"; + var macroElementType = isInlined ? 'span' : 'div'; + var macroElement = editor.dom.create(macroElementType, { - 'class': 'umb-macro-holder ' + macroObject.macroAlias + " " + uniqueId + ' mceNonEditable', + 'class': 'umb-macro-holder ' + macroObject.macroAlias + " " + uniqueId + ' mceNonEditable' + (isInlined ? ' inlined-macro' : ''), 'contenteditable': 'false' }, macroSyntaxComment + 'Macro alias: ' + macroObject.macroAlias + ''); //if there's an activeMacroElement then replace it, otherwise set the contents of the selected node if (activeMacroElement) { - activeMacroElement.replaceWith(macroDiv); //directly replaces the html node + activeMacroElement.replaceWith(macroElement); //directly replaces the html node } else { - editor.selection.setNode(macroDiv); + editor.selection.setNode(macroElement); } - var $macroDiv = $(editor.dom.select("div.umb-macro-holder." + uniqueId)); + var $macroElement = $(editor.dom.select(".umb-macro-holder." + uniqueId)); editor.setDirty(true); //async load the macro content - this.loadMacroContent($macroDiv, macroObject, editor); + this.loadMacroContent($macroElement, macroObject, editor); }, /** loads in the macro content async from the server */ - loadMacroContent: function ($macroDiv, macroData, editor) { + loadMacroContent: function ($macroElement, macroData, editor) { //if we don't have the macroData, then we'll need to parse it from the macro div if (!macroData) { - var contents = $macroDiv.contents(); + var contents = $macroElement.contents(); var comment = _.find(contents, function (item) { return item.nodeType === 8; }); @@ -870,15 +878,15 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s macroData = parsed; } - var $ins = $macroDiv.find("ins"); + var $ins = $macroElement.find("ins"); //show the throbber - $macroDiv.addClass("loading"); + $macroElement.addClass("loading"); // Add the contenteditable="false" attribute // As just the CSS class of .mceNonEditable is not working by itself?! // TODO: At later date - use TinyMCE editor DOM manipulation as opposed to jQuery - $macroDiv.attr("contenteditable", "false"); + $macroElement.attr("contenteditable", "false"); var contentId = $routeParams.id; @@ -887,7 +895,7 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s macroResource.getMacroResultAsHtmlForEditor(macroData.macroAlias, contentId, macroData.macroParamsDictionary) .then(function (htmlResult) { - $macroDiv.removeClass("loading"); + $macroElement.removeClass("loading"); htmlResult = htmlResult.trim(); if (htmlResult !== "") { var wasDirty = editor.isDirty(); diff --git a/src/Umbraco.Web.UI.Client/src/less/rte-content.less b/src/Umbraco.Web.UI.Client/src/less/rte-content.less index 3fe4e52f92..f19b1edb98 100644 --- a/src/Umbraco.Web.UI.Client/src/less/rte-content.less +++ b/src/Umbraco.Web.UI.Client/src/less/rte-content.less @@ -4,9 +4,13 @@ .mce-content-body .umb-macro-holder { border: 3px dotted @pinkLight; padding: 7px; - display: block; margin: 3px; } +.mce-content-body .umb-macro-holder.inlined-macro { + border: 1px dotted @pinkLight; + padding: 1px; + margin: 0px; +} .umb-rte .mce-content-body .umb-macro-holder.loading { diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs index bbfcf2103e..63300eaa1b 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Macros/MacroParserTests.cs @@ -396,4 +396,25 @@ asdfsdf @"", result); } + + [Test] + public void Format_RTE_WhenMacroContainsParameter_EnableInlineMacro_WithValue_1_ItShouldBeInASpan() + { + var content = @"

asdfasdf

+

asdfsadf

+ +

asdfasdf

"; + var result = MacroTagParser.FormatRichTextPersistedDataForEditor( + content, + new Dictionary { { "test1", "value1" }, { "enableInlineMacro", "1"} }); + + Assert.AreEqual( + @"

asdfasdf

+

asdfsadf

+ + +Macro alias: My.Map.isCool eh[boy!] +

asdfasdf

".StripNewLines(), + result.StripNewLines()); + } } From 37db3ae3da0d0d7e65c78857c615caa953ad7898 Mon Sep 17 00:00:00 2001 From: Menno Mout <77411834+mennomout@users.noreply.github.com> Date: Sun, 26 Feb 2023 14:00:28 +0100 Subject: [PATCH 14/96] Listview batch publishing on multi language site, publishes all variants #13755 - Fix (#13772) * Modified PostPublishById to handle content that is culture variant. Added model and modified the javascript function that call the api endpoint. * Added separate method for publishing with cultures. Added if else statment to js function. * Moved check for all cultures being published to the top of PostPublishByIdAndCulture. Added parameter to ngDoc. Added Where Query. --- .../Models/ContentEditing/PublishContent.cs | 16 ++++++ .../Controllers/ContentController.cs | 55 ++++++++++++++++++- .../src/common/resources/content.resource.js | 29 ++++++---- 3 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 src/Umbraco.Core/Models/ContentEditing/PublishContent.cs diff --git a/src/Umbraco.Core/Models/ContentEditing/PublishContent.cs b/src/Umbraco.Core/Models/ContentEditing/PublishContent.cs new file mode 100644 index 0000000000..ba6d8d2f6f --- /dev/null +++ b/src/Umbraco.Core/Models/ContentEditing/PublishContent.cs @@ -0,0 +1,16 @@ +using System.Runtime.Serialization; + +namespace Umbraco.Cms.Core.Models.ContentEditing; + +/// +/// Used to publish content and variants +/// +[DataContract(Name = "publish", Namespace = "")] +public class PublishContent +{ + [DataMember(Name = "id")] + public int Id { get; set; } + + [DataMember(Name = "cultures")] + public string[]? Cultures { get; set; } +} diff --git a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs index 642db289a0..6c124c14a9 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs @@ -168,8 +168,8 @@ public class ContentController : ContentControllerBase authorizationService, contentVersionService, StaticServiceProvider.Instance.GetRequiredService()) - { - } + { + } public object? Domains { get; private set; } @@ -1950,6 +1950,7 @@ public class ContentController : ContentControllerBase } PublishResult publishResult = _contentService.SaveAndPublish(foundContent, userId: _backofficeSecurityAccessor.BackOfficeSecurity?.GetUserId().Result ?? 0); + if (publishResult.Success == false) { var notificationModel = new SimpleNotificationModel(); @@ -1960,6 +1961,56 @@ public class ContentController : ContentControllerBase return Ok(); } + /// + /// Publishes a document with a given ID and cultures. + /// + /// + /// + /// + /// The EnsureUserPermissionForContent attribute will deny access to this method if the current user + /// does not have Publish access to this node. + /// + [Authorize(Policy = AuthorizationPolicies.ContentPermissionPublishById)] + public IActionResult PostPublishByIdAndCulture(PublishContent model) + { + var languageCount = _allLangs.Value.Count(); + + // If there is no culture specified or the cultures specified are equal to the total amount of languages, publish the content in all cultures. + if (model.Cultures == null || !model.Cultures.Any() || model.Cultures.Length == languageCount) + { + return PostPublishById(model.Id); + } + + IContent? foundContent = GetObjectFromRequest(() => _contentService.GetById(model.Id)); + + if (foundContent == null) + { + return HandleContentNotFound(model.Id); + } + + var results = new Dictionary(); + + foreach (var culture in model.Cultures) + { + PublishResult publishResult = _contentService.SaveAndPublish(foundContent, culture, _backofficeSecurityAccessor.BackOfficeSecurity?.GetUserId().Result ?? 0); + results[culture] = publishResult; + } + + if (results.Any(x => x.Value.Success == false)) + { + var notificationModel = new SimpleNotificationModel(); + + foreach (var culture in results.Where(x => x.Value.Success == false)) + { + AddMessageForPublishStatus(new[] { culture.Value }, notificationModel); + } + + return ValidationProblem(notificationModel); + } + + return Ok(); + } + [HttpDelete] [HttpPost] public IActionResult DeleteBlueprint(int id) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js index 7e6c6658e5..b3218b2c7f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js @@ -278,7 +278,8 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { * alert("node wasnt unpublished:" + err.data.Message); * }); * - * @param {Int} id the ID of the node to unpublish + * @param {Int} id the ID of the node to unpublish. + * @param {array} cultures the cultures to unpublish. * @returns {Promise} resourcePromise object. * */ @@ -1086,23 +1087,31 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { * * * @param {Int} id The ID of the conten to publish + * @param {array} cultures the cultures to publish. * @returns {Promise} resourcePromise object containing the published content item. * */ - publishById: function (id) { - + publishById: function (id, cultures) { if (!id) { throw "id cannot be null"; } - return umbRequestHelper.resourcePromise( - $http.post( + if (!cultures) { + return umbRequestHelper.resourcePromise( + $http.post( umbRequestHelper.getApiUrl( - "contentApiBaseUrl", - "PostPublishById", - [{ id: id }])), - 'Failed to publish content with id ' + id); - + "contentApiBaseUrl", + "PostPublishById"), { id: id }), + 'Failed to publish content with id ' + id); + } + else { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "contentApiBaseUrl", + "PostPublishByIdAndCulture"), { id: id, cultures: cultures }), + 'Failed to publish content with id ' + id); + } }, /** From 44e8d0ac6da8b3d95102a41741d80191d4270db7 Mon Sep 17 00:00:00 2001 From: Miska Husgafvel Date: Thu, 23 Feb 2023 15:39:36 +0200 Subject: [PATCH 15/96] Make additionalRouteVals nullable in Umbraco.Extensions.HtmlHelperRenderExtensions.BeginUmbracoForm() - Fixes #13662 --- .../Extensions/HtmlHelperRenderExtensions.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs index 2e44bae31f..a048987483 100644 --- a/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs @@ -337,7 +337,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, string controllerName, - object additionalRouteVals, + object? additionalRouteVals, FormMethod method) => html.BeginUmbracoForm(action, controllerName, additionalRouteVals, new Dictionary(), method); @@ -348,7 +348,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, string controllerName, - object additionalRouteVals) + object? additionalRouteVals = null) => html.BeginUmbracoForm(action, controllerName, additionalRouteVals, new Dictionary()); /// @@ -358,7 +358,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, string controllerName, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes, FormMethod method) => html.BeginUmbracoForm( @@ -375,7 +375,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, string controllerName, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes) => html.BeginUmbracoForm( action, @@ -483,7 +483,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, Type surfaceType, - object additionalRouteVals, + object? additionalRouteVals, FormMethod method) => html.BeginUmbracoForm( action, @@ -499,21 +499,21 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, Type surfaceType, - object additionalRouteVals) => + object? additionalRouteVals = null) => html.BeginUmbracoForm(action, surfaceType, additionalRouteVals, new Dictionary()); /// /// Helper method to create a new form to execute in the Umbraco request pipeline to a surface controller plugin /// /// The type - public static MvcForm BeginUmbracoForm(this IHtmlHelper html, string action, object additionalRouteVals, FormMethod method) + public static MvcForm BeginUmbracoForm(this IHtmlHelper html, string action, object? additionalRouteVals, FormMethod method) where T : SurfaceController => html.BeginUmbracoForm(action, typeof(T), additionalRouteVals, method); /// /// Helper method to create a new form to execute in the Umbraco request pipeline to a surface controller plugin /// /// The type - public static MvcForm BeginUmbracoForm(this IHtmlHelper html, string action, object additionalRouteVals) + public static MvcForm BeginUmbracoForm(this IHtmlHelper html, string action, object? additionalRouteVals = null) where T : SurfaceController => html.BeginUmbracoForm(action, typeof(T), additionalRouteVals); /// @@ -523,7 +523,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, Type surfaceType, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes) => html.BeginUmbracoForm( action, @@ -538,7 +538,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, Type surfaceType, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes, FormMethod method) => html.BeginUmbracoForm( @@ -555,7 +555,7 @@ public static class HtmlHelperRenderExtensions this IHtmlHelper html, string action, Type surfaceType, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes, FormMethod method, bool? antiforgery) => @@ -574,7 +574,7 @@ public static class HtmlHelperRenderExtensions public static MvcForm BeginUmbracoForm( this IHtmlHelper html, string action, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes, FormMethod method) where T : SurfaceController => @@ -587,7 +587,7 @@ public static class HtmlHelperRenderExtensions public static MvcForm BeginUmbracoForm( this IHtmlHelper html, string action, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes, FormMethod method, bool? antiforgery) @@ -600,7 +600,7 @@ public static class HtmlHelperRenderExtensions public static MvcForm BeginUmbracoForm( this IHtmlHelper html, string action, - object additionalRouteVals, + object? additionalRouteVals, object htmlAttributes) where T : SurfaceController => html.BeginUmbracoForm(action, typeof(T), additionalRouteVals, htmlAttributes); @@ -690,7 +690,7 @@ public static class HtmlHelperRenderExtensions public static MvcForm BeginUmbracoForm( this IHtmlHelper html, string action, - object additionalRouteVals, + object? additionalRouteVals, IDictionary htmlAttributes, FormMethod method) where T : SurfaceController => @@ -703,7 +703,7 @@ public static class HtmlHelperRenderExtensions public static MvcForm BeginUmbracoForm( this IHtmlHelper html, string action, - object additionalRouteVals, + object? additionalRouteVals, IDictionary htmlAttributes) where T : SurfaceController => html.BeginUmbracoForm(action, typeof(T), additionalRouteVals, htmlAttributes); From 27e38e1606bf7e7e2d61dd77bfda8f1a421a39a8 Mon Sep 17 00:00:00 2001 From: niekvanderreest Date: Tue, 28 Feb 2023 14:47:53 +0100 Subject: [PATCH 16/96] Change GetMinNonAlphaNumericChars() to return 1 (#13876) --- src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs b/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs index 61b284383a..30cbe8a831 100644 --- a/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs +++ b/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs @@ -30,5 +30,5 @@ public static class PasswordConfigurationExtensions }; public static int GetMinNonAlphaNumericChars(this IPasswordConfiguration passwordConfiguration) => - passwordConfiguration.RequireNonLetterOrDigit ? 2 : 0; + passwordConfiguration.RequireNonLetterOrDigit ? 1 : 0; } From 6ce30fb56129f0c42b371ac63a2629d20782226c Mon Sep 17 00:00:00 2001 From: mwillebrands Date: Tue, 21 Feb 2023 10:59:13 +0100 Subject: [PATCH 17/96] Fix for #13860 Undefined error when inserting an empty link in the RTE editor --- .../src/common/services/tinymce.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index e23e712046..4dfb139396 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -1152,7 +1152,7 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s // the href might be an external url, so check the value for an anchor/qs // href has the anchor re-appended later, hence the reset here to avoid duplicating the anchor - if (!target.anchor) { + if (!target.anchor && href) { var urlParts = href.split(/(#|\?)/); if (urlParts.length === 3) { href = urlParts[0]; From ca2378489801d017e4409be6531042e3da6a38e5 Mon Sep 17 00:00:00 2001 From: Menno Mout <77411834+mennomout@users.noreply.github.com> Date: Wed, 25 Jan 2023 17:53:53 +0100 Subject: [PATCH 18/96] Added a CalculateMediaStartNodeIds method call when the startNode passed in as parameter is null. When this does return an array of startNodes the first one is being used. The question remains if this is desired behaviour. With this implementation the user has no real control over where the file is going to go. Atleast with this implementation the user can now see the file. --- .../Services/TemporaryMediaService.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Services/TemporaryMediaService.cs b/src/Umbraco.Core/Services/TemporaryMediaService.cs index 44aa555804..acd8e08fc9 100644 --- a/src/Umbraco.Core/Services/TemporaryMediaService.cs +++ b/src/Umbraco.Core/Services/TemporaryMediaService.cs @@ -1,8 +1,10 @@ -using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Extensions; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Strings; @@ -20,6 +22,8 @@ public class TemporaryMediaService : ITemporaryMediaService private readonly IHostEnvironment _hostingEnvironment; private readonly ILogger _logger; private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; + private readonly IEntityService _entityService; + private readonly AppCaches _appCaches; public TemporaryMediaService( IShortStringHelper shortStringHelper, @@ -29,7 +33,9 @@ public class TemporaryMediaService : ITemporaryMediaService IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IHostEnvironment hostingEnvironment, ILogger logger, - IBackOfficeSecurityAccessor backOfficeSecurityAccessor) + IBackOfficeSecurityAccessor backOfficeSecurityAccessor, + IEntityService entityService, + AppCaches appCaches) { _shortStringHelper = shortStringHelper; _mediaFileManager = mediaFileManager; @@ -39,21 +45,26 @@ public class TemporaryMediaService : ITemporaryMediaService _hostingEnvironment = hostingEnvironment; _logger = logger; _backOfficeSecurityAccessor = backOfficeSecurityAccessor; + _entityService = entityService; + _appCaches = appCaches; } public IMedia Save(string temporaryLocation, Guid? startNode, string? mediaTypeAlias) { - var userId = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.Id ?? Constants.Security.SuperUserId; + IUser? user = _backOfficeSecurityAccessor?.BackOfficeSecurity?.CurrentUser; + int userId = user?.Id ?? Constants.Security.SuperUserId; var absoluteTempImagePath = _hostingEnvironment.MapPathContentRoot(temporaryLocation); var fileName = Path.GetFileName(absoluteTempImagePath); var safeFileName = fileName.ToSafeFileName(_shortStringHelper); - var mediaItemName = safeFileName.ToFriendlyName(); IMedia mediaFile; + if (startNode is null) { - mediaFile = _mediaService.CreateMedia(mediaItemName, Constants.System.Root, mediaTypeAlias ?? Constants.Conventions.MediaTypes.File, userId); + int[]? userStartNodes = user?.CalculateMediaStartNodeIds(_entityService, _appCaches); + + mediaFile = _mediaService.CreateMedia(mediaItemName, userStartNodes != null && userStartNodes.Any() ? userStartNodes[0] : Constants.System.Root, mediaTypeAlias ?? Constants.Conventions.MediaTypes.File, userId); } else { From 9771e7724346ebc3bf7c9678ee42f1c3a01c9811 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Thu, 2 Mar 2023 11:57:43 +0100 Subject: [PATCH 19/96] IsNullOrWhiteSpace Extension method for HtmlEncodedString (#13747) * Add IsNullOrWhiteSpace Extension method IsNullOrWhiteSpace extension method for IHtmlEncodedString * Move extension method * Add a UnitTest for the IsNullOrWhiteSpace extension method * Update unit test --- .../Extensions/HtmlEncodedStringExtensions.cs | 19 ++++++++++++++ .../HtmlEncodedStringExtensionsTests.cs | 26 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs create mode 100644 tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs diff --git a/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs b/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs new file mode 100644 index 0000000000..9af5b25d27 --- /dev/null +++ b/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs @@ -0,0 +1,19 @@ +using System.Diagnostics.CodeAnalysis; +using Umbraco.Cms.Core.Strings; + +namespace Umbraco.Extensions; + +public static class HtmlEncodedStringExtensions +{ + /// + /// Checks if the specified is null or only contains whitespace, optionally after all HTML tags have been stripped/removed. + /// + /// The encoded HTML string. + /// If set to true strips/removes all HTML tags. + /// + /// Returns true if the HTML string is null or only contains whitespace, optionally after all HTML tags have been stripped/removed. + /// + public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this IHtmlEncodedString? htmlEncodedString, bool stripHtml = false) + => (htmlEncodedString?.ToHtmlString() is var htmlString && string.IsNullOrWhiteSpace(htmlString)) || + (stripHtml && string.IsNullOrWhiteSpace(htmlString.StripHtml())); +} diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs new file mode 100644 index 0000000000..4703cebb40 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs @@ -0,0 +1,26 @@ +using Moq; +using NUnit.Framework; +using Umbraco.Cms.Core.Strings; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Extensions; + +[TestFixture] +public class HtmlEncodedStringExtensionsTests +{ + [TestCase(null, false, true)] + [TestCase("", false, true)] + [TestCase(" ", false, true)] + [TestCase("This is a non-empty string", false, false)] + [TestCase("

This is a non-empty string

", true,false)] + [TestCase("

This is a non-empty string

", false,false)] + [TestCase("

", true, true)] + [TestCase("

", false, false)] + public void IsNullOrWhiteSpace(string? htmlString, bool stripHtml, bool expectedResult) + { + var htmlEncodedString = htmlString == null ? null : Mock.Of(x => x.ToHtmlString() == htmlString); + var result = htmlEncodedString.IsNullOrWhiteSpace(stripHtml: stripHtml); + + Assert.AreEqual(expectedResult, result); + } +} From 5158d8119d9b43214fe48553aec3ce19958d0809 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Thu, 2 Mar 2023 14:23:20 +0100 Subject: [PATCH 20/96] Map BackOfficeNotification in ContentMapDefinitions (#13874) * Map Notifications * Empty line --- src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs b/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs index a310944a6d..57732a9898 100644 --- a/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs +++ b/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs @@ -167,6 +167,11 @@ internal class ContentMapDefinition : IMapDefinition target.Updater = source.Updater; target.Urls = source.Urls; target.Variants = context.MapEnumerable(source.Variants); + + foreach (BackOfficeNotification backOfficeNotification in source.Notifications) + { + target.Notifications.Add(backOfficeNotification); + } } // Umbraco.Code.MapAll From 282b7ac3d59047521ae974327df8e12073229c0c Mon Sep 17 00:00:00 2001 From: Miska Husgafvel Date: Thu, 16 Feb 2023 14:49:26 +0200 Subject: [PATCH 21/96] Ensure cropperHelper.pixelsToCoordinates returns valid coordinates --- .../src/common/services/cropperhelper.service.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js index 1f860f237c..636134f289 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js @@ -98,9 +98,8 @@ function cropperHelper(umbRequestHelper, $http) { }, pixelsToCoordinates : function(image, width, height, offset){ - - var x1_px = Math.abs(image.left-offset); - var y1_px = Math.abs(image.top-offset); + var x1_px = Math.abs((image.left || 0)-offset); + var y1_px = Math.abs((image.top || 0)-offset); var x2_px = image.width - (x1_px + width); var y2_px = image.height - (y1_px + height); From 0789bb9eb16606c853427dc74ebe6c4388cca85a Mon Sep 17 00:00:00 2001 From: Nikolaj Brask-Nielsen Date: Thu, 2 Mar 2023 23:43:08 +0700 Subject: [PATCH 22/96] Remove transitive project references * refactor: Remove transitive project relations * refactor: Remove transitive project relations --- src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj | 2 -- src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj | 2 -- src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj | 1 - .../Umbraco.PublishedCache.NuCache.csproj | 1 - src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj | 3 --- src/Umbraco.Web.Common/Umbraco.Web.Common.csproj | 2 -- src/Umbraco.Web.Website/Umbraco.Web.Website.csproj | 2 -- 7 files changed, 13 deletions(-) diff --git a/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj b/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj index 62b5c7aa67..47612499b5 100644 --- a/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj +++ b/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj @@ -17,11 +17,9 @@ - - diff --git a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj index f627057d24..d537b116c0 100644 --- a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj +++ b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj @@ -10,8 +10,6 @@ - - diff --git a/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj b/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj index 5130e9cc01..c96686f41c 100644 --- a/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj +++ b/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj @@ -11,7 +11,6 @@ - diff --git a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj index 0cde5c70b3..14ba520d80 100644 --- a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj +++ b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj @@ -14,7 +14,6 @@ - diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj index dbe28b4e41..9fc5109f11 100644 --- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj +++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj @@ -17,9 +17,6 @@ - - - diff --git a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj index 8feb0ced58..8b92241b28 100644 --- a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj +++ b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj @@ -20,9 +20,7 @@ - - diff --git a/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj b/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj index fb9b051667..0d4a775a95 100644 --- a/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj +++ b/src/Umbraco.Web.Website/Umbraco.Web.Website.csproj @@ -12,8 +12,6 @@ - - From e2a15b58ed20eb82c058815a93c8f093dc69c082 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 7 Mar 2023 11:21:57 +0100 Subject: [PATCH 23/96] Fallback to use ActivatorUtilities to create controller from type, if it is not registered in DI (#13910) --- src/Umbraco.Web.Common/Routing/UmbracoVirtualPageRoute.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.Common/Routing/UmbracoVirtualPageRoute.cs b/src/Umbraco.Web.Common/Routing/UmbracoVirtualPageRoute.cs index f0d0427438..cff5a589f6 100644 --- a/src/Umbraco.Web.Common/Routing/UmbracoVirtualPageRoute.cs +++ b/src/Umbraco.Web.Common/Routing/UmbracoVirtualPageRoute.cs @@ -61,8 +61,9 @@ public class UmbracoVirtualPageRoute : IUmbracoVirtualPageRoute if (controllerType != null) { - // Get the controller for the endpoint - var controller = httpContext.RequestServices.GetRequiredService(controllerType); + // Get the controller for the endpoint. We need to fallback to ActivatorUtilities if the controller is not registered in DI. + var controller = httpContext.RequestServices.GetService(controllerType) + ?? ActivatorUtilities.CreateInstance(httpContext.RequestServices, controllerType); // Try and find the content if this is a virtual page IPublishedContent? publishedContent = FindContent( From 30abbb0c5d3d6e46614fdfa0f251e36e468399d2 Mon Sep 17 00:00:00 2001 From: CyberReiter <90895378+CyberReiter@users.noreply.github.com> Date: Wed, 8 Mar 2023 11:18:17 +0100 Subject: [PATCH 24/96] Fix install when adding custom default languages (#13904) * Adding ids to language installation --------- Co-authored-by: Jason Elkin --- .../Migrations/Install/DatabaseDataCreator.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs index cc2e20fa02..a3f685f0ae 100644 --- a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs @@ -1757,6 +1757,7 @@ internal class DatabaseDataCreator { // Insert the specified languages, ensuring the first is marked as default. bool isDefault = true; + short id = 1; foreach (var isoCode in languageInstallDefaultDataSettings.Values) { if (!TryCreateCulture(isoCode, out CultureInfo? culture)) @@ -1766,12 +1767,14 @@ internal class DatabaseDataCreator var dto = new LanguageDto { + Id = id, IsoCode = culture.Name, CultureName = culture.EnglishName, IsDefault = isDefault, }; - _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", true, dto); + _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", false, dto); isDefault = false; + id++; } } else From 0cfc1fb66402d151de65f7671bb4113451107aa6 Mon Sep 17 00:00:00 2001 From: CyberReiter <90895378+CyberReiter@users.noreply.github.com> Date: Wed, 8 Mar 2023 12:14:22 +0100 Subject: [PATCH 25/96] Fall back to object if PublishedPropertyType modelType is null (#13553) * add null check * return object when type is null --- .../Models/PublishedContent/PublishedPropertyType.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs index 4bc4b02f68..e6b5b5ffa2 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs @@ -1,4 +1,4 @@ -using System.Diagnostics; +using System.Diagnostics; using System.Xml.Linq; using System.Xml.XPath; using Umbraco.Cms.Core.PropertyEditors; @@ -190,7 +190,7 @@ namespace Umbraco.Cms.Core.Models.PublishedContent } _cacheLevel = _converter?.GetPropertyCacheLevel(this) ?? PropertyCacheLevel.Snapshot; - _modelClrType = _converter == null ? typeof (object) : _converter.GetPropertyValueType(this); + _modelClrType = _converter?.GetPropertyValueType(this) ?? typeof(object); } /// From de6e9aeb317a1d9f8fba2b9f9ac8ec7d14cb5b87 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Wed, 8 Mar 2023 13:43:35 +0100 Subject: [PATCH 26/96] Prioritise surface controller requests highest (#13919) * Fixed issue mentioned in https://github.com/umbraco/Umbraco-CMS/issues/13836 Now surface controller requests always has higher priority than other. So if this is both a surface controller request and a virtual page request, it will execute the surface controller. * Moved some login into private methods * More clean up * Clean up * Only handle valid candidates --- .../UmbracoBuilderExtensions.cs | 1 + .../Routing/SurfaceControllerMatcherPolicy.cs | 118 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/Umbraco.Web.Website/Routing/SurfaceControllerMatcherPolicy.cs diff --git a/src/Umbraco.Web.Website/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Website/DependencyInjection/UmbracoBuilderExtensions.cs index 12c47c5fa4..dc98c5b813 100644 --- a/src/Umbraco.Web.Website/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Website/DependencyInjection/UmbracoBuilderExtensions.cs @@ -64,6 +64,7 @@ public static partial class UmbracoBuilderExtensions builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); diff --git a/src/Umbraco.Web.Website/Routing/SurfaceControllerMatcherPolicy.cs b/src/Umbraco.Web.Website/Routing/SurfaceControllerMatcherPolicy.cs new file mode 100644 index 0000000000..f2a834ca09 --- /dev/null +++ b/src/Umbraco.Web.Website/Routing/SurfaceControllerMatcherPolicy.cs @@ -0,0 +1,118 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.AspNetCore.Routing; +using Microsoft.AspNetCore.Routing.Matching; +using Umbraco.Cms.Web.Website.Controllers; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Web.Website.Routing; + +/// +/// Ensures the surface controller requests takes priority over other things like virtual routes. +/// Also ensures that requests to a surface controller on a virtual route will return 405, like HttpMethodMatcherPolicy ensures for non-virtual route requests. +/// +internal class SurfaceControllerMatcherPolicy : MatcherPolicy, IEndpointSelectorPolicy +{ + private const string Http405EndpointDisplayName = "405 HTTP Method Not Supported"; + + public override int Order { get; } // default order should be okay. Count be everything positive to not conflict with MS policies + + public bool AppliesToEndpoints(IReadOnlyList endpoints) + { + // In theory all endpoints can have the query string data for a surface controller + return true; + } + + public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates) + { + ArgumentNullException.ThrowIfNull(nameof(httpContext)); + ArgumentNullException.ThrowIfNull(nameof(candidates)); + + if (candidates.Count < 2) + { + return Task.CompletedTask; + } + + int? surfaceControllerIndex = GetSurfaceControllerCandidateIndex(candidates); + if (surfaceControllerIndex.HasValue) + { + HashSet allowedHttpMethods = GetAllowedHttpMethods(candidates[surfaceControllerIndex.Value]); + + if (allowedHttpMethods.Any() + && allowedHttpMethods.Contains(httpContext.Request.Method) is false) + { + // We need to handle this as a 405 like the HttpMethodMatcherPolicy would do. + httpContext.SetEndpoint(CreateRejectEndpoint(allowedHttpMethods)); + httpContext.Request.RouteValues = null!; + } + else + { + // Otherwise we invalidate all other endpoints than the surface controller that matched. + InvalidateAllCandidatesExceptIndex(candidates, surfaceControllerIndex.Value); + } + } + + return Task.CompletedTask; + } + + + private static HashSet GetAllowedHttpMethods(CandidateState candidate) + { + var surfaceControllerAllowedHttpMethods = new HashSet(StringComparer.OrdinalIgnoreCase); + + IHttpMethodMetadata? httpMethodMetadata = candidate.Endpoint?.Metadata.GetMetadata(); + if (httpMethodMetadata is not null) + { + foreach (var httpMethod in httpMethodMetadata.HttpMethods) + { + surfaceControllerAllowedHttpMethods.Add(httpMethod); + } + } + + return surfaceControllerAllowedHttpMethods; + } + + private static int? GetSurfaceControllerCandidateIndex(CandidateSet candidates) + { + for (var i = 0; i < candidates.Count; i++) + { + if (candidates.IsValidCandidate(i)) + { + CandidateState candidate = candidates[i]; + ControllerActionDescriptor? controllerActionDescriptor = + candidate.Endpoint?.Metadata.GetMetadata(); + + if (controllerActionDescriptor?.ControllerTypeInfo.IsType() == true) + { + return i; + } + } + } + + return null; + } + + private static void InvalidateAllCandidatesExceptIndex(CandidateSet candidates, int index) + { + for (var i = 0; i < candidates.Count; i++) + { + if (i != index) + { + candidates.SetValidity(i, false); + } + } + } + + private static Endpoint CreateRejectEndpoint(ISet allowedHttpMethods) => + new Endpoint( + (context) => + { + context.Response.StatusCode = 405; + + context.Response.Headers.Allow = string.Join(", ", allowedHttpMethods); + + return Task.CompletedTask; + }, + EndpointMetadataCollection.Empty, + Http405EndpointDisplayName); +} From be72c8147daaa0e96470c2aa53df7e72a38b3ab2 Mon Sep 17 00:00:00 2001 From: Chad Date: Fri, 10 Mar 2023 01:25:07 +1300 Subject: [PATCH 27/96] Faster full nucache table rebuild (#13501) * SQL Server Truncate when full nucache SQL rebuild. * Optimize truncate for SQL Lite * Remove comment. * Use current DB Types * I added a couple of formatting changes. --------- Co-authored-by: georgebid <91198628+georgebid@users.noreply.github.com> --- .../Persistence/NuCacheContentRepository.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs index cb2feb55c3..b7fac1e7bc 100644 --- a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs +++ b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs @@ -108,7 +108,23 @@ public class NuCacheContentRepository : RepositoryBase, INuCacheContentRepositor | ContentCacheDataSerializerEntityType.Media | ContentCacheDataSerializerEntityType.Member); - if(contentTypeIds != null) + // If contentTypeIds, mediaTypeIds and memberTypeIds are null, truncate table as all records will be deleted (as these 3 are the only types in the table). + if ((contentTypeIds == null || !contentTypeIds.Any()) + && (mediaTypeIds == null || !mediaTypeIds.Any()) + && (memberTypeIds == null || !memberTypeIds.Any())) + { + if (Database.DatabaseType == DatabaseType.SqlServer2012) + { + Database.Execute($"TRUNCATE TABLE cmsContentNu"); + } + + if (Database.DatabaseType == DatabaseType.SQLite) + { + Database.Execute($"DELETE FROM cmsContentNu"); + } + } + + if (contentTypeIds != null) { RebuildContentDbCache(serializer, _nucacheSettings.Value.SqlPageSize, contentTypeIds); } From d8f204ddf9cdf84fc459b103ccfe058e2829978e Mon Sep 17 00:00:00 2001 From: Paul Seal Date: Thu, 9 Mar 2023 13:33:53 +0000 Subject: [PATCH 28/96] Fix the reference to the .targets file (#13847) Updates the reference to the .targets file to use the correct folder name of `buildTransitive` instead of `build` --- templates/UmbracoProject/UmbracoProject.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/UmbracoProject/UmbracoProject.csproj b/templates/UmbracoProject/UmbracoProject.csproj index 00f7c4b6ff..d50f95a907 100644 --- a/templates/UmbracoProject/UmbracoProject.csproj +++ b/templates/UmbracoProject/UmbracoProject.csproj @@ -27,7 +27,7 @@ false - + From 393845ce4d7377c77082f17a674ef37b61a56d5b Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 9 Mar 2023 14:24:45 +0000 Subject: [PATCH 29/96] Solves tooltip issue for block column editor on remove block column editor option --- .../prevalue/umb-block-grid-column-editor-option.html | 4 ++-- .../prevalue/umbBlockGridColumnEditorOption.component.js | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html index 05f55d3a07..f77153239f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html @@ -5,7 +5,7 @@ {{vm.columnSpanOption.columnSpan}}
-
- \ No newline at end of file + diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js index 78d27a6055..6436b3f510 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js @@ -23,9 +23,13 @@ } }); - function BlockGridColumnOptionController() { + function BlockGridColumnOptionController(localizationService) { - var vm = this; + var vm = this; + + localizationService.localize("general_remove").then(function (value) { + vm.removeLabel = value; + }) vm.$onInit = function() { From 888dccaec4e155ac5ddf5db4153db2acef17d959 Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 9 Mar 2023 15:19:37 +0000 Subject: [PATCH 30/96] Reversed X-XSS (#13936) --- src/Umbraco.Core/Constants-HealthChecks.cs | 1 - .../EmbeddedResources/Lang/en.xml | 8 +++++-- .../EmbeddedResources/Lang/en_us.xml | 4 +++- .../Checks/Security/BaseHttpHeaderCheck.cs | 22 +++++++++++++++---- .../Checks/Security/XssProtectionCheck.cs | 13 +++++------ 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Core/Constants-HealthChecks.cs b/src/Umbraco.Core/Constants-HealthChecks.cs index 2980a59457..875f86cb4c 100644 --- a/src/Umbraco.Core/Constants-HealthChecks.cs +++ b/src/Umbraco.Core/Constants-HealthChecks.cs @@ -45,7 +45,6 @@ public static partial class Constants public const string ClickJackingCheck = "https://umbra.co/healthchecks-click-jacking"; public const string HstsCheck = "https://umbra.co/healthchecks-hsts"; public const string NoSniffCheck = "https://umbra.co/healthchecks-no-sniff"; - public const string XssProtectionCheck = "https://umbra.co/healthchecks-xss-protection"; public const string ExcessiveHeadersCheck = "https://umbra.co/healthchecks-excessive-headers"; public static class HttpsCheck diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index 0f90e815a0..19147759e6 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -2358,9 +2358,13 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Strict-Transport-Security was not found. This header should not be present on localhost.]]> - X-XSS-Protection was found.]]> + + X-XSS-Protection was found. It is recommended not to add this header to your website.
+ You can read about this on the Mozilla website ]]> +
- X-XSS-Protection was not found.]]> + X-XSS-Protection was not found.]]> + diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index 5acf1b7abe..67da5429bd 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -2461,7 +2461,9 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Strict-Transport-Security was not found. This header should not be present on localhost.]]> - X-XSS-Protection was found.]]> + + X-XSS-Protection was found. It is recommended not to add this header to your website.
+ You can read about this on the Mozilla website ]]>
X-XSS-Protection was not found.]]> + Для параметра встановлено рекомендоване значення: '%0%'. + Очікуване значення '%1%' для параметра '%2%' в файлі конфігурації '%3%', знайдене значення: '%0%'. + Знайдено неочікуване значення '%0%' для параметра '%2%' в файлі конфігурації '%3%'. + + Параметр 'MacroErrors' встановлений в '%0%'. + Параметр 'MacroErrors' встановлений в '%0%', що може спричинити неповну обробку частини сторінок або всіх сторінок сайту за наявності помилок у макросах. Усунути це можна шляхом встановлення значення в '%1%'. + + + Сертифікат вашого веб-сайту відзначений як перевірений. + Помилка перевірки сертифіката: '%0%' + Зараз Ви %0% переглядаєте сайт, використовуючи протокол HTTPS. + + Режим компіляції з налагодженням вимкнено. + Режим компіляції з налагодженням зараз увімкнено. Перед розміщенням сайту в мережі рекомендується вимкнути. + + + + X-Frame-Options, що використовується для управління можливістю розміщувати сайт у IFRAME на іншому сайті, знайдено.]]> + X-Frame-Options, що використовується для управління можливістю розміщувати сайт у IFRAME на іншому сайті, не знайдено.]]> + X-Content-Type-Options, що використовується для захисту від MIME-уязвимостей, знайдено.]]> + X-Content-Type-Options, що використовується для захисту від MIME-уязвимостей, не знайдено.]]> + Strict-Transport-Security, відомий також як HSTS-header, знайдено.]]> + Strict-Transport-Security не знайдено.]]> + X-XSS-Protection знайдено.]]> + X-XSS-Protection не знайдено.]]> + + %0%.]]> + Заголовки, які дають змогу з'ясувати базову технологію сайту, не виявлено. + Параметри надсилання електронної пошти (SMTP) налаштовані коректно, сервіс працює як очікується. + %0%.]]> + %0%.]]> +

Зафіксовано такі результати автоматичної перевірки стану Umbraco за розкладом, запущеним %0% в %1%:

%2%]]>
+ Результат перевірки стану Umbraco: %0% + + + Найкращі навчальні відео-курси з Umbraco + + + Скинути + + + Програма інсталяції не може встановити підключення до бази даних. + База даних виявлена та ідентифікована як + Конфігурація бази даних + Встановити щоб встановити базу даних Umbraco %0% + ]]> + Далі для продовження.]]> + + Будь ласка, зв'яжіться з Вашим хостинг-провайдером, якщо є необхідність, а якщо встановлюєте на локальну робочу станцію або сервер, отримайте інформацію у Вашого системного адміністратора.]]> + Натисніть кнопку Оновлення + для того, щоб привести Вашу базу даних + у відповідність до версії Umbraco %0%

+

Будь ласка, не хвилюйтеся, жодного рядка Вашої бази даних + не буде втрачено при цій операції, і після її завершення все буде працювати!

+ ]]>
+ Натисніть Далі для продовження. ]]> + Далі для продовження роботи майстра налаштувань]]> + Пароль користувача за замовчуванням необхідно змінити!]]> + Користувач за замовчуванням заблокований або не має доступу до Umbraco!

Не буде вжито жодних подальших дій. Натисніть кнопку Далі для продовження.]]> + Пароль користувача за умовчанням успішно змінено в процесі встановлення!

Немає потреби у будь-яких подальших діях. Натисніть кнопку Далі для продовження.]]> + Пароль змінений! + Для початкового огляду можливостей системи рекомендуємо переглянути відеоматеріали для ознайомлення + Система не встановлена. + Зачеплені файли та папки + Більш детально про встановлення дозволів для Umbraco розказано тут + Вам слід встановити дозволи для облікового запису ASP.NET на модифікацію наступних файлів та папок + Налаштування дозволів у Вашій системі майже повністю відповідають вимогам Umbraco! +

Ви маєте можливість запускати Umbraco без проблем, проте не зможете скористатися такою сильною стороною системи Umbraco, як встановлення додаткових пакетів розширень та доповнень.]]>
+ Як вирішити проблему + Натисніть тут, щоб прочитати текстову версію документа + відео-матеріал, присвячений установці дозволів для файлів та папок в Umbraco або прочитайте текстову версію документа.]]> + Налаштування дозволів у Вашій файловій системі можуть бути неправильними! +

Ви маєте можливість запускати Umbraco без проблем, + однак не зможете скористатися такою сильною стороною системи Umbraco як встановлення додаткових пакетів розширень та доповнень.]]>
+ Установки дозволів у файловій системі не підходять для роботи Umbraco! +

Якщо Ви хочете продовжити роботу з Umbraco, + Вам необхідно скоригувати налаштування дозволів.]]>
+ Налаштування дозволів у Вашій системі ідеальні! +

Ви маєте можливість працювати з Umbraco в повному обсязі, включаючи встановлення додаткових пакетів розширень і доповнень!]]>
+ Вирішення проблеми з папками + Скористайтеся цим посиланням для отримання більш детальної інформації про проблеми створення папок від імені облікового запису ASP.NET + Встановлення дозволів на папки + + + Тут можна дізнатися про це детальніше) Ви також можете відкласти установку "Runway" на більш пізній час. Перейдіть до розділу "Розробка" та виберіть пункт "Пакети". + ]]> + Ви тільки що встановили чисту платформу Umbraco. Який крок буде наступним? + "Runway" встановлений + Нижче наведено список модулів, рекомендованих до встановлення, змініть його за необхідності, або ознайомтеся з повним списком модулів + ]]> + Рекомендовано лише для досвідчених користувачів + Я хочу почати з встановлення простого демонстраційного сайту + "Runway" - це простий демонстраційний сайт, що надає базовий перелік шаблонів та типів документів. + Програма установки може налаштувати "Runway" для Вас автоматично, + але Ви можете надалі вільно змінювати, розширювати чи видалити його. + Цей демонстраційний сайт не є необхідною частиною, і Ви можете вільно + використовувати Umbraco без нього. Однак, "Runway" надає Вам можливість + максимально швидко познайомитися з базовими принципами та технікою побудови сайтів + на основі Umbraco. Якщо Ви оберете варіант із встановленням "Runway", + Вам буде запропоновано вибір базових будівельних блоків (т.зв. модулів Runway) для розширення можливостей сторінок сайту Runway.

+ В "Runway" входять:"Домашня" (головна) сторінка, сторінка "Початок роботи", + сторінка встановлення модулів.
Додаткові модулі:Базова навігація, Карта сайту, Форма зворотнього зв'язку, Галерея.
+ ]]>
+ Що таке "Runway" + Крок 1 з 5: Ліцензійна угода + Крок 2 з 5: конфігурація бази даних + Крок 3 з 5: перевірка файлових дозволів + Крок 4 з 5: перевірка безпеки + Крок 5 з 5: система готова для початку роботи + Дякуємо, що вибрали Umbraco + Огляд Вашого нового сайтуВи встановили "Runway", + чому б не подивитися, як виглядає Ваш новий сайт?]]> + Подальше вивчення та допомога + Отримуйте допомогу від нашої чудової спільноти користувачів, вивчайте документацію або переглядайте наші вільно розповсюджувані відео-матеріали про те, як створити власний нескладний сайт, використовувати розширення та пакети, а також короткий посібник з термінології Umbraco.]]> + Система Umbraco %0% встановлена та готова до роботи + прямо зараз, + скориставшись посиланням "Почати роботу з Umbraco".
Якщо Ви новачок у світі Umbraco, Ви зможете знайти багато корисних посилань на ресурси на сторінці "Початок роботи".]]>
+ Почніть роботу з Umbraco + Для того, щоб почати адмініструвати свій сайт, просто відкрийте адміністративну панель Umbraco та почніть оновлювати контент, змінювати шаблони сторінок та стилі CSS або додавати нову функціональність]]> + Спроба з'єднання з базою даних зазнала невдачі. + Версія Umbraco 3 + Версія Umbraco 4 + Дивитись + Umbraco %0% у формі "чистого" встановлення або оновлення попередньої версії 3.x. +

Натисніть кнопку "Далі" для початку роботи майстра.]]>
+ + + Код мови + Назва мови + + + Ви були відсутній деякий час. Було здійснено автоматичний вихід у + Оновіть зараз, щоб зберегти зроблені зміни + + + © 2001 - %0%
umbraco.com

]]>
+ Сьогодні ж вихідний! + Гарного і продуктивного понеділка + Ось уже вівторок... + Бережіть довкілля + Скоро п'ятниця + Слава Богу, сьогодні п'ятниця! + Понеділок починається у суботу + Вкажіть ім'я користувача та пароль + Час сесії закінчився + Забули пароль? + На email-адрес буде надіслано листа з посиланням на скидання пароля + Буде надіслано листа з інструкціями щодо скидання пароля на вказаний email-адрес, якщо він збігається з адресою користувача + Повернутися до форми входу + Будь ласка, вкажіть новий пароль + Ваш пароль оновлено + Увійти за допомогою + Посилання, по якому Ви потрапили сюди, неправильне або застаріло + Umbraco: скидання пароля + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Запитано скидання пароля +

+

+ Ваше ім'я користувача для входу до адміністративної панелі Umbraco: %0% +

+

+ + + + + + +
+ + Натисніть на це посилання, щоб скинути пароль + +
+

+

Якщо Ви не маєте можливості натиснути на посилання, скопіюйте наступну адресу (URL) та вставте в адресний рядок Вашого браузера:

+ + + + +
+ + %1% + +
+

+
+
+


+
+
+ + + ]]>
+ + + Панель керування + Розділи + Вміст + + + Натисніть, щоб завантажити + Неможливе завантаження цього файлу, цей тип файлів не дозволяється для завантаження + або натисніть тут, щоб вибрати файли + Максимально допустимий розмір файлу: + Початковий вузол медіа + + + Вибрано медіа-елемент, який в даний час видалено або знаходиться в кошику + Вибрані медіа-елементи, які в даний час видалені або знаходяться в кошику + + + Створити нового учасника + Всі учасники + + + Побудова моделей + це може зайняти деякий час, будь ласка, зачекайте + Моделі побудовані + Моделі не можуть бути побудовані + Процес побудови моделей завершився помилкою, подробиці у системному журналі Umbraco + + + Виберіть сторінку... + Вузол %0% був скопійований в %1% + Виберіть, куди має бути скопійований вузол %0% + Вузол %0% був переміщений в %1% + Виберіть, куди має бути переміщений вузол %0% + був обраний як батьківський вузол для нового елемента, натисніть 'Ок'. + Не вибраний вузол! Будь ласка, оберіть вузол призначення, перш ніж натиснути 'Ок'. + Поточний вузол не може бути розміщений безпосередньо в корені дерева + Поточний вузол не може бути розміщений у вибраному Вами вузлі через невідповідність типів. + Поточний вузол не може бути переміщений усередину своїх дочірніх вузлів + Ця дія не може бути здійснена, оскільки Ви не маєте достатніх прав для здійснення дій над одним або більше дочірніми документами. + Пов'язати нові копії з оригіналами + + + Ви можете змінити повідомлення для %0% + + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Вітаємо, %0%, +

+

+ Це автоматично згенероване повідомлення, відправлене, щоб повідомити Вас про те, що операція '%1%' була виконана на сторінці '%2%' користувачем '%3%' +

+ + + + + + +
+ +
+ ВНЕСТИ ЗМІНИ
+
+

+

Огляд оновлення:

+ + %6% +
+

+

+ Вдалого дня!

+ До Ваших послуг, поштовий робот Umbraco +

+
+
+


+
+
+ + + ]]>
+ [%0%] Сповіщення про операцію %1% над документом %2% + Сповіщення + + + + та вказавши на потрібний файл. Пакети Umbraco зазвичай є архівами із розширенням '.zip'. + ]]> + Ліцензія + Встановлені пакети + Жодного пакету ще не встановлено + 'Packages' зверху праворуч]]> + Пошук по пакетам + Результати пошуку по + Нічого не знайдено за запитом + Будь ласка, повторіть пошук, уточнивши запит, або скористайтесь переглядом за категоріями + Популярні + Нещодавно створені + має на рахунку + очок карми + Інформація + Власник + Співавтори + Створено + Поточна версія + Версія .NET + Завантажень + Подобається + Сумісність + Цей пакет сумісний з наступними версіями Umbraco за повідомленнями учасників спільноти. Повна сумісність не гарантується для версій зі значенням нижче 100% + Зовнішні джерела + Автор + Документація (опис) + Мета-дані пакету + Назва пакету + Пакет нічого не містить +
Ви можете безпечно видалити цей пакет із системи, натиснувши на кнопку "Деінсталювати пакет".]]>
+ Опції пакету + Короткий огляд пакету + Репозиторій пакету + Підтвердження деінсталяції пакету + Пакет деінстальований + Вказаний пакет успішно видалено із системи + Деінсталювати пакет + + Зверніть увагу: всі документи, медіа-файли та інший контент, що залежить від цього пакета, перестане нормально працювати, що може призвести до нестабільної поведінки системи, + тому видаляйте пакети дуже обережно. За наявності сумнівів, зв'яжіться з автором пакета.]]> + Версія пакету + + + Вставити, повністю зберігши форматування (не рекомендується) + Текст, який Ви намагаєтесь вставити, містить спеціальні символи та/або елементи форматування. Це можливо, якщо ви вставляєте текст, скопійований з Microsoft Word або подібного редактора. Система може видалити ці елементи автоматично, щоб зробити текст, що вставляється, більш придатним для веб-публікації. + Вставити як простий текст без форматування + Вставити з очищенням форматування (рекомендується) + + + Підтвердіть пароль + Вкажіть Ваш email... + Вкажіть опис... + Вкажіть email... + Вкажіть повідомлення... + Вкажіть ім'я... + Вкажіть теги (натискайте Enter після кожного тега)... + Вкажіть ім'я користувача... + Вкажіть фільтр... + Мітка... + Назвіть %0%... + Вкажіть пароль + Що шукати... + Вкажіть ім'я користувача + Ім'я користувача (зазвичай це Ваша email-адреса) + + + Залишитися + Відмінити зміни + Є незбережені зміни + Ви впевнені, що хочете піти з цієї сторінки? - на ній є незбережені зміни + + + Розширений: Захист на основі ролей (груп) + із використанням груп учасників Umbraco.]]> + Вам необхідно створити хоча б одну групу для застосування рольової моделі безпеки. + Сторінка повідомлення про помилку + Використовується у випадку, коли користувач авторизований у системі, але не має доступу до документа. + Виберіть спосіб обмеження доступу до документа + Правила доступу до документа %0% встановлені + Правила доступу до документа %0% видалені + Сторінка авторизації (входу) + Використовуйте як сторінку з формою для авторизації користувачів + Зняти захист + Виберіть сторінки авторизації та повідомлень про помилки + Виберіть ролі користувачів, які мають доступ до документа + Встановіть ім'я користувача та пароль для доступу до цього документа + Простий: Захист по імені користувача та паролю + Застосовуйте, якщо хочете встановити найпростіший спосіб доступу до документа - явно вказані ім'я користувача та пароль + + + + + + + + Включно з неопублікованими дочірніми документами + Йде публікація. Будь ласка зачекайте... + %0% з %1% документів опубліковано... + Документ %0% опубліковано. + Документ %0% та його дочірні документи опубліковані + Опублікувати документ %0% та всі його дочірні документи + Опублікувати для публікації документа %0%. + Таким чином Ви зробите вміст документа доступним для перегляду.

+ Ви можете опублікувати цей документ та всі його дочірні документи, відмітивши опцію Опублікувати усі дочірні документи. + Щоб опублікувати раніше неопубліковані документи серед дочірніх, відмітьте опцію Включаючи неопубліковані дочірні документи. + ]]>
+ + + Зупинити відстеження URL + Запустити відстеження URL + Початковий URL + Перенаправлено в + На даний момент немає жодного перенаправлення + Якщо опублікований документ перейменовується або змінює розташування в дереві, а отже, змінюється адреса (URL), автоматично створюється перенаправлення на нове розташування цього документа. + Перенаправлення видалено. + Помилка видалення перенаправлення. + Ви впевнені, що хочете зупинити відстеження URL? + Відстеження URL зараз зупинено. + Помилка зупинки відстеження URL, докладніші відомості знаходяться в системному журналі. + Відстеження URL зараз запущено. + Помилка запуску відстеження URL, докладніші відомості знаходяться в системному журналі. + + + Заголовок + Вкажіть заголовок посилання + вибрати сторінку сайту + вказати зовнішнє посилання + Вкажіть посилання + Посилання + Відкрити у новому вікні + + + Перейменована + Вкажіть тут нову назву для папки + '%0%' була перейменована на '%1%' + + + Червоним відзначено текст, якого вже немає в останній версії, зеленим - текст, який був доданий]]> + Зроблено відкат до ранньої версії + Поточна версія показана як HTML. Щоб переглянути відмінності у версіях, виберіть режим порівняння + Відкатати до версії + Виберіть версію + Перегляд + + + Редагувати файл скрипта + + + Консьєрж + Вміст + Кур'єр + Розробка + Форми + Допомога + Майстер конфігурування Umbraco + Медіа-матеріали + Учасники + Розсилки + Налаштування + Статистика + Переклад + Користувачі + + + Додати піктограму + Батьківський тип контенту дозволено + Цей тип контенту використовує + Шаблон за замовчуванням + Щоб імпортувати тип документа, знайдіть файл ".udt" на своєму комп'ютері, натиснувши кнопку "Огляд", потім натисніть "Імпортувати" (на наступному екрані буде запитано підтвердження для цієї операції). + Заголовок нової вкладки + Тип вузла (документу) + Для цієї вкладки не визначено характеристики. Клацніть на посилання "Click here to add a new property" зверху, щоб створити нову властивість. + Тип + Скрипт + Стилі CSS + Вкладка + Заголовок вкладки + Вкладки + + + Додати вкладку + Додати властивість + Додати редактор + Додати шаблон + Додати дочірній вузол + Додати дочірній + Змінити тип даних + Навігація по розділам + Ярлики + показати ярлики + У форматі списку + Дозволити як кореневий + Закоментувати/розкоментувати рядки + Видалити рядок + Копіювати рядки вгору + Копіювати рядки вниз + Перемістити рядки вгору + Перемістити рядки вниз + Загальне + Редактор + + + Порядок сортування + Дата створення + Сортування завершено + Перетягуйте елементи на потрібне місце вгору або вниз для визначення потрібного порядку сортування. Також можна використовувати заголовки стовпців, щоб відсортувати всі елементи одразу. + + + + Процес публікації скасовано встановленим пакетом доповнень. + Така властивість вже існує. + Властивість створена + Тип даних: %1%]]> + Властивість видалена + Тип документа збережено + Вкладка створена + Вкладка видалена + Вкладка з ідентифікатором (id): %0% видалена + Документ прихований (публікацію скасовано) + Стиль CSS не збережено + Стиль CSS збережено + Стиль CSS збережено без помилок + Тип даних збережено + Стаття у словнику збережена + Публікацію не завершено, оскільки батьківський документ не опубліковано + Документ опубліковано + і є доступним + Документ збережено + Не забудьте опублікувати, щоб зробити доступним + Надіслано на затвердження + Зміни надіслані на затвердження + Медіа-елемент збережено + Медіа-елемент збережено без помилок + Учасник збережений + Правило стилю CSS збережено + Стиль CSS збережено + Шаблон збережено + При збереженні користувача виникла помилка (перевірте журнали помилок) + Група користувачів збережена + Користувач збережений + Тип користувачів збережено + Файл не збережено + Файл не може бути збережений. Будь ласка, перевірте налаштування файлових дозволів + Файл збережено + Файл збережено без помилок + У поточного користувача недостатньо прав, неможливо завершити операцію + Мова збережена + Тип медіа збережено + Тип учасника збережено + Скасовано + Операцію скасовано встановленим стороннім розширенням або блоком коду + Помилка + Збережено + Представлення не збережено + Виникла помилка при збереженні файлу + Представлення збережено + Представлення збережено без помилок + Права доступу збережені для + Шаблон не збережено + Будь ласка, перевірте, що немає двох шаблонів з одним і тим самим аліасом (назвою) + Шаблон збережено + Шаблон збережено без помилок + Перевірка значень + Помилки, знайдені під час перевірки значень, мають бути виправлені, щоб було можливо зберегти документ + Видалено %0% груп користувачів + '%0%' була видалена + Активовано %0% користувачів + Заблоковано %0% користувачів + '%0%' активований + '%0%' заблокований + Групи користувачів встановлені + Розблоковано %0% користувачів + '%0%' зараз розблоковано + Дані учасника успішно експортовано у файл + Під час експорту даних учасника сталася помилка + + + Використовується синтаксис селекторів CSS, наприклад: h1, .redHeader, .blueTex + Змінити стиль CSS + Змінити правило стилю CSS + Назва правила для відображення у редакторі документа + Попередній перегляд + Стилі + + + Змінити шаблон + Секції + Вставити контент-область + Вставити контейнер (placeholder) + Вставити + Виберіть, що хочете вставити в шаблон + Статтю словника + Стаття словника - це контейнер для частини тексту, що перекладається різними мовами, це дозволяє спростити створення багатомовних сайтів. + Макрос + + Макроси - це компоненти, що мають налаштування, які добре підходять для + реалізації блоків, що перевикористовуються, (особливо, якщо необхідно змінювати їх зовнішній вигляд і/або поведінку за допомогою параметрів) + таких як галереї, форми, списки тощо. + + Значення поля + Відображає значення вказаного поля даних поточної сторінки, + з можливістю вказати альтернативні поля та/або підстановку константи. + + Часткове представлення + + Часткове представлення - це шаблон в окремому файлі, який може бути викликаний для відображення всередині + іншого шаблону, добре підходить для реалізації фрагментів розмітки, що перевикористовуються, або для розбиття складних шаблонів на складові частини. + + Майстер-шаблон + Не вибраний + Вставити дочірній шаблон + @RenderBody() у вибраному місці. + ]]> + Визначити іменовану секцію + @section { ... }. Така секція може бути відображена в потрібному місці батьківського шаблону + за допомогою конструкції @RenderSection. + ]]> + Вставити іменовану секцію + @RenderSection(name). + Таким чином, з дочірнього шаблону відображається вміст усередині конструкції. @section [name]{ ... }. + ]]> + Назва секції + Секція є обов'язковою + @section, інакше генерується помилка. + ]]> + Генератор запитів + елементів в результаті, за + Мені потрібні + всі документи + документи типу "%0%" + з + всього сайту + де + та + є + не є + до + до (включаючи вибрану дату) + після + після (включаючи обрану дату) + дорівнює + не дорівнює + містить + не містить + більше ніж + більше або дорівнює + менше ніж + менше або дорівнює + Id + Назва + Створено + Оновлено + сортувати + за зростанням + за спаданням + Шаблон + + + Додати значення за замовчуванням + Значення за замовчуванням + Поле заміни + Значення за замовчуванням + Реєстр + Вибрати поле + Перетворити розриви рядків + Змінює розриви рядків на тег html 'br' + Користувальницькі + Тільки дата + Кодування + Форматувати як дату + Кодування HTML + Замінює спецсимволи еквівалентами у форматі HTML + Буде вставлено після поля + Буде вставлено перед полем + У нижньому регістрі + -Не вказано- + Приклад результату + Вставити після поля + Вставити перед полем + Рекурсивно + Так, використовувати рекурсію + Стандартні + У верхньому регістрі + Кодування URL + Форматування спеціальних символів у URL + Це значення буде використано лише якщо попередні поля порожні + Це значення буде використано лише якщо первинне поле порожнє + Дата і час + + + символів залишилося + + + Подробиці перекладу + Загрузити xml DTD + Поля + Включити дочірні документи + + Користувачів-перекладачів не виявлено. Будь ласка, створіть користувача з роллю перекладача, перш ніж надсилати вміст на переклад + Документ '%0%' був відправлений на переклад + Надіслати документ '%0%' на переклад + Усього слів + Перекласти на + Переклад завершено. + Ви можете переглянути документи, перекладені Вами, натиснувши посилання нижче. Якщо буде знайдено оригінал документа, Ви побачите його та переведений варіант у режимі порівняння. + Переклад не збережено, файл xml може бути пошкоджено + Опції перекладу + Перекладач + Завантажити перекладений xml + + + Огляд кешу + Матеріали + Шаблони вмісту + Корзина + Створені пакети + Типи даних + Словник + Встановлені пакети + Встановити тему + Встановити стартовий набір + Мови + Встановити локальний пакет + Макроси + Медіа-матеріали + Типи медіа-матеріалів + Учасники + Групи учасників + Ролі учасників + Типи учасників + Типи документів + Пакети доповнень + Пакети доповнень + Часткові представлення + Файли макросів + Типи зв'язків + Встановити з репозиторію + Встановити Runway + Модулі Runway + Файли скриптів + Скрипти + Стилі CSS + Шаблони + Користувачі + + + Доступні оновлення + Оновлення %0% готово, натисніть для завантаження + Немає зв'язку із сервером + Під час перевірки оновлень виникла помилка. Будь ласка, перегляньте журнал для отримання додаткової інформації. + + + Доступ + На підставі встановлених груп та призначених початкових вузлів, користувач має доступ до наступних вузлів. + Адміністратор + Призначення доступу + Повернутись до користувачів + Поле категорії + Змінити + Змінити пароль + Ви можете змінити свій пароль для доступу до адміністративної панелі Umbraco, заповнивши нижченаведені поля та натиснувши кнопку 'Змінити пароль' + Змінити аватар + Підтвердження нового пароля + Канал вмісту + Створити ще одного користувача + Створено + Створити користувача + Створюйте нових користувачів, яким потрібний доступ до адміністративної панелі Umbraco. При створенні користувача генерується новий первинний пароль, який потрібно повідомити користувачеві. + Поле опису + Вимкнути користувача + Тип документа + Редактор + Виключити поле + Невдалих спроб входу + До профілю користувача + Додайте користувача до групи(ів), щоб визначити права доступу + Запрошення до панелі адміністрування Umbraco +

Здравствуйте, %0%,

Ви були запрошені користувачем %1%, та Вам надано доступ до панелі адміністрування Umbraco.

Повідомлення від %1%: %2%

Перейдіть по цьому посиланні, щоб прийняти запрошення.

Якщо ви не можете перейти за посиланням, скопіюйте нижченаведений текст посилання і вставте в адресний рядок вашого браузера.

%3%

]]> + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Вітаємо, %0%, +

+

+ Ви були запрошені користувачем %1% в панель адміністрування веб-сайту. +

+

+ Повідомлення від користувача %1%: +
+ %2% +

+ + + + + + +
+ + + + + + +
+ + Натисніть на це посилання, щоб прийняти запрошення + +
+
+

Якщо Ви не маєте можливості натиснути на посилання, скопіюйте наступну адресу (URL) та вставте в адресний рядок Вашого браузера:

+ + + + +
+ + %3% + +
+

+
+
+


+
+
+ + + ]]>
+ Запросити ще одного користувача + Запросити користувача + Запросіть нових користувачів, яким потрібний доступ до адміністративної панелі Umbraco. Запрошеному буде надіслано електронного листа з інструкціями щодо доступу до Umbraco. + Мова + Встановіть мову відображення інтерфейсу адміністрування + Час останнього блокування + Час останнього входу + Пароль востаннє змінювався + Ім'я входу (логін) + Початковий вузол медіа-бібліотеки + Можна обмежити доступ до медіа-бібліотеки (якійсь її частини), задавши початковий вузол + Початкові вузли медіа-бібліотеки + Можна обмежити доступ до медіа-бібліотеки (якихось її частин), задавши перелік початкових вузлів. + Розділи + Новий пароль + Вимкнути доступ до адміністративної панелі Umbraco + поки що не входив + поки не блокувався + Пароль не змінювався + Попередній пароль + Пароль + Ваш пароль доступу змінено! + Підтвердіть новий пароль + Поточний пароль + Вкажіть новий пароль + Поточний пароль вказано неправильно + Пароль не може бути порожнім + Новий пароль та його підтвердження не збігаються. Спробуйте ще раз + Новий пароль та його підтвердження не співпадають + Замінити дозволи для дочірніх документів + Ви змінюєте дозволи для таких документів: + Виберіть документи, щоб змінити їх дозволи + Видалити аватар + Права доступу за замовчуванням + Атомарні права доступу + Можна встановити права доступу до конкретних вузлів + Профіль + Скинути пароль + Пошук усіх дочірніх документів + Вибрати групи користувачів + Відправити запрошення + Сесія закінчується через + Розділи, доступні користувачеві + Початковий вузол не заданий + Початкові вузли не задані + Початковий вузол вмісту + Можна обмежити доступ до дерева вмісту (будь-якої його частини), задавши початковий вузол + Початкові вузли вмісту + Можна обмежити доступ до дерева вмісту (якимось його частинам), задавши перелік початкових вузлів + Був створений + Новий первинний пароль успішно згенеровано. Для входу використовуйте наведений нижче пароль. + Час останнього оновлення + Ім'я користувача + Група користувачів + був запрошений + Новому користувачеві було надіслано запрошення, яке містить інструкції для входу в панель Umbraco. + Привіт і ласкаво просимо до Umbraco! Все буде готове протягом декількох хвилин, нам потрібно задати пароль для входу і додати аватар. + Завантажте зображення, що допоможе іншим користувачам ідентифікувати Вас. + Управління користувачами + Дозволи для користувача + Автор + Ваша нещодавня активність + Ваш профіль + + + Валідація + Валідація за форматом email + Валідація числового значення + Валідація за форматом URL + ...або вказати свої правила валідації + Обов'язково для заповнення + Задайте регулярний вираз + Необхідно вибрати як мінімум + Можливо вибрати максимум + елементів + елементів + Невірний формат дати + Не є числом + Невірний формат email-адреси + + + Вибрати все + Прибрати виділення з усього + + From d0e34c38a057f3d0692a4ab529aabf30bfb82674 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Mon, 2 Jan 2023 14:17:13 +0100 Subject: [PATCH 54/96] Translate dictionary area (cherry picked from commit 045c755ccf5300d9b434500945f21a9077b8619f) --- src/Umbraco.Core/EmbeddedResources/Lang/es.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml index b2ab390a2e..4c42c035a5 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/es.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/es.xml @@ -347,6 +347,18 @@ Selecciona editor Selecciona snippet + + + Para importar un elemento del diccionario, busque el archivo ".udt" en su computadora haciendo clic en el + Botón "Importar" (se le pedirá confirmación en la siguiente pantalla) + + El elemento del diccionario no existe. + El elemento principal no existe. + No hay elementos del diccionario. + No hay elementos de diccionario en este archivo. + No se encontraron elementos del diccionario. + Crear elemento de diccionario + Editar las diferentes versiones lingüísticas para la entrada en el diccionario '% 0%' debajo Date: Sun, 8 Jan 2023 16:10:56 +0100 Subject: [PATCH 55/96] Fix copy content with descendants not copying sort order (#13464) (cherry picked from commit fd992f65bbcee42c1c035c56585228fdf8acc41b) --- src/Umbraco.Core/Constants-SqlTemplates.cs | 1 + .../Implement/ContentRepositoryBase.cs | 15 +++++++++++++++ .../Repositories/Implement/DocumentRepository.cs | 5 +++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Constants-SqlTemplates.cs b/src/Umbraco.Core/Constants-SqlTemplates.cs index 549dae5bd6..ad5b326035 100644 --- a/src/Umbraco.Core/Constants-SqlTemplates.cs +++ b/src/Umbraco.Core/Constants-SqlTemplates.cs @@ -10,6 +10,7 @@ public static partial class Constants public const string GetVersion = "Umbraco.Core.VersionableRepository.GetVersion"; public const string GetVersions = "Umbraco.Core.VersionableRepository.GetVersions"; public const string EnsureUniqueNodeName = "Umbraco.Core.VersionableRepository.EnsureUniqueNodeName"; + public const string SortOrderExists = "Umbraco.Core.VersionableRepository.SortOrderExists"; public const string GetSortOrder = "Umbraco.Core.VersionableRepository.GetSortOrder"; public const string GetParentNode = "Umbraco.Core.VersionableRepository.GetParentNode"; public const string GetReservedId = "Umbraco.Core.VersionableRepository.GetReservedId"; diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs index ce14f1ec1e..de247a6120 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs @@ -1013,6 +1013,21 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement return SimilarNodeName.GetUniqueName(names, id, nodeName); } + protected virtual bool SortorderExists(int parentId, int sortOrder) + { + SqlTemplate? template = SqlContext.Templates.Get(Constants.SqlTemplates.VersionableRepository.SortOrderExists, tsql => tsql + .Select("sortOrder") + .From() + .Where(x => x.NodeObjectType == SqlTemplate.Arg("nodeObjectType") && + x.ParentId == SqlTemplate.Arg("parentId") && + x.SortOrder == SqlTemplate.Arg("sortOrder"))); + + Sql sql = template.Sql(NodeObjectTypeId, parentId, sortOrder); + var result = Database.ExecuteScalar(sql); + + return result != null; + } + protected virtual int GetNewChildSortOrder(int parentId, int first) { SqlTemplate? template = SqlContext.Templates.Get(Constants.SqlTemplates.VersionableRepository.GetSortOrder, tsql => tsql diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs index 5c7488401f..3951ffba69 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentRepository.cs @@ -900,8 +900,9 @@ public class DocumentRepository : ContentRepositoryBase Date: Sun, 23 Oct 2022 15:37:43 +0100 Subject: [PATCH 56/96] fix: move list view selection options to after list in focus order (cherry picked from commit 3ebd15b67e4ab05cb280d4f363a966e4a4fc09eb) --- .../components/umbstickybar.directive.js | 8 +- .../src/less/listview.less | 10 ++ .../propertyeditors/listview/listview.html | 153 +++++++----------- 3 files changed, 77 insertions(+), 94 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js index de6555a05a..28b2647184 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbstickybar.directive.js @@ -30,16 +30,18 @@ Use this directive make an element sticky and follow the page when scrolling. `u /** Toggle `umb-sticky-bar--active` class on the sticky-bar element **/ - const setClass = (addClass, current) => current.classList.toggle('umb-sticky-bar--active', addClass); + const setClass = (addClass, current) => current.classList.toggle('umb-sticky-bar--active', addClass); /** Inserts two elements in the umbStickyBar parent element These are used by the IntersectionObserve to calculate scroll position **/ const addSentinel = current => { - const sentinel = document.createElement('div'); - sentinel.classList.add('umb-sticky-sentinel', '-top'); + if (current.parentElement.querySelector(".umb-sticky-sentinel") === null) { + const sentinel = document.createElement("div"); + sentinel.classList.add("umb-sticky-sentinel", "-top"); current.parentElement.prepend(sentinel); + } }; /** diff --git a/src/Umbraco.Web.UI.Client/src/less/listview.less b/src/Umbraco.Web.UI.Client/src/less/listview.less index 1b87f22680..2fc6286c94 100644 --- a/src/Umbraco.Web.UI.Client/src/less/listview.less +++ b/src/Umbraco.Web.UI.Client/src/less/listview.less @@ -221,6 +221,16 @@ display: none !important } +/* Sticky sub header with correct focus ordering */ +.umb-listview .umb-listview__container { + display: flex; + flex-direction: column; +} + +.umb-listview .umb-listview__container .umb-editor-sub-header { + order: -1; +} + /* ---------- LAYOUTS ---------- */ .list-view-layout { diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html index ab9464d6b2..b7462696b6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html @@ -4,9 +4,9 @@ -
+
- + @@ -88,30 +88,12 @@ - - - - - - - {{ selectedItemsCount() }} of {{ listViewResultSet.items.length }} selected - - - - - - + - + - - - - - - - - - - - - - - - - - - - - @@ -216,6 +129,64 @@
{{viewLoadedError}}
+ + + + + + + + + + + {{ selectedItemsCount() }} + of {{ + listViewResultSet.items.length }} + selected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Date: Thu, 19 Jan 2023 00:19:13 +0100 Subject: [PATCH 57/96] Updating german translation (#13684) * updating german translations * translating missing sections * added missing closing tag Co-authored-by: Michael (cherry picked from commit 8fdb5a55eade5abe02b41950fd47193d493ef57c) --- .../EmbeddedResources/Lang/de.xml | 390 +++++++++++++++--- 1 file changed, 329 insertions(+), 61 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/de.xml b/src/Umbraco.Core/EmbeddedResources/Lang/de.xml index 017e56602e..310516a6bb 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/de.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/de.xml @@ -93,6 +93,7 @@ Erlaubnis verweigert. Neue Domain hinzufügen + Aktuelle Domain hinzufügen entfernen Ungültiges Element. Format der Domain ungültig. @@ -109,7 +110,8 @@ Außerdem werden Pfade mit erstem URL-Segment unterstützt z. B.: "example.com/en" or "/en".]]> Vererben Kultur - Definiert die Kultureinstellung für untergeordnete Elemente dieses Elements oder vererbt vom übergeordneten Element. Wird auch auf das aktuelle Element angewendet, sofern auf tieferer Ebene keine Domain zugeordnet ist. + Definiert die Kultureinstellung für untergeordnete Elemente dieses Elements oder vererbt vom übergeordneten Element. + Wird auch auf das aktuelle Element angewendet, sofern auf tieferer Ebene keine Domain zugeordnet ist. Domainen @@ -154,6 +156,7 @@ TAG entfernen Abbrechen Bestätigen + Mehr Veröffentlichungs Optionen Senden @@ -171,6 +174,7 @@ Veröffentlichung für Inhalt angefordert Veröffentlichung für Inhalt angefordert in Sprache: %0% Unterknoten wurden sortiert von Benutzer + %0% Versionsbereinigung deaktiviert für Version: %0% Versionsbereinigung aktiviert für Version: %0% Kopieren @@ -186,6 +190,7 @@ Veröffentlichung anfordern Veröffentlichung anfordern Sortieren + Benutzerdefiniert Speichern Speichern Verlauf (alle Variationen) @@ -227,8 +232,12 @@ Dieses Media-Element hat keinen Link Diesem Element kann kein Inhalt zugewiesen werden Eigenschaften - Dieses Dokument ist veröffentlicht aber nicht sichtbar, da das übergeordnete Dokument '%0%' nicht publiziert ist - Diese Kultur wurde veröffentlicht, aber wird nicht angezeigt, weil sie auf dem Oberknoten '%0%' unveröffentlicht ist + Dieses Dokument ist veröffentlicht aber nicht sichtbar, + da das übergeordnete Dokument '%0%' nicht publiziert ist + + Diese Kultur wurde veröffentlicht, aber wird nicht angezeigt, + weil sie auf dem Oberknoten '%0%' unveröffentlicht ist + Ups! Dieses Dokument ist veröffentlicht aber nicht im internen Cache aufzufinden: Systemfehler. Der URL wurde nicht gefunden Dieses Dokument wurde veröffentlicht, aber sein URL würde mit Inhalt %0% kollidieren @@ -238,24 +247,21 @@ Veröffentlicht (Änderungen bereit) Publikationsstatus - Veröffentlichen mit Unterknoten zum Veröffentlichen der gewählten Sprache - samt aller Unterknoten der selben Sprache, um ihren Inhalt öffentlich verfügbar zu machen.]]> - + Veröffentlichen mit Unterknoten zum Veröffentlichen der gewählten Sprache samt aller Unterknoten der selben Sprache, um ihren Inhalt öffentlich verfügbar zu machen.]]> - Veröffentlichen mit Unterknoten zum Veröffentlichen der gewählten Sprache - samt aller Unterknoten der selben Sprache, um ihren Inhalt öffentlich verfügbar zu machen.]]> - + Veröffentlichen mit Unterknoten zum Veröffentlichen der gewählten Sprache samt aller Unterknoten der selben Sprache, um ihren Inhalt öffentlich verfügbar zu machen.]]> Veröffentlichen am Veröffentlichung widerrufen am Datum entfernen Datum wählen Sortierung abgeschlossen - Um die Dokumente zu sortieren, ziehen Sie sie einfach an die gewünschte Position. Sie können mehrere Zeilen markieren indem Sie die Umschalttaste ("Shift") oder die Steuerungstaste ("Strg") gedrückt halten + Um die Dokumente zu sortieren, ziehen Sie sie einfach an die gewünschte Position. + Sie können mehrere Zeilen markieren indem Sie die Umschalttaste ("Shift") oder die Steuerungstaste ("Strg") gedrückt halten + Statistiken Titel (optional) Alternativtext (optional) + Beschriftung (optional) Typ Veröffentlichung widerrufen Entwurf @@ -263,6 +269,8 @@ Zuletzt bearbeitet am Letzter Änderungszeitpunkt des Dokuments Datei entfernen + Klicke hier um das das Bild vom Medienelement zu entfernen. + Klicke hier um das das Bild vom Medienelement zu entfernen. Link zum Dokument Mitglied der Gruppe(n) Kein Mitglied der Gruppe(n) @@ -270,29 +278,55 @@ Ziel Dies führt zur folgenden Zeit auf dem Server: - Was bedeutet dies? - ]]> - + Was bedeutet dies?]]> Wollen Sie dieses Element wirklich entfernen? - Eigenschaft %0% verwendet Editor %1%, welcher nicht von Nested Content unterstützt wird. - Es wurden keine Dokument-(Inhalts-)Typen für diese Eigenschaft definiert. + Sicher das Sie alle Elemente entfernen wollen? + Eigenschaft %0% verwendet Editor %1%, + welcher nicht von Nested Content unterstützt wird. + + Keine Dokument-Typen für diese Eigenschaft konfiguriert. + Elementtyp hinzufügen + Elementtype auswählen + Wählen Sie die Gruppe aus von der die Eigenschaften angezeigt werden soll. Sollte der Wert leer sein + wird die erste Gruppe des Elementtypen verwendet. + + Geben Sie eine Angular Anweisung an um den Namen für das jweilige Element + zu bestimmen. Verwende + + um den Index des Elements anzuzeigen. + Das ausgewählte Element verfügt nicht über unterstützte Gruppen. (Tabs werden von diesem Editor nicht unterstützt, entweder Sie ändern diese zu Gruppen oder Sie verwenden den Block List Editor. Füge ein weiteres Textfeld hinzu Entferne dieses Textfeld Inhalt-Basis Inklusive Entwürfen: veröffentliche auch unveröffentlichte Elemente. - Dieser Wert ist verborgen. Wenn Sie diesen Wert einsehen müssen, wenden Sie sich bitte an einen Administrator. + Dieser Wert ist verborgen. + Wenn Sie diesen Wert einsehen müssen, wenden Sie sich bitte an einen Administrator. + Dieser Wert ist verborgen. Welche Sprache möchten Sie veröffentlichen? Welche Sprachen möchten Sie zur Freigabe schicken? Welche Sprachen möchten Sie zu einer bestimmten Zeit veröffentlichen? - Wählen Sie die Sprachen, deren Veröffentlichung zurück genommen werden soll. Das Zurücknehmen der Veröffentlichung einer Pflichtsprache betrifft alle Sprachen. + Wählen Sie die Sprachen, deren Veröffentlichung zurück genommen werden soll. + Das Zurücknehmen der Veröffentlichung einer Pflichtsprache betrifft alle Sprachen. + + Alle neuen Variationen werden gespeichert. + Welche Variationen wollen Sie veröffentlichen? + Wählen Sie welche Variation gespeichert werden soll. + Folgende Variationen werden benötigt um das Element veröffentlichen zu können: + Wir sind für Veröffentlichungen bereit Bereit zu Veröffentlichen? Bereit zu Sichern? + Fokus zurücksetzten. Freigabe anfordern Wählen Sie Datum und Uhrzeit für die Veröffentlichung bzw. deren Rücknahme. Neues Element anlegen Aus der Zwischenablage einfügen + Dieses Element befindet sich im Papierkorb. + Speichern ist nicht erlaubt. + Veröffentlichen ist nicht erlaubt. + Zur Genehmigung senden ist nicht erlaubt. + Plannung ist nicht erlaubt + Veröffentlichung zurücknehmen ist nicht erlaubt. %0%]]> @@ -301,22 +335,46 @@ Inhaltsvorlage erzeugt Inhaltsvorlage von '%0%' wurde erzeugt Eine gleichnamige Inhaltsvorlage ist bereits vorhanden - Eine Inhaltsvorlage ist vordefinierter Inhalt, den ein Redakteur als Basis für neuen Inhalt verwenden kann + Eine Inhaltsvorlage ist vordefinierter Inhalt, + den ein Redakteur als Basis für neuen Inhalt verwenden kann + Für Upload klicken oder klicken Sie hier um eine Datei zu wählen Dieser Dateityp darf nicht hochgeladen werden + + Diese Datei kann nicht hochgeladen werden wil der Dateiname ungültig ist.Diese Datei kann nicht hochgeladen werden, der Medienttype mit dem Alias '%0%' ist hier nicht erlaubt. Max. Dateigröße ist Media-Basis Eltern- und Ziel-Verzeichnis dürfen nicht übereinstimmen Unter Element Id %0% konnte kein Verzeichnis angelegt werden Das Verzeichnis mit Id %0% konnte nicht umbenannt werden + Wählen Sie Dateien aus und ziehen Sie diese in diesen Bereich + Hochladen ist in diesem Bereich nicht erlaubt. Neues Mitglied anlegen Alle Mitglieder + Ein Mitglied mit diesem Login existiert bereits. Mitgliedsgruppen haben keine weiteren editierbaren Eigenschaften. + Das Mitglied ist bereits in der Gruppe '%0%' + Das Mitglied hat bereits ein Passwort + Sperren ist nicht aktiviert für dieses Mitglied. + Das Mitglied ist nicht in der Gruppe '%0%' + Zwei-Faktor-Authentifizierung + + + Kopieren des Dokumenttyps fehlgeschlagen + Bewegen des Dokumenttyps fehlgeschlagen + + + Kopieren des Medienttyps fehlgeschlagen + Bewegen des Medienttyps fehlgeschlagen + Automatische auswahl. + + + Kopieren des Mitgliedtyps fehlgeschlagen An welcher Stellen wollen Sie das Element erstellen @@ -324,13 +382,44 @@ Wählen Sie einen Dokumenttyp für eine Inhaltsvorlage Geben Sie einen Verzeichnisnamen ein Wählen Sie einen Namen und einen Typ - - Die im Inhaltsbaum ausgewählte Seite erlaubt keine Unterseiten. + + + + + Die im Inhaltsbaum ausgewählte Seite + erlaubt keine Unterseiten. + Bearbeitungsrechte für diesen Dokumenttyp - - Das im Strukturbaum ausgewählte Medienelement erlaubt keine untergeordneten Elemente. + Neuen Dokumenttypen erstellen + + + + Das im Strukturbaum ausgewählte Medienelement + erlaubt keine untergeordneten Elemente. + Bearbeitungsrechte für diesen Medientyp Dokumenttyp ohne Vorlage + Dokumenttyp mit Template + Die Definition für eine Inhaltsseite welche von einem + Redakteur im Inhaltsbaum angelgt werden können und direkt über die URL aufgerufen werden kann. + + Dokumenttype + Die Definition für eine Inhaltsseite welche von einem + Redakteur im Inhaltsbaum angelgt werden können und direkt über die URL aufgerufen werden kann. + + Elementtyp + Definiert die Vorlage für sich wiederholende Eigenschaften, zum Beispiel, in einer 'Block + List' oder im 'Nested Content' Editor. + + Komposition + Definiert eine wiederverwendbare Komposition von Eigenschaften welche in anderen + Dokumenttypen wiederverwendet werden können. + + Ordner + Werden benützt um Dokumenttypen, Komposition und Elementtypen in diesem + Dokumenttypbaums zu organisieren. + Neues Verzeichnis Neuer Datentyp Neue JavaScript-Datei @@ -355,11 +444,17 @@ Bleiben Änderungen verwerfen Es gibt ungesicherte Änderungen - Wollen Sie diese Seite wirklich verlassen? - es gibt ungesicherte Änderungen + Wollen Sie diese Seite wirklich verlassen? + - es gibt ungesicherte Änderungen + Veröffentlichen macht die ausgewählten Elemente auf der Website sichtbar. - Aufheben der Veröffentlichung entfernt die ausgewählten Elemente und ihre Unterknoten von der Website. + Aufheben der Veröffentlichung entfernt die ausgewählten Elemente + und ihre Unterknoten von der Website. + Aufheben der Veröffentlichung entfernt diese Seite und ihre Unterseiten von der Website. - Es gibt ungesicherte Änderungen. Ändern des Dokumenttyps macht diese rückgängig. + Es gibt ungesicherte Änderungen. + Ändern des Dokumenttyps macht diese rückgängig. + Fertig @@ -391,12 +486,16 @@ Name Fenster schließen Wollen Sie dies wirklich entfernen + %0% von %1% Elementen löschen wollen?]]> Wollen Sie folgendes wirklich deaktivieren + Sicher das Sie es entfernen wollen? + %0% entfernen wollen?]]> Sind Sie sich wirklich abmelden? Sind Sie sicher? Ausschneiden Wörterbucheintrag bearbeiten Sprache bearbeiten + Ausgewähltes Medien Anker einfügen Zeichen einfügen Grafische Überschrift einfügen @@ -406,7 +505,8 @@ Tabelle einfügen Dies entfernt die Sprache - Die Kultur-Variante einer Sprache zu ändern ist möglicherweise eine aufwendige Operation und führt zum Erneuern von Inhalts-Zwischenspeicher und Such-Index. + Die Kultur-Variante einer Sprache zu ändern ist möglicherweise eine aufwendige Operation und führt zum Erneuern von Inhalts-Zwischenspeicher und Such-Index. + Zuletzt bearbeitet Verknüpfung Anker: @@ -418,16 +518,25 @@ Berechtigungen vergeben für Berechtigungen vergeben für %0% für Benutzer-Gruppe %1% Wählen Sie die Benutzer-Gruppe, deren Berechtigungen Sie setzen möchten - Der Papierkorb wird geleert. Bitte warten Sie und schließen Sie das Fenster erst, wenn der Vorgang abgeschlossen ist. + Der Papierkorb wird geleert. + Bitte warten Sie und schließen Sie das Fenster erst, wenn der Vorgang abgeschlossen ist. + Der Papierkorb ist leer Wenn Sie den Papierkorb leeren, werden die enthaltenen Elemente endgültig gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. - Der Webservice von <a target='_blank' rel='noopener' href='http://regexlib.com'>regexlib.com</a> ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später erneut. - Finden Sie einen vorbereiteten regulären Ausdruck zur Validierung der Werte, die in dieses Feld eingegeben werden - zum Beispiel 'email, 'plz', 'URL' oder ähnlich. + + Der Webservice von <a target='_blank' rel='noopener' href='http://regexlib.com'>regexlib.com</a> ist zur Zeit nicht erreichbar. Bitte versuchen Sie es später erneut. + + Finden Sie einen vorbereiteten regulären Ausdruck zur Validierung der Werte, die in dieses Feld eingegeben werden - zum Beispiel 'email, 'plz', 'URL' oder ähnlich. + Macro entfernen Pflichtfeld Die Website-Index wurd neu erstellt - Der Zwischenspeicher der Website wurde aktualisiert und alle veröffentlichten Inhalte sind jetzt auf dem neuesten Stand. Bisher unveröffentliche Inhalte wurden dabei nicht veröffentlicht. - Der Zwischenspeicher der Website wird aktualisiert und der veröffentlichte Inhalt auf den neuesten Stand gebracht. Unveröffentlichte Inhalte bleiben dabei weiterhin unveröffentlicht. + Der Zwischenspeicher der Website wurde aktualisiert und alle veröffentlichten Inhalte sind jetzt auf dem neuesten Stand. + Bisher unveröffentliche Inhalte wurden dabei nicht veröffentlicht. + + Der Zwischenspeicher der Website wird aktualisiert und der veröffentlichte Inhalt auf den neuesten Stand gebracht. + Unveröffentlichte Inhalte bleiben dabei weiterhin unveröffentlicht. + Anzahl der Spalten Anzahl der Zeilen Für Originalgröße auf die Abbildung klicken @@ -441,6 +550,7 @@ Medien-Link Inhalts-Startknoten wählen Medienelement wählen + Medientype wählen Bildzeichen wählen Element wählen Link wählen @@ -450,8 +560,11 @@ Medien-Startknoten wählen Mitglied wählen Mitgliedergruppe wählen + Membertype wählen Knoten wählen Bereich wählen + Sprachen wählen + Benutzer wählen Benutzer wählen Keine Bildzeichen gefunden Für dieses Makro gibt es keine Parameter @@ -464,42 +577,50 @@ Trennen Sie Ihr Konto Editor wählen + Konfiguration wählen Kode-Vorlage wählen - - Dies wird den Knoten und all seine Sprachen entfernen. + Dies wird den Knoten und all seine Sprachen entfernen. Wenn Sie nur eine Sprache entfernen wollen, wählen Sie diese und setzen sie auf unveröffentlicht. + %0%.]]> + %0% von der %1% Gruppe]]> + Ja, entfernen + Sie löschen das Layout + Bearbeiten des layout resultiert im Verlust der aller Daten für bestehenden Inhalt basierend auf dieser Konfiruation. + + Um einen Eintrag zu importieren, suchen sie die ".udt" Datei auf ihren Computer durch Klicken des + "Import" Knopfes. (Sie werden für Ihre Zustimmung im nächsten Schritt gefragt) + + Wörterbuch Eintrag existiert nicht. + Eltern Element existiert nicht. Es gibt keine Einträge im Wörterbuch. + Keine Wörterbuch Einträge in dieser Datei gefunden. + Keine Wörterbuch Einträge gefunden. + Eintrag erstellen - - %0%'. -
Unter dem links angezeigten Menüpunkt 'Sprachen' können Sie weitere hinzufügen. - ]]> -
+
Unter dem links angezeigten Menüpunkt 'Sprachen' können Sie weitere hinzufügen.]]>
Name der Kultur - - - + ]]> Wörterbuch Übersicht Sucher einrichten ]]> Sucher (z.B.: multi-index searcher) - ]]> - + Zeigt die Eigenschaften und Werkzeuge für eingerichtete Sucher (z.B.: multi-index searcher)]]> Feldwerte Gesundheitsstatus Der Gesundheitsstatus und Lesbarkeit des Indizes. Indizierer Indexinformationen + Inhalt des Indexes Zeigt die Eigenschaften des Indizes Examine Index-Verwaltung @@ -511,12 +632,18 @@ Dies erzeugt den Index neu.
Abhängig von der Inhaltsmenge Ihrer Website kann das eingie Zeit dauern.
Es wird davon abgeraten, einen Index einer Website während hoher Auslastung- oder Inhaltbearbeitungszeiten zu erneuern. - ]]> -
+ ]]> Sucher Durchsuche den Index und betrachte die Ergebnisse Werkzeuge Werkzeuge zur Indexverwaltung + Felder + Der Index kann nicht gelesen werden und wird deshalb neu erstellt. + Der Prozess dauert länger als erwartet, checken Sie die Umbraco Logs um zu sehen ob + Fehler passiert sind. + + Der Index kann nicht rebuilded werden weil er nicht zugewissen wurde. + IIndexPopulator Benutzername eingeben @@ -537,6 +664,9 @@ #value oder ?key=value Bitte einen Alias eingeben... Alias erzeugen... + Element erstellen + Bearbeiten + Benennen Angepasste Listenansicht erstellen @@ -549,6 +679,7 @@ %0% wurde umbenannt in %1% + Ändern des Editors in einem Datatyps mit gespeicherten Werten ist nicht erlaubt. Um es zu erlauben müssen Sie die Umbraco:CMS:DataTypes:CanBeChanged Einstellung in der appsettings.json ändern. Neuer Vorgabewert Feldtyp in der Datenbank Datentyp-GUID @@ -563,14 +694,25 @@ Wählen Sie das Verzeichnis aus der untenstehenden Baumstruktur, in das verschoben werden soll. wurde verschoben in + + %0% wird die Eigenschaften und Daten von folgenden Element löschen]]> + Ich verstehe das diese Aktion Eigenschaften und Daten basierend auf diesem + DataTyps löschen wird. + - Ihre Daten wurden gespeichert. Bevor Sie diese Seite jedoch veröffentlichen können, müssen Sie die folgenden Korrekturen vornehmen: - Der aktuelle Mitgliedschaftsanbieter erlaubt keine Kennwortänderung (EnablePasswordRetrieval muss auf "true" gesetzt sein) + Ihre Daten wurden gespeichert. + Bevor Sie diese Seite jedoch veröffentlichen können, müssen Sie die folgenden Korrekturen vornehmen: + + Der aktuelle Mitgliedschaftsanbieter erlaubt keine Kennwortänderung + (EnablePasswordRetrieval muss auf "true" gesetzt sein) + '%0%' ist bereits vorhanden Bitte prüfen und korrigieren: Bitte prüfen und korrigieren: - Für das Kennwort ist eine Mindestlänge von %0% Zeichen vorgesehen, wovon mindestens %1% Sonderzeichen (nicht alphanumerisch) sein müssen + Für das Kennwort ist eine Mindestlänge von %0% Zeichen vorgesehen, + wovon mindestens %1% Sonderzeichen (nicht alphanumerisch) sein müssen + '%0%' muss eine Zahl sein '%0%' (in Registerkarte '%1%') ist ein Pflichtfeld '%0%' ist ein Pflichtfeld @@ -578,20 +720,27 @@ '%0%' hat ein falsches Format + Ein unbekannter Fehler ist passiert. + Optimistic concurrency Fehler, Objekte wurde geändert. Der Server hat einen Fehler gemeldet Dieser Dateityp wird durch die Systemeinstellungen blockiert - ACHTUNG! Obwohl CodeMirror in den Einstellungen aktiviert ist, bleibt das Modul wegen mangelnder Stabilität in Internet Explorer deaktiviert. + ACHTUNG! Obwohl CodeMirror in den Einstellungen aktiviert ist, + bleibt das Modul wegen mangelnder Stabilität in Internet Explorer deaktiviert. + Bitte geben Sie die Bezeichnung und den Alias des neuen Dokumenttyps ein. Es besteht ein Problem mit den Lese-/Schreibrechten auf eine Datei oder einen Ordner Fehler beim Laden einer "Partial View Kodedatei" (Datei: %0%) Bitte geben Sie einen Titel ein Bitte wählen Sie einen Typ - Soll die Abbildung wirklich über die Originalgröße hinaus vergrößert werden? + Soll die Abbildung wirklich über die + Originalgröße hinaus vergrößert werden? + Startelement gelöscht, bitte kontaktieren Sie den System-Administrator. Bitte markieren Sie den gewünschten Text, bevor Sie einen Stil auswählen Keine aktiven Stile vorhanden Bitte platzieren Sie den Mauszeiger in die erste der zusammenzuführenden Zellen Sie können keine Zelle trennen, die nicht zuvor aus mehreren zusammengeführt wurde. + Die Eigenschaft ist nicht valide Optionen @@ -610,16 +759,18 @@ Zellabstand Auswählen Schließen + Leeren Fenster schließen + Fenster Pane Kommentar bestätigen Beschneiden - Seitenverhältnis beibehalten Inhalt Weiter Kopieren Neu + Ausschnitte Bereich Datenbank Datum Standard @@ -629,6 +780,7 @@ Design Wörterbuch Abmessungen + Verwerfen nach unten Herunterladen Bearbeiten @@ -641,6 +793,8 @@ Erste(s) Allgemein Gruppen + Gruppe + Generisch Gruppe Höhe Hilfe @@ -649,6 +803,7 @@ Bildzeichen Id Import + Nur in diesem Ordner suchen Info Innerer Abstand Einfügen @@ -667,18 +822,19 @@ Abmelden Makro Pflichtfeld + Medien Nachricht Verschieben Name Neu Weiter Nein + Knoten Name von Aus Ok Öffnen An - oder Sortieren nach Kennwort @@ -686,6 +842,7 @@ Einen Moment bitte... Zurück Eigenschaften + Mehr erfahren Erneuern E-Mail-Empfänger für die Formulardaten Papierkorb @@ -693,6 +850,7 @@ Neu laden Verbleibend Entfernen + Rückgängig Umbenennen Erneuern Pflichtangabe @@ -700,18 +858,22 @@ Wiederholen Berechtigungen Geplantes Veröffentlichen + Umbraco Information Suchen Leider können wir nicht finden, wonach Sie suchen. Es wurden keine Elemente hinzugefügt Server Einstellungen + Geteilt Anzeigen Seite beim Senden anzeigen Größe Sortieren Status Senden + Erfolt Typ + Typ Name Durchsuchen ... unter nach oben @@ -721,6 +883,7 @@ URL Benutzer Benutzername + Validieren Wert Ansicht Willkommen ... @@ -733,17 +896,24 @@ Vorschau Kennwort ändern nach - Listenansicht Sichern läuft... Aktuelle(s) Eingebettet ausgewählt + Anderes + Artikel + Videos + Avatar für + Kopf + System Feld + Zuletzt geändert Blau + Tab hinzufügen Neue Gruppe Neue Eigenschaft Editor hinzufügen @@ -778,14 +948,17 @@ Mit dieser Datenbank kann leider keine Verbindung hergestellt werden. + Appsettings.json Datei konnte nicht gespeichert werden. Bitte ändern Sie die Datei + manuell. + Die Datenbank ist erreichbar und wurde identifiziert als Datenbank Installieren, um die Datenbank für Umbraco %0% einzurichten. - ]]> - - Die Datenbank wurde für Umbraco %0% konfiguriert. Klicken Sie auf <strong>weiter</strong>, um fortzufahren. + ]]> + Die Datenbank wurde für Umbraco %0% konfiguriert. + Klicken Sie auf <strong>weiter</strong>, um fortzufahren. Um diesen Schritt abzuschließen, müssen Sie die notwendigen Informationen zur Datenbankverbindung angeben.<br />Bitte kontaktieren Sie Ihren Provider bzw. Server-Administrator für weitere Informationen. Paketversion + Bestätigt auf Umbraco Cloud zu funktioneren Einfügen mit Formatierung (Nicht empfohlen) @@ -1256,6 +1430,22 @@ Sie haben ein entferntes oder im Papierkorb befindliches Medienelement ausgewählt Sie haben entfernte oder im Papierkorb befindliche medienelemente ausgewählt Verworfen + Medien öffnen + Medientyp ändern + Ändere %0% auf %1% + Erstellen abbrechen? + + Sie haben Änderungen an diesem Inhalt vorgenommen. Sind Sie sich sicher das Sie + diese verwerfen wollen? + + Alle Medien löschen? + Clipboard + Nicht erlaubt + Medienpicker öffnen + + + Wählen Sie einen Editor + Editor auswählen Externen Link eingeben @@ -1270,15 +1460,24 @@ Zurücksetzen Fertig Rückgängig machen + Benutzer definiert + Änderungen + Erstellt Wählen Sie eine Version, um diese mit der aktuellen zu vergleichen + Aktuelle Version Zeigt die Unterschiede zwischen der aktuellen und der ausgewählten Version an.<br />Text in <del>rot</del> fehlen in der ausgewählten Version, <ins>grün</ins> markierter Text wurde hinzugefügt. + Keine Unterschiede zwischen den beiden Versionen gefunden. Dokument wurde zurückgesetzt Zeigt die ausgewählte Version als HTML an. Wenn Sie sich die Unterschiede zwischen zwei Versionen anzeigen lassen wollen, benutzen Sie bitte die Vergleichsansicht. Zurücksetzen auf Version auswählen Ansicht + + Versionen + Aktulle Bearbeitungs Version + Aktulle veröffentlichte Version Skript bearbeiten @@ -1294,7 +1493,12 @@ Benutzer + Touren Die besten Umbraco-Video-Tutorials + Besuche our.umbraco.com + Besuche umbraco.tv + Schaue gratis Tutorials + von Umbraco Learning Base Standardvorlage @@ -1639,6 +1843,12 @@ falls die angefragte Sprache nicht verfügbar ist, wählen Sie diese Option hier aus. Ersatzsprache + Keine + %0% wird zwischen Sprachen und Segmenten geteilt.]]> + %0% wird zwischen allen Sprachen geteilt.]]> + %0% wird zwischen allen Segmenten geteilt.]]> + Geteilt: Sprachen + Geteilt: Segmente Parameter hinzufügen @@ -1771,7 +1981,10 @@ Benutzer angelegt Kennwort ändern Foto ändern + Benötigt - geben Sie eine Email Adresse für diesen User an Neues Kennwort + Noch %0% Zeichen benötigt! + Es sollten mindestens %0% Sonderzeichen verwendet werden. wurde nicht ausgeschlossen Das Kennwort wurde nicht geändert Neues Kennwort (Bestätigung) @@ -2118,4 +2331,59 @@ Wählen Sie Alle Alle abwählen + + Umbraco Forms + Erstellen Sie Formulare mithilfe einer intuitiven Benutzeroberfläche. Von einfachen Kontaktformularen + die Email verschicken bis hin zu komplexen Fragebögen die mit einem CRM System verbunden sind. Ihre Kunden werden es lieben! + + + + Was sind Inhaltsvorlagen? + Inhaltsvorlagen sind vordefinierte Inhalte die ausgewählt werden können + wenn Sie einen neuen Inhaltsknoten anlegen wollen. + + Wie erstelle ich eine Inhaltsvorlage? + + Es gibt zwei Möglichkeiten eine Inhaltsvorlage zu erstellen:

+
    +
  • Rechtsklicken Sie einen Inhaltsknoten und wählen Sie "Inhaltsvorlage erstellen" aus.
  • +
  • Rechtsklicken Sie den Inhaltsvorlagen-Baum und wählen Sie den Dokumententypen aus für den Sie eine Vorlage erstellen wollen.
  • +
+

Wenn Sie einen Namen vergen haben können Reakteure diese als Vorlage für neue Seiten benutzen.

+ ]]> +
+ Wie verwalte ich eine Inhaltsvorlage? + Sie können Inhaltsvorlagen bearbeiten und löschen in dem Sie im Inhaltsvorlage-Baum die gewünschte + Vorlage auswählen. Außerdem können Sie auch direkt den Dokumenttypen bearbeiten oder löschen auf dem die Vorlage basiert + + + + Beenden + Vorschau beenden + Website Vorschau + Website in Vorschaumodus öffnen + Websitevorschau anzeigen? + Sie haben den Vorschaumodus beendet, wollen Sie ihn erneut öffnen um + gespeicherte Version der Website anzusehen? + + Vorschau der letzten Version anzeigen + Veröffentlichte Version anzeigen + Veröffentlichte Version anzeigen? + Sie befinden sich im Vorschaumodus, wollen Sie ihn verlassen um die letzte + veröffentlichte Version ihrer Website zu sehen? + + Veröffentlichte Version anzeigen + Im Vorschaumodus bleiben + + + Ornder erstellen + Dateien durch Packages erstellen lassen + Dateien schreiben + Medien Ordner stellen + + + Element zurückgegeben + Elemente zurückgegeben + From 48ad91392f2cdbb15e26b4c92cb3764461e9de26 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Thu, 19 Jan 2023 09:25:44 +0100 Subject: [PATCH 58/96] add the `s` html element to allow list for TinyMCE (#13697) Fixes #13637 (cherry picked from commit cfdc4a95735a37c62f3b2ac4d323ca1713c5415e) # Conflicts: # src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs --- src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs b/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs index 55fa7b2c5f..1be3e9bfcd 100644 --- a/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs @@ -8,7 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models; public class RichTextEditorSettings { internal const string StaticValidElements = - "+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption"; + "+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-s[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption,video[*],audio[*],picture[*],source[*],canvas[*]"; internal const string StaticInvalidElements = "font"; From 0ecb613b4abf5bdf51887d578ae49c45797e1212 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 16 Mar 2023 10:45:47 +0100 Subject: [PATCH 59/96] Revert "add the `s` html element to allow list for TinyMCE (#13697)" This reverts commit 48ad91392f2cdbb15e26b4c92cb3764461e9de26. --- src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs b/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs index 1be3e9bfcd..55fa7b2c5f 100644 --- a/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs @@ -8,7 +8,7 @@ namespace Umbraco.Cms.Core.Configuration.Models; public class RichTextEditorSettings { internal const string StaticValidElements = - "+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-s[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption,video[*],audio[*],picture[*],source[*],canvas[*]"; + "+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption"; internal const string StaticInvalidElements = "font"; From caa4ca510e3b96002b2230aca58586b232bf9688 Mon Sep 17 00:00:00 2001 From: Marc Goodson Date: Thu, 19 Jan 2023 12:08:25 +0000 Subject: [PATCH 60/96] Add .woff2 to BrowsableFileExtensions (cherry picked from commit 23b03f408e6eb828de4df8328f744adb0e496b50) --- src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs b/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs index bec6d77bfb..a59b9bf861 100644 --- a/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/UmbracoPluginSettings.cs @@ -19,7 +19,7 @@ public class UmbracoPluginSettings ".css", // styles ".js", // scripts ".jpg", ".jpeg", ".gif", ".png", ".svg", // images - ".eot", ".ttf", ".woff", // fonts + ".eot", ".ttf", ".woff", ".woff2", // fonts ".xml", ".json", ".config", // configurations ".lic", // license ".map", // js map files From 06b89963e4fbbcade4b75eea63edea9893386ea8 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Mon, 30 Jan 2023 09:32:28 +0000 Subject: [PATCH 61/96] Fixes #13715 Simple LogViewer queries not returning results (#13748) * Fixes #13715 issue with simple logviewer searches * Update Logviewer test - to ensure MessageLike and simple equivalent returns same result count to help catch (cherry picked from commit d38fabea4a5bd43b980c21ef2b90cc6ba320da00) --- .../Logging/Viewer/ExpressionFilter.cs | 8 ++++---- .../Umbraco.Infrastructure/Logging/LogviewerTests.cs | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs b/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs index a8444f4276..5e2130b5d3 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/ExpressionFilter.cs @@ -29,7 +29,7 @@ internal class ExpressionFilter : ILogFilter // If the expression is one word and doesn't contain a serilog operator then we can perform a like search if (!filterExpression.Contains(" ") && !filterExpression.ContainsAny(ExpressionOperators.Select(c => c))) { - filter = PerformMessageLikeFilter(filterExpression); + filter = PerformMessageLikeFilter(filterExpression, customSerilogFunctions); } // check if it's a valid expression @@ -48,7 +48,7 @@ internal class ExpressionFilter : ILogFilter { // 'error' describes a syntax error, where it was unable to compile an expression // Assume the expression was a search string and make a Like filter from that - filter = PerformMessageLikeFilter(filterExpression); + filter = PerformMessageLikeFilter(filterExpression, customSerilogFunctions); } } @@ -57,10 +57,10 @@ internal class ExpressionFilter : ILogFilter public bool TakeLogEvent(LogEvent e) => _filter == null || _filter(e); - private Func? PerformMessageLikeFilter(string filterExpression) + private Func? PerformMessageLikeFilter(string filterExpression, SerilogLegacyNameResolver serilogLegacyNameResolver) { var filterSearch = $"@Message like '%{SerilogExpression.EscapeLikeExpressionContent(filterExpression)}%'"; - if (SerilogExpression.TryCompile(filterSearch, out CompiledExpression? compiled, out var error)) + if (SerilogExpression.TryCompile(filterSearch, null, serilogLegacyNameResolver, out CompiledExpression? compiled, out var error)) { // `compiled` is a function that can be executed against `LogEvent`s: return evt => diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs index 45c8929628..5c028714b8 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs @@ -197,6 +197,8 @@ public class LogviewerTests [TestCase("@mt = '{EndMessage} ({Duration}ms) [Timing {TimingId}]'", 26)] [TestCase("SortedComponentTypes[?] = 'Umbraco.Web.Search.ExamineComponent'", 1)] [TestCase("Contains(SortedComponentTypes[?], 'DatabaseServer')", 1)] + [TestCase("@Message like '%definition%'", 6)] + [TestCase("definition", 6)] [Test] public void Logs_Can_Query_With_Expressions(string queryToVerify, int expectedCount) { From 5966ad4a0540042d3a1ef3d074f3ecf95ea94815 Mon Sep 17 00:00:00 2001 From: Ealse Bouma Date: Mon, 30 Jan 2023 21:25:10 +0100 Subject: [PATCH 62/96] Changed default initialized button permissions for listviews (cherry picked from commit 5c0673930a50a5bd077129f745461a10e53ea415) --- .../propertyeditors/listview/listview.controller.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js index ffbbcb72d0..e53d6b9b54 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js @@ -80,12 +80,12 @@ function listViewController($scope, $interpolate, $routeParams, $injector, $time var idsWithPermissions = null; $scope.buttonPermissions = { - canCopy: true, - canCreate: true, - canDelete: true, - canMove: true, - canPublish: true, - canUnpublish: true + canCopy: false, + canCreate: false, + canDelete: false, + canMove: false, + canPublish: false, + canUnpublish: false }; $scope.$watch("selection.length", function (newVal, oldVal) { From 815eb5b9c88ed2d59d47dce5b1e12f20fbc74d52 Mon Sep 17 00:00:00 2001 From: Jeroen Breuer Date: Fri, 27 Jan 2023 17:19:41 +0100 Subject: [PATCH 63/96] Make methods virtual so they can be redefined in derived classes. (cherry picked from commit ff3d8c1c6c1483c2d4d2ce1849415cb2df5a71dd) --- src/Umbraco.Web.Common/Security/MemberManager.cs | 16 ++++++++-------- .../Security/MemberSignInManager.cs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.Common/Security/MemberManager.cs b/src/Umbraco.Web.Common/Security/MemberManager.cs index 19be3de489..95d6d5b635 100644 --- a/src/Umbraco.Web.Common/Security/MemberManager.cs +++ b/src/Umbraco.Web.Common/Security/MemberManager.cs @@ -50,7 +50,7 @@ public class MemberManager : UmbracoUserManager - public async Task IsMemberAuthorizedAsync( + public virtual async Task IsMemberAuthorizedAsync( IEnumerable? allowTypes = null, IEnumerable? allowGroups = null, IEnumerable? allowMembers = null) @@ -122,14 +122,14 @@ public class MemberManager : UmbracoUserManager - public bool IsLoggedIn() + public virtual bool IsLoggedIn() { HttpContext? httpContext = _httpContextAccessor.HttpContext; return httpContext?.User.Identity?.IsAuthenticated ?? false; } /// - public async Task MemberHasAccessAsync(string path) + public virtual async Task MemberHasAccessAsync(string path) { if (await IsProtectedAsync(path)) { @@ -140,7 +140,7 @@ public class MemberManager : UmbracoUserManager - public async Task> MemberHasAccessAsync(IEnumerable paths) + public virtual async Task> MemberHasAccessAsync(IEnumerable paths) { IReadOnlyDictionary protectedPaths = await IsProtectedAsync(paths); @@ -163,10 +163,10 @@ public class MemberManager : UmbracoUserManager /// this is a cached call /// - public Task IsProtectedAsync(string path) => Task.FromResult(_publicAccessService.IsProtected(path).Success); + public virtual Task IsProtectedAsync(string path) => Task.FromResult(_publicAccessService.IsProtected(path).Success); /// - public Task> IsProtectedAsync(IEnumerable paths) + public virtual Task> IsProtectedAsync(IEnumerable paths) { var result = new Dictionary(); foreach (var path in paths) @@ -179,7 +179,7 @@ public class MemberManager : UmbracoUserManager - public async Task GetCurrentMemberAsync() + public virtual async Task GetCurrentMemberAsync() { if (_currentMember == null) { @@ -194,7 +194,7 @@ public class MemberManager : UmbracoUserManager _store.GetPublishedMember(user); + public virtual IPublishedContent? AsPublishedMember(MemberIdentityUser user) => _store.GetPublishedMember(user); /// /// This will check if the member has access to this path diff --git a/src/Umbraco.Web.Common/Security/MemberSignInManager.cs b/src/Umbraco.Web.Common/Security/MemberSignInManager.cs index 4517a0d865..c9c7f44805 100644 --- a/src/Umbraco.Web.Common/Security/MemberSignInManager.cs +++ b/src/Umbraco.Web.Common/Security/MemberSignInManager.cs @@ -126,7 +126,7 @@ public class MemberSignInManager : UmbracoSignInManager, IMe /// /// Custom ExternalLoginSignInAsync overload for handling external sign in with auto-linking /// - public async Task ExternalLoginSignInAsync(ExternalLoginInfo loginInfo, bool isPersistent, bool bypassTwoFactor = false) + public virtual async Task ExternalLoginSignInAsync(ExternalLoginInfo loginInfo, bool isPersistent, bool bypassTwoFactor = false) { // borrowed from https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs // to be able to deal with auto-linking and reduce duplicate lookups From aacac4997d751737ec42a5453135cddcc0dc7ed8 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Wed, 8 Feb 2023 12:47:46 +0100 Subject: [PATCH 64/96] Remove special characters in avatar [part 2] (#13796) * Update regex * Update src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js Co-authored-by: Ronald Barendse --------- Co-authored-by: Ronald Barendse (cherry picked from commit 280fbdd8706d74547b117d7a366cf35df247705d) # Conflicts: # src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js --- .../src/common/directives/components/umbavatar.directive.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js index 5d90958dbd..0ca4995128 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbavatar.directive.js @@ -70,7 +70,8 @@ Use this directive to render an avatar. function getNameInitials(name) { if(name) { - var names = name.split(' '), + const notAllowedRegex = /[^\p{Letter}\p{Number} ]+/gu; + var names = name.replace(notAllowedRegex, '').trim().split(' '), initials = names[0].substring(0, 1); if (names.length > 1) { From 80a28397972c452699e6870bd0b17523532581a2 Mon Sep 17 00:00:00 2001 From: Dhanesh Kumar Mj <58820887+dKumarmj@users.noreply.github.com> Date: Mon, 6 Feb 2023 17:27:36 +0530 Subject: [PATCH 65/96] Mini-list view search by id,name & key is fixed. (#13735) * Mini-list view search by id,name & key is fixed. Added multiple conditions in the query to consider id or name or key from the filter param(search bar from minilistview) * make it more simple ,now using || instead of clause conditions. --------- Co-authored-by: Dhanesh Kumar Co-authored-by: Michael (cherry picked from commit 2f5726384d462b7250561b9338c5b041936aa4d7) --- .../Controllers/EntityController.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs b/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs index 92779c18fa..36e7d46df1 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/EntityController.cs @@ -1,8 +1,11 @@ using System.Collections.Concurrent; using System.Dynamic; using System.Globalization; +using System.IO; using System.Linq.Expressions; using System.Reflection; +using System.Security.Cryptography; +using Examine.Search; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; @@ -15,6 +18,7 @@ using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Models.TemplateQuery; +using Umbraco.Cms.Core.Persistence; using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; @@ -785,7 +789,11 @@ public class EntityController : UmbracoAuthorizedJsonController { return new PagedResult(0, 0, 0); } - + //adding multiple conditions ,considering id,key & name as filter param + //for id as int + int.TryParse(filter, out int filterAsIntId); + //for key as Guid + Guid.TryParse(filter, out Guid filterAsGuid); // else proceed as usual entities = _entityService.GetPagedChildren( id, @@ -795,7 +803,9 @@ public class EntityController : UmbracoAuthorizedJsonController out long totalRecords, filter.IsNullOrWhiteSpace() ? null - : _sqlContext.Query().Where(x => x.Name!.Contains(filter)), + : _sqlContext.Query().Where(x => x.Name!.Contains(filter) + || x.Id == filterAsIntId + || x.Key == filterAsGuid), Ordering.By(orderBy, orderDirection)); From f7ba2cfe963501e534f9f49040a32385532ddb5f Mon Sep 17 00:00:00 2001 From: Anders Brohus Date: Tue, 7 Feb 2023 09:14:41 +0100 Subject: [PATCH 66/96] 2FA translations Added and changed some translations about 2FA (cherry picked from commit 559e56949f4fcea91e362b4c39f0e608c4a6589d) --- src/Umbraco.Core/EmbeddedResources/Lang/da.xml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/da.xml b/src/Umbraco.Core/EmbeddedResources/Lang/da.xml index 0555ea3934..cf0518613d 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/da.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/da.xml @@ -342,6 +342,7 @@ Opret et nyt medlem Alle medlemmer Medlemgrupper har ingen yderligere egenskaber til redigering. + Totrinsbekræftelse Kopiering af indholdstypen fejlede @@ -1902,6 +1903,7 @@ Mange hilsner fra Umbraco robotten genkende dig. Klik på cirklen ovenfor for at uploade et billede. Forfatter + Konfigurer totrinsbekræftelse Skift Din profil Din historik @@ -1929,11 +1931,11 @@ Mange hilsner fra Umbraco robotten Ældste Sidst logget ind Ingen brugere er blevet tilføjet - Hvis du ønsker at slå denne autentificeringsmetode fra, så skal du nu indtaste koden fra dit device: - Denne autentificeringsmetode er slået til - Den valgte autentificeringsmetode er nu slået fra - Der skete en ukendt fejl da denne autentificeringsmetode skulles slåes fra - Er du sikker på, at du vil fjerne denne autentificeringsmetode for denne bruger? + Hvis du ønsker at slå denne totrinsbekræftelse fra, så skal du nu indtaste koden fra din enhed: + Denne totrinsbekræftelse er slået til + Den valgte totrinsbekræftelse er nu slået fra + Der skete en ukendt fejl da denne totrinsbekræftelse skulles slåes fra + Er du sikker på, at du vil fjerne denne totrinsbekræftelse for denne bruger? Validering From ef4c9c508deff8b4aa11c04a4614892e85338cf6 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 13 Feb 2023 14:50:41 +0100 Subject: [PATCH 67/96] Add DefaultLanguage fallback policy for published values (#13814) * Add DefaultLanguage fallback * Implement DefaultLanguage fallback * Add DefaultLanguage fallback test (cherry picked from commit 7348171c0135f2d04d3ab8f3f5dfa863e5b93f29) --- .../Models/PublishedContent/Fallback.cs | 48 +++++++++++---- .../PublishedValueFallback.cs | 59 +++++++++++++++++++ .../PublishedContentLanguageVariantTests.cs | 9 +++ 3 files changed, 105 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Core/Models/PublishedContent/Fallback.cs b/src/Umbraco.Core/Models/PublishedContent/Fallback.cs index 2c665f1710..e6df70621a 100644 --- a/src/Umbraco.Core/Models/PublishedContent/Fallback.cs +++ b/src/Umbraco.Core/Models/PublishedContent/Fallback.cs @@ -3,56 +3,82 @@ using System.Collections; namespace Umbraco.Cms.Core.Models.PublishedContent; /// -/// Manages the built-in fallback policies. +/// Manages the built-in fallback policies. /// public struct Fallback : IEnumerable { /// - /// Do not fallback. + /// Do not fallback. /// public const int None = 0; private readonly int[] _values; /// - /// Initializes a new instance of the struct with values. + /// Initializes a new instance of the struct with values. /// + /// The values. private Fallback(int[] values) => _values = values; /// - /// Gets an ordered set of fallback policies. + /// Gets an ordered set of fallback policies. /// - /// + /// The values. + /// + /// The fallback policy. + /// public static Fallback To(params int[] values) => new(values); /// - /// Fallback to default value. + /// Fallback to the default value. /// public const int DefaultValue = 1; /// - /// Fallback to other languages. + /// Fallback to other languages. /// public const int Language = 2; /// - /// Fallback to tree ancestors. + /// Fallback to tree ancestors. /// public const int Ancestors = 3; /// - /// Gets the fallback to default value policy. + /// Fallback to the default language. /// + public const int DefaultLanguage = 4; + + /// + /// Gets the fallback to the default language policy. + /// + /// + /// The default language fallback policy. + /// + public static Fallback ToDefaultLanguage => new Fallback(new[] { DefaultLanguage }); + + /// + /// Gets the fallback to the default value policy. + /// + /// + /// The default value fallback policy. + /// public static Fallback ToDefaultValue => new(new[] { DefaultValue }); /// - /// Gets the fallback to language policy. + /// Gets the fallback to language policy. /// + /// + /// The language fallback policy. + /// public static Fallback ToLanguage => new(new[] { Language }); /// - /// Gets the fallback to tree ancestors policy. + /// Gets the fallback to tree ancestors policy. /// + /// + /// The tree ancestors fallback policy. + /// public static Fallback ToAncestors => new(new[] { Ancestors }); /// diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs index 64f0160383..0e43a2617f 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs @@ -44,6 +44,13 @@ public class PublishedValueFallback : IPublishedValueFallback return true; } + break; + case Fallback.DefaultLanguage: + if (TryGetValueWithDefaultLanguageFallback(property, culture, segment, out value)) + { + return true; + } + break; default: throw NotSupportedFallbackMethod(f, "property"); @@ -85,6 +92,13 @@ public class PublishedValueFallback : IPublishedValueFallback return true; } + break; + case Fallback.DefaultLanguage: + if (TryGetValueWithDefaultLanguageFallback(content, alias, culture, segment, out value)) + { + return true; + } + break; default: throw NotSupportedFallbackMethod(f, "element"); @@ -141,6 +155,13 @@ public class PublishedValueFallback : IPublishedValueFallback return true; } + break; + case Fallback.DefaultLanguage: + if (TryGetValueWithDefaultLanguageFallback(content, alias, culture, segment, out value)) + { + return true; + } + break; default: throw NotSupportedFallbackMethod(f, "content"); @@ -347,4 +368,42 @@ public class PublishedValueFallback : IPublishedValueFallback language = language2; } } + + private bool TryGetValueWithDefaultLanguageFallback(IPublishedProperty property, string? culture, string? segment, out T? value) + { + value = default; + + if (culture.IsNullOrWhiteSpace()) + { + return false; + } + + string? defaultCulture = _localizationService?.GetDefaultLanguageIsoCode(); + if (culture.InvariantEquals(defaultCulture) == false && property.HasValue(defaultCulture, segment)) + { + value = property.Value(this, defaultCulture, segment); + return true; + } + + return false; + } + + private bool TryGetValueWithDefaultLanguageFallback(IPublishedElement element, string alias, string? culture, string? segment, out T? value) + { + value = default; + + if (culture.IsNullOrWhiteSpace()) + { + return false; + } + + string? defaultCulture = _localizationService?.GetDefaultLanguageIsoCode(); + if (culture.InvariantEquals(defaultCulture) == false && element.HasValue(alias, defaultCulture, segment)) + { + value = element.Value(this, alias, defaultCulture, segment); + return true; + } + + return false; + } } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs index 342e08acbe..37a5f08286 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs @@ -242,6 +242,15 @@ public class PublishedContentLanguageVariantTests : PublishedSnapshotServiceTest Assert.IsNull(value); } + [Test] + public void Can_Get_Content_For_Unpopulated_Requested_DefaultLanguage_With_Fallback() + { + var snapshot = GetPublishedSnapshot(); + var content = snapshot.Content.GetAtRoot().First(); + var value = content.Value(PublishedValueFallback, "welcomeText", "fr", fallback: Fallback.ToDefaultLanguage); + Assert.AreEqual("Welcome", value); + } + [Test] public void Do_Not_Get_Content_Recursively_Unless_Requested() { From 86247b4578a4ae9f54923a7e5ca3e621778809fc Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Thu, 16 Mar 2023 11:32:35 +0100 Subject: [PATCH 68/96] Revert "Add DefaultLanguage fallback policy for published values (#13814)" This reverts commit ef4c9c508deff8b4aa11c04a4614892e85338cf6. --- .../Models/PublishedContent/Fallback.cs | 48 ++++----------- .../PublishedValueFallback.cs | 59 ------------------- .../PublishedContentLanguageVariantTests.cs | 9 --- 3 files changed, 11 insertions(+), 105 deletions(-) diff --git a/src/Umbraco.Core/Models/PublishedContent/Fallback.cs b/src/Umbraco.Core/Models/PublishedContent/Fallback.cs index e6df70621a..2c665f1710 100644 --- a/src/Umbraco.Core/Models/PublishedContent/Fallback.cs +++ b/src/Umbraco.Core/Models/PublishedContent/Fallback.cs @@ -3,82 +3,56 @@ using System.Collections; namespace Umbraco.Cms.Core.Models.PublishedContent; /// -/// Manages the built-in fallback policies. +/// Manages the built-in fallback policies. /// public struct Fallback : IEnumerable { /// - /// Do not fallback. + /// Do not fallback. /// public const int None = 0; private readonly int[] _values; /// - /// Initializes a new instance of the struct with values. + /// Initializes a new instance of the struct with values. /// - /// The values. private Fallback(int[] values) => _values = values; /// - /// Gets an ordered set of fallback policies. + /// Gets an ordered set of fallback policies. /// - /// The values. - /// - /// The fallback policy. - /// + /// public static Fallback To(params int[] values) => new(values); /// - /// Fallback to the default value. + /// Fallback to default value. /// public const int DefaultValue = 1; /// - /// Fallback to other languages. + /// Fallback to other languages. /// public const int Language = 2; /// - /// Fallback to tree ancestors. + /// Fallback to tree ancestors. /// public const int Ancestors = 3; /// - /// Fallback to the default language. + /// Gets the fallback to default value policy. /// - public const int DefaultLanguage = 4; - - /// - /// Gets the fallback to the default language policy. - /// - /// - /// The default language fallback policy. - /// - public static Fallback ToDefaultLanguage => new Fallback(new[] { DefaultLanguage }); - - /// - /// Gets the fallback to the default value policy. - /// - /// - /// The default value fallback policy. - /// public static Fallback ToDefaultValue => new(new[] { DefaultValue }); /// - /// Gets the fallback to language policy. + /// Gets the fallback to language policy. /// - /// - /// The language fallback policy. - /// public static Fallback ToLanguage => new(new[] { Language }); /// - /// Gets the fallback to tree ancestors policy. + /// Gets the fallback to tree ancestors policy. /// - /// - /// The tree ancestors fallback policy. - /// public static Fallback ToAncestors => new(new[] { Ancestors }); /// diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs index 0e43a2617f..64f0160383 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs @@ -44,13 +44,6 @@ public class PublishedValueFallback : IPublishedValueFallback return true; } - break; - case Fallback.DefaultLanguage: - if (TryGetValueWithDefaultLanguageFallback(property, culture, segment, out value)) - { - return true; - } - break; default: throw NotSupportedFallbackMethod(f, "property"); @@ -92,13 +85,6 @@ public class PublishedValueFallback : IPublishedValueFallback return true; } - break; - case Fallback.DefaultLanguage: - if (TryGetValueWithDefaultLanguageFallback(content, alias, culture, segment, out value)) - { - return true; - } - break; default: throw NotSupportedFallbackMethod(f, "element"); @@ -155,13 +141,6 @@ public class PublishedValueFallback : IPublishedValueFallback return true; } - break; - case Fallback.DefaultLanguage: - if (TryGetValueWithDefaultLanguageFallback(content, alias, culture, segment, out value)) - { - return true; - } - break; default: throw NotSupportedFallbackMethod(f, "content"); @@ -368,42 +347,4 @@ public class PublishedValueFallback : IPublishedValueFallback language = language2; } } - - private bool TryGetValueWithDefaultLanguageFallback(IPublishedProperty property, string? culture, string? segment, out T? value) - { - value = default; - - if (culture.IsNullOrWhiteSpace()) - { - return false; - } - - string? defaultCulture = _localizationService?.GetDefaultLanguageIsoCode(); - if (culture.InvariantEquals(defaultCulture) == false && property.HasValue(defaultCulture, segment)) - { - value = property.Value(this, defaultCulture, segment); - return true; - } - - return false; - } - - private bool TryGetValueWithDefaultLanguageFallback(IPublishedElement element, string alias, string? culture, string? segment, out T? value) - { - value = default; - - if (culture.IsNullOrWhiteSpace()) - { - return false; - } - - string? defaultCulture = _localizationService?.GetDefaultLanguageIsoCode(); - if (culture.InvariantEquals(defaultCulture) == false && element.HasValue(alias, defaultCulture, segment)) - { - value = element.Value(this, alias, defaultCulture, segment); - return true; - } - - return false; - } } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs index 37a5f08286..342e08acbe 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedContentLanguageVariantTests.cs @@ -242,15 +242,6 @@ public class PublishedContentLanguageVariantTests : PublishedSnapshotServiceTest Assert.IsNull(value); } - [Test] - public void Can_Get_Content_For_Unpopulated_Requested_DefaultLanguage_With_Fallback() - { - var snapshot = GetPublishedSnapshot(); - var content = snapshot.Content.GetAtRoot().First(); - var value = content.Value(PublishedValueFallback, "welcomeText", "fr", fallback: Fallback.ToDefaultLanguage); - Assert.AreEqual("Welcome", value); - } - [Test] public void Do_Not_Get_Content_Recursively_Unless_Requested() { From dca1c1b1be51195350105224c4c9b523b9d8c13e Mon Sep 17 00:00:00 2001 From: tristanjthompson Date: Mon, 13 Feb 2023 14:50:37 +0000 Subject: [PATCH 69/96] Update JITOptimizerValidator error message. (cherry picked from commit e9f5b562ada7dcc4be95dc77432824e46863c3aa) --- .../Runtime/RuntimeModeValidators/JITOptimizerValidator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs b/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs index d075001ecd..98f3b5c2d0 100644 --- a/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs +++ b/src/Umbraco.Infrastructure/Runtime/RuntimeModeValidators/JITOptimizerValidator.cs @@ -19,7 +19,7 @@ public class JITOptimizerValidator : RuntimeModeProductionValidatorBase DebuggableAttribute? debuggableAttribute = Assembly.GetEntryAssembly()?.GetCustomAttribute(); if (debuggableAttribute != null && debuggableAttribute.IsJITOptimizerDisabled) { - validationErrorMessage = "The JIT/runtime optimizer of the entry assembly needs to be enabled in production mode."; + validationErrorMessage = "The JIT/runtime optimizer of the entry assembly needs to be enabled in production mode. The project should be built/published in Release (or similar) configuration in production mode."; return false; } From c684b382470e55393b03d640d840376ffc3de6c1 Mon Sep 17 00:00:00 2001 From: Simone Chiaretta Date: Tue, 21 Feb 2023 08:05:56 +0100 Subject: [PATCH 70/96] Changed modifier for ContentPickerValueConverter (#13864) Changed internal to public for ContentPickerValueConverter, which was the only property value converter defined as `internal` Fixes issue umbraco#13858 (cherry picked from commit 362832b594a37a59dd709fa3db8a87e8b2427b6e) --- .../ValueConverters/ContentPickerValueConverter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs index eded7b7329..d66c76c905 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs @@ -5,7 +5,7 @@ using Umbraco.Extensions; namespace Umbraco.Cms.Core.PropertyEditors.ValueConverters; -internal class ContentPickerValueConverter : PropertyValueConverterBase +public class ContentPickerValueConverter : PropertyValueConverterBase { private static readonly List PropertiesToExclude = new() { From d418d06c02791f72702c244a770a38abfec0f07e Mon Sep 17 00:00:00 2001 From: Smayke95 Date: Tue, 21 Feb 2023 12:42:01 +0100 Subject: [PATCH 71/96] Add Bosnian language (#13854) * Add Bosnian language * fix * Fix issue with Marketplace (cherry picked from commit 42d143c6b2dfac790bd4c0f239ea16edbbc3bc5f) --- .../EmbeddedResources/Lang/bs.xml | 2878 +++++++++++++++++ .../EmbeddedResources/Lang/en.xml | 6 +- 2 files changed, 2881 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Core/EmbeddedResources/Lang/bs.xml diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/bs.xml b/src/Umbraco.Core/EmbeddedResources/Lang/bs.xml new file mode 100644 index 0000000000..f7b763bdfa --- /dev/null +++ b/src/Umbraco.Core/EmbeddedResources/Lang/bs.xml @@ -0,0 +1,2878 @@ + + + + Smayke95 + https://github.com/Smayke95 + + + Kultura i imena hostova + Revizije + Pregledaj čvor + Promijeni Tip Dokumenta + Kopiraj + Kreiraj + Izvezi + Kreiraj Paket + Kreiraj grupu + Obriši + Onemogući + Uredi postavke + Isprazni kantu za smeće + Omogući + Izvezi Tip Dokumenta + Uvezi Tip Dokumenta + Uvezi Paket + Uredi u Platnu + Izađi + Pomakni + Obavještenja + Ograničite javni pristup + Objavi + Poništi objavu + Ponovo učitaj + Ponovo objavite cijelu stranicu + Ukloni + Preimenuj + Vrati + Odaberite gdje ćete kopirati + Odaberite gdje ćete pomaknuti + Odaberite gdje ćete uvesti + do u strukturi stabla ispod + Odaberite gdje želite kopirati odabrane stavke + Odaberite gdje želite pomaknuti odabrane stavke + je pomaknuta u + je kopirana u + je obrisana + Dozvole + Vraćanje unazad + Pošalji na objavljivanje + Pošalji na prijevod + Postavi grupu + Sortiraj + Prevedi + Ažuriraj + Postavi dozvole + Otključaj + Kreirajte Predložak Sadržaja + Ponovo pošaljite pozivnicu + + + Sadržaj + Administracija + Struktura + Ostalo + + + Dozvolite pristup za dodjelu kulture i imena hostova + Dozvolite pristup za pregled dnevnika historije čvora + Dozvolite pristup za pregled čvora + Dozvolite pristup za promjenu Tipa Dokumenta za čvor + Dozvolite pristup za kopiranje čvora + Dozvolite pristup za kreiranje čvora + Dozvolite pristup za brisanje čvora + Dozvolite pristup za pomicanje čvora + Dozvolite pristup za postavljanje i promjenu ograničenja pristupa za čvor + Dozvolite pristup za objavljivanje čvora + Dozvolite pristup da poništavanje objave čvora + Dozvolite pristup za promjenu dozvola za čvor + Dozvolite pristup za vraćanje čvora u prethodno stanje + Dozvolite pristup za slanje čvora na odobrenje prije objavljivanja + Dozvolite pristup za slanje čvora na prijevod + Dozvolite pristup za promjenu sortiranja čvorova + Dozvolite pristup za prevođenje čvora + Dozvolite pristup za spremanje čvora + Dozvolite pristup za kreiranje Predloška Sadržaja + Dozvolite pristup za podešavanje obaviještenja za čvorove + + + Sadržaj + Info + + + Dozvola odbijena. + Dodaj novu domenu + Dodaj postojeću domenu + ukloni + Nevažeći čvor. + Jedna ili više domena imaju nevažeći format. + Domena je već dodijeljena. + Jezik + Domena + Nova domena '%0%' je kreirana + Domena '%0%' je obrisana + Domena '%0%' je već dodijeljena + Domena '%0%' je ažurirana + Uredi trenutne domene + + + Naslijedi + Kultura + + ili naslijedite kulturu od roditeljskih čvorova. Također će se primijeniti
+ na trenutni čvor, osim ako se domena u nastavku ne primjenjuje.]]> +
+ Domene + + + Obriši odabir + Odaberi + Uradi nešto drugo + Boldiraj + Otkaži uvlačenje pasusa + Umetni polje obrasca + Umetnite grafički naslov + Uredi Html + Uvuci pasus + Kurziv + Centriraj + Poravnaj lijevo + Poravnaj desno + Umetni link + Umetni lokalni link (sidro) + Lista + Numerička lista + Umetni makro + Umetni sliku + Objavi i zatvori + Objavi sa potomcima + Uredite odnose + Povratak na listu + Spremi + Spremi i zatvori + Spremi i objavi + Spremi i pošalji na odobrenje + Spremi prikaz liste + Zakaži + Spremi i pregledaj + Pregled je onemogućen jer nije dodijeljen predložak + Odaberi stil + Prikaži stilove + Umetni tabelu + Spremi i generiši modele + Poništi + Ponovi + Obriši tag + Otkaži + Potvrdi + Više opcija za objavljivanje + Pošalji + + + Pregled za + Sadržaj je izbrisan + Sadržaj nije objavljen + Sadržaj spremljen i objavljen + Sadržaj spremljen i objavljen za jezike: %0% + Sadržaj spremljen + Sadržaj spremljen za jezike: %0% + Sadržaj premješten + Sadržaj kopiran + Sadržaj vraćen + Sadržaj poslan na objavljivanje + Sadržaj poslan na objavljivanje za jezike: %0% + Sortiranje podređenih stavki je izvršio korisnik + %0% + Čišćenje je onemogućeno za verziju: %0% + Čišćenje je omogućeno za verziju: %0% + Kopiraj + Objavljeno + Objavi + Pomakni + Spremljeno + Spremi + Obriši + Poništi objavu + Vrat + Pošalji na objavljivanje + Pošalji na objavljivanje + Sortiraj + Prilagođeno + Spremi + Spremi + Historija (sve varijante) + + + Naziv mape ne može sadržavati nedozvoljene znakove. + Nije uspjelo brisanje stavke: %0% + + + Da li je objavljeno + O ovoj stranici + Alias + (kako biste opisali sliku preko telefona) + Alternativni linkovi + Kliknite da uredite ovu stavku + Kreirao + Originalni autor + Ažurirao + Kreirano + Datum i vrijeme kreiranja ovog dokumenta + Tip dokumenta + Uređivanje + Ukloni na + Ova stavka je promijenjena nakon objavljivanja + Ova stavka nije objavljena + Posljednje objavljeno + Nema stavki za prikaz + Nema stavki za prikaz na listi. + Nije dodan sadržaj + Nijedan član nije dodan + Tip medija + Link do medijske stavke + Grupa članova + Uloga + Tip člana + Nisu napravljene nikakve promjene + Nije odabran datum + Naslov stranice + Ova medijska stavka nema vezu + Svojstva + Ovaj dokument je objavljen, ali nije vidljiv jer nadređeni '%0%' nije objavljen + Ova kultura je objavljena, ali nije vidljiva jer nije objavljena na nadređenom '%0%' + Ovaj dokument je objavljen, ali nije u kešu + Nije moguće dobiti URL + Ovaj dokument je objavljen, ali njegov URL je u koliziji sa sadržajem %0% + Ovaj dokument je objavljen, ali njegov URL se ne može preusmjeriti + Objavi + Objavljeno + Objavljeno (čeka izmjene) + Status publikacije + + %0% i sve stavke sadržaja ispod i time čineći njihov sadržaj javno dostupnim.]]> + + + Objavi na + Poništi objavu na + Obriši datum + Postavi datum + Sortiranje je ažurirano + Da biste sortirali čvorove, jednostavno prevucite čvorove ili kliknite na jedno od zaglavlja kolona. Možete odabrati + više čvorova držeći tipku "shift" ili "control" dok birate + + Statistika + Naslov (opcionalno) + Alternativni tekst (opcionalno) + Natpis (opcionalno) + Tip + Poništi objavu + Neobjavljeno + Nije kreirano + Poslednji put uređeno + Datum/vrijeme uređivanja ovog dokumenta + Ukloni fajlove + Kliknite ovdje da uklonite sliku iz medijske stavke + Kliknite ovdje da uklonite fajl iz medijske stavke + Link do dokumenta + Član grupe + Nije član grupe + Dječiji artikli + Meta + Ovo se prevodi kao sljedeće vrijeme na serveru: + + Šta ovo znači?]]> + Jeste li sigurni da želite izbrisati ovu stavku? + Svojstvo %0% koristi uređivač %1% koji nije podržan za Ugniježđeni + Sadržaj. + + Jeste li sigurni da želite izbrisati sve stavke? + Za ovo svojstvo nisu konfigurirani tipovi sadržaja. + Dodajte tip elementa + Odaberi tip elementa + Odaberite grupu čija svojstva trebaju biti prikazana. Ako je ostavljeno prazno, + koristit će se prva grupa na tipu elementa. + + Unesite angular izraz za procjenu svake stavke za njeno + ime. Koristi + + za prikaz indeksa stavke + Odabrani tip elementa ne sadrži nijednu podržanu grupu (ovaj uređivač ne podržava kartice, promijenite ih u grupe ili koristite uređivač liste blokova). + Dodajte još jedan okvir za tekst + Uklonite ovaj okvir za tekst + Korijen Sadržaja + Uključite neobjavljeni sadržaj. + Ova vrijednost je skrivena. Ako vam je potreban pristup da vidite ovu vrijednost, obratite se + administratoru web stranice. + + Ova vrijednost je skrivena. + Koje jezike želite da objavite? + Koje jezike želite poslati na odobrenje? + Koje jezike želite da zakažete? + Odaberite jezike za poništavanje objavljivanja. Poništavanje objavljivanja obaveznog jezika će + poništiti objavljivanje svih jezika. + + Sve nove varijante će biti sačuvane. + Koje varijante želite da objavite? + Odaberite koje varijante želite sačuvati. + Za objavljivanje su potrebne sljedeće varijante: + Nismo spremni za objavljivanje + Spremno za objavljivanje? + Spremno za spremanje? + Resetuj fokusnu tačku + Pošalji na odobrenje + Odaberite datum i vrijeme za objavljivanje i/ili poništavanje objave stavke sadržaja. + Napravi novi + Zalijepi iz međuspremnika + Ova stavka je u korpi za otpatke + + + %0%]]> + Prazno + Odaberite predložak sadržaja + Predložak sadržaja kreiran + Predložak sadržaja je kreiran od '%0%' + Drugi predložak sadržaja sa istim imenom već postoji + Predložak sadržaja je unaprijed definiran sadržaj koji uređivač može odabrati da koristi + kao osnovu za kreiranje novog sadržaja + + + + Kliknite za učitavanje + ili kliknite ovdje da odaberete fajlove + Nije moguće učitati ovu datoteku, ona nema odobreni tip datoteke + Nije moguće učitati ovu datoteku, tip medija sa pseudonimom '%0%' nije dozvoljen ovdje + Nije moguće učitati ovu datoteku, ona nema važeći naziv datoteke + Maksimalna veličina datoteke je + Korijen medija + Kreiranje foldera pod ID-om roditelja nije uspjelo %0% + Preimenovanje foldera sa ID-om %0% nije uspjelo + Prevucite i ispustite svoje datoteke u područje + + + Kreirajte novog člana + Svi članovi + Grupe članova nemaju dodatna svojstva za uređivanje. + Dvostruka provjera autentičnosti + + + Kopiranje tipa sadržaja nije uspjelo + Premještanje tipa sadržaja nije uspjelo + + + Kopiranje tipa medija nije uspjelo + Premještanje tipa medija nije uspjelo + Automatski odabir + + + Kopiranje tipa člana nije uspjelo + + + Gdje želite kreirati novi %0% + Kreirajte stavku pod + Odaberite vrstu dokumenta za koju želite da napravite predložak sadržaja + Unesite naziv foldera + Odaberite vrstu i naslov + + Dokument Tip unutar sekcije Postavke, uređivanjem Dozvoljeni tipovi podređenih čvorova unutar Dozvole.]]> + + Dokument Tip unutar sekcije Postavke.]]> + Odabrana stranica u stablu sadržaja ne dozvoljava nijednu stranicu + biti kreiran ispod njega. + + Uredi dozvole za ovaj tip dokumenta + Kreiraj novi tip dokumenta + + Dokument Tip unutar sekcije Postavke, izmjenom Dozvoli kao root opcije unutar Dozvole.]]> + + Media Tip unutar sekcije Postavke, uređivanjem Dozvoljeni tipovi podređenih čvorova unutar Dozvole.]]> + Odabrani medij u stablu ne dopušta bilo koji drugi medij + kreiran ispod njega. + + Uredi dozvole za ovaj tip medija + Tip dokumenta bez predloška + Tip dokumenta sa predloškom + Definicija podataka za stranicu sadržaja koja se može kreirati + uređivača u stablu sadržaja i direktno je dostupan preko URL-a. + + Tip dokumenta + Definicija podataka za komponentu sadržaja koju mogu kreirati urednici u + stablo sadržaja i biti izabran na drugim stranicama, ali nema direktan URL. + + Tip elementa + Definira shemu za ponavljajući skup svojstava, na primjer, u 'Bloku + Uređivač svojstava Lista' ili 'Ugniježđeni sadržaj'. + + Kompozicija + Definira višekratni skup svojstava koja se mogu uključiti u definiciju + više drugih vrsta dokumenata. Na primjer, skup 'Common Page Settings'. + + Mapa + Koristi se za organiziranje tipova dokumenata, sastava i tipova elemenata kreiranih u ovome + Stablo vrste dokumenta. + + Nova mapa + Novi tip podatka + Novi JavaScript fajl + Novi prazan djelomični prikaz + Novi djelomični prikaz za makro + Novi djelomični prikaz iz isječka + Novi djelomični prikaz za makro iz isječka + Novi djelomični prikaz za makro (bez makroa) + Novi CSS fajl + Novi Rich Text Editor CSS fajl + + + Pregledajte svoju web stranicu + - Sakrij + Ako se Umbraco ne otvara, možda ćete morati dozvoliti iskačuće prozore sa ove stranice + je otvoren u novom prozoru + Restart + Posjetite + Dobrodošli + + + Ostani + Odbacite promjene + Imate nesačuvane promjene + Jeste li sigurni da želite otići s ove stranice? - imate nesačuvane + promjene + + Objavljivanjem će odabrane stavke biti vidljive na stranici. + Poništavanje objavljivanja će ukloniti odabrane stavke i sve njihove potomke sa + stranice. + + Poništavanje objavljivanja će ukloniti ovu stranicu i sve njene potomke sa stranice. + Imate nesačuvane promjene. Promjenom vrste dokumenta odbacit će se promjene. + + + Završeno + Izbrisana %0% stavka + Izbrisano %0% stavki + Izbrisana %0% od %1% stavka + Izbrisano %0% od %1% stavki + Objavljeno %0% stavka + Objavljeno %0% stavki + Objavljeno %0% od %1% stavka + Objavljeno %0% od %1% stavki + Ukinuta objava za %0% stavku + Ukinuta objava za %0% stavki + Ukinuta objava za %0% od %1% stavku + Ukinuta objava za %0% od %1% stavki + Pomjerena %0% stavka + Pomjereno %0% stavki + Pomjereno %0% od %1% stavku + Pomjereno %0% od %1% stavki + Kopirana %0% stavka + Kopirano %0% stavki + Kopirano %0% od %1% stavku + Kopirano %0% od %1% stavki + + + Naslov linka + Link + Anchor / querystring + Naziv + Upravljajte imenima hostova + Zatvorite ovaj prozor + Jeste li sigurni da želite izbrisati + %0% od %1% stavki]]> + Jeste li sigurni da želite onemogućiti + Jeste li sigurni da želite ukloniti + %0%]]> + Jeste li sigurni? + Jeste li sigurni? + Izreži + Uredi stavku iz rječnika + Uredi jezik + Uredite odabrane medije + Umetnite lokalnu vezu + Umetni znak + Umetnite grafički naslov + Umetnite sliku + Umetnite link + Kliknite da dodate makro + Umetnite tabelu + Ovo će izbrisati jezik + Promjena kulture jezika može biti skupa operacija i rezultirat će + u kešu sadržaja i indeksima koji se rekonstruišu + + Posljednji put uređeno + Link + Interni link: + Kada koristite lokalne veze, umetnite "#" ispred linka + Otvori u novom prozoru? + Ovaj makro ne sadrži svojstva koja možete uređivati + Zalijepi + Uredite dozvole za + Postavite dozvole za + Postavite dozvole za %0% za grupu korisnika %1% + Odaberite grupe korisnika za koje želite postaviti dozvole + Stavke u korpi za otpatke se sada brišu. Molimo vas da ne zatvarate ovaj prozor + dok se ova operacija odvija + + Korpa za otpatke je sada prazna + Kada se predmeti izbrišu iz korpe za otpatke, oni će nestati zauvijek + + regexlib.com web servis trenutno ima nekih problema, nad kojima nemamo kontrolu. Veoma nam je žao zbog ove neugodnosti.]]> + Potražite regularni izraz da dodate provjeru valjanosti u polje obrasca. Primjer: 'e-pošta, + 'poštanski broj', 'URL'. + + Ukloni makro + Obavezno polje + Stranica je ponovo indeksirana + Predmemorija web stranice je osvježena. Sav objavljeni sadržaj je sada ažuriran. Dok će sav + neobjavljen sadržaj ostati neobjavljen + + Keš web stranice će biti osvježen. Svi objavljeni sadržaji će biti ažurirani, dok će sav + neobjavljeni sadržaj ostati neobjavljen. + + Broj kolona + Broj redova + Kliknite na sliku da vidite punu veličinu + Izaberite stavku + Prikaži keš stavku + Odnosi se na original + Uključiti potomke + Najljubaznija zajednica + Link na stranicu + Otvara povezani dokument u novom prozoru ili kartici + Link do medija + Odaberite početni čvor sadržaja + Odaberite medije + Odaberite tip medija + Odaberite ikonu + Odaberite stavku + Odaberite vezu + Odaberite makro + Odaberite sadržaj + Odaberite tip sadržaja + Odaberite početni čvor medija + Odaberite člana + Odaberite grupu članova + Odaberite tip članova + Odaberite čvor + Odaberite jezike + Odaberite sekcije + Odaberite korisnika + Odaberite korisnike + Ikone nisu pronađene + Nema parametara za ovaj makro + Nema dostupnih makroa za umetanje + Eksterni provajderi prijave + Detalji o izuzetku + Stacktrace + Inner Exception + Povežite svoje + Odspojite svoju vezu + račun + Odaberite uređivač + Odaberite isječak + Ovo će izbrisati čvor i sve njegove jezike. Ako želite da izbrišete samo jedan + jezik, trebali biste poništiti objavljivanje čvora na tom jeziku. + + %0%.]]> + %0% iz grupe %1%]]> + Da, ukloni + Brišete izgled + Promjena izgleda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji je zasnovan na ovoj konfiguraciji. + + + + Da biste uvezli stavku iz rječnika, pronađite ".udt" datoteku na svom računaru klikom na + Dugme "Uvezi" (na sljedećem ekranu će se tražiti da potvrdite) + + Stavka iz rječnika ne postoji. + Nadređena stavka ne postoji. + Ne postoje stavke iz rječnika. + U ovoj datoteci nema stavki iz rječnika. + Nisu pronađene stavke iz rječnika. + Kreirajte stavku iz rječnika + + + %0%' ispod + ]]> + Kultura + + Pregled riječnika + + + Konfigurisani pretraživači + Prikazuje svojstva i alate za bilo koji konfigurirani pretraživač (tj + višeindeksni pretraživač) + + Vrijednosti polja + Zdravstveno stanje + Zdravstveno stanje indeksa i da li se može pročitati + Indeksi + Indeks info + Sadržaj u indeksu + Navodi svojstva indeksa + Upravljajte Examine-ovim indeksima + Omogućava vam da vidite detalje svakog indeksa i pruža neke alate za + upravljanje indeksima + + Ponovo izgradi indeks + + Ovisno o tome koliko sadržaja ima na vašoj web lokaciji, to može potrajati.
+ Ne preporučuje se obnavljanje indeksa u vrijeme velikog prometa na web stranici ili kada urednici uređuju sadržaj. + ]]> +
+ Pretraživači + Pretražite indeks i pogledajte rezultate + Alati + Alati za upravljanje indeksom + polja + Indeks se ne može pročitati i morat će se ponovo izgraditi + Proces traje duže od očekivanog, provjerite Umbraco dnevnik da vidite + je li bilo grešaka tokom ove operacije + + Ovaj indeks se ne može ponovo izgraditi jer mu nije dodijeljen + IIndexPopulator + + + Unesite svoje korisničko ime + Unesite svoju lozinku + Potvrdite lozinku + Imenujte %0%... + Unesite ime... + Unesite email... + Unesite korisničko ime... + Labela... + Unesite opis... + Unesite za pretragu... + Unesite za filtriranje... + Unesite da dodate oznake (pritisnite enter nakon svake oznake)... + Unesite vaš email + Unesite poruku... + Vaše korisničko ime je obično vaš email + #value ili ?key=value + Unesite alias... + Generišite alias... + Kreiraj stavku + Uredi + Ime + + + Kreirajte prilagođeni prikaz liste + Ukloni prilagođeni prikaz liste + Tip sadržaja, tip medija ili tip člana s ovim aliasom već postoji + + + Preimenovano + Ovdje unesite novi naziv mape + %0% je preimenovan u %1% + + + Dodajte vrijednost + Tip podataka baze podataka + Uređivač osobine GUID + Uređivač osobina + Dugmad + Omogući napredne postavke za + Omogući kontekstni meni + Maksimalna zadana veličina umetnutih slika + Povezani stilovi + Prikaži oznaku + Širina i visina + Odaberite mapu za premještanje + do u strukturi stabla ispod + je premeštena ispod + + + Vaši podaci su sačuvani, ali prije nego što možete objaviti ovu stranicu postoje neke + greške koje prvo morate ispraviti: + + Trenutni provajder članstva ne podržava promjenu lozinke + (Omogući preuzimanje lozinke mora biti uključeno) + + %0% već postoji + Bilo je grešaka: + Bilo je grešaka: + Lozinka treba da ima najmanje %0% znakova i da sadrži najmanje %1% + znakova koji nisu alfanumerički + + %0% mora biti cijeli broj + Polje %0% na kartici %1% je obavezno + %0% je obavezno polje + %0% na %1% nije u ispravnom formatu + %0% nije u ispravnom formatu + + + Primljena greška sa servera + Administrator je zabranio navedeni tip datoteke + NAPOMENA! Iako je CodeMirror omogućen konfiguracijom, on je onemogućen u + Internet Explorer-u jer nije dovoljno stabilan. + + Unesite i pseudonim i ime na novu vrstu osobine! + Postoji problem sa pristupom za čitanje/pisanje određenoj datoteci ili fascikli + Greška pri učitavanju skripte djelomičnog prikaza (fajl: %0%) + Unesite naslov + Molimo odaberite tip + Napravit ćete sliku veću od originalne veličine. Jeste li sigurni + da želite nastaviti? + + Početni čvor je obrisan, kontaktirajte svog administratora + Molimo označite sadržaj prije promjene stila + Nema dostupnih aktivnih stilova + Postavite kursor lijevo od dvije ćelije koje želite spojiti + Ne možete podijeliti ćeliju koja nije spojena. + Ovo svojstvo je nevažeće + + + O + Akcija + Akcije + Dodaj + Alias + Sve + Da li ste sigurni? + Nazad + Nazad na pregled + Rub + od + Otkaži + Margina ćelije + Odaberi + Očisti + Zatvori + Zatvori prozor + Zatvori okno + Komentar + Potvrdi + Ograniči + Ograniči proporcije + Sadržaj + Nastavi + Kopiraj + Kreiraj + Baza podataka + Datum + Podrazumjevano + Obriši + Obrisano + Brisanje... + Dizajn + Riječnik + Dimenzije + Otkaži + Dole + Preuzimanje + Uredi + Uređeno + Elementi + Email + Greška + Polje + Pronađi + Prvi + Fokusna tačka + Generalno + Grupe + Grupa + Visina + Pomoć + Sakrij + Historija + Ikona + Id + Uvezi + Pretraži samo ovu mapu + Info + Unutrašnja margina + Umetni + Instaliraj + Nevažeći + Poravnaj + Labela + Jezik + Zadnji + Izgled + Linkovi + Učitavanje + Zaključano + Prijava + Odjavi se + Odjavi se + Makro + Obavezno + Poruka + Pomakni + Ime + Novi + Sljedeći + Ne + Ime čvora + od + Isključeno + OK + Otvori + Opcije + Uključeno + ili + Poredaj po + Lozinka + Putanja + Jedan momenat molim... + Prethodni + Svojstva + Pročitaj više + Ponovo izgradi + Email za primanje obrasca + Kanta za smeće + Vaša kanta za smeće je prazna + Ponovo učitaj + Preostalo + Izbriši + Preimenuj + Obnovi + Obavezno + Povratiti + Pokušaj ponovo + Permisije + Planirano objavljivanje + Umbraco info + Pretraga + Žao nam je, ne možemo pronaći ono što tražite. + Nije dodana nijedna stavka + Server + Postavke + Prikaži + Prikaži stranicu na Pošalji + Veličina + Sortiranje + Status + Potvrdi + Uspjeh + Tip + Ime tipa + Unesite za pretragu... + ispod + Gore + Ažuriraj + Nadogradi + Prenesi + URL + Korisnik + Korisničko ime + Vrijednost + Pogled + Dobrodošli... + Širina + Da + Mapa + Rezultati pretrage + Promijeni redosljed + Završio sam sa promjenom redosljeda + Pregled + Promijeni lozinku + do + Prikaz liste + Spremanje... + trenutni + Ugradi + odabran + Ostalo + Članci + Videi + Avatar za + Zaglavlje + sistemsko polje + Posljednje ažurirano + + + Plava + + + Dodaj grupu + Dodaj svojstvo + Dodaj urednika + Dodaj šablon + Dodajte podređeni čvor + Dodaj dijete + Uredite tip podataka + Krećite se po odjeljcima + Prečice + prikaži prečice + Uključi prikaz liste + Uključi dozvoli kao root + Redovi za komentarisanje/dekomentarisanje + Uklonite liniju + Kopiraj linije gore + Kopiraj linije dole + Pomakni linije gore + Pomakni linije dole + Općenito + Uređivač + Uključi dozvoli varijante kulture + + + Boja pozadine + Boldirano + Boja teksta + Font + Tekst + + + Stranica + + + Instalacija se ne može povezati s bazom podataka. + Nije moguće sačuvati web.config datoteku. Molimo izmijenite konekcijski string + ručno. + + Vaša baza podataka je pronađena i identificirana je kao + Konfiguracija baze podataka + + Instaliraj za instalaciju Umbraco %0% baze podataka + ]]> + + + Dalje da nastavite.]]> + Baza podataka nije pronađena! Provjerite jesu li informacije u "konekcijskom string" u "web.config" fajlu ispravne.

+

Da nastavite, uredite "web.config" fajl. (koristeći Visual Studio ili vaš omiljeni uređivač teksta), skrolujte do dna, dodajte konekcijski string za vašu bazu podataka u ključ nazvan "UmbracoDbDSN" i sačuvajte fajl.

+

+ Kliknite na pokušaj ponovo dugme kada završite.
+ + Više informacija o uređivanju web.config fajla možete pronaći ovdje.

]]>
+ + Molimo kontaktirajte svog ISP-a ako je potrebno. + Ako instalirate na lokalnoj mašini ili serveru, možda će vam trebati informacije od administratora sistema.]]> + + Pritisnite nadogradnja za nadogradnju vaše baze podataka na Umbraco %0%

+

+ Ne brinite - nijedan sadržaj neće biti obrisan i sve će nastaviti raditi nakon toga! +

+ ]]>
+ Pritisnite Dalje da nastavite.]]> + + Dalje da nastavite sa čarobnjakom za konfiguraciju]]> + + Zadanu korisničku lozinku treba promijeniti!]]> + + Zadani korisnik je onemogućen ili nema pristup Umbraco!

Ne treba preduzimati nikakve daljnje radnje. Pritisnite Dalje da nastavite.]]> + + Zadana korisnička lozinka je uspješno promijenjena od instalacije!

Ne treba preduzimati nikakve daljnje radnje. Pritisnite Dalje da nastavite.]]> + Lozinka je promijenjena! + Započnite odlično, pogledajte naše uvodne video zapise + Klikom na sljedeće dugme (ili modifikacijom umbracoConfigurationStatus u web.config), + prihvatate licencu za ovaj softver kao što je navedeno u polju ispod. Primijetite da je ova Umbraco distribucija + sastoji se od dvije različite licence, open source MIT licence za okvir i licence za besplatni softver Umbraco + koji pokriva korisničko sučelje. + + Još nije instalirano. + Zahvaćeni datoteke i mape + Više informacija o postavljanju dozvola za Umbraco ovdje + Morate dodijeliti dozvole za izmjenu ASP.NET-a za sljedeće + datoteke/mape + + Vaše postavke dozvola su gotovo savršene!

+ Možete pokrenuti Umbraco bez problema, ali nećete moći instalirati pakete koji se preporučuju da biste u potpunosti iskoristili Umbraco.]]>
+ Kako riješiti + Kliknite ovdje da pročitate tekstualnu verziju + + video tutorijale o postavljanju dozvola foldera za Umbraco ili pročitajte tekstualnu verziju.]]> + Vaše postavke dozvola mogu biti problem! +

+ Možete pokrenuti Umbraco bez problema, ali nećete moći kreirati foldere ili instalirati pakete koji se preporučuju da biste u potpunosti iskoristili Umbraco.]]>
+ Vaše postavke dozvola nisu spremne za Umbraco! +

+ Da biste pokrenuli Umbraco, morat ćete ažurirati postavke dozvola.]]>
+ Vaše postavke dozvola su savršene!

+ Spremni ste da pokrenete Umbraco i instalirate pakete!]]>
+ Rješavanje problema sa mapom + Pratite ovu vezu za više informacija o problemima sa ASP.NET i + kreiranje foldera + + Postavljanje dozvola za foldere + + Želim da počnem od nule + naučite kako) + I dalje možete odabrati da kasnije instalirate Runway. Molimo idite na odjeljak Developer i odaberite Paketi. + ]]> + Upravo ste postavili čistu Umbraco platformu. Šta želite sljedeće učiniti? + Runway je instaliran + + Ovo je naša lista preporučenih modula, označite one koje želite da instalirate ili pogledajte punu listu modula + ]]> + Preporučuje se samo iskusnim korisnicima + Želim početi s jednostavnom web-stranicom + + "Runway" je jednostavna web stranica koja nudi neke osnovne tipove dokumenata i predloške. Instalater može postaviti Runway za vas automatski, + ali ga možete lako urediti, proširiti ili ukloniti. Nije potrebno i možete savršeno koristiti Umbraco i bez njega. Kako god, + Runway nudi laku osnovu zasnovanu na najboljim praksama za početak brže nego ikad. + Ako se odlučite za instalaciju Runway, opciono možete odabrati osnovne građevne blokove tzv. Runway Modules da poboljšate svoje Runway stranice. +

+ + Uključeno u Runway: Početna stranica, Stranica za početak, Stranica za instaliranje modula.
+ Dodatni moduli: Navigacija, Sitemap, Kontakt, Galerija. +
+ ]]>
+ Šta je Runway + Korak 1/5: Prihvatite licencu + Korak 2/5: Konfiguracija baze podataka + Korak 3/5: Potvrđivanje dozvola za fajlove + Korak 4/5: Provjerite Umbraco sigurnost + Korak 5/5: Umbraco je spreman za početak + Hvala vam što ste odabrali Umbraco + Pregledajte svoju novu stranicu +Instalirali ste Runway, pa zašto ne biste vidjeli kako izgleda vaša nova web stranica.]]> + Dodatna pomoć i informacije +Potražite pomoć od naše nagrađivane zajednice, pregledajte dokumentaciju ili pogledajte nekoliko besplatnih videozapisa o tome kako napraviti jednostavnu stranicu, kako koristiti pakete i brzi vodič za terminologiju Umbraco]]> + Umbraco %0% je instaliran i spreman za upotrebu + /web.config fajl i ažurirate ključ unutar AppSetting UmbracoConfigurationStatus na dnu do vrijednosti od '%0%'.]]> + započeto odmah klikom na "Pokreni Umbraco" dugme ispod.
Ako ste novi u Umbraco-u, +možete pronaći mnogo resursa na našim stranicama za početak.]]>
+ Pokreni Umbraco +Da upravljate svojom web lokacijom, jednostavno otvorite Umbraco backoffice i počnite dodavati sadržaj, ažurirati predloške i stilove ili dodati novu funkcionalnost]]> + Povezivanje s bazom podataka nije uspjelo. + Umbraco Verzija 3 + Umbraco Verzija 4 + Gledaj + Umbraco %0% za novu instalaciju ili nadogradnju sa verzije 3.0. +

+ Pritisnite "Dalje" da pokrenete čarobnjaka.]]>
+ + + Kod kulture + Naziv kulture + + + Bili ste u stanju mirovanja i automatski će doći do odjave + Obnovite sada da sačuvate svoj rad + + + Sretna super nedelja + Sretan divan ponedeljak + Sretan specifičan utorak + Sretna divna srijeda + Sretan gromoglasan četvrtak + Sretan zanimljiv petak + Sretna opuštena subota + Prijavite se ispod + Prijavite se sa + Isteklo je vrijeme sesije + + © 2001 - %0%
Umbraco.com

]]>
+ Zaboravljena lozinka? + E-mail će biti poslan na adresu navedenu sa vezom za reset + lozinke + + E-mail s uputama za poništavanje lozinke će biti poslan na + navedenu adresu ukoliko odgovara našoj evidenciji + + Prikaži lozinku + Sakrij lozinku + Vratite se na obrazac za prijavu + Molimo unesite novu lozinku + Vaša lozinka je ažurirana + Link na koji ste kliknuli je nevažeći ili je istekao + Umbraco: Reset lozinke + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Zatraženo je ponovno postavljanje lozinke +

+

+ Vaše korisničko ime za prijavu na Umbraco backoffice je: %0% +

+

+ + + + + + +
+ + Kliknite na ovaj link da poništite lozinku + +
+

+

Ukoliko ne možete kliknuti na link, kopirajte i zalijepite ovaj URL u prozor vašeg pretraživača:

+ + + + +
+ +%1% + +
+

+
+
+


+
+
+ + + ]]>
+ Umbraco: Sigurnosni kod + Vaš sigurnosni kod je: %0% + Poslednji korak + Omogućili ste 2-faktorsku autentifikaciju i morate potvrditi svoj identitet. + Molimo odaberite 2-faktor provajdera + Verifikacijski kod + Unesite verifikacioni kod + Unesen je nevažeći kod + + + Kontrolna tabla + Sekcije + Sadržaj + + + Odaberite stranicu iznad... + %0% je kopiran u %1% + Odaberite gdje dokument %0% treba kopirati ispod + %0% je premješten u %1% + Odaberite gdje dokument %0% treba premjestiti ispod + je odabrano kao korijen vašeg novog sadržaja, kliknite na 'Uredu' ispod. + Još nije odabran čvor, molimo odaberite čvor na gornjoj listi prije nego kliknete na 'Uredu' + Trenutni čvor nije dozvoljen pod odabranim čvorom zbog njegovog tipa + Trenutni čvor se ne može premjestiti na jednu od njegovih podstranica niti roditelj i odredište mogu biti isti + Trenutni čvor ne može postojati u korijenu + Radnja nije dozvoljena jer nemate dovoljna dopuštenja za 1 ili više djece + dokumenata. + + Povežite kopirane stavke s originalom + + + %0%]]> + Postavke obavještenja su sačuvane za + + Sljedeći jezici su izmijenjeni %0% + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Zdravo %0%, +

+

+ Ovo je automatiziran email koja vas obavještava da je zadatak '%1%' izvršen na stranici '%2%' od korisnika '%3%' +

+ + + + + + +
+ +
+EDIT
+
+

+

Sažetak izmjena:

+ %6% +

+

+ Ugodan dan!

+ Pozdrav od Umbraco robota +

+
+
+


+
+
+ + + ]]>
+ Sljedeći jezici su izmijenjeni:

+ %0% + ]]>
+ [%0%] Obavještenje o %1% izvedena na %2% + Obavještenja + + + Akcije + Kreirano + Kreiraj paket + + i locirajte paket. Umbraco paketi uglavnom imaju ".umb" ili ".zip" ekstenziju. + ]]> + Ovo će izbrisati paket + Uključi sve podređene čvorove + Instalirano + Instalirani paketi + Uputstvo za instalaciju + Ovaj paket nema prikaz konfiguracije + Još nije kreiran nijedan paket + Nijedan paket nije instaliran + + 'Paketi' u gornjem desnom uglu ekrana]]> + Sadržaj paketa + Licenca + Pretražite pakete + Rezultati za + Nismo mogli pronaći ništa za + Pokušajte potražiti drugi paket ili pregledajte kategorije + + Popularno + Promocije + Nova izdanja + ima + karma poeni + Informacije + Vlasnik + Saradnici + Kreirano + Trenutna verzija + .NET verzija + Preuzimanja + Lajkovi + Kompatibilnost + Ovaj paket je kompatibilan sa sljedećim verzijama Umbraco-a, kako su + prijavili članovi zajednice. Potpuna kompatibilnost se ne može garantirati za dolje navedene verzije 100% + + Eksterni izvori + Autor + Dokumentacija + Meta podaci paketa + Naziv paketa + Paket ne sadrži nikakve stavke +
+ Ovo možete bezbjedno ukloniti iz sistema klikom na "deinstaliraj paket".]]>
+ Opcije paketa + Pokrenite migracije paketa na čekanju + Readme paketa + Repozitorij paketa + Potvrdi deinstalaciju paketa + Paket je deinstaliran + Paket je uspješno deinstaliran + Deinstaliraj paket + + Bilješka: svi dokumenti, mediji itd. u zavisnosti od stavki koje uklonite, prestat će raditi i mogu dovesti do nestabilnosti sistema, + pa deinstalirajte sa oprezom. Ako ste u nedoumici, kontaktirajte autora paketa.]]> + Verzija paketa + Provjereno za rad na Umbraco Cloud + + + Zalijepi s punim formatiranjem (nije preporučljivo) + Tekst koji pokušavate zalijepiti sadrži posebne znakove ili formatiranje. Ovo bi moglo biti + uzrokovano kopiranjem teksta iz programa Microsoft Word. Umbraco može automatski ukloniti posebne znakove ili formatiranje, tako da + zalijepljeni sadržaj će biti prikladniji za web. + + Zalijepite kao sirovi tekst bez ikakvog oblikovanja + Zalijepi, ali ukloni oblikovanje (preporučeno) + + + Grupna zaštita + Ako želite dodijeliti pristup svim članovima određenih grupa članova + Morate kreirati grupu članova prije nego što možete koristiti grupnu autentifikaciju + Stranica sa greškom + Koristi se kada su ljudi prijavljeni, ali nemaju pristup + %0%]]> + %0% je sada zaštićen]]> + %0%]]> + Stranica za prijavu + Odaberite stranicu koja sadrži obrazac za prijavu + Uklonite zaštitu... + + %0%?]]> + Odaberite stranice koje sadrže obrazac za prijavu i poruke o greškama + %0%]]> + %0%]]> + Posebna zaštita članova + Ako želite dati pristup određenim članovima + + + + + + + + + + Uključite neobjavljene podstranice + Objavljivanje u toku - molimo sačekajte... + %0% od %1% stranica je objavljeno... + %0% je objavljeno + %0% i objavljene su podstranice + Objavi %0% i sve njegove podstranice + Objavi za objavu %0% i na taj način svoj sadržaj učiniti javno dostupnim.

+ Ovu stranicu i sve njene podstranice možete objaviti odabirom Uključi neobjavljene podstranice. + ]]>
+ + + Niste konfigurirali nijednu odobrenu boju + + + Možete odabrati samo stavke tipa: %0% + Odabrali ste stavku sadržaja koja je trenutno izbrisana ili je u korpi za otpatke + Odabrali ste stavke sadržaja koje su trenutno izbrisane ili su u korpi za otpatke + + + Izbrisana stavka + Odabrali ste medijsku stavku koja je trenutno izbrisana ili je u korpi za otpatke + Odabrali ste medijske stavke koje su trenutno izbrisane ili su u korpi za otpatke + Otpad + Otvorite u biblioteci medija + Promjena medijske stavke + Uredi %0% od %1% + Odbaci kreiranje? + + Izmijenili ste ovaj sadržaj. Jeste li sigurni da ga želite + odbaciti? + + Uklonite sve medije? + Međuspremnik + Nije dozvoljeno + Otvorite birač medija + + + unesite eksterni link + izaberite internu stranicu + Naslov + Link + Otvori u novom prozoru + unesite natpis na ekranu + Unesite link + + + Resetujte izrezivanje + Gotovo + Poništi izmjene + Korisnički definisano + + + Promjene + Kreirano + Trenutna verzija + + Crveni tekst će biti uklonjen u odabranoj verziji, zeleni tekst će biti dodan]]> + Nema razlike između trenutne verzije (nacrta) i odabrane verzije + Dokument je vraćen + Odaberite verziju koju želite usporediti sa trenutnom verzijom + Ovo prikazuje odabranu verziju kao HTML, ako želite vidjeti razliku između dvije + verzije u isto vrijeme, koristite pogled diff + + Vratite se na + Odaberite verziju + Pogled + + + Uredite datoteku skripte + + + Portirnica + Sadržaj + Kurir + Developer + Forme + Pomoć + Umbraco Konfiguracijski Čarobnjak + Mediji + Članovi + Bilteni + Paketi + Marketplace + Postavke + Statistika + Prevodi + Korisnici + + + Ture + Najbolji Umbraco video tutorijali + Posjetite our.umbraco.com + Posjetite umbraco.tv + Pogledajte naše besplatne video tutoriale + na Umbraco Learning Base + + + Podrazumevani šablon + Da biste uvezli vrstu dokumenta, pronađite ".udt" datoteku na svom računaru klikom na + dugme "Uvezi" (na sljedećem ekranu će se tražiti da potvrdite) + + Naslov nove kartice + Tip čvora + Tip + Stilovi + Skripte + Kartica + Naslov kartice + Kartice + Glavni tip sadržaja je omogućen + Ovaj tip sadržaja koristi + Nema definiranih svojstava na ovoj kartici. Kliknite na vezu "dodaj novu nekretninu" na + vrh za kreiranje novog svojstva. + + Kreirajte odgovarajući šablon + Dodaj ikonu + + + Redoslijed sortiranja + Datum kreiranja + Sortiranje završeno. + Povucite različite stavke gore ili dolje ispod da postavite kako bi trebale biti raspoređene. Ili kliknite na + zaglavlja kolona za sortiranje cijele kolekcije stavki + + + + + Validacija + Greške u validaciji moraju biti ispravljene pre nego što se stavka može sačuvati + Nije uspjelo + Sačuvano + Nedovoljne korisničke dozvole, ne mogu dovršiti operaciju + Otkazano + Operaciju je otkazao dodatak treće strane + Ovaj fajl se učitava kao deo fascikle, ali kreiranje novog foldera ovde nije dozvoljeno + Kreiranje novog foldera ovdje nije dozvoljeno + Objavljivanje je otkazao dodatak treće strane + Tip svojstva već postoji + Tip svojstva kreiran + Tip podatka: %1%]]> + Tip svojstva obrisan + Tip dokumenta sačuvan + Kartica kreirana + Kartica je izbrisana + Kartica sa id-em: %0% je obrisana + Stilovi nisu sačuvani + Stilovi sačuvani + Stilovi sačuvani bez ikakvih grešaka + Tip podatka sačuvan + Stavka rječnika je sačuvana + Objavljivanje nije uspjelo jer nadređena stranica nije objavljena + Sadržaj objavljen + i vidljivo na web stranici + Šablon sadržaja je sačuvan + Promjene su uspješno sačuvane + Sadržaj sačuvan + Ne zaboravite objaviti da promjene budu vidljive + Poslano na odobrenje + Promjene su poslane na odobrenje + Medij sačuvan + Medij sačuvan bez ikakvih grešaka + Član sačuvan + Svojstvo stilova sačuvano + Stilovi sačuvani + Šablon sačuvan + Greška pri spremanju korisnika (provjerite log) + Korisnik sačuvan + Tip korisnika sačuvan + Grupa korisnika sačuvana + Kulture i imena hostova su sačuvani + Greška pri spremanju kultura i imena hostova + Fajl nije sačuvan + fajl nije mogao biti sačuvan. Molimo provjerite dozvole za fajlove + Fajl sačuvan + Fajl sačuvan bez ikakvih grešaka + Jezik sačuvan + Tip medija sačuvan + Tip člana sačuvan + Grupa članova sačuvana + Druga grupa članova sa istim imenom već postoji + Šablon nije sačuvan + Uvjerite se da nemate 2 šablona sa istim pseudonimom + Šablon sačuvan + Šablon sačuvan bez ikakvih grešaka! + Sadržaj nije objavljen + Djelomični prikaz sačuvan + Djelomični prikaz sačuvan bez ikakvih grešaka! + Djelomični prikaz nije sačuvan + Došlo je do greške prilikom spremanja fajla. + Dozvole su sačuvane za + Izbrisano je %0% grupa korisnika + %0% je obrisano + Omogućeno %0% korisnika + Onemogućeno %0% korisnika + %0% je sada omogućen + %0% je sada onemogućen + Grupe korisnika su postavljene + Otključano %0% korisnika + %0% je sada otključan + Član je izvezen u fajl + Došlo je do greške prilikom izvoza člana + Korisnik %0% je obrisan + Pozovi korisnika + Pozivnica je ponovo poslana na %0% + Tip dokumenta je izvezen u fajl + Došlo je do greške prilikom izvoza tipa dokumenta + Stavke iz rječnika su izvezene u fajl + Došlo je do greške prilikom izvoza stavki rječnika + Sljedeće stavke iz rječnika su uvezene! + Domene nisu konfigurirane za višejezične stranice, molimo kontaktirajte administratora, + pogledajte dnevnik za više informacija + + Nijedan domen nije konfigurisan za %0%, molimo kontaktirajte administratora, pogledajte + prijavite se za više informacija + + Vaše sistemske informacije su uspješno kopirane u međuspremnik + Nije moguće kopirati vaše sistemske informacije u međuspremnik + + + Dodaj stil + Uredi stil + Stilovi za uređivanje bogatog teksta + Definirajte stilove koji bi trebali biti dostupni u uređivaču obogaćenog teksta za ove + stilove + + Uredi stilove + Uredi svojstvo stilova + Ime prikazano u uređivaču birača stilova + Pregled + Kako će tekst izgledati u uređivaču obogaćenog teksta. + Selektor + Koristite CSS sintaksu, npr. "h1" ili ".redHeader" + Stilovi + CSS koji treba primijeniti u uređivaču obogaćenog teksta, npr. "color:red;" + Kod + Uređivač + + + Produkcija.]]> + Brisanje šablona sa ID-om %0% nije uspjelo + Uredi šablon + Sekcije + Umetnite područje sadržaja + Umetnite čuvar mjesta u području sadržaja + Umetni + Odaberite šta ćete umetnuti u svoj šablon + Stavka iz rječnika + Stavka rječnika je čuvar mjesta za prevodljiv dio teksta, koji + olakšava kreiranje dizajna za višejezične web stranice. + + Makro + + Makro je komponenta koja se može konfigurirati i odlična je za + višekratni dijelovi vašeg dizajna, gdje vam je potrebna opcija za pružanje parametara, + kao što su galerije, obrasci i liste. + + Vrijednost + Prikazuje vrijednost imenovanog polja sa trenutne stranice, s opcijama za izmjenu + vrijednost ili povratak na alternativne vrijednosti. + + Djelomičan pogled + + Djelomični prikaz je zasebna datoteka šablona koja se može prikazati unutar druge + predložak, odličan je za ponovnu upotrebu markupa ili za odvajanje složenih predložaka u zasebne datoteke. + + Master šablon + Nema mastera + Renderirajte podređeni predložak + @RenderBody(). + ]]> + Definirajte imenovanu sekciju + @section { ... }. Ovo se može prikazati u + određenom području nadređenog predloška, koristeći @RenderSection. + ]]> + Renderirajte imenovanu sekciju + @RenderSection(name). + Ovo prikazuje područje podređenog šablona koje je umotano u odgovarajuću @section [name]{ ... } definiciju. + ]]> + Naziv sekcije + Sekcija je obavezna + @section, u suprotnom se prikazuje greška. + ]]> + Kreator upita + stavke vraćene, u + želim + sav sadržaj + sadržaj tipa "%0%" + iz + moja web stranica + gdje + i + je + nije + prije + prije (uključujući odabrani datum) + poslije + poslije (uključujući odabrani datum) + jednako + nije jednako + sadrži + ne sadrži + veće od + veće ili jednako + manje od + manje ili jednako + Id + Naziv + Kreirano + Ažurirano + poredaj po + uzlazno + silazno + Predložak + + + Slika + Makro + Odaberite tip sadržaja + Odaberite izgled + Dodaj red + Dodaj sadržaj + Ispusti sadržaj + Postavke su primijenjene + Ovaj sadržaj ovdje nije dozvoljen + Ovaj sadržaj je ovdje dozvoljen + Kliknite za ugradnju + Kliknite da umetnete sliku + Kliknite da umetnete makro + Pišite ovdje... + Raspored mreže + Izgledi su cjelokupno radno područje za uređivač mreže, obično vam je potreban samo jedan ili + dva različita izgleda + + Dodajte raspored mreže + Uredite raspored mreže + Prilagodite izgled postavljanjem širine kolona i dodavanjem dodatnih odjeljaka + Konfiguracije redova + Redovi su predefinirani za raspored vodoravno + Dodajte konfiguraciju reda + Uredite konfiguraciju reda + Podesite red postavljanjem širine ćelija i dodavanjem dodatnih ćelija + Nije dostupna dodatna konfiguracija + Kolone + Ukupan kombinovani broj kolona u rasporedu mreže + Postavke + Konfigurirajte koje postavke urednici mogu promijeniti + Stilovi + Konfigurirajte šta uređivači stilova mogu promijeniti + Dozvoli svim urednicima + Dozvoli sve konfiguracije redaka + Maksimalan broj stavki + Ostavite prazno ili postavite na 0 za neograničeno + Postavi kao zadano + Odaberite extra + Odaberite zadano + su dodani + Upozorenje + + Promjena imena konfiguracije reda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji se temelji na ovoj konfiguraciji.

Izmjena samo oznake neće rezultirati gubitkom podataka.

]]>
+ Brišete konfiguraciju reda + + Brisanje imena konfiguracije reda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji je zasnovan na ovome + konfiguraciju. + + Brišete izgled + Izmjena izgleda će rezultirati gubitkom podataka za bilo koji postojeći sadržaj koji je zasnovan + na ovoj konfiguraciji. + + + + Kompozicije + Grupa + Niste dodali nijednu grupu + Dodaj grupu + Naslijeđeno od + Dodaj svojstvo + Obavezna oznaka + Omogući prikaz liste + Konfiguriše stavku sadržaja da prikaže njenu listu koja se može sortirati i pretraživati + djeco, djeca neće biti prikazana na drvetu + + Dozvoljeni predlošci + Odaberite koje predloške urednici mogu koristiti na sadržaju ove vrste + + Dozvoli kao korijen + Dozvolite urednicima da kreiraju sadržaj ovog tipa u korijenu stabla sadržaja. + + Dozvoljeni tipovi podređenih čvorova + Dozvolite da se sadržaj navedenih tipova kreira ispod sadržaja ovog + tip. + + Odaberite podređeni čvor + Naslijediti kartice i svojstva iz postojeće vrste dokumenta. Nove kartice će biti + dodano trenutnoj vrsti dokumenta ili spojeno ako postoji kartica s identičnim imenom. + + Ovaj tip sadržaja se koristi u kompoziciji i stoga se ne može sam sastaviti. + + Nema dostupnih tipova sadržaja za upotrebu kao kompozicija. + Uklanjanje kompozicije će izbrisati sve povezane podatke o svojstvu. Jednom ti + sačuvajte tip dokumenta, nema povratka. + + Napravi novi + Koristite postojeće + Postavke urednika + Konfiguracija + Da, izbriši + je premještena ispod + je kopirano ispod + Odaberite folder za premještanje + Odaberite folder za kopiranje + do u strukturi stabla ispod + Svi tipovi dokumenata + Svi dokumenti + Sve medijske stavke + korištenje ovog tipa dokumenta će biti trajno izbrisano, potvrdite da želite + izbrišite i ove. + + korištenje ove vrste medija će biti trajno izbrisano, potvrdite da želite izbrisati + ovi takođe. + + korištenje ove vrste člana će biti trajno izbrisano, potvrdite da želite izbrisati + ovi takođe + + i svi dokumenti koji koriste ovu vrstu + i sve medijske stavke koje koriste ovu vrstu + i svi članovi koji koriste ovaj tip + Član može uređivati + Dozvolite da ovu vrijednost svojstva uređuje član na svojoj stranici profila + + Osjetljivi podaci + Sakrij ovu vrijednost svojstva od uređivača sadržaja koji nemaju pristup pregledu + osjetljive informacije + + Prikaži na profilu člana + Dozvolite da se ova vrijednost svojstva prikaže na stranici profila člana + + kartica nema redoslijed sortiranja + Gdje se koristi ovaj sastav? + Ovaj sastav se trenutno koristi u sastavu sljedećih + tipa sadržaja: + + Dozvoli varijacije + Dozvolite varirati u zavisnosti od kulture + Dozvoli segmentaciju + Varijacije po kulturi + Varijacije po segmentima + Dozvolite urednicima da kreiraju sadržaj ove vrste na različitim jezicima. + Dozvolite urednicima da kreiraju sadržaj na različitim jezicima. + Dozvolite urednicima da kreiraju segmente ovog sadržaja. + Dozvolite varijaciju po kulturi + Dozvoli segmentaciju + Tip elementa + Je li tip elementa + Tip elementa je namijenjen za korištenje na primjer u ugniježđenom sadržaju, a ne u + drvo. + + Tip dokumenta se ne može promijeniti u tip elementa nakon što je naviknut + kreirati jednu ili više stavki sadržaja. + + Ovo nije primjenjivo za tip elementa + Napravili ste promjene u ovoj nekretnini. Jeste li sigurni da ih želite odbaciti? + Izgled + Oznaka iznad (puna širina) + Uklanjate podređeni čvor + Uklanjanje podređenog čvora ograničit će opcije urednika da kreiraju drugačiji sadržaj + tipovi ispod čvora. + + korišćenjem ovog uređivača biće ažurirane nove postavke. + Čišćenje istorije + Dozvoli zaobilaženje postavki čišćenja globalne historije. + Neka sve verzije budu novije od dana + Čuvajte najnoviju verziju po danu danima + Spriječi čišćenje + Omogući čišćenje + BILJEŠKA! Čišćenje istorijskih verzija sadržaja onemogućeno je globalno. Ove postavke neće stupiti na snagu prije nego što se omogući.]]> + + + Dodaj jezik + ISO kod + Obavezan jezik + Svojstva na ovom jeziku moraju biti popunjena prije nego što se čvor može ispuniti + objavljeno. + + Zadani jezik + Umbraco stranica može imati samo jedan zadani jezik. + Promjena zadanog jezika može rezultirati nedostatkom zadanog sadržaja. + Vraća se na + Nema zamjenskog jezika + Da se omogući višejezični sadržaj da se vrati na drugi jezik ako ne + bude prisutan na traženom jeziku, odaberite ga ovdje. + + Zamjenski jezik + nijedan + + + Dodaj parameter + Uredi parameter + Unesite naziv makroa + Parametri + Definišite parametre koji bi trebali biti dostupni kada koristite ovaj makro. + Odaberite djelimični prikaz makro datoteke + + + Kreiranje modela + ovo može potrajati, ne brinite + Modeli generisani + Models nije mogao biti generisani + Generisanje modela nije uspjelo, pogledajte izuzetak u log dnevniku + + + Dodajte zadanu vrijednost + Zadana vrijednost + Rezervno polje + Zadana vrijednost + Veličina slova + Kodiranje + Odaberite polje + Pretvorite prijelome redaka + Zamjenjuje prijelome reda sa 'br' html oznakom + Prilagođena polja + Samo datum + Formatiraj kao datum + Kodirati kao HTML + Zamijenit će specijalne znakove njihovim HTML ekvivalentom. + Biće umetnuto iza vrednosti polja + Biće umetnuto ispred vrednosti polja + Mala slova + Nema + Izlazni uzorak + Umetnuti nakon polja + Umetnuti ispred polja + Rekurzivno + Da, neka bude rekurzivno + Standardna polja + Velika slova + Kodirati kao URL + Formatirati će posebne znakove u URL-ovima + Koristit će se samo kada su vrijednosti polja iznad prazne + Ovo polje će se koristiti samo ako je primarno polje prazno + Datum i vrijeme + + + Detalji prijevoda + Preuzmi XML DTD + Polja + Uključi podstranice + + Nije pronađen nijedan korisnik prevodioca. Molimo kreirajte korisnika prevodioca prije nego počnete slati + sadržaj u prijevod + + Stranica '%0%' je poslana na prijevod + Pošaljite stranicu '%0%' u prijevod + Ukupno riječi + Prevedi na + Prevod završen. + Možete pregledati stranice koje ste upravo preveli klikom ispod. Ako je + originalna stranica je pronađena, dobićete poređenje 2 stranice. + + Prevod nije uspio, XML datoteka je možda oštećena + Opcije prevođenja + Prevodilac + Uvezite XML prijevod + + + Sadržaj + Predlošci sadržaja + Mediji + Pretraživač keša + Kanta za smeće + Kreirani paketi + Tipovi podataka + Riječnik + Instalirani paketi + Instaliraj skin + Instaliraj početnički kit + Jezici + Instaliraj lokalni paket + Makroi + Tipovi medija + Članovi + Grupe članova + Uloge članova + Tipovi članova + Tipovi dokumenata + Tipovi relacija + Paketi + Paketi + Parcijalni pogledi + Parcijalni pregledi makro fajlova + Instaliraj iz repozitorija + Instaliraj Runway + Runway moduli + Skripte + Skripte + Stilovi + Predlošci + Log preglednik + Korisnici + Postavke + Predložak + Treća strana + + + Novo ažuriranje spremno + %0% je spremno, kliknite ovdje za preuzimanje + Nema konekcije sa serverom + Greška pri provjeri ažuriranja. Molimo pregledajte log za dodatne informacije + + + Pristup + Na osnovu dodijeljenih grupa i početnih čvorova, korisnik ima pristup sljedećim čvorovima + + Dodijeli pristup + Administrator + Polje kategorije + Korisnik kreiran + Promijeni lozinku + Promijeni sliku + Nova lozinka + Najmanje %0% znakova! + Trebalo bi biti najmanje %0% specijalnih znakova. + nije zaključan + Lozinka nije promijenjena + Potvrdite novu lozinku + Možete promijeniti lozinku za pristup Umbraco backofficeu popunjavanjem + izađite iz donjeg obrasca i kliknite na dugme 'Promijeni lozinku' + + Kanal sadržaja + Kreirajte drugog korisnika + Kreirajte nove korisnike da im date pristup Umbraco. Kada se novom korisniku kreira lozinka + će biti generisano koje možete podijeliti s korisnikom. + + Polje za opis + Onemogući korisnika + Tip dokumenta + Urednik + Obavezno - unesite email adresu za ovog korisnika + Polje izvoda + Neuspjeli pokušaji prijave + Idite na korisnički profil + Dodajte grupe za dodjelu pristupa i dozvola + Pozovite drugog korisnika + Pozovite nove korisnike da im daju pristup Umbraco. E-mail sa pozivom će biti poslan na + korisnik s informacijama o tome kako se prijaviti na Umbraco. Pozivnice traju 72 sata. + + Jezik + Podesite jezik koji ćete videti u menijima i dijalozima + Zadnji datum zaključavanja + Zadnja prijava + Lozinka zadnji put promijenjena + Korisničko ime + Medijski startni čvor + Ograničite biblioteku medija na određeni početni čvor + Medijski startni čvorovi + Ograničite biblioteku medija na određene početne čvorove + Sekcije + Obavezno - unesite ime za ovog korisnika + Onemogućite pristup Umbraco-u + se još nije prijavio + Stara lozinka + Lozinka + Reset lozinke + Vaša lozinka je promijenjena! + Lozinka je promijenjena + Molimo potvrdite novu lozinku + Unesite novu lozinku + Vaša nova lozinka ne može biti prazna! + Trenutna lozinka + Nevažeća trenutna lozinka + Postojala je razlika između nove lozinke i potvrđene lozinke. Molim te + pokušaj ponovo! + + Potvrđena lozinka ne odgovara novoj lozinki! + Zamijenite dozvole podređenog čvora + Trenutno mijenjate dozvole za stranice: + Odaberite stranice da promijenite njihove dozvole + Ukloni sliku + Zadane dozvole + Detaljne dozvole + Postavite dozvole za određene čvorove + Profil + Pretražite svu djecu + Ograničite jezike kojima korisnici imaju pristup za uređivanje + Dodajte odjeljke da korisnicima omogućite pristup + Odaberite grupe korisnika + Nije odabran početni čvor + Nije odabran nijedan početni čvor + Početni čvor sadržaja + Ograničite stablo sadržaja na određeni početni čvor + Početni čvorovi sadržaja + Ograničite stablo sadržaja na određene početne čvorove + Korisnik zadnji put ažuriran + je kreiran + Novi korisnik je uspješno kreiran. Za prijavu na Umbraco koristite + lozinka ispod. + + Upravljanje korisnicima + Korisničko ime + Korisničke dozvole + Grupa korisnika + je pozvan + Novom korisniku je poslana pozivnica s detaljima o tome kako se prijaviti + Umbraco. + + Pozdrav i dobrodošli u Umbraco! Za samo 1 minut možete krenuti, mi + samo trebate postaviti lozinku i dodati sliku za svoj avatar. + + Dobrodošli u Umbraco! Nažalost, vaš poziv je istekao. Molimo kontaktirajte svoju + administratora i zamolite ih da ga ponovo pošalju. + + Ako otpremite svoju fotografiju, drugi korisnici će ga lako prepoznati + ti. Kliknite na krug iznad da otpremite svoju fotografiju. + + Pisac + Promjena + Vaš profil + Vaša nedavna istorija + Sesija ističe za + Pozovi korisnika + Kreiraj korisnika + Pošalji pozivnicu + Nazad na korisnike + Umbraco: Pozivnica + + + + + + + + + + + +
+ + + + + +
+ +
+ +
+
+ + + + + + +
+
+
+ + + + +
+ + + + +
+

+ Zdravo %0%, +

+

+ Pozvani ste od %1% u Umbraco Back Office. +

+

+ Poruka od %1%: +
+%2% +

+ + + + + + +
+ + + + + + +
+ + Kliknite na ovaj link da prihvatite pozivnicu + +
+
+

Ukoliko ne možete kliknuti na link, kopirajte i zalijepite ovaj URL u prozor vašeg pretraživača:

+ + + + +
+ +%3% + +
+

+
+
+


+
+
+ +]]>
+ Ponovno slanje pozivnice... + Izbriši korisnika + Jeste li sigurni da želite izbrisati ovaj korisnički račun? + Sve + Aktivan + Onemogućen + Zaključan + Odobren + Pozvan + Neaktivan + Ime (A-Z) + Ime (Z-A) + Najnovije + Najstarije + Zadnja prijava + Nijedna korisnička grupa nije dodana + Ako želite da onemogućite ovog dvofaktorskog provajdera, onda morate uneti kod prikazan na vašem uređaju za autentifikaciju: + Ovaj dvofaktorski provajder je omogućen + Ovaj dvofaktorski provajder je sada onemogućen + Nešto je pošlo po zlu s pokušajem da se onemogući ovaj dvofaktorski provajder + Želite li onemogućiti ovog dvofaktorskog provajdera za ovog korisnika? + + + Validacija + Nema validacije + Potvrdi kao adresu e-pošte + Potvrdite kao broj + Potvrdi kao URL + ...ili unesite prilagođenu validaciju + Polje je obavezno + Unesite prilagođenu poruku o grešci validacije (opcionalno) + Unesite regularni izraz + Unesite prilagođenu poruku o grešci validacije (opcionalno) + Morate dodati barem + Samo možeš imati + Dodajte do + stavke + URL-ovi + Odabrani URL-ovi + odabrane stavke + Nevažeći datum + Nije broj + Nije važeća brojčana veličina koraka + Nevažeći email + Vrijednost ne može biti null + Vrijednost ne može biti prazna + Vrijednost je nevažeća, ne odgovara ispravnom uzorku + Prilagođena validacija + %1% više.]]> + %1% previše.]]> + Zahtjevi za količinu sadržaja nisu ispunjeni za jedno ili više područja. + + + + Vrijednost je postavljena na preporučenu vrijednost: '%0%'. + Očekivana vrijednost '%1%' za '%2%' u konfiguracijskoj datoteci '%3%', ali + pronađeno '%0%'. + + Pronađena neočekivana vrijednost '%0%' za '%2%' u konfiguracijskoj datoteci '%3%'. + + + Makro greške su postavljene na '%0%'. + Greške makroa su postavljene na '%0%' što će spriječiti potpuno učitavanje nekih ili svih stranica + na vašem sajtu ako postoje greške u makroima. Ako ovo ispravite, vrijednost će biti postavljena na '%1%'. + + + + Certifikat Vaše web stranice je važeći. + Greška u validaciji certifikata: '%0%' + SSL certifikat vaše web stranice je istekao. + SSL certifikat vaše web stranice ističe za %0% dana. + Greška pri pingovanju URL-a %0% - '%1%' + Trenutno %0% pregledavate stranicu koristeći HTTPS šemu. + AppSetting 'Umbraco:CMS:Global:UseHttps' je postavljen na 'false' u + vašem appSettings.json fajl. Jednom kada pristupite ovoj stranici koristeći HTTPS šemu, to bi trebalo biti postavljeno na 'true'. + + Postavka aplikacije 'Umbraco:CMS:Global:UseHttps' je postavljena na '%0%' u vašem + appSettings.json datoteku, vaši kolačići su %1% označeni kao sigurni. + + + Način kompilacije otklanjanja grešaka je onemogućen. + Način kompilacije za otklanjanje grešaka je trenutno omogućen. Preporučuje se da se + onemogućite ovu postavku prije emitiranja uživo. + + + + + %0%.]]> + AppSetting 'Umbraco:CMS:WebRouting:UmbracoApplicationUrl' nije postavljen. + + X-Frame-Options koji se koristi za kontrolu da li neko mjesto može biti IFRAMED od strane drugog je pronađen.]]> + + X-Frame-Options koji se koristi za kontrolu da li neko mjesto može biti IFRAMED od strane drugog nije pronađen.]]> + + X-Content-Type-Options koji se koristi za zaštitu od ranjivosti MIME sniffinga je pronađen.]]> + + X-Content-Type-Options koji se koristi za zaštitu od ranjivosti MIME sniffinga nije pronađen.]]> + + Strict-Transport-Security, takođe poznat kao HSTS-header, je pronađen.]]> + + Strict-Transport-Security nije pronađeno.]]> + + Strict-Transport-Security, takođe poznat kao HSTS-header, je pronađen. Ovo zaglavlje ne bi trebalo biti prisutno na lokalnom hostu.]]> + + + Strict-Transport-Security nije pronađeno. Ovo zaglavlje ne bi trebalo biti prisutno na lokalnom hostu.]]> + + X-XSS-Protection je pronađeno.]]> + + X-XSS-Protection nije pronađeno.]]> + + + %0%.]]> + Nisu pronađena zaglavlja koja otkrivaju informacije o tehnologiji web stranice. + + U datoteci Web.config, system.net/mailsettings nije moguće pronaći. + U datoteci Web.config, system.net/mailsettings, host + nije konfigurisan. + + SMTP postavke su ispravno konfigurisane i usluga radi + kao što je očekivano. + + SMTP server konfigurisan sa hostom '%0%' i portom '%1%' ne može biti + dosegnut. Provjerite jesu li SMTP postavke u datoteci Web.config, system.net/mailsettings ispravne. + + + %0%.]]> + + %0%.]]> + +

Rezultati zakazanih Umbraco provjera zdravlja koji se pokreću na %0% na %1% su sljedeći:

%2%]]>
+ Status provjere zdravlja Umbraco: %0% + Provjerite grupu + + Provjera zdravlja procjenjuje različita područja vaše web lokacije u pogledu postavki najbolje prakse, konfiguracije, potencijalnih problema itd. Možete jednostavno riješiti probleme pritiskom na dugme. + Možete dodati svoje zdravstvene preglede, pogledajte dokumentaciju za više informacija o prilagođenim zdravstvenim pregledima.

+ ]]> +
+ + + Onemogući URL tragač + Omogući URL tragač + Originalni URL + Preusmjeri na + Preusmjeravanje URL-ova + Sljedeći URL-ovi preusmjeravaju na ovu stavku sadržaja: + Nisu napravljena nikakva preusmjeravanja + Kada se objavljena stranica preimenuje ili premjesti, preusmjeravanje će automatski biti + napravljen na novu stranicu. + + Preusmjeravanje uklonjeno. + Greška pri uklanjanju preusmjeravanja. + Ovo će ukloniti preusmjeravanje + Jeste li sigurni da želite onemogućiti URL tragač? + URL tragač je sada onemogućen. + Greška pri onemogućavanju URL tragača, više informacija možete pronaći u vašem log fajlu. + URL tragač je sada omogućen. + Greška pri omogućavanju URL tragača, više informacija možete pronaći u vašem log fajlu. + + + Nema stavki iz rječnika za odabir + + + %0% preostalih znakova.]]> + %1% previše.]]> + + + Sadržaj u otpadu s ID-om: {0} povezan je s originalnim nadređenim sadržajem s ID-om: {1} + Medij u otpadu s ID-om: {0} povezan je s originalnim nadređenim medijem s ID-om: {1} + Nije moguće automatski vratiti ovu stavku + Ne postoji lokacija na kojoj se ova stavka može automatski vratiti. Vi + može ručno premjestiti stavku koristeći stablo ispod. + + je restauriran pod + + + Smjer + Roditelj djetetu + Bidirectional + Roditelj + Dijete + Broj + Relacija + Relacije + Kreirano + Komentar + Naziv + Nema relacija za ovu vrstu odnosa + Tip relacije + Relacije + Je zavisan + Da + Ne + + + Početak rada + Preusmjeravanje URL-ova + Sadržaj + Dobrodošli + Examine menadžment + Status stranice + Generator modela + Provjera zdravlja + Profilisanje + Početak rada + Instaliraj Umbraco Forms + + + Vrati se + Aktivan raspored: + Skoči na + grupa + prošao + upozorenje + neuspješno + prijedlog + Provjera prošla + Provjera nije uspjela + Otvorite backoffice pretragu + Otvori/Zatvori pomoć za backoffice + Opcije otvaranja/zatvaranja profila + Postavite kulturu i imena hostova za %0% + Kreirajte novi čvor ispod %0% + Postavite ograničenja pristupa uključena %0% + Dozvole za postavljanje su uključene %0% + Promijenite redoslijed sortiranja za %0% + Kreirajte predložak sadržaja na osnovu %0% + Otvorite kontekstni meni za + Trenutni jezik + Prebaci jezik na + Kreirajte novi folder + Parcijalni pogled + Makro za djelomični prikaz + Član + Tip podatka + Pretražite kontrolnu tablu za preusmjeravanje + Pretražite odjeljak korisničke grupe + Pretražite odjeljak korisnika + Kreiraj stavku + Kreiraj + Uredi + Naziv + Dodaj novi red + Pogledajte više opcija + Pogledajte više opcija + Potražite čvorove sadržaja, medijske čvorove itd. u backofficeu. + Kada su dostupni rezultati autodovršavanja, pritisnite strelice gore i dolje ili koristite + taster tab i koristite taster enter da izaberete. + + Putanja: + Pronađeno u + Ima prevod + Nedostaje prijevod + Stavke iz rječnika + Odaberite jednu od opcija za uređivanje čvora. + Izvršite akciju %0% na čvoru %1%. + Dodajte natpis slike + Pretraži stablo sadržaja + Maksimalni iznos + + + Reference + Ovaj tip podataka nema reference. + Ova stavka nema reference. + Koristi se u tipovima dokumenata + Koristi se u tipovima medija + Koristi se u tipovima članova + Koristi + Stavke u upotrebi + Potomci u upotrebi + Ova stavka ili njeni potomci se koriste. Brisanje može dovesti do neispravnih veza na vašoj web stranici. + Ova stavka ili njeni potomci se koriste. Poništavanje objavljivanja može dovesti do neispravnih veza na vašoj web stranici. Molimo poduzmite odgovarajuće radnje. + Ova stavka ili njeni potomci se koriste. Stoga je brisanje onemogućeno. + Sljedeće stavke koje pokušavate %0% koriste drugi sadržaj. + + + Izbriši sačuvane pretrage + Nivoi loga + Označi sve + Odznači sve + Sačuvane pretrage + Sačuvaj pretragu + Unesite prijateljski naziv za vaš upit za pretragu + Filtriraj pretragu + Ukupno + Vrijeme + Nivo + Uređaj + Poruka + Izuzetak + Svojstva + Pretraži pomoću Google-a + Pretraži ovu poruku pomoću Google-a + Pretraži pomoću Bing-a + Pretraži ovu poruku pomoću Bing-a + Pretraži Our Umbraco + Pretraži ovu poruku na Our Umbraco forumu i dokumentaciji + Pretraži Our Umbraco pomoću Google-a + Pretraži Our Umbraco forume pomoću Google-a + Pretraži Umbraco Source + Pretraži Umbraco source code on Github-u + Pretraži Umbraco Issues + Pretraži Umbraco Issues na Github-u + Obriši ovu pretragu + Pronađi logove sa ID-om zatjeva + Pronađi logove sa namespace-om + Pronađi logove sa nazivom uređaja + Otvori + Provjera + Svako 2 sekunde + Svako 5 sekundi + Svako 10 sekundi + Svako 20 sekundi + Svako 30 sekundi + Provjera svako 2s + Provjera svako 5s + Provjera svako 10s + Provjera svako 20s + Provjera svako 30s + + + Kopiraj %0% + %0% od %1% + Zbirka od %0% + Uklonite sve stavke + Očisti međuspremnik + + + Otvorite radnje svojstva + Zatvorite Property Actions + + + Osvježi status + Memorijski keš + + + + Ponovo učitaj + Keš baze podataka + + Obnova može biti skupa. + Koristite ga kada ponovno učitavanje nije dovoljno, a mislite da keš baze podataka nije bio + pravilno generisan—što bi ukazivalo na neko kritično pitanje Umbraco. + ]]> + + Ponovo sagradi + Unutrašnjost + + ne morate koristiti. + ]]> + + Skupiti + Objavljeni status keša + Predmemorije + + + Profiliranje performansi + + + Umbraco trenutno radi u načinu za otklanjanje grešaka. To znači da možete koristiti ugrađeni profiler performansi za procjenu performansi prilikom renderiranja stranica. +

+

+ Ako želite da aktivirate profiler za određeno prikazivanje stranice, jednostavno dodajte umbDebug=true na string upita kada tražite stranicu. +

+

+ Ako želite da se profilator aktivira prema zadanim postavkama za sve prikaze stranica, možete koristiti prekidač ispod. + On će postaviti kolačić u vaš pretraživač, koji zatim automatski aktivira profiler. + Drugim riječima, profiler će biti aktivan samo po defaultu u vašen pretraživaču - ne svačijem drugom. +

+ ]]> +
+ Podrazumevano aktivirajte profiler + Prijateljski podsjetnik + + + Nikada ne biste trebali dozvoliti da proizvodna lokacija radi u načinu za otklanjanje grešaka. Režim za otklanjanje grešaka se isključuje podešavanjem Umbraco:CMS:Hosting:Debug na false u appsettings.json, appsettings.{Environment}.json ili preko varijable okruženja. +

+ ]]> +
+ + + Umbraco trenutno ne radi u načinu za otklanjanje grešaka, tako da ne možete koristiti ugrađeni profiler. Ovako bi trebalo da bude za proizvodnu lokaciju. +

+

+ Režim za otklanjanje grešaka se uključuje podešavanjem Umbraco:CMS:Hosting:Debug na true u appsettings.json, appsettings.{Environment}.json ili preko varijable okruženja. +

+ ]]> +
+ + + Sati Umbraco trening videa udaljeni su samo jedan klik + + Želite savladati Umbraco? Provedite nekoliko minuta učeći neke najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a. I posjetite umbraco.tv za još više Umbraco videa

+ ]]> +
+ + Želite savladati Umbraco? Provedite nekoliko minuta učeći neke najbolje prakse gledajući jedan od ovih videozapisa o korištenju Umbraco-a Umbraco Learning Base Youtube kanal. Ovdje možete pronaći gomilu video materijala koji pokriva mnoge aspekte Umbraco-a.

+ ]]> +
+ Za početak + + + Počni ovdje + Ovaj odjeljak sadrži blokove za izgradnju vaše Umbraco stranice. Slijedite dolje + veze da saznate više o radu sa stavkama u odjeljku Postavke + + Saznajte više + + u odjeljku Dokumentacija na Our Umbraco + ]]> + + + Forumu zajednice + ]]> + + + video tutorijale na Umbraco Learning Base + ]]> + + + alatima za povećanje produktivnosti i komercijalna podrška + ]]> + + + obuke i certifikacije + ]]> + + + + Dobrodošli u The Friendly CMS + Hvala vam što ste odabrali Umbraco - mislimo da bi ovo mogao biti početak nečega + predivno. Iako se u početku može činiti neodoljivim, učinili smo mnogo da kriva učenja bude što glatka i brza + što je moguće. + + + + Umbraco Forms + Kreirajte obrasce pomoću intuitivnog drag and drop interfejsa. Od jednostavnih kontakt obrazaca + koji šalje e-mail do naprednih obrazaca koji se integrišu sa CRM sistemima. Vašim klijentima će se svidjeti! + + + + Odaberite tip elementa + Priložite postavke na tip elementa + Odaberite prikaz + Odaberite stil + Odaberite sličicu + Kreirajte novi tip elementa + Prilagođeni stil + Dodaj stil + Izgled bloka + Modeli podataka + Izgled kataloga + Boja pozadine + Boja ikone + Model sadržaja + Labela + Prilagođeni prikaz + Prikaži opis prilagođenog prikaza + Zamenite način na koji se ovaj blok pojavljuje u korisničkom sučelju backofficea. Odaberite .html datoteku + koji sadrži vašu prezentaciju. + + Model postavki + Veličina uređivača preklapanja + Dodaj prilagođeni prikaz + Dodaj postavke + + %0%?]]> + + %0%?]]> + Sadržaj ovog bloka će i dalje biti prisutan, uređivanje ovog sadržaja + više neće biti dostupan i bit će prikazan kao nepodržani sadržaj. + + + %0% i sve konfiguracije ovog bloka?]]> + Sadržaj ovih blokova će i dalje biti prisutan, uređivanje ovog sadržaja + više neće biti dostupan i bit će prikazan kao nepodržani sadržaj. + + + Ne može se uređivati jer tip elementa ne postoji. + Sličica + Dodaj sličicu + Kreiraj prazno + Međuspremnik + Postavke + Napredno + Sakrij uređivač sadržaja + Sakrijte dugme za uređivanje sadržaja i uređivač sadržaja iz preklapanja Block Editor. + Inline editovanje + Omogućava inline uređivanje za prvo svojstvo. Dodatna svojstva se mogu uređivati u prekrivaču. + Izmijenili ste ovaj sadržaj. Jeste li sigurni da ih želite odbaciti? + Odbaciti kreiranje? + + Greška! + Tip elementa ovog bloka više ne postoji + Dodaj sadržaj + Dodaj %0% + Svojstvo '%0%' koristi uređivač '%1%' koji nije podržan u blokovima. + Postavite fokus na blok kontejnera + Identifikacija + Validacija + %0% mora biti prisutan barem %2% puta.]]> + %0% mora biti maksimalno prisutan %3% puta.]]> + Broj blokova + Dozvolite samo određene tipove blokova + Dozvoljene vrste blokova + Definirajte tipove blokova koji su dozvoljeni u ovoj oblasti i opciono koliko svakog tipa treba biti prisutan. + Jeste li sigurni da želite izbrisati ovo područje? + Svi blokovi koji su trenutno kreirani unutar ovog područja bit će obrisani. + Opcije rasporeda + Strukturno + Opcije veličine + Definirajte jednu ili više opcija veličine, ovo omogućava promjenu veličine bloka + Definirajte jednu ili više opcija veličine, ovo omogućava promjenu veličine bloka + Definirajte različit broj kolona preko kojih ovaj blok može da se proteže. Ovo ne sprječava postavljanje blokova u područja s manjim rasponom kolona. + Dostupni rasponi redova + Definirajte raspon redova rasporeda preko kojih se ovaj blok može prostirati. + Dozvolite u korijenu + Učinite ovaj blok dostupnim u korijenu izgleda. + Dozvolite u područjima + Učinite ovaj blok dostupnim prema zadanim postavkama unutar područja drugih blokova (osim ako za ove oblasti nisu postavljene eksplicitne dozvole). + Prema zadanim postavkama, svi tipovi blokova su dozvoljeni u području. Koristite ovu opciju da dozvolite samo odabrane tipove. + Područja + Mrežne kolone za područja + Definirajte koliko će stupaca biti dostupno za područja. Ako nije definiran, koristit će se broj kolona definiranih za cijeli izgled. + Područja + Da biste omogućili ugniježđenje blokova unutar ovog bloka, definirajte jedno ili više područja. Područja slijede raspored definiran njihovom vlastitom konfiguracijom stupca mreže. 'Raspon kolone' i 'raspon reda' za svaku oblast može se podesiti korištenjem okvira za rukovanje skalom u donjem desnom uglu odabranog područja. + %0% nije dozvoljeno na ovom mestu.]]> + Zadani raspored stilova + Nedozvoljeni sadržaj je odbijen + + + + + Povucite za skaliranje + Kreiraj oznaku dugmeta + Nadjačajte tekst oznake za dodavanje novog bloka u ovo područje, primjer: 'Dodaj widget' + Prikaži opcije promjene veličine + Dodaj blok + Dodaj grupu + Odaberi grupu ili blok + Postavite minimalni zahtjev + Postavite maksimalan zahtjev + Blok + Blok + Postavke + Područja + Napredno + Dozvole + Instalirajte uzorak konfiguracije + + Instaliraj + Način sortiranja + Završi način sortiranja + Ovaj pseudonim oblasti mora biti jedinstven u poređenju sa drugim oblastima ovog bloka. + Konfiguriraj područje + Obriši područje + Dodajte opciju raspona %0% kolona + + + Šta su predlošci sadržaja? + Predlošci sadržaja su unaprijed definirani sadržaj koji se može odabrati prilikom kreiranja novog + sadržaj čvora. + + Kako da kreiram predložak sadržaja? + + Postoje dva načina za kreiranje predloška sadržaja:

+
    +
  • Desnom tipkom miša kliknite čvor sadržaja i odaberite "Kreiraj predložak sadržaja" da kreirate novi predložak sadržaja.
  • +
  • Kliknite desnim tasterom miša na stablo predložaka sadržaja u odjeljku Postavke i odaberite vrstu dokumenta za koju želite da kreirate predložak sadržaja.
  • +
+

Nakon što dobiju ime, urednici mogu početi koristiti predložak sadržaja kao osnovu za svoju novu stranicu.

+ ]]> +
+ Kako da upravljam predlošcima sadržaja? + Možete uređivati i brisati predloške sadržaja iz stabla "Šabloni sadržaja" u + odjeljak postavki. Proširite vrstu dokumenta na kojoj se temelji predložak sadržaja i kliknite na nju da biste uredili ili izbrisali to. + + + + Kraj + Završi način pregleda + Pregledajte web stranicu + Otvorite web stranicu u načinu pregleda + Pregledajte web stranicu? + Završili ste način pregleda, želite li ga ponovo omogućiti da vidite + najnovija sačuvana verzija vaše web stranice? + + Pregledajte najnoviju verziju + Pogledajte objavljenu verziju + Pogledajte objavljenu verziju? + Nalazite se u načinu pregleda, želite li izaći da biste vidjeli + objavljena verzija Vaše web stranice? + + Pogledajte objavljenu verziju + Ostanite u načinu pregleda + + + Kreiranje foldera + Pisanje datoteka za pakete + Pisanje fajlova + Kreiranje medijskog foldera + + + stavka vraćena + stavke vraćene + +
diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index 3e6ca2f8a0..8fce72a14c 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -1329,7 +1329,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Likes Compatibility This package is compatible with the following versions of Umbraco, as - reported by community members. Full compatability cannot be guaranteed for versions reported below 100% + reported by community members. Full compatibility cannot be guaranteed for versions reported below 100% External sources Author @@ -1538,7 +1538,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Property type already exists Property type created DataType: %1%]]> - Propertytype deleted + Property type deleted Document Type saved Tab created Tab deleted @@ -2773,7 +2773,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont Set focus on the container block Identification Validation - %0% must be present atleast %2% time(s).]]> + %0% must be present at least %2% time(s).]]> %0% must maximum be present %3% time(s).]]> Number of blocks Only allow specific block types From 154021801eaf44af5ac6d6bed5bfbfa5570608d9 Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Wed, 22 Feb 2023 14:54:47 +0100 Subject: [PATCH 72/96] Reset selected index/searcher (#13866) (cherry picked from commit 62fdbd159c5b3788302fd6a74be323f7ffff587c) --- .../views/dashboard/settings/examinemanagement.controller.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js index cff40baf45..9588dea6eb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/dashboard/settings/examinemanagement.controller.js @@ -85,9 +85,11 @@ function ExamineManagementController($http, $q, $timeout, umbRequestHelper, loca function nextSearchResultPage(pageNumber) { search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } + function prevSearchResultPage(pageNumber) { search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } + function goToPageSearchResultPage(pageNumber) { search(vm.selectedIndex ? vm.selectedIndex : vm.selectedSearcher, null, pageNumber); } @@ -137,11 +139,13 @@ function ExamineManagementController($http, $q, $timeout, umbRequestHelper, loca } function showIndexInfo(index) { + vm.selectedSearcher = null; vm.selectedIndex = index; setViewState("index-details"); } function showSearcherInfo(searcher) { + vm.selectedIndex = null; vm.selectedSearcher = searcher; setViewState("searcher-details"); } From 273e7708e55214fc23c9b9b779007bd287c8b2ef Mon Sep 17 00:00:00 2001 From: Menno Mout <77411834+mennomout@users.noreply.github.com> Date: Sun, 26 Feb 2023 14:00:28 +0100 Subject: [PATCH 73/96] Listview batch publishing on multi language site, publishes all variants #13755 - Fix (#13772) * Modified PostPublishById to handle content that is culture variant. Added model and modified the javascript function that call the api endpoint. * Added separate method for publishing with cultures. Added if else statment to js function. * Moved check for all cultures being published to the top of PostPublishByIdAndCulture. Added parameter to ngDoc. Added Where Query. (cherry picked from commit 37db3ae3da0d0d7e65c78857c615caa953ad7898) --- .../Models/ContentEditing/PublishContent.cs | 16 ++++++ .../Controllers/ContentController.cs | 55 ++++++++++++++++++- .../src/common/resources/content.resource.js | 29 ++++++---- 3 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 src/Umbraco.Core/Models/ContentEditing/PublishContent.cs diff --git a/src/Umbraco.Core/Models/ContentEditing/PublishContent.cs b/src/Umbraco.Core/Models/ContentEditing/PublishContent.cs new file mode 100644 index 0000000000..ba6d8d2f6f --- /dev/null +++ b/src/Umbraco.Core/Models/ContentEditing/PublishContent.cs @@ -0,0 +1,16 @@ +using System.Runtime.Serialization; + +namespace Umbraco.Cms.Core.Models.ContentEditing; + +/// +/// Used to publish content and variants +/// +[DataContract(Name = "publish", Namespace = "")] +public class PublishContent +{ + [DataMember(Name = "id")] + public int Id { get; set; } + + [DataMember(Name = "cultures")] + public string[]? Cultures { get; set; } +} diff --git a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs index c9bc07457a..944068114a 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs @@ -168,8 +168,8 @@ public class ContentController : ContentControllerBase authorizationService, contentVersionService, StaticServiceProvider.Instance.GetRequiredService()) - { - } + { + } public object? Domains { get; private set; } @@ -1950,6 +1950,7 @@ public class ContentController : ContentControllerBase } PublishResult publishResult = _contentService.SaveAndPublish(foundContent, userId: _backofficeSecurityAccessor.BackOfficeSecurity?.GetUserId().Result ?? 0); + if (publishResult.Success == false) { var notificationModel = new SimpleNotificationModel(); @@ -1960,6 +1961,56 @@ public class ContentController : ContentControllerBase return Ok(); } + /// + /// Publishes a document with a given ID and cultures. + /// + /// + /// + /// + /// The EnsureUserPermissionForContent attribute will deny access to this method if the current user + /// does not have Publish access to this node. + /// + [Authorize(Policy = AuthorizationPolicies.ContentPermissionPublishById)] + public IActionResult PostPublishByIdAndCulture(PublishContent model) + { + var languageCount = _allLangs.Value.Count(); + + // If there is no culture specified or the cultures specified are equal to the total amount of languages, publish the content in all cultures. + if (model.Cultures == null || !model.Cultures.Any() || model.Cultures.Length == languageCount) + { + return PostPublishById(model.Id); + } + + IContent? foundContent = GetObjectFromRequest(() => _contentService.GetById(model.Id)); + + if (foundContent == null) + { + return HandleContentNotFound(model.Id); + } + + var results = new Dictionary(); + + foreach (var culture in model.Cultures) + { + PublishResult publishResult = _contentService.SaveAndPublish(foundContent, culture, _backofficeSecurityAccessor.BackOfficeSecurity?.GetUserId().Result ?? 0); + results[culture] = publishResult; + } + + if (results.Any(x => x.Value.Success == false)) + { + var notificationModel = new SimpleNotificationModel(); + + foreach (var culture in results.Where(x => x.Value.Success == false)) + { + AddMessageForPublishStatus(new[] { culture.Value }, notificationModel); + } + + return ValidationProblem(notificationModel); + } + + return Ok(); + } + [HttpDelete] [HttpPost] public IActionResult DeleteBlueprint(int id) diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js index 7e6c6658e5..b3218b2c7f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js @@ -278,7 +278,8 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { * alert("node wasnt unpublished:" + err.data.Message); * }); * - * @param {Int} id the ID of the node to unpublish + * @param {Int} id the ID of the node to unpublish. + * @param {array} cultures the cultures to unpublish. * @returns {Promise} resourcePromise object. * */ @@ -1086,23 +1087,31 @@ function contentResource($q, $http, umbDataFormatter, umbRequestHelper) { * * * @param {Int} id The ID of the conten to publish + * @param {array} cultures the cultures to publish. * @returns {Promise} resourcePromise object containing the published content item. * */ - publishById: function (id) { - + publishById: function (id, cultures) { if (!id) { throw "id cannot be null"; } - return umbRequestHelper.resourcePromise( - $http.post( + if (!cultures) { + return umbRequestHelper.resourcePromise( + $http.post( umbRequestHelper.getApiUrl( - "contentApiBaseUrl", - "PostPublishById", - [{ id: id }])), - 'Failed to publish content with id ' + id); - + "contentApiBaseUrl", + "PostPublishById"), { id: id }), + 'Failed to publish content with id ' + id); + } + else { + return umbRequestHelper.resourcePromise( + $http.post( + umbRequestHelper.getApiUrl( + "contentApiBaseUrl", + "PostPublishByIdAndCulture"), { id: id, cultures: cultures }), + 'Failed to publish content with id ' + id); + } }, /** From 180fae342e9fdbe775f3ff13a2b6122b8c624e30 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 16 Mar 2023 20:32:54 +0100 Subject: [PATCH 74/96] Revert breaking changes from #13936 and remove CompatibilitySuppressions.xml (#13979) * Revert breaking changes introduced by PR #13936 * Update PackageValidationBaselineVersion to 11.0.0 (stable version) and remove all CompatibilitySuppressions.xml files * Fix build pipeline (pack solution again, avoiding trying to pack template projects) --- Directory.Build.props | 2 +- build/azure-pipelines.yml | 9 +-- .../CompatibilitySuppressions.xml | 73 ------------------- src/Umbraco.Core/Constants-HealthChecks.cs | 2 + .../Checks/Security/BaseHttpHeaderCheck.cs | 18 ++++- .../Checks/Security/XssProtectionCheck.cs | 2 +- .../CompatibilitySuppressions.xml | 45 ------------ 7 files changed, 21 insertions(+), 130 deletions(-) delete mode 100644 src/Umbraco.Core/CompatibilitySuppressions.xml delete mode 100644 src/Umbraco.Infrastructure/CompatibilitySuppressions.xml diff --git a/Directory.Build.props b/Directory.Build.props index 37b2e66977..01cd3b1064 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -31,7 +31,7 @@ false true - 11.0.0-rc1 + 11.0.0 true true diff --git a/build/azure-pipelines.yml b/build/azure-pipelines.yml index 56e6dccc1b..97e0a10f9c 100644 --- a/build/azure-pipelines.yml +++ b/build/azure-pipelines.yml @@ -86,10 +86,10 @@ stages: arguments: '--configuration $(buildConfiguration) --no-restore -p:ContinuousIntegrationBuild=true' - script: | version="$(Build.BuildNumber)" - echo "varsion: $version" + echo "Version: $version" major="$(echo $version | cut -d '.' -f 1)" - echo "major version: $major" + echo "Major version: $major" echo "##vso[task.setvariable variable=majorVersion;isOutput=true]$major" displayName: Set major version @@ -110,10 +110,7 @@ stages: } } - foreach($csproj in Get-ChildItem -Recurse -Filter *.csproj) - { - dotnet pack $csproj --configuration $(buildConfiguration) --no-build --output $(Build.ArtifactStagingDirectory)/nupkg - } + dotnet pack $(solution) --configuration $(buildConfiguration) --no-build --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg - script: | sha="$(Build.SourceVersion)" sha=${sha:0:7} diff --git a/src/Umbraco.Core/CompatibilitySuppressions.xml b/src/Umbraco.Core/CompatibilitySuppressions.xml deleted file mode 100644 index f580fa9458..0000000000 --- a/src/Umbraco.Core/CompatibilitySuppressions.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.get_ForceLeft - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.get_ForceRight - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.set_ForceLeft(System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.set_ForceRight(System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IDataTypeConfigurationConnector.FromArtifact(Umbraco.Cms.Core.Models.IDataType,System.String,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IDataTypeConfigurationConnector.ToArtifact(Umbraco.Cms.Core.Models.IDataType,System.Collections.Generic.ICollection{Umbraco.Cms.Core.Deploy.ArtifactDependency},Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IServiceConnector.GetArtifact(System.Object,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IServiceConnector.GetArtifact(Umbraco.Cms.Core.Udi,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IValueConnector.FromArtifact(System.String,Umbraco.Cms.Core.Models.IPropertyType,System.Object,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IValueConnector.ToArtifact(System.Object,Umbraco.Cms.Core.Models.IPropertyType,System.Collections.Generic.ICollection{Umbraco.Cms.Core.Deploy.ArtifactDependency},Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - \ No newline at end of file diff --git a/src/Umbraco.Core/Constants-HealthChecks.cs b/src/Umbraco.Core/Constants-HealthChecks.cs index 875f86cb4c..ffc1965199 100644 --- a/src/Umbraco.Core/Constants-HealthChecks.cs +++ b/src/Umbraco.Core/Constants-HealthChecks.cs @@ -45,6 +45,8 @@ public static partial class Constants public const string ClickJackingCheck = "https://umbra.co/healthchecks-click-jacking"; public const string HstsCheck = "https://umbra.co/healthchecks-hsts"; public const string NoSniffCheck = "https://umbra.co/healthchecks-no-sniff"; + [Obsolete("This link is not used anymore in the XSS protected check.")] + public const string XssProtectionCheck = "https://umbra.co/healthchecks-xss-protection"; public const string ExcessiveHeadersCheck = "https://umbra.co/healthchecks-excessive-headers"; public static class HttpsCheck diff --git a/src/Umbraco.Core/HealthChecks/Checks/Security/BaseHttpHeaderCheck.cs b/src/Umbraco.Core/HealthChecks/Checks/Security/BaseHttpHeaderCheck.cs index 40c5c0d87a..138ba87789 100644 --- a/src/Umbraco.Core/HealthChecks/Checks/Security/BaseHttpHeaderCheck.cs +++ b/src/Umbraco.Core/HealthChecks/Checks/Security/BaseHttpHeaderCheck.cs @@ -13,7 +13,7 @@ namespace Umbraco.Cms.Core.HealthChecks.Checks.Security; ///
public abstract class BaseHttpHeaderCheck : HealthCheck { - private static HttpClient? httpClient; + private static HttpClient? _httpClient; private readonly string _header; private readonly IHostingEnvironment _hostingEnvironment; private readonly string _localizedTextPrefix; @@ -23,13 +23,23 @@ public abstract class BaseHttpHeaderCheck : HealthCheck /// /// Initializes a new instance of the class. /// + [Obsolete("Use constructor that takes all parameters instead.")] + protected BaseHttpHeaderCheck( + IHostingEnvironment hostingEnvironment, + ILocalizedTextService textService, + string header, + string localizedTextPrefix, + bool metaTagOptionAvailable) + : this(hostingEnvironment, textService, header, localizedTextPrefix, metaTagOptionAvailable, false) + { } + protected BaseHttpHeaderCheck( IHostingEnvironment hostingEnvironment, ILocalizedTextService textService, string header, string localizedTextPrefix, bool metaTagOptionAvailable, - bool shouldNotExist = false) + bool shouldNotExist) { LocalizedTextService = textService ?? throw new ArgumentNullException(nameof(textService)); _hostingEnvironment = hostingEnvironment; @@ -45,9 +55,9 @@ public abstract class BaseHttpHeaderCheck : HealthCheck /// /// Gets a link to an external read more page. /// - protected abstract string? ReadMoreLink { get; } + protected abstract string ReadMoreLink { get; } - private static HttpClient HttpClient => httpClient ??= new HttpClient(); + private static HttpClient HttpClient => _httpClient ??= new HttpClient(); /// /// Get the status for this health check diff --git a/src/Umbraco.Core/HealthChecks/Checks/Security/XssProtectionCheck.cs b/src/Umbraco.Core/HealthChecks/Checks/Security/XssProtectionCheck.cs index d218baad8f..6fddb614fd 100644 --- a/src/Umbraco.Core/HealthChecks/Checks/Security/XssProtectionCheck.cs +++ b/src/Umbraco.Core/HealthChecks/Checks/Security/XssProtectionCheck.cs @@ -29,5 +29,5 @@ public class XssProtectionCheck : BaseHttpHeaderCheck } /// - protected override string? ReadMoreLink => null; + protected override string ReadMoreLink => string.Empty; } diff --git a/src/Umbraco.Infrastructure/CompatibilitySuppressions.xml b/src/Umbraco.Infrastructure/CompatibilitySuppressions.xml deleted file mode 100644 index f48f361244..0000000000 --- a/src/Umbraco.Infrastructure/CompatibilitySuppressions.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.get_ForceLeft - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.get_ForceRight - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.set_ForceLeft(System.Boolean) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.set_ForceRight(System.Boolean) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IGridCellValueConnector.GetValue(Umbraco.Cms.Core.Models.GridValue.GridControl,System.Collections.Generic.ICollection{Umbraco.Cms.Core.Deploy.ArtifactDependency},Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IGridCellValueConnector.SetValue(Umbraco.Cms.Core.Models.GridValue.GridControl,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - \ No newline at end of file From 0ce2fdb23b1064b8f3b1c8ef1c7250e803db9a0b Mon Sep 17 00:00:00 2001 From: niekvanderreest Date: Tue, 28 Feb 2023 14:47:53 +0100 Subject: [PATCH 75/96] Change GetMinNonAlphaNumericChars() to return 1 (#13876) (cherry picked from commit 27e38e1606bf7e7e2d61dd77bfda8f1a421a39a8) --- src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs b/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs index 61b284383a..30cbe8a831 100644 --- a/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs +++ b/src/Umbraco.Core/Extensions/PasswordConfigurationExtensions.cs @@ -30,5 +30,5 @@ public static class PasswordConfigurationExtensions }; public static int GetMinNonAlphaNumericChars(this IPasswordConfiguration passwordConfiguration) => - passwordConfiguration.RequireNonLetterOrDigit ? 2 : 0; + passwordConfiguration.RequireNonLetterOrDigit ? 1 : 0; } From d148e93b458f84b652c45ee4847f5b30dd73c3c3 Mon Sep 17 00:00:00 2001 From: mwillebrands Date: Tue, 21 Feb 2023 10:59:13 +0100 Subject: [PATCH 76/96] Fix for #13860 Undefined error when inserting an empty link in the RTE editor (cherry picked from commit 6ce30fb56129f0c42b371ac63a2629d20782226c) # Conflicts: # src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js --- .../src/common/services/tinymce.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index 850a173f8d..afb3fa1e84 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -1253,7 +1253,7 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s // the href might be an external url, so check the value for an anchor/qs // href has the anchor re-appended later, hence the reset here to avoid duplicating the anchor - if (!target.anchor) { + if (!target.anchor && href) { var urlParts = href.split(/(#|\?)/); if (urlParts.length === 3) { href = urlParts[0]; From 84d81b20ef3213fa7c5f8439d889f06ac64707df Mon Sep 17 00:00:00 2001 From: Menno Mout <77411834+mennomout@users.noreply.github.com> Date: Wed, 25 Jan 2023 17:53:53 +0100 Subject: [PATCH 77/96] Added a CalculateMediaStartNodeIds method call when the startNode passed in as parameter is null. When this does return an array of startNodes the first one is being used. The question remains if this is desired behaviour. With this implementation the user has no real control over where the file is going to go. Atleast with this implementation the user can now see the file. (cherry picked from commit ca2378489801d017e4409be6531042e3da6a38e5) --- .../Services/TemporaryMediaService.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/Services/TemporaryMediaService.cs b/src/Umbraco.Core/Services/TemporaryMediaService.cs index 44aa555804..acd8e08fc9 100644 --- a/src/Umbraco.Core/Services/TemporaryMediaService.cs +++ b/src/Umbraco.Core/Services/TemporaryMediaService.cs @@ -1,8 +1,10 @@ -using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Extensions; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Strings; @@ -20,6 +22,8 @@ public class TemporaryMediaService : ITemporaryMediaService private readonly IHostEnvironment _hostingEnvironment; private readonly ILogger _logger; private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; + private readonly IEntityService _entityService; + private readonly AppCaches _appCaches; public TemporaryMediaService( IShortStringHelper shortStringHelper, @@ -29,7 +33,9 @@ public class TemporaryMediaService : ITemporaryMediaService IContentTypeBaseServiceProvider contentTypeBaseServiceProvider, IHostEnvironment hostingEnvironment, ILogger logger, - IBackOfficeSecurityAccessor backOfficeSecurityAccessor) + IBackOfficeSecurityAccessor backOfficeSecurityAccessor, + IEntityService entityService, + AppCaches appCaches) { _shortStringHelper = shortStringHelper; _mediaFileManager = mediaFileManager; @@ -39,21 +45,26 @@ public class TemporaryMediaService : ITemporaryMediaService _hostingEnvironment = hostingEnvironment; _logger = logger; _backOfficeSecurityAccessor = backOfficeSecurityAccessor; + _entityService = entityService; + _appCaches = appCaches; } public IMedia Save(string temporaryLocation, Guid? startNode, string? mediaTypeAlias) { - var userId = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.Id ?? Constants.Security.SuperUserId; + IUser? user = _backOfficeSecurityAccessor?.BackOfficeSecurity?.CurrentUser; + int userId = user?.Id ?? Constants.Security.SuperUserId; var absoluteTempImagePath = _hostingEnvironment.MapPathContentRoot(temporaryLocation); var fileName = Path.GetFileName(absoluteTempImagePath); var safeFileName = fileName.ToSafeFileName(_shortStringHelper); - var mediaItemName = safeFileName.ToFriendlyName(); IMedia mediaFile; + if (startNode is null) { - mediaFile = _mediaService.CreateMedia(mediaItemName, Constants.System.Root, mediaTypeAlias ?? Constants.Conventions.MediaTypes.File, userId); + int[]? userStartNodes = user?.CalculateMediaStartNodeIds(_entityService, _appCaches); + + mediaFile = _mediaService.CreateMedia(mediaItemName, userStartNodes != null && userStartNodes.Any() ? userStartNodes[0] : Constants.System.Root, mediaTypeAlias ?? Constants.Conventions.MediaTypes.File, userId); } else { From 010ea5a2aae4cc50724ce3c03ab6317698e587f1 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Thu, 2 Mar 2023 11:57:43 +0100 Subject: [PATCH 78/96] IsNullOrWhiteSpace Extension method for HtmlEncodedString (#13747) * Add IsNullOrWhiteSpace Extension method IsNullOrWhiteSpace extension method for IHtmlEncodedString * Move extension method * Add a UnitTest for the IsNullOrWhiteSpace extension method * Update unit test (cherry picked from commit 9771e7724346ebc3bf7c9678ee42f1c3a01c9811) --- .../Extensions/HtmlEncodedStringExtensions.cs | 19 ++++++++++++++ .../HtmlEncodedStringExtensionsTests.cs | 26 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs create mode 100644 tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs diff --git a/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs b/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs new file mode 100644 index 0000000000..9af5b25d27 --- /dev/null +++ b/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs @@ -0,0 +1,19 @@ +using System.Diagnostics.CodeAnalysis; +using Umbraco.Cms.Core.Strings; + +namespace Umbraco.Extensions; + +public static class HtmlEncodedStringExtensions +{ + /// + /// Checks if the specified is null or only contains whitespace, optionally after all HTML tags have been stripped/removed. + /// + /// The encoded HTML string. + /// If set to true strips/removes all HTML tags. + /// + /// Returns true if the HTML string is null or only contains whitespace, optionally after all HTML tags have been stripped/removed. + /// + public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this IHtmlEncodedString? htmlEncodedString, bool stripHtml = false) + => (htmlEncodedString?.ToHtmlString() is var htmlString && string.IsNullOrWhiteSpace(htmlString)) || + (stripHtml && string.IsNullOrWhiteSpace(htmlString.StripHtml())); +} diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs new file mode 100644 index 0000000000..4703cebb40 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs @@ -0,0 +1,26 @@ +using Moq; +using NUnit.Framework; +using Umbraco.Cms.Core.Strings; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Extensions; + +[TestFixture] +public class HtmlEncodedStringExtensionsTests +{ + [TestCase(null, false, true)] + [TestCase("", false, true)] + [TestCase(" ", false, true)] + [TestCase("This is a non-empty string", false, false)] + [TestCase("

This is a non-empty string

", true,false)] + [TestCase("

This is a non-empty string

", false,false)] + [TestCase("

", true, true)] + [TestCase("

", false, false)] + public void IsNullOrWhiteSpace(string? htmlString, bool stripHtml, bool expectedResult) + { + var htmlEncodedString = htmlString == null ? null : Mock.Of(x => x.ToHtmlString() == htmlString); + var result = htmlEncodedString.IsNullOrWhiteSpace(stripHtml: stripHtml); + + Assert.AreEqual(expectedResult, result); + } +} From a56a6bae313501cc31bee100a3fa8b99e46fd232 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Thu, 2 Mar 2023 14:23:20 +0100 Subject: [PATCH 79/96] Map BackOfficeNotification in ContentMapDefinitions (#13874) * Map Notifications * Empty line (cherry picked from commit 5158d8119d9b43214fe48553aec3ce19958d0809) --- src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs b/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs index d64d3d297e..28697889e9 100644 --- a/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs +++ b/src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs @@ -162,6 +162,11 @@ internal class ContentMapDefinition : IMapDefinition target.Updater = source.Updater; target.Urls = source.Urls; target.Variants = context.MapEnumerable(source.Variants); + + foreach (BackOfficeNotification backOfficeNotification in source.Notifications) + { + target.Notifications.Add(backOfficeNotification); + } } // Umbraco.Code.MapAll From 458688aed6f14cf7307d1386cd0570165c1d9bff Mon Sep 17 00:00:00 2001 From: Miska Husgafvel Date: Thu, 16 Feb 2023 14:49:26 +0200 Subject: [PATCH 80/96] Ensure cropperHelper.pixelsToCoordinates returns valid coordinates (cherry picked from commit 282b7ac3d59047521ae974327df8e12073229c0c) --- .../src/common/services/cropperhelper.service.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js index 1f860f237c..636134f289 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/cropperhelper.service.js @@ -98,9 +98,8 @@ function cropperHelper(umbRequestHelper, $http) { }, pixelsToCoordinates : function(image, width, height, offset){ - - var x1_px = Math.abs(image.left-offset); - var y1_px = Math.abs(image.top-offset); + var x1_px = Math.abs((image.left || 0)-offset); + var y1_px = Math.abs((image.top || 0)-offset); var x2_px = image.width - (x1_px + width); var y2_px = image.height - (y1_px + height); From 6b309dc3bebb5e6be287237bb6b3f79aeb306e2a Mon Sep 17 00:00:00 2001 From: CyberReiter <90895378+CyberReiter@users.noreply.github.com> Date: Wed, 8 Mar 2023 11:18:17 +0100 Subject: [PATCH 81/96] Fix install when adding custom default languages (#13904) * Adding ids to language installation --------- Co-authored-by: Jason Elkin (cherry picked from commit 30abbb0c5d3d6e46614fdfa0f251e36e468399d2) --- .../Migrations/Install/DatabaseDataCreator.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs index cc2e20fa02..a3f685f0ae 100644 --- a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs @@ -1757,6 +1757,7 @@ internal class DatabaseDataCreator { // Insert the specified languages, ensuring the first is marked as default. bool isDefault = true; + short id = 1; foreach (var isoCode in languageInstallDefaultDataSettings.Values) { if (!TryCreateCulture(isoCode, out CultureInfo? culture)) @@ -1766,12 +1767,14 @@ internal class DatabaseDataCreator var dto = new LanguageDto { + Id = id, IsoCode = culture.Name, CultureName = culture.EnglishName, IsDefault = isDefault, }; - _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", true, dto); + _database.Insert(Constants.DatabaseSchema.Tables.Language, "id", false, dto); isDefault = false; + id++; } } else From 5fcbd4e4cd883f5e48189a4d116ea387990acb4d Mon Sep 17 00:00:00 2001 From: CyberReiter <90895378+CyberReiter@users.noreply.github.com> Date: Wed, 8 Mar 2023 12:14:22 +0100 Subject: [PATCH 82/96] Fall back to object if PublishedPropertyType modelType is null (#13553) * add null check * return object when type is null (cherry picked from commit 0cfc1fb66402d151de65f7671bb4113451107aa6) --- .../Models/PublishedContent/PublishedPropertyType.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs index 4bc4b02f68..e6b5b5ffa2 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs @@ -1,4 +1,4 @@ -using System.Diagnostics; +using System.Diagnostics; using System.Xml.Linq; using System.Xml.XPath; using Umbraco.Cms.Core.PropertyEditors; @@ -190,7 +190,7 @@ namespace Umbraco.Cms.Core.Models.PublishedContent } _cacheLevel = _converter?.GetPropertyCacheLevel(this) ?? PropertyCacheLevel.Snapshot; - _modelClrType = _converter == null ? typeof (object) : _converter.GetPropertyValueType(this); + _modelClrType = _converter?.GetPropertyValueType(this) ?? typeof(object); } /// From 12414013d5f2d86095a4082f5cd6df859c3e01fb Mon Sep 17 00:00:00 2001 From: Chad Date: Fri, 10 Mar 2023 01:25:07 +1300 Subject: [PATCH 83/96] Faster full nucache table rebuild (#13501) * SQL Server Truncate when full nucache SQL rebuild. * Optimize truncate for SQL Lite * Remove comment. * Use current DB Types * I added a couple of formatting changes. --------- Co-authored-by: georgebid <91198628+georgebid@users.noreply.github.com> (cherry picked from commit be72c8147daaa0e96470c2aa53df7e72a38b3ab2) --- .../Persistence/NuCacheContentRepository.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs index cb2feb55c3..b7fac1e7bc 100644 --- a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs +++ b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs @@ -108,7 +108,23 @@ public class NuCacheContentRepository : RepositoryBase, INuCacheContentRepositor | ContentCacheDataSerializerEntityType.Media | ContentCacheDataSerializerEntityType.Member); - if(contentTypeIds != null) + // If contentTypeIds, mediaTypeIds and memberTypeIds are null, truncate table as all records will be deleted (as these 3 are the only types in the table). + if ((contentTypeIds == null || !contentTypeIds.Any()) + && (mediaTypeIds == null || !mediaTypeIds.Any()) + && (memberTypeIds == null || !memberTypeIds.Any())) + { + if (Database.DatabaseType == DatabaseType.SqlServer2012) + { + Database.Execute($"TRUNCATE TABLE cmsContentNu"); + } + + if (Database.DatabaseType == DatabaseType.SQLite) + { + Database.Execute($"DELETE FROM cmsContentNu"); + } + } + + if (contentTypeIds != null) { RebuildContentDbCache(serializer, _nucacheSettings.Value.SqlPageSize, contentTypeIds); } From b8d6613bd8d382759c50cdab1bdd305d626642d6 Mon Sep 17 00:00:00 2001 From: Paul Seal Date: Thu, 9 Mar 2023 13:33:53 +0000 Subject: [PATCH 84/96] Fix the reference to the .targets file (#13847) Updates the reference to the .targets file to use the correct folder name of `buildTransitive` instead of `build` (cherry picked from commit d8f204ddf9cdf84fc459b103ccfe058e2829978e) --- templates/UmbracoProject/UmbracoProject.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/UmbracoProject/UmbracoProject.csproj b/templates/UmbracoProject/UmbracoProject.csproj index 2880b754e6..ea6db75798 100644 --- a/templates/UmbracoProject/UmbracoProject.csproj +++ b/templates/UmbracoProject/UmbracoProject.csproj @@ -28,6 +28,8 @@ + + From 8a3cf2731ea94f553cc7d3e082fe6d7d8bd68b1d Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 9 Mar 2023 14:24:45 +0000 Subject: [PATCH 85/96] Solves tooltip issue for block column editor on remove block column editor option (cherry picked from commit 393845ce4d7377c77082f17a674ef37b61a56d5b) --- .../prevalue/umb-block-grid-column-editor-option.html | 4 ++-- .../prevalue/umbBlockGridColumnEditorOption.component.js | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html index 05f55d3a07..f77153239f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umb-block-grid-column-editor-option.html @@ -5,7 +5,7 @@ {{vm.columnSpanOption.columnSpan}}
-
-
\ No newline at end of file +
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js index 78d27a6055..6436b3f510 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/umbBlockGridColumnEditorOption.component.js @@ -23,9 +23,13 @@ } }); - function BlockGridColumnOptionController() { + function BlockGridColumnOptionController(localizationService) { - var vm = this; + var vm = this; + + localizationService.localize("general_remove").then(function (value) { + vm.removeLabel = value; + }) vm.$onInit = function() { From e6c0826d393c2b17e5145ac82e184679447f4de9 Mon Sep 17 00:00:00 2001 From: Sean Thorne <29239704+Bakersbakebread@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:34:38 +0000 Subject: [PATCH 86/96] update block label not assigning fixes: #13833 (#13937) Co-authored-by: Sean Thorne Co-authored-by: georgebid <91198628+georgebid@users.noreply.github.com> (cherry picked from commit 64bd310037101a028e14211233cc4c002d056dcb) --- .../src/common/services/blockeditormodelobject.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js b/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js index d461a3b0bc..abb81c38dc 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js @@ -641,7 +641,7 @@ }; // first time instant update of label. - blockObject.label = blockObject.content?.contentTypeName || ""; + blockObject.label = (blockObject.config.label || blockObject.content?.contentTypeName) ?? "" ; blockObject.index = 0; if (blockObject.config.label && blockObject.config.label !== "" && blockObject.config.unsupported !== true) { From 66c786a42d90934ca80ccbc00b0e50c40408fa1e Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 9 Mar 2023 15:54:29 +0000 Subject: [PATCH 87/96] Changed to cast double to long (#13935) (cherry picked from commit ca515c3ed757da7db9f6407f045b034f16f30955) --- .../HostedServices/RecurringHostedServiceBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Infrastructure/HostedServices/RecurringHostedServiceBase.cs b/src/Umbraco.Infrastructure/HostedServices/RecurringHostedServiceBase.cs index 68b311f8cd..dc81b2d3e1 100644 --- a/src/Umbraco.Infrastructure/HostedServices/RecurringHostedServiceBase.cs +++ b/src/Umbraco.Infrastructure/HostedServices/RecurringHostedServiceBase.cs @@ -118,7 +118,7 @@ public abstract class RecurringHostedServiceBase : IHostedService, IDisposable { using (!ExecutionContext.IsFlowSuppressed() ? (IDisposable)ExecutionContext.SuppressFlow() : null) { - _timer = new Timer(ExecuteAsync, null, (int)_delay.TotalMilliseconds, (int)_period.TotalMilliseconds); + _timer = new Timer(ExecuteAsync, null, _delay, _period); } return Task.CompletedTask; @@ -158,7 +158,7 @@ public abstract class RecurringHostedServiceBase : IHostedService, IDisposable { // Resume now that the task is complete - Note we use period in both because we don't want to execute again after the delay. // So first execution is after _delay, and the we wait _period between each - _timer?.Change((int)_period.TotalMilliseconds, (int)_period.TotalMilliseconds); + _timer?.Change(_period, _period); } } From d4970ed7526f64997c0a9fa3291e307b1bd5245c Mon Sep 17 00:00:00 2001 From: Joe Glombek Date: Thu, 9 Mar 2023 16:07:53 +0000 Subject: [PATCH 88/96] Add checkered background to file upload (including SVGs added to the media library) (cherry picked from commit 066276a532522defcdbb339d0e3b51e94a4c1c65) --- .../components/media/umbmediapreview/umb-media-preview.less | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/components/media/umbmediapreview/umb-media-preview.less b/src/Umbraco.Web.UI.Client/src/views/components/media/umbmediapreview/umb-media-preview.less index 78c41eeab6..085b2ecd6a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/media/umbmediapreview/umb-media-preview.less +++ b/src/Umbraco.Web.UI.Client/src/views/components/media/umbmediapreview/umb-media-preview.less @@ -11,4 +11,6 @@ umb-media-preview { display: flex; justify-content: center; align-items: center; + + .checkeredBackground(); } From 7c77fd1ca9e2a8c7049506e10734d01a3a8a2531 Mon Sep 17 00:00:00 2001 From: Chad Date: Tue, 14 Mar 2023 02:06:02 +1300 Subject: [PATCH 89/96] Faster cache key generation (#13504) * Reduce the number of string concatenations required to generate cache keys. * Updated to match existing Nucache keys. --------- (cherry picked from commit 7c30da9fbf48cd7685d62fa3c23030b84fa81344) --- .../CacheKeys.cs | 85 +++++++++++++++---- 1 file changed, 69 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.PublishedCache.NuCache/CacheKeys.cs b/src/Umbraco.PublishedCache.NuCache/CacheKeys.cs index e5f7b246f3..2d718a0dfd 100644 --- a/src/Umbraco.PublishedCache.NuCache/CacheKeys.cs +++ b/src/Umbraco.PublishedCache.NuCache/CacheKeys.cs @@ -4,35 +4,88 @@ namespace Umbraco.Cms.Infrastructure.PublishedCache; internal static class CacheKeys { - public static string PublishedContentChildren(Guid contentUid, bool previewing) => - "NuCache.Content.Children[" + DraftOrPub(previewing) + ":" + contentUid + "]"; + public static string PublishedContentChildren(Guid contentUid, bool previewing) + { + if (previewing) + { + return "NuCache.Content.Children[D::" + contentUid + "]"; + } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static string DraftOrPub(bool previewing) => previewing ? "D:" : "P:"; + return "NuCache.Content.Children[P::" + contentUid + "]"; + } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static string LangId(string? culture) - => string.IsNullOrEmpty(culture) ? string.Empty : "-L:" + culture; + public static string ContentCacheRoots(bool previewing) + { + if (previewing) + { + return "NuCache.ContentCache.Roots[D:]"; + } - public static string ContentCacheRoots(bool previewing) => - "NuCache.ContentCache.Roots[" + DraftOrPub(previewing) + "]"; + return "NuCache.ContentCache.Roots[P:]"; + } - public static string MediaCacheRoots(bool previewing) => "NuCache.MediaCache.Roots[" + DraftOrPub(previewing) + "]"; + public static string MediaCacheRoots(bool previewing) + { + if (previewing) + { + return "NuCache.MediaCache.Roots[D:]"; + } + + return "NuCache.MediaCache.Roots[P:]"; + } public static string PublishedContentAsPreviewing(Guid contentUid) => "NuCache.Content.AsPreviewing[" + contentUid + "]"; public static string ProfileName(int userId) => "NuCache.Profile.Name[" + userId + "]"; - public static string PropertyCacheValues(Guid contentUid, string typeAlias, bool previewing) => - "NuCache.Property.CacheValues[" + DraftOrPub(previewing) + contentUid + ":" + typeAlias + "]"; + public static string PropertyCacheValues(Guid contentUid, string typeAlias, bool previewing) + { + if (previewing) + { + return "NuCache.Property.CacheValues[D:" + contentUid + ":" + typeAlias + "]"; + } + + return "NuCache.Property.CacheValues[P:" + contentUid + ":" + typeAlias + "]"; + } // routes still use int id and not Guid uid, because routable nodes must have // a valid ID in the database at that point, whereas content and properties // may be virtual (and not in umbracoNode). - public static string ContentCacheRouteByContent(int id, bool previewing, string? culture) => - "NuCache.ContentCache.RouteByContent[" + DraftOrPub(previewing) + id + LangId(culture) + "]"; + public static string ContentCacheRouteByContent(int id, bool previewing, string? culture) + { + if (string.IsNullOrEmpty(culture)) + { + if (previewing) + { + return "NuCache.ContentCache.RouteByContent[D:" + id +"]"; + } - public static string ContentCacheContentByRoute(string route, bool previewing, string? culture) => - "NuCache.ContentCache.ContentByRoute[" + DraftOrPub(previewing) + route + LangId(culture) + "]"; + return "NuCache.ContentCache.RouteByContent[P:" + id + "]"; + } + else if (previewing) + { + return "NuCache.ContentCache.RouteByContent[D:" + id + "-L:" + culture + "]"; + } + return "NuCache.ContentCache.RouteByContent[P:" + id + "-L:" + culture + "]"; + } + + public static string ContentCacheContentByRoute(string route, bool previewing, string? culture) + { + if (string.IsNullOrEmpty(culture)) + { + if (previewing) + { + return "NuCache.ContentCache.ContentByRoute[D:" + route + "]"; + } + + return "NuCache.ContentCache.ContentByRoute[P:" + route + "]"; + } + else if (previewing) + { + return "NuCache.ContentCache.ContentByRoute[D:" + route + "-L:" + culture + "]"; + } + + return "NuCache.ContentCache.ContentByRoute[P:" + route + "-L:" + culture + "]"; + } } From e9d17d3b9f8b1d7654cc8d3cb3cb1d9ad7dfdaaa Mon Sep 17 00:00:00 2001 From: kiasyn Date: Tue, 14 Mar 2023 02:37:51 +1300 Subject: [PATCH 90/96] Fix ViewContext.FormContext not being set during BeginUmbracoForm (#13914) * Fix ViewContext.FormContext not being set during BeginUmbracoForm Client validation is broken without this if there are multiple forms with the same field names on a page. * Tweaked comment (cherry picked from commit 62b49c7ea7cc61e3eba1f1fb03dd52985c886a29) --- .../Extensions/HtmlHelperRenderExtensions.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs index 2e44bae31f..7823a7c50c 100644 --- a/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web.Website/Extensions/HtmlHelperRenderExtensions.cs @@ -767,6 +767,12 @@ public static class HtmlHelperRenderExtensions nameof(controllerName)); } + // Create a new form context in order to ensure client validation is set properly when adding multiple forms in a page. More context in PR #13914. + html.ViewContext.FormContext = new FormContext + { + CanRenderAtEndOfForm = true + }; + IUmbracoContextAccessor umbracoContextAccessor = GetRequiredService(html); IUmbracoContext umbracoContext = umbracoContextAccessor.GetRequiredUmbracoContext(); var formAction = umbracoContext.OriginalRequestUrl.PathAndQuery; From 2d32f46d800c32e3f40363ad9ceb740cd233205d Mon Sep 17 00:00:00 2001 From: Karn Blackmore Date: Tue, 13 Dec 2022 12:29:40 +0000 Subject: [PATCH 91/96] Fix algiment issues by setting the editor to position fix. (cherry picked from commit daf54468b16e0fbb2ca330d9dc29e91a23973550) --- .../src/less/components/editor/umb-editor.less | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/less/components/editor/umb-editor.less b/src/Umbraco.Web.UI.Client/src/less/components/editor/umb-editor.less index 0cbb3ee60f..6f2f6cef14 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/editor/umb-editor.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/editor/umb-editor.less @@ -5,6 +5,7 @@ .umb-editor { box-shadow: 0px 0 30px 0 rgba(0,0,0,.3); + position: fixed; } } From 82c21da5b79fef83720d234197b81d3ec60538c9 Mon Sep 17 00:00:00 2001 From: Erik-Jan Westendorp Date: Wed, 15 Mar 2023 07:26:11 +0100 Subject: [PATCH 92/96] Add Romanian language (#13965) (cherry picked from commit 11b20cc6cc947aadc19613c289e95bae76b03711) --- src/Umbraco.Core/EmbeddedResources/Lang/ro.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/Umbraco.Core/EmbeddedResources/Lang/ro.xml diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/ro.xml b/src/Umbraco.Core/EmbeddedResources/Lang/ro.xml new file mode 100644 index 0000000000..5dda77d477 --- /dev/null +++ b/src/Umbraco.Core/EmbeddedResources/Lang/ro.xml @@ -0,0 +1,18 @@ + + + + The Umbraco community + https://docs.umbraco.com/umbraco-cms/extending/language-files + + + Conţinut + Formulare + Media + Membrii + Pachete + Marketplace + Setări + Traduceri + Utilizatori + + From 53c547fb616be22e5ce3c6aded347c3080e35c0d Mon Sep 17 00:00:00 2001 From: Jason Elkin Date: Tue, 14 Mar 2023 14:49:56 +0000 Subject: [PATCH 93/96] Use correct listenAddress for Karma on node 18+ (cherry picked from commit 50c4f8c6b5290ac65c69ef141aa2e6a65b44fc32) --- src/Umbraco.Web.UI.Client/test/config/karma.conf.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/test/config/karma.conf.js b/src/Umbraco.Web.UI.Client/test/config/karma.conf.js index 6619754315..097236e250 100644 --- a/src/Umbraco.Web.UI.Client/test/config/karma.conf.js +++ b/src/Umbraco.Web.UI.Client/test/config/karma.conf.js @@ -79,6 +79,9 @@ module.exports = function (config) { // CLI --runner-port 9100 runnerPort: 9100, + // Add support for new DNS resolution in Node 17+ + listenAddress: '::', + // enable / disable colors in the output (reporters and logs) // CLI --colors --no-colors colors: true, From f70533e3a09658f25eb7850671be375c55d78911 Mon Sep 17 00:00:00 2001 From: Matt Begent Date: Wed, 15 Mar 2023 19:49:53 +0000 Subject: [PATCH 94/96] Add skip links to header (#13938) * Add skip links to header * Tweak skip link z-index (cherry picked from commit f6ebcdcfb64f708e183e5b4d4472cb4897ae30f3) --- .../EmbeddedResources/Lang/en.xml | 2 ++ .../EmbeddedResources/Lang/en_us.xml | 2 ++ .../application/umbappheader.directive.js | 14 +++++++++++ .../application/umb-app-header.less | 24 +++++++++++++++++++ .../application/umb-app-header.html | 4 ++++ 5 files changed, 46 insertions(+) diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml index 8fce72a14c..bda3ffbfec 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en.xml @@ -878,6 +878,8 @@ Header system field Last Updated + Skip to menu + Skip to content Blue diff --git a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml index 310111262d..15382310e5 100644 --- a/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml +++ b/src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml @@ -908,6 +908,8 @@ Header system field Last Updated + Skip to menu + Skip to content Blue diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbappheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbappheader.directive.js index a184967ca2..71171c2a73 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbappheader.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbappheader.directive.js @@ -127,6 +127,20 @@ } }; + scope.skipToMenu = function() { + document.querySelector('#applications a').focus(); + }; + + scope.skipToContent = function() { + var focusableElements = document.querySelectorAll('.umb-app-content a, .umb-app-content button'); + for(var i=0; i < focusableElements.length; i++){ + if(focusableElements[i].offsetParent !== null) { + focusableElements[i].focus(); + break; + } + } + }; + } var directive = { diff --git a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less index a9b9cf6936..bc02705187 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/application/umb-app-header.less @@ -110,3 +110,27 @@ .umb-app-header__button:focus .umb-app-header__action-icon { opacity: 1; } + +.umb-app-header__skip-button { + position: absolute; + top: 7.5px; + left: 5px; + background-color: #FFF; + border: 1px solid #000; + display: block; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px,1px,1px,1px); + border-radius: 3px; + z-index: 1; +} + +.umb-app-header__skip-button:focus { + height: auto; + width: auto; + clip: auto; + padding: 10px; + line-height: normal; + text-decoration: none; +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html index 9d673ce8bb..fae3543429 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-app-header.html @@ -1,5 +1,9 @@
+ + + +