* Fix: prevent open redirect in public surface controllers by validating RedirectUrl with Url.IsLocalUrl
* Fixed spacing in comment.
---------
Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fix: prevent open redirect in public surface controllers by validating RedirectUrl with Url.IsLocalUrl
* Fixed spacing in comment.
---------
Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Update System.Security.Cryptography.Xml - fix vulnerability
* Update Directory.Packages.props
use correct/latest version of the system.security.cryptohraphy.xml package.
Co-authored-by: Andy Butland <abutland73@gmail.com>
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Update System.Security.Cryptography.Xml - fix vulnerability
* Update Directory.Packages.props
use correct/latest version of the system.security.cryptohraphy.xml package.
Co-authored-by: Andy Butland <abutland73@gmail.com>
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Backport #21910 to V13
* Update src/Umbraco.Infrastructure/Search/IndexingNotificationHandler.ContentType.cs
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Backport #21856 as well
* Fix issue where removing a property type wasn't detecting and returning the expected change type.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
Removed explicit 260-character path length checks from PhysicalFileSystem.GetFullPath and deleted associated unit tests. Updated tests to focus on path normalization and validity, and improved path assertions for clarity and cross-platform compatibility. No longer enforce or test for legacy Windows path length restrictions.
Fix GetLockoutEnd to return DateTimeOffSet max rather than DateTime max, to align with type of function result and avoid chance of overflow when timezone is minus UTC.
Fix GetLockoutEnd to return DateTimeOffSet max rather than DateTime max, to align with type of function result and avoid chance of overflow when timezone is minus UTC.
* Ensure imported dictionary item is only processed from the expected temporary uploads folder.
* Ensured content type upload input is only a file and not a string that can be interpretted as a file path.
* Amend dictionary import to extract file name and prepend path rather than rely on provided path.
* Tidied usings.
* Ensure file name cannot contain path separator characters.
* Align cursor style and readonly mode for other property editors
* Show disabled actions as in other property editors when readonly
* Disable sortmode as well when readonly
* Formatting
* Ensure delete action remains disabled if readonly
* Ported fix to 13
* Mocking context and cache
* Removing unused parameter in constructor
* Removed a couple of unused variables in the tests.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fix memory leak with IOptionsMonitor.OnChange and non-singleton registered components.
* Added XML docs.
* Apply fix to DeliveryApiContentIndexingNotificationHandler.
* Dispose disposable data editors in ValueEditorCache.
* Removed unnecessary refactoring and clarified code comments.
* Fix memory leak with IOptionsMonitor.OnChange and non-singleton registered components.
* Added XML docs.
* Apply fix to DeliveryApiContentIndexingNotificationHandler.
* Dispose disposable data editors in ValueEditorCache.
* Removed unnecessary refactoring and clarified code comments.
* Do not convert calculated lockedOutUntil time to UTC
* Handle conversion to UTC when we know we have server time values in IdentityMapDefinition for members.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fix: Used FetchByGroups to batch queries to stop SQL limit bug
* Tidied up indentation.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fixed regression with handling of null representation in cache.
* Added integration test to verify behaviour.
* Use helper methods.
* Amend tests so they verify that cached null values are also removed
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Fixed regression with handling of null representation in cache.
* Added integration test to verify behaviour.
* Use helper methods.
* Amend tests so they verify that cached null values are also removed
---------
Co-authored-by: kjac <kja@umbraco.dk>
Prevent RTE being marked as dirty when content containt empty paragraph
In Tinymce, an empty paragraph is marked with a non-breaking space character.
When saving the content, the DOMParser replaces this empty non-breaking space character with an entity.
This causes the editor to always be dirty when the content contains an empty paragraph.
By making these the same befor the comparison, this is prevented.
* Avoid throwing an exception on getting references when migrating content with changed data types.
* Revert and handle exception at the consumer side
* Clean up
* Fix issue 12364
fix bug for Media Picker is slow when you have a large number of images at the root folder #12364
* Revert "Fix issue 12364"
This reverts commit 4d867345eb.
* Media Picker: use getPagedChildren with paging & sorting
Replaces folder view calls to entityResource.getChildren with
entityResource.getPagedChildren in MediaPickerController.
- Adds orderBy/Direction and increases default pageSize to 200
- Resets pagination when entering folders or clearing search
- Updates changePagination to work for both search and folder views
- Keeps legacy behaviour for searchMedia (no breaking server changes)
* Update mediapicker.controller.js
* Update mediapicker.controller.js
* Update mediapicker.controller.js
* Update mediapicker.controller.js
* Fix default values for paging.
* Refactor Media Picker controller: simplify pagination and clarify comments
- Removed unnecessary helper methods (pickPositive / pickNonNegative) and assign pagination values directly,
as backend always provides valid positive/ non-negative numbers.
- Renamed or removed review-only comments to keep codebase clean.
- Clarified purpose of resetting `vm.searchOptions.filter` to explain why the filter is cleared after loading items.
- Adjusted indentation and minor formatting for consistency.
* Media Picker: fix lost paging on reopen by chaining navigation promises
Ensures the Media Picker always loads a paged result when restoring the last
visited folder.
- run(), ensureWithinStartNode(), gotoStartNode(), and gotoFolder() now return
and chain the same promise flow.
- gotoFolder() resolves path → sets current folder → resets pagination →
calls getChildren() (which uses getPagedChildren).
- Fixed cases where reopening the picker showed all items with no pager.
- Kept existing UX: filter is cleared on folder navigation to start unfiltered.
- Minor indentation/formatting cleanups.
* Tidied up indentation.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Ensure values no longer allowed as options in checkbox list configuration are removed from the value, such that they will be removed from the persisted data when saved.
* Allow ContentAtRoot to accept culture
* Update comments about old TypedContentAtRoot
* Remove old method as new is optional parameter
* Change binary breaking change
* Obsolete methods
* Reverted to non-optional overloads.
* Used nullable string.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Allow fetching content by Guid and Udi
* Get media by Guid and Udi ids
* Fix array parameters
Co-authored-by: Ronald Barendse <ronald@barend.se>
---------
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Avoid throwing an exception on getting references when migrating content with changed data types.
* Revert and handle exception at the consumer side
* Clean up
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* Support querystring and anchor for local links in Delivery API output
* Add default implementation for backwards compat
* Add default implementation for backwards compat (also on the interface)
* Fix default implementation
* feat: Add Arabic (ar) backoffice translation
* Make Arabic language general until having special words for other
countries.
* Corrected the language header
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Use a regex to filter our invalid culture codes rather than relying on the culture being installed on the operating system.
* Update to more restrictive regex
Co-authored-by: Nuklon <Nuklon@users.noreply.github.com>
---------
Co-authored-by: Nuklon <Nuklon@users.noreply.github.com>
* Fixes#19654
Adds the propertyAlias to the VariationContext so that products implementing the GetSegment method are aware which propertyAlias it's being called for
* Re-implement original variation context for backwards compatibility
* Fixes hidden overload method
Ensures the `GetSegment` method overload is not hidden when a null `propertyAlias` is passed.
* Resolve backward compatibility issues.
* Improved comments.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Fix users being able to see nodes they don't have access to when using the picker search
* Readability and naming improvements
* Additional fixes
* Adjust tests
* Additional fixes
* Small improvement
* Replaced the root ids with constants
* Update src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs
Co-authored-by: Andy Butland <abutland73@gmail.com>
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Add integration tests that shows the problem
* Fix the problem and add explenation
* Improved comments slightly to help when we come back here!
Moved tests alongside existing ones related to scopes.
Removed long running attribute from tests (they are quite fast).
* Fixed casing in comment.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Add support for programmatic creation of property types providing the data type key.
* Add integration tests
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Adds variation by the header name Accept-Language to the develivery API output cache policy
* Removed obsolete constructor (not necessary as the class is internal).
* Introduce contants for header names.
* Refactor descendant enumeration in DeliveryApiContentIndexHelper
Improved loop condition to allow for processing of more than 10.000 descendants for indexing.
* Add failing test for original issue.
* Renamed variable for clarity.
---------
Co-authored-by: Brynjar Þorsteinsson <brynjar@vettvangur.is>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Preserve word boundaries when indexing RTE content with <br> tags
Replace <br> tags with spaces before HTML stripping to prevent word
concatenation in Examine index. Fixes issue where "John Smith<br>Company ABC"
was indexed as "John SmithCompany ABC" instead of "John Smith Company ABC".
- Add regex to replace <br> variants with spaces in RichTextPropertyIndexValueFactory
- Handles <br>, <br/> with spaces and attributes
- Maintains existing StripHtml() behavior for all other HTML tags
* Added unit test with test cases for expected index values
* Regex tweak to avoid matches on <break> <branything> etc
* Tweaked tests as per PR feedback
* Update tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/RichTextPropertyIndexValueFactoryTests.cs
Updated tests
Co-authored-by: Kenn Jacobsen <post@kennjacobsen.dk>
* Tweaked test expectations
---------
Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
Co-authored-by: Emma L Garland <emmagarland77@gmail.com>
Co-authored-by: Kenn Jacobsen <post@kennjacobsen.dk>
* Ensure to delete related tokens when removing logins for removed external login providers.
Ensure to avoid removing logins for members.
* Applied suggestions from code review.
* Removed unnecessary <= check.
* Ensure tag operations are case insensitve on insert across database types.
* Ensure tags provided in a single property are case insensitively distinct when saving the tags and relationships.
* Update src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TagRepository.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Handle case sensitivity on insert with tag groups too.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Removed the check before the wait that threw the recursive lock exception.
Added additional check to ensure we don't release a lock that's already released.
* Removed unnecessary check on releasing the lock.
The MediaService currently locks the ContentTree for GetPagedOfType(s) operations, but it's querying the MediaTree. This ensures we lock the correct tree.
* Optimize the member save as part of the member login process, by-passing locking and audit steps and handling only the expected update properties.
* Added unit test to verify new behaviour.
* Update src/Umbraco.Infrastructure/Security/MemberUserStore.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Updates from code review.
* Improved comments.
* Add state information to notification indicating whether a member is saved via only the update of login properties.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Migaroez <geusens@gmail.com>
* Optimize the member save as part of the member login process, by-passing locking and audit steps and handling only the expected update properties.
* Added unit test to verify new behaviour.
* Update src/Umbraco.Infrastructure/Security/MemberUserStore.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Updates from code review.
* Improved comments.
* Add state information to notification indicating whether a member is saved via only the update of login properties.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Migaroez <geusens@gmail.com>
* Adds support for retrieval of data type references when data type is routed using a GUID.
* Fixed typos in comments.
* Use IIdKeyMap to resolve ID instead of fetching datatype
* Use IDKeyMap instead
---------
Co-authored-by: mole <nikolajlauridsen@protonmail.ch>
* Make sure that each optional section of the cachekey always starts and ends with a -
* Move secondary logic of clearing the membercaches into its own replacable class
* Regsiter the new implementation
* Add a mock to the integration tests as appCaches are disabled
* Added header comments to components.
* Refactored cache key into a method and exposed for testing.
Added unit tests to verify behaviour.
* Verified also that regex matches only the supplied member and asserted on the key itself.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Backport user enumeration fix.
* Bump gitversion.
* Remove full path details from exception when requesting a path outside of the physical file system's root.
* Adds randomness to failed login duration.
* Handle file paths as not found in delivery API by route requests.
* Move check earlier to handle redirect logic as well.
* Spelling: Changed "resolveable" to "resolvable"
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Fixed parsing of node if in content and media permission querystring handlers to retrieve expected value when multiple are provided in the querystring.
* Add HttpPost attributes to backoffice endpoints that should only accept post requests.
* Bumped version to 13.6.1.
* Narrow PermissionQueryString parsing to the releveant UmbracoObjectType
* Add missed update from v10
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Introduce publishNotifications method on IMembershipMemberService.cs
* Fix test
* Add PublishNotificationSaveOptions
* Fix up according to comments
* Use numeric values for flag enum
* Update src/Umbraco.Core/Services/MemberService.cs
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Update src/Umbraco.Core/Services/MemberService.cs
Co-authored-by: Andy Butland <abutland73@gmail.com>
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Backport use of thread delay over sleep and handle dispose in FileSystemMainDomLock (from PRs #18119 and #18147)
* Applied suggestion from code review.
* Add validation to prevent update of a user or member to an invalid username.
* Avoid password manager updates of user name field on user details screen.
* init
* Aligned default values on security settings.
* Added validator for security settings.
* Provide default implementation for get members by email.
* Refactored constructor of MemberController.
* Validate on unique member email only when configured to do so.
* Further code tidy and use of DI in constructor.
* Used new constructor in tests.
* Add unit test for modified behaviour.
* Removed validator for security settings (it's not necessary, I got confused with users and members).
* Spelling.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Add CacheNullValues option to RepositoryCachePolicy
* Cache null values in DictionaryByKeyRepository
* Fixed issue with nullable reference.
* Updated logic for caching of null values.
* Update src/Umbraco.Infrastructure/Cache/DefaultRepositoryCachePolicy.cs
Co-authored-by: Sven Geusens <geusens@gmail.com>
* Made the NullValueRepresentation overwritable in a generic manner
* Improve generic NullValueCachePolicyResolver
* Revert Commits and clarify logic with comment
This reverts commit 8befb43792 "Improve generic NullValueCachePolicyResolver"
Also reverts 8adf0a2 - Made the NullValueRepresentation overwritable in a generic manner
And 8adf0a2 - Made the NullValueRepresentation overwritable in a generic manner
* Update src/Umbraco.Infrastructure/Cache/DefaultRepositoryCachePolicy.cs
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Sven Geusens <geusens@gmail.com>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Set Smidge cachebuster type
* Amend exception and fix typo
* Minor tweak to comment and exception message.
---------
Co-authored-by: Simon Hartfield <simon.hartfield@googlemail.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Flow additional identities to new principal
* Add extension to more easily get member identity
* Ensure the member is used instead of the backoffice user in `MemberManager`
* Update snippet
* Fix the comment that I broke
* Update src/Umbraco.Web.Common/Extensions/MemberClaimsPrincipalExtensions.cs
Co-authored-by: Andy Butland <abutland73@gmail.com>
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* Only fetch single commit
* Hopefully fixes Nerdbank.GitVersioning.GitException: Shallow clone lacks the objects required to calculate version height. Use full clones or clones with a history at least as deep as the last version height resetting change.
* Do not checkout again
* More test pipeline
* Another attempt
* yet another attempt
* more attempts
* Revert "more attempts"
This reverts commit 5694d97ba6.
* Test without building backoffice and login explicitly
* Fix mem leak in integration tests
* Fixes sqlserver lock test
# Conflicts:
# build/azure-pipelines.yml
* Don't save invalid media
* Revert "Don't save invalid media"
This reverts commit c4b6acf542.
* Still allow save, but show validation error, not popup error
* Add clarifying comment
* Refactor to use IWebhostEnvironment for wwwroot files.
* Obsolete ctor
* Add ActivatorUtiiliesConstructor
* Refactor logic to include folders
* Fix so we can see files in wwwroot/App_Plugins
* Cosmetic: Use invariant comparison for the "umbraco" folder".
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Refactor to use IWebhostEnvironment for wwwroot files.
* Obsolete ctor
* Add ActivatorUtiiliesConstructor
* Refactor logic to include folders
* Fix so we can see files in wwwroot/App_Plugins
* Cosmetic: Use invariant comparison for the "umbraco" folder".
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Update nuget packages
* Cherry pick fixes from v15
* Fixed: Projects that use central package version management should not define the version on the PackageReference items but on the PackageVersion items
* rollback update in tool
* Revert #14234
* Make the boot failure message more descriptive when unable to connect to DB
* Update src/Umbraco.Infrastructure/Runtime/RuntimeState.cs
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Revert changes
* Obsolete InstallMissingDatabase from V16
---------
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Dropzone, upload complete callback with processed file array
* Media card: cosmetic fix for image border-radius
The image's square corners were poking out.
* Distinguish between default value and initial zero
* Update special value comment documentation
* Redid solution with dirty/new entity tracking
* rework copy branch sortorder fix
* Change == false to is false
---------
Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
Add missing backoffice languages as properties etc. are translated via translation section (e.g. with "#Backoffice Settings"). At the moment the swiss languages always need to be added via the umbraco/Config folder.
* build(deps): update @umbraco-ui/uui from 1.7.1 to 1.11.0
* fix: umb-login-element no attributes
Cherry-picked a fix from V14 where the custom login input component was no longer needed, which was fixed because it errors out. This simplifies the login form.
* cherry-pick code to handle 'enter' click from v14
* Add ContentCache test
* Use SemaphoreSlim as write lock
* Apply lock imrpovements to SnapDictionary
* Obsolete unused MonitorLock
(cherry picked from commit c3db3457e7)
* Added a custom RichTextRequiredValidator, to check that the empty richtext object (still with json) can be required or not. We are now testing the markdown needs to have a value
* Fixed namespaced and moved back wrong class
* Cleanup
* Find the constraint name based on table,column,type name instead of hardcoding it
* removed unnecesary using
* Check constraint rename seperatly from column rename
* Combining OpenId and OfflineAccess scope
When the client scope is set to "openid offline_access", the returned scope only has the "offline_access" scope. The "openid" scope and the "id_token" are missing. By combining the OpenId and OfflineAccess as return scope, the refresh_token and id_token are returned.
* Update MemberController.cs
Cleaner way, provided by @kjac, to check if the scope has openid and/or offiline_access set.
(cherry picked from commit 55f9b09ab7)
* Improve migration performance
* Fix PR review comments
* Revert tags migration for sql lite as the optimized sql doesn't work properly and sqlLite datasets should not be large anyway
* Removing override of OnTransformingIndexValues from DeliveryApiContentIndex
* Making sure that TransformingIndexValues event is raised for DeliveryApiContentIndex without performing the special index value transformations
* Review suggestion
* Adds url support for x.com/.*/status/.*
* Updated regex
* Obsoleting Twitter as OEmbedProvider
* Introducing X as its new alternative
* Adding X and removing Twitter from EmbedProvidersCollection
* Typo
* Do not execute query if no macros found
* Request cache the permission lookup
* Unbreak change by adding obsolete ctor
* Clean up
* Wrap indexing for delivery API in a scope
* Do not ask options every time for the timeout, instead listen for updates
* Lookup content types once instead of one by one
* Use TryGetValue instead
* Do a distinct on user ids before building index, to avoid issue with more than 2100 parameters
* Don't map ContentDto (it's unused)
* Introduce request bound block editor element cache
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Introduce EagerMatcherPolicy to conditionally bypass content routing
* Ensure that the candidate we disable dynamic routing for is valid
* Skip Umbraco endpoints
* Simplify logic a bit
* Move install logic to matcher
* Ensure that dynamic routing is still skipped when in upgrade state
* Fixup comments
* Reduce nesting a bit
* Don't show maintenance page when statically routed controllers are hít
* Remove excess check, since installer requests are statically routed
(cherry picked from commit ba9ddd11da)
* Introduce EagerMatcherPolicy to conditionally bypass content routing
* Ensure that the candidate we disable dynamic routing for is valid
* Skip Umbraco endpoints
* Simplify logic a bit
* Move install logic to matcher
* Ensure that dynamic routing is still skipped when in upgrade state
* Fixup comments
* Reduce nesting a bit
* Don't show maintenance page when statically routed controllers are hít
* Remove excess check, since installer requests are statically routed
* fix: include all headers in webhook log
* feat: return webhook log status from server
* feat: make webhook logs deep linkable
* feat: add webhook log pagination
* feat: improve webhook request/response body preview
* Add blocks telemetry
* Use constants and update tests
* V13: Add property type information to telemetry (#16109)
* Add property type counts to telemetry
* Use constants and fix tests
* Update description
* Ported over #15928 changes for 13.3 RC
* Use GetOrAdd()
* Lock dictionary initialization
---------
Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
* Apply focusLockService to TourStepDirective
Apply focusLockService to TourStepDirective in order to ensure that
non-modal page contents are inert and do not interfere with focus on
modal dialog with regards to screen reading technologies.
* Add properties to umb-tour.html.
Add properties to umb-tour html page to ensure that it aligns with modal
dialog best practices.
* Add dialog properties to Umbraco tour .html files.
Add properties relating to dialog and accessibility to the Umbraco tour
.html files, including aria-label, role, and tab index.
A new check for ContentVariation.Nothing is necessary when copying from
documents to ensure that if there is no content variation as defined by
the Nothing property, values are still copied even if variation is not
supported since the content itself will not vary.
* Prevent user populated link names being removed
When selecting a node in a link picker, the "name" (Link title) field is always overridden with the selected node's name.
This change prevents the field from being overridden if it is user populated.
* Don't update for media either
If there is already a name, don't update when selecting media
* Deselect current node
When selecting media, deselect current node if there is one
* Change to suggested functionality
Update to more elaborate functionality which will always use the *current* node name. i.e If you change the node name then the link picker name changes also.
* Reapply changes
Repply changes after merge from contrib branch
* Use IsCulturePublished() and only track node name
* Fallback to node name in preview
* Fix setting media name
---------
Co-authored-by: Ronald Barendse <ronald@barend.se>
This ensures keys are correctly assumed to be unique => safe for dictionary usage
Co-authored-by: Sven Geusens <sge@umbraco.dk>
(cherry picked from commit e267b41575)
* Added ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands
* Added Cache Instructions lock, to avoid deadlocks
* Optimized read locks for nucache when only one content type is rebuilt
* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two
* Avoid breaking changes
* Cosmetic changes
* Take locks if everything is rebuild
* Use same lock in scopes, to avoid potential deadlocks between the two
* Use eager locks in PublishedSnapshotService.cs
* Added timeouts to some of the application locks
* Revert "Use eager locks in PublishedSnapshotService.cs"
This reverts commit 01873aae97.
* Revert "Added Cache Instructions lock, to avoid deadlocks"
This reverts commit e3fca7c12a.
* Use single readlock call to lock many
* Use eager locks for reads
* Eager write locks
* Ignore test of lazy locks
* Unique timeout exception messages
---------
Co-authored-by: kjac <kja@umbraco.dk>
(cherry picked from commit 2c23e67c65)
* Added ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands
* Added Cache Instructions lock, to avoid deadlocks
* Optimized read locks for nucache when only one content type is rebuilt
* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two
* Avoid breaking changes
* Cosmetic changes
* Take locks if everything is rebuild
* Use same lock in scopes, to avoid potential deadlocks between the two
* Use eager locks in PublishedSnapshotService.cs
* Added timeouts to some of the application locks
* Revert "Use eager locks in PublishedSnapshotService.cs"
This reverts commit 01873aae97.
* Revert "Added Cache Instructions lock, to avoid deadlocks"
This reverts commit e3fca7c12a.
* Use single readlock call to lock many
* Use eager locks for reads
* Eager write locks
* Ignore test of lazy locks
* Unique timeout exception messages
---------
Co-authored-by: kjac <kja@umbraco.dk>
(cherry picked from commit 2c23e67c65)
* Added ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands
* Added Cache Instructions lock, to avoid deadlocks
* Optimized read locks for nucache when only one content type is rebuilt
* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two
* Avoid breaking changes
* Cosmetic changes
* Take locks if everything is rebuild
* Use same lock in scopes, to avoid potential deadlocks between the two
* Use eager locks in PublishedSnapshotService.cs
* Added timeouts to some of the application locks
* Revert "Use eager locks in PublishedSnapshotService.cs"
This reverts commit 01873aae97.
* Revert "Added Cache Instructions lock, to avoid deadlocks"
This reverts commit e3fca7c12a.
* Use single readlock call to lock many
* Use eager locks for reads
* Eager write locks
* Ignore test of lazy locks
* Unique timeout exception messages
---------
Co-authored-by: kjac <kja@umbraco.dk>
(cherry picked from commit 2c23e67c65)
* Added ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands
* Added Cache Instructions lock, to avoid deadlocks
* Optimized read locks for nucache when only one content type is rebuilt
* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two
* Avoid breaking changes
* Cosmetic changes
* Take locks if everything is rebuild
* Use same lock in scopes, to avoid potential deadlocks between the two
* Use eager locks in PublishedSnapshotService.cs
* Added timeouts to some of the application locks
* Revert "Use eager locks in PublishedSnapshotService.cs"
This reverts commit 01873aae97.
* Revert "Added Cache Instructions lock, to avoid deadlocks"
This reverts commit e3fca7c12a.
* Use single readlock call to lock many
* Use eager locks for reads
* Eager write locks
* Ignore test of lazy locks
* Unique timeout exception messages
---------
Co-authored-by: kjac <kja@umbraco.dk>
Default behavior:
If you have only one available module for an area Umbraco will
open a dialog for adding the module. If you have more than one
module you will get a dialog to choose a module and that dialog
will have a Paste option in the top right corner.
New behavior:
If there is a module in the clipboard, Umbraco will open a dialog
with the Paste option even thou there is only one available module
in the area. In other cases, it will work as usual.
Reported issue: https://github.com/umbraco/Umbraco-CMS/issues/15755
When publishing, if the selected page does not yet have a page created,
handle the FailedPublishNothingToPublish error so that the user is not
presented with an exception. A warning is shown to the user that some
languages failed to publish due to nothing to publish and to check that
a page has been created for selected languages. Additionally fixed a
validation issue where publish would always succeed if all languages
were selected.
Issue: 15352
* Introduced IDataTypeConfigurationCache
* Applied IDataTypeConfigurationCache to Property Editors and display mapping
* Invalidate new cache trough DataTypeConfigurationCacheRefresher
* Improve IDatatype service to use cached int path when fetching by guid (using idkeymap)
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
* show external login errors as a subheadline on the login screen
* fix: migrate error handling from v12 for external login
* cleanup unused client-side javascript
* update dependencies to latest (lit 3, vite 5) and fix related issues
* update ui library to 1.7.1
* mark all backoffice svg icons with fill="currentColor"
* set label on user.html
Removed recursive call from the GetIndexValues method of NoopPropertyIndexValueFactory for backward compatibility and alignment with other property index value factory classes
* Trim update date to exclude Z character.
When picking media, the items from an SQL database contain an update
date that is formated in UTC-0 time by way of a Z character at the end
of the string. Removing this string will result in the update date
always displaying local time as expected.
Issue: 15209
* Use dateHelper instead of slicing Z from date string.
For most front end date formatting, dateHelper is used to get the local
date. The dateHelper is now passed in to the media picker controller and
used to format the date.
* Remove clean xss from datatype name and alias.
* Edit / and \ to the exclusions argument
* Forgot to escape the backslash
---------
Co-authored-by: Lucas Bach Bisgaard <lom@novicell.dk>
* Fixes#15136: Search includes fields from other cultures
Regex was updated to support block list fields
Unpublished nodes on the supplied culture are not filtered out
* Making the code non-breaking
* Fixed failing publish content query integration tests
The tests were not setting the content as publish in the specifed culture
causing the content items to be ignored
---------
Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
Previous slider min and max values caused home and end keys to behave
incorrectly. Min is now 0 to reflect 0% zoom and max is now 100 to
reflect max zoom. Additionally, adjusted step to 0.01 to avoid slow
adjustments when using arrow keys or page up / page down keys.
Issue: #15578
* Remove Linux only Docker build for E2E tests
* Fix cmsVersion variable
* Remove custom build number step (already done by Nerdbank.GitVersioning)
* Add and use global.json to configure .NET SDK version
* Only publish tests build output
* Only include unit tests and integration build output (without reference assemblies)
* Added "pr: none" to nightly trigger (#15044)
* Only run SQL Server Acceptance Tests on release builds or when parameter is set
* Use SQLite in-memory database and configure database optimizations (#15461)
* Disable content version cleanup and server election
* Reference Umbraco.Tests.AcceptanceTest.UmbracoProject instead of copying files
* Suspend/disable scheduled publishing
* Ensure all Playwright results are copied to the artifact staging directory
* Update E2E SQL Server job and also run on Linux
* Fix building acceptance test project
* Fix building acceptance test project (suing PrivateAssets)
* Explicitly disable building project references in E2E tests and use pre-built output
* Include obj folder of acceptance test project in build artifacts
* Download build artifacts
* Re-add PrivateAssets
* Revert to copying C# files to E2E application
* Disable Integrated Security for SQL Server on Linux
* Update SQL Server on Linux connection string
* Disable encryption on SQL Server for Linux
* Update SQL Server on Linux steps
* Add Database to SQL Server connection string on Linux
* Update Integration Tests and use SQL Server 2022 Docker image
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
(cherry picked from commit 0e1ca76d6e)
* Remove Linux only Docker build for E2E tests
* Fix cmsVersion variable
* Remove custom build number step (already done by Nerdbank.GitVersioning)
* Add and use global.json to configure .NET SDK version
* Only publish tests build output
* Only include unit tests and integration build output (without reference assemblies)
* Added "pr: none" to nightly trigger (#15044)
* Only run SQL Server Acceptance Tests on release builds or when parameter is set
* Use SQLite in-memory database and configure database optimizations (#15461)
* Disable content version cleanup and server election
* Reference Umbraco.Tests.AcceptanceTest.UmbracoProject instead of copying files
* Suspend/disable scheduled publishing
* Ensure all Playwright results are copied to the artifact staging directory
* Update E2E SQL Server job and also run on Linux
* Fix building acceptance test project
* Fix building acceptance test project (suing PrivateAssets)
* Explicitly disable building project references in E2E tests and use pre-built output
* Include obj folder of acceptance test project in build artifacts
* Download build artifacts
* Re-add PrivateAssets
* Revert to copying C# files to E2E application
* Disable Integrated Security for SQL Server on Linux
* Update SQL Server on Linux connection string
* Disable encryption on SQL Server for Linux
* Update SQL Server on Linux steps
* Add Database to SQL Server connection string on Linux
* Update Integration Tests and use SQL Server 2022 Docker image
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Attempt to fix#15090. Save connection string in private variable after setup.
* Do not dispose ef core contexts when if the connectionstring changes.
A Ef core context is protected from creations when no connection string is present. If it changes that single instance will continue with the connection string it was initialized with.
* Clean up
* Review Equals methods
(cherry picked from commit 5146f05625)
* Attempt to fix#15090. Save connection string in private variable after setup.
* Do not dispose ef core contexts when if the connectionstring changes.
A Ef core context is protected from creations when no connection string is present. If it changes that single instance will continue with the connection string it was initialized with.
* Clean up
* Review Equals methods
* Run the same cleanup with scaffolding content as when copying.
- Added a new ContentScaffoldedNotification
- Published the notification when a new scaffold has been created from a blueprint (content template)
- Linked up the ComplextPEContent handler to do the same cleanup for the new notification as when copying.
- registered handlers to the event for blocklist, blockgrid and nested content
* PR pattern matching suggestion
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
(cherry picked from commit dff90c6ec0)
* Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Improve logging of invalid reference relations (#15160)
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Improve logging of invalid reference relations
* Always get all automatic relation type aliases
* Do not set relation type alias for unknown entity types
* Get references from recursive (nested/block) properties
* Optimize relation tracking for adding new and keeping existing relations
* Optimize getting references by grouping by property editor alias and avoiding duplicate parsing of the same value
* Updaets `MigrationPlanExecutor.cs` to use serilog convention for strings
* Updaets `ExamineManagementController.cs` to use serilog convention for strings
* Updaets `HelpController.cs` to use serilog convention for strings
* Updaets `PreviewAuthenticationMiddleware.cs` to use serilog convention for strings
* Now properly checks the lockedoutdate
* Also fix Test (failed constructor)
* Processed feedback
* Added obsolete constructor
---------
Co-authored-by: Ambert van Unen <AvanUnen@ilionx.com>
* Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Improve logging of invalid reference relations (#15160)
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Improve logging of invalid reference relations
* Always get all automatic relation type aliases
* Do not set relation type alias for unknown entity types
* Get references from recursive (nested/block) properties
(cherry picked from commit 5198e7c52d)
* Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Improve logging of invalid reference relations (#15160)
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Improve logging of invalid reference relations
* Always get all automatic relation type aliases
* Do not set relation type alias for unknown entity types
* Get references from recursive (nested/block) properties
* synchronize normal rte with grid-rte
* restore pinToolbar and unpinToolbar from v10 and update to tinymce v6 and apply to grid-rte
* linting
* Reverting `pinToolbar` from v8
* remove unused variable
---------
Co-authored-by: leekelleher <leekelleher@gmail.com>
* synchronize normal rte with grid-rte
* restore pinToolbar and unpinToolbar from v10 and update to tinymce v6 and apply to grid-rte
* linting
* Reverting `pinToolbar` from v8
* remove unused variable
---------
Co-authored-by: leekelleher <leekelleher@gmail.com>
* Add item in requestcache when security stamp is already updated in request
* Propagate constructur obsoletion to implementing services and fix unit tests
---------
Co-authored-by: kjac <kja@umbraco.dk>
* bump tinymce from 6.8.1 to 6.8.2
* replace stateSelector with appropriate onSetup() functionality and replace addButton() with addToggleButton() to support toggling
* Run the same cleanup with scaffolding content as when copying.
- Added a new ContentScaffoldedNotification
- Published the notification when a new scaffold has been created from a blueprint (content template)
- Linked up the ComplextPEContent handler to do the same cleanup for the new notification as when copying.
- registered handlers to the event for blocklist, blockgrid and nested content
* PR pattern matching suggestion
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
(cherry picked from commit dff90c6ec0)
* Run the same cleanup with scaffolding content as when copying.
- Added a new ContentScaffoldedNotification
- Published the notification when a new scaffold has been created from a blueprint (content template)
- Linked up the ComplextPEContent handler to do the same cleanup for the new notification as when copying.
- registered handlers to the event for blocklist, blockgrid and nested content
* PR pattern matching suggestion
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* add tinymce cloud api key to configuration
* forward apikey through proxied config object after retrieving it from the server
* load the plugins.min.js file from tiny.cloud if cloud api key is set
* bump tinymce from 6.7.3 to 6.8.1
* disable premium promotion and make plugins unique
* make sure tinymce local assets are loaded before trying to load the plugins.js from cloud and before configuring tinymce
* Added a temporary DataCollector for v14 editorAlias migrations
* PR feedback
Do not run the collector on subscribers or non running instances
Reduced logger noise
* Extra v14 sanity check
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Ensure that missing access rules do not break the site (#15081)
(cherry picked from commit 6777145079)
* Added Exception handling and replicated error and info message
* Update auth.resource.js
Fixed the message
* Changed Delay introduction to early phase to avoid repeating code.
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Co-authored-by: jey <jey@umbraco.dk>
Co-authored-by: Jey <cyaqublu@gmail.com>
* revert change to load commonjs version of uui
* revert to load uui
* build login first
* build login assets as iife to support loading inside the backoffice
* Bump version
* Apply authorization policies to controllers
* Return bad request if we urltracking is disabled
* Apply authorization policies to controllers
* Return bad request if we urltracking is disabled
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Zeegaan <nge@umbraco.dk>
* Ensure that missing access rules do not break the site (#15081)
(cherry picked from commit 6777145079)
* Added Exception handling and replicated error and info message
* Update auth.resource.js
Fixed the message
* Changed Delay introduction to early phase to avoid repeating code.
---------
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Co-authored-by: jey <jey@umbraco.dk>
Co-authored-by: Jey <cyaqublu@gmail.com>
* Added Exception handling and replicated error and info message
* Update auth.resource.js
Fixed the message
* Changed Delay introduction to early phase to avoid repeating code.
---------
Co-authored-by: jey <jey@umbraco.dk>
Co-authored-by: Jey <cyaqublu@gmail.com>
* Disable transitive package version pinning
* Take top-level dependencies on Azure.Identity and System.Net.Http
* Take top-level dependencies on System.Security.Cryptography.Xml and System.Text.RegularExpressions
* Use named HttpClients
* Register as named client
* Set headers on request message.
* Add User agent header to http client
* Add headers within Try-catch
* Add using for HttpResponseMessage
* Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* Log key instead of entire webhook
* Update src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Create constant for User agent header name
* Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Use datetime.now
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* Use version overrides for ImageSharp 2
* Move Directory.Packages.props to root, use GlobalPackageReference and replace Microsoft.CSharp with Microsoft.CodeAnalysis.CSharp
* Replace NPoco.SqlServer with NPoco and remove unused System dependencies
* Fix package validation and MSBuild warnings
* Add nuget.config and enable package source mapping
* Remove explicitly set C# language version
* Add empty Directory.Packages.props file for acceptance test
* Downgrade SixLabors.ImageSharp back to 3.0.2 because of breaking changes
* Update ImageSharp/ImageSharp.Web to 3.1.0 and use ComputeHMAC
* Move adding webhooks to extension methods
* Clean up WebhookEventCollectionBuilder
* Rename AddAllAvailableWebhooks to AddCmsWebhooks and internalize defaults
* Use fluent CmsWebhookEventCollectionBuilder for adding CMS specific webhook events
* Split media and media type webhook events
* Use fluent CmsUserWebhookEventCollectionBuilder for adding CMS user specific webhook events
* Rename extension methods and add onlyDefault parameter
* Remove duplicate UserForgotPasswordRequestedWebhookEvent
* Add document type webhook events and use fluent builders for content and content types
* Use fluent WebhookEventCollectionBuilderCmsMember for adding member/member group webhook events
* Use fluent WebhookEventCollectionBuilderCmsTemplate for template/partial view webhook events
* Use fluent WebhookEventCollectionBuilderCmsFile for file based webhook events (instead of only template/partial view)
* Move all webhook events to Umbraco.Cms.Core.Webhooks.Events namespace
* Reorder AddFile method and update documentation
* Move adding webhooks to extension methods
* Clean up WebhookEventCollectionBuilder
* Rename AddAllAvailableWebhooks to AddCmsWebhooks and internalize defaults
* Added the possibility for us to search through the external index
* Added ForceInstantExecution
* Added InternalIndex integration tests
* Added External Index integration tests
* Removed comments
* Remove unused internal field
* Add mechanism to wait for index rebuilding
* Remove some of the usages of sleep
* Remove sleeps
* Added comments from review
* Added a method for getting the IndexPath
---------
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
* Expose the Delivery API CLR type
* Updated field naming and warnings
Addresses PR feedback
* Added default implementation to prevent breaking change
(cherry picked from commit 7f4378066d)
* add check for the presence of the ?logout=true parameter on the login screen to avoid autoredirect to external login
* refactor controller to eliminate need for duplicate defaultResponse and externalLoginResponse (they are always the same)
* refactor to reduce nesting
* Should fix#14890
* Set z-index of #leftcolumn to 0 when Tiny MCE is in fullscreen mode
---------
Co-authored-by: Jannik Anker <jaa@kfforsikring.dk>
Co-authored-by: Jason Elkin <jason@bumpdigital.co.uk>
* Cache block item constructors for block based editors
* Fix unit tests
* Fixed Grid unit tests
* Clear constructor caches when content types and data types change (to support InMemoryAuto models)
* Move localdb file management of PublishedSnapshotService into itself.
Added a way for the PublishedSnapshot service to clean up it's local files so (for example) Upgrade migrations have a reliable way of removing known invalid cache files without running into locking issues
* Small rename to differentiate existing method from simple getter
* Fix breaking change
Long live default implementations 🎉
* Another breaking change fix
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Moved to centralized nuget packages
* Handle JsonSchema
* Change PackageReference to PackageVersion
* Opt out of central package management for mangement api (at least for versions less than 14) and the UI project
* ManagePackageVersionsCentrally = false
* Change folder acceptance tests are build, to avoid reading the test Directory.Packages.props
* Change folder acceptance tests are build, to avoid reading the test Directory.Packages.props
* change working directory
* workingDirectory
* Force the template to use local nuget packages
* Force the template to use local nuget packages
* clean up
* added wait on
* added wait on
* Fix IWebhook and IEntity GetUdi extension method
* Refactor to use switch expressions
* Add GetUdiForWebhook test
* Added a webhook builder for unit tests.
---------
Co-authored-by: Andy Butland <abutland73@gmail.com>
* parse culture and segment for dynamic root.
* Handle new culture and segment parameters
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
* Create missing node for content type
* Change to Unknown instead of deleted
* Cleared contentTypes and removed console.log
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
* Added a webhookOperationStatus for noEvents
* Added a method for validating Webhooks. Currently checks if the webhooks has any events or not
* Added WebhookOperationStatus for NoEvents
* Update src/Umbraco.Core/Services/WebhookService.cs
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Update src/Umbraco.Core/Services/WebhookService.cs
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
---------
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Refactor to show icon and status code to make status more clear
* Fix up migration
* Add change log status migration
* Fix up frontend to display cross when fail
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
* Use code snippet component for request and response
* Change overlay size to medium
* Format log date
* Handle JS as JavaScript
* Try format JSON
* Update less syntax
* Add word wrap
* Formatting
* Update variable
* Remove unused editorService
* Add missing details controller and fix formatting in catch block
* Set data object
* Update overlay size to match umb-editor overlay
* Use editorService instead to show details on overlay
* Add general box header
(cherry picked from commit 13db9b308e)
* Use code snippet component for request and response
* Change overlay size to medium
* Format log date
* Handle JS as JavaScript
* Try format JSON
* Update less syntax
* Add word wrap
* Formatting
* Update variable
* Remove unused editorService
* Add missing details controller and fix formatting in catch block
* Set data object
* Update overlay size to match umb-editor overlay
* Use editorService instead to show details on overlay
* Add general box header
* fix: make sure isTimedOut state is forwarded to the login screen
* fix: make umb-custom-view work without attributeChangedCallback
* style subheadline
* add support for userViewState on external login custom views
* fix: subheadline should be a span
* check for isTimedOut on internal login screen
* reformat code
* add args to external login provider custom view
* send args to custom view
* set state to "logout" when clicking the logout button
* force user to new login page /umbraco/login?logout=true if logged out
* Update blocklist.blockconfiguration.overlay.less
Change noValue color
* Update blockgrid.blockconfiguration.overlay.less
Change noValue color for block-grid
* add new login images
* layout styling
* styling
* fix line height
* use image and logo
* add comments
* remove border and shadow
* change logos and images
* use styleMap and add dark logo property
* add new content setting for dark logo variant
* add loginLogoImageDark to angular server variables
* set logo-dark attribute on the auth element and rename "logo-image" to "logo-light"
* styling
* update auth element
* replace logo files with new brand logos
* use different logo on install screen
* no-nodes: move logo to img file
* use different logo for umb-avatar
* use different logo for backoffice
* use different logo for BootFailed
* tranparent background
* switch dark and light logo
* image flip horizontal
* fix background
* inject native inputs into auth element
* use native inputs in login
* get input values and submit on enter press
* wip validation
* wip custom login input. And inject entire form instead
* use external submit button
* use uui-labels instead
* style inputs
* cleanup
* convert to function
* add translations
* wait for slot update before getting form
* fix divider to work on transparent backgrounds
* background less transparent
* load css from file
* fix logo
* fix mobile padding
* add documentation and fix name of input field for username
* revert to old login background
* revert to old login background
* add labels for login fields
* fix label warning
* fix fallback for messages
* replace background image
* do not transform background image
* add mocked texts
* use new generic "Welcome" title
* use correct user_email for email field
* update "Welcome..." to "Welcome" to use with the new login screen
* reformat code
* update greeting headline
* update actions
* update mocks
* update fallback value
* update texts
* improve query safety
* add logoImageAlternative and ensure naming is correct from backend to frontend
* add remarks to avoid changing the color configuration of an external login button
* format
* update auth styles
* external login provider element
* auth layout
* external login providers layout
* login input element
* invite page
* login page
* new password page
* typesafe
* fix custom view login provider
* divider color
* prevent pink lines from overflowing image
* replace login background
* add umb prefix to css variables
* avoid using 'umbraco' in alt texts and add check for logo alternative
* adjust greeting size
* Revert "add umb prefix to css variables"
This reverts commit 005813cbfd.
* add new blue button color
* font-size on headlines
* align styling on all pages
* use error layout
* ts happy
* adjust divider to work better with rounded buttons
* add overflow to in case of very long forms
* adjust h2 size
* update mocks to match cms
* first headline on a page should be a h1
* first headline on a page should be a h1
* first headline on a page should be a h1
* copy styling to mfa page
* first headline on a page should be a h1
* make the blue logo default for Umbraco 13
* move background-color to auth-layout so it also takes effect inside the cms
* adjust padding on the internal div on the buttons
* reformat code
* fix async text for external login buttons
* align design of mfa page with the other screens
* align logos
* reformat code
* use white logo for nonodes
* add safety measure to returnPath
* lowercase the 'or' text
* force uui-select to use the background-color as other regular inputs
* match uui-select-height with other input fields
* revert back to default look for outline uui-button
* move background-color to layout element to span the entire browser
* align headlines across components
* adjust max-width on #content to better fit headlines
* align line-height on headlines across components
* allow error text a bit of top margin
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
* Fixed a couple of occurrences where scopes was auto-complated while actually modified the state of the database.
* Added temp ctor to fix boot issue
(cherry picked from commit 41f8f03c2c)
* Created an extension for comparing the current and the outdated providerName for Sqlite
* Added usages for the CompareProviderNames
* Added another case if the providerName is the outdated SQLite
* Both cases use Sqlite, so there is no need to have duplicate code
(cherry picked from commit d0cd22b09d)
* Created an extension for comparing the current and the outdated providerName for Sqlite
* Added usages for the CompareProviderNames
* Added another case if the providerName is the outdated SQLite
* Both cases use Sqlite, so there is no need to have duplicate code
* V13: Add support for Node.js 20 (#15022)
* update versionSpec to nodejs 20 and avoid specifying minor and patch versions to improve Azure Pipelines stability
* update engines and package lock files
* update helpful displayNames for npm builds
* add retry to counter nodejs.org timeouts
add retryCountOnTaskFailure as suggested on https://developercommunity.visualstudio.com/t/NodeTool0-task-to-install-nodejs-fails/10455454
* update lockfile
* bump nvm support to latest node.js 20.9 LTS
* build(deps): bump @umbraco-ui/uui from 1.3.0 to 1.5.0
* build(deps): bump public dependencies to latest
* build(deps-dev): bump build dependencies to latest
* build(deps-dev): bump test tools to latest
* build: add script to lint and run --fix
* revert login merge from v13
* V2 output expansion + field limiting incl. deprecation of V1 APIs
* Performance optimizations for Content and Block based property editors
* A little formatting
* Support API versioning in Delivery API endpoint matcher policy
* Add V2 "expand" and "fields" to Swagger docs
* Renamed route for "multiple items by ID"
* Review changes
* Update src/Umbraco.Cms.Api.Delivery/Controllers/Media/ByIdMediaApiController.cs
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Update src/Umbraco.Cms.Api.Delivery/Filters/SwaggerDocumentationFilterBase.cs
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Update src/Umbraco.Cms.Api.Delivery/Filters/SwaggerDocumentationFilterBase.cs
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Revert "Performance optimizations for Content and Block based property editors"
This reverts commit 0d5a57956b.
* Introduce explicit API cache levels for property expansion
* Friendly handling of bad expand/fields parameters
---------
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Added content types to property index value factory, because the deep cloning is too expensive to execute often
* Do not use entityservice in ToEditor, as it goes to the database. We need to use something that is cached.
* Small performance optimization for nested content too
* A little formatting and an obsoletion message
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Implement persistence
* Start implementing repository
* Implement repository
* Implement request service
* Dont run WebhookFiring if not in runtime mode run
* Refactor repository and service to have full CRUD
* add tests for Request service
* Implement WebhookRequest lock
* Register hosted service
* Add try catch when firing HttpRequest
* Add migration
* Refactor to use renamed IWebhookService
* Refactor tests too
* Add setting to configure webhook firing period
* Update docs
* Review fixes
* Add column renaming migration
* Remove unused service
* run request in parralel
* Refactor to fire parallel in background
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Refactor jobs from HostedServices into BackgroundJobs
* Clean up generics and DI setup
* Add RecurringBackgroundJob Unit Tests
* Add ServiceCollection helper
* Add Obsolete attributes
* Add Notification Classes
* Add UnitTests for RecurringBackgroundJob HostedService
* Add NotificationEvents
* Add state to notifications
* Update UnitTests
* Add Obsolete Attributes to old hosted service classes
* Updated xmldoc in IRecurringBackgroundJob.cs
* Update Obsolete attribute messages to indicate classes will be removed in Umbraco 14
(cherry picked from commit c30ffa9ac3)
* Add edit page for webhook
* Remove function again
* Remove old edit in overlay
* Update language keys
* Update GetByKey to get model as camel case properties
* Localize "select event"
* Localize "create header"
* Don't show input field in header for now
* Add generic class to limit property editor width
* Remove loading check since already checked when loading entire editor view
* Add empty message
* Update col span
* Set edit name
* Map id property
* Return webhook model after update
* Translate speech bubble text
* Resolve content types
* Only push if not already exists
* Check webhook headers
* Set webhook enabled by default
* make the login check a bit more robust to be able to handle both old postlogin and new management api response types
* v14 only: update the login url to work with the management api (this will still work with the old backoffice to some extent)
* Revert "v14 only: update the login url to work with the management api (this will still work with the old backoffice to some extent)"
This reverts commit 0639ca80f0.
* V14 only: additionally authenticate with the Management API to set the right cookies
* Added webhooks to UdiEntityTypes and UdiGetterExtensions.
* Renamed IWebhookservice and amended signature of CreateAsync to allow returning of null.
Added notifications for webhooks.
* Further renames.
* Fixed failing unit test.
* Removed inadvertently added file.
* Refactor IWebhookEvent to contain event type.
* refactor frontend to filter on eventType.
* Display event names
* refactor to use eventNames
* remove npm from overview
* implement alias for WebhookEvents
* Implement [WebhookEvent] attribute
* Refactor IWebhookService to get by event alias and not name
* Rename parameter to fit method name
* to lower event type to avoid casing issues
* Apply suggestions from code review
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Change event names from constants to hard coded. And give more friendly names
* Refactor to not use event names, where it was not intended
* Add renaming column migration
* display event alias in logs
* Update migration to check if old column is there
* Apply suggestions from code review
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* add determineResource function to avoid duplicate code
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* #14835 Update link on permissionsreport.html
Updated link to permissions page to point to 10-LTS documentation
* retrigger checks
---------
Co-authored-by: Rasmus Berntsen <rasmus.berntsen@isobar.com>
* Include automatic relation type aliases from factory
* Remove unnessecary distinct and fix SQL parameter overflow issue
* Fixed assertions and test distinct aliases
* Simplified collection assertions
* Fix Umbraco.Web.UI.Login not showing up in solution
* Update PackageValidationBaselineVersion to 13.0.0-rc1 and remove all CompatibilitySuppressions.xml files
* Remove unnecessary package references
* Move Microsoft.EntityFrameworkCore.Design reference and add comment
* Disable package validation and fix override in tests
* Inherit package validation setting for EF Core projects
* Move localdb file management of PublishedSnapshotService into itself.
Added a way for the PublishedSnapshot service to clean up it's local files so (for example) Upgrade migrations have a reliable way of removing known invalid cache files without running into locking issues
* Small rename to differentiate existing method from simple getter
* Fix breaking change
Long live default implementations 🎉
* Another breaking change fix
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* add returnPath to 2fa custom views so they know where to redirect the user to
* fix(2fa): send back the user details in the login-success event emitter in case the login happens inside the backoffice overlay
* Align nullability of ILocalLinkParser with other rich text content parsers (IMacroParser and IImageSourceParser).
* Remove value/return nullability in IImageSourceParser, ILocalLinkParser and IMacroParser
---------
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Rename FarthestDescendantOrSelfDynamicRootQueryStep to FurthestDescendantOrSelfDynamicRootQueryStep
* Rename FarthestAncestorOrSelfDynamicRootQueryStep to FurthestAncestorOrSelfDynamicRootQueryStep
* Update integration test and repo
* Update icons
* Update tree headers
* Cleanup and change icon name
* Use button element instead
* Disable button instead
* Fix overlay title
* Simplify labels
* Add datalist for common headers
* Use Utilties function
* Events in plural form
* Cleanup and formatting
* Formatting
* More formatting
* Stop event bubbling when clicking delete button
* Sync tree node and show loading indicator
* Add webhook icon
* Remove globe icon to not confuse with languages
* Update logs
* Remove extra column with delete button which shouldn't be there
* Use umb-icon and update titles
* Use content type picker
(cherry picked from commit 29be27ba46)
By not setting the type and format, it would remain integer is this case, which would result in an invalid specification as the enum members are strings.
* avoid duplicate id's on the login screen
this removes the id attr from the inner input element of umb-login-input
* disallow form to validate
the validate behavior is controlled by the UI library
* Refactor jobs from HostedServices into BackgroundJobs
* Clean up generics and DI setup
* Add RecurringBackgroundJob Unit Tests
* Add ServiceCollection helper
* Add Obsolete attributes
* Add Notification Classes
* Add UnitTests for RecurringBackgroundJob HostedService
* Add NotificationEvents
* Add state to notifications
* Update UnitTests
* Add Obsolete Attributes to old hosted service classes
* Updated xmldoc in IRecurringBackgroundJob.cs
* Update Obsolete attribute messages to indicate classes will be removed in Umbraco 14
* Update icons
* Update tree headers
* Cleanup and change icon name
* Use button element instead
* Disable button instead
* Fix overlay title
* Simplify labels
* Add datalist for common headers
* Use Utilties function
* Events in plural form
* Cleanup and formatting
* Formatting
* More formatting
* Stop event bubbling when clicking delete button
* Sync tree node and show loading indicator
* Add webhook icon
* Remove globe icon to not confuse with languages
* Update logs
* Remove extra column with delete button which shouldn't be there
* Use umb-icon and update titles
* Use content type picker
* Setting actionContext.Result when authz wasn't successful
* Taking into account permissions when it is a new node
* Cleanup
* Passing nodeId as path when new item
* Setting actionContext.Result when authz wasn't successful
* Taking into account permissions when it is a new node
* Cleanup
* Passing nodeId as path when new item
* pass in fields from outside login-page to make autofill APIs work
* remove unused property
* disable spellcheck for login form
* add name to login form
* remove unused property
* clean-up imports
* use inputmode instead of type=email
* refactor arguments into opts object
* insert umb rte block web component in rte
* First stab at moving the RTE markup to a nested "markup" property in the property value.
* initial work
* only rewrite markup
* transform RTE into component
* parse scope in grid.rte
* revert use a fallback instead
* block insertion and sync in place
* block picker partly impl
* remove test of old controller
* remove test of old controller
* block with block data
* proper block with api connection
* remove log
* styling
* Persist blocks data (still a temporary solution)
* styling allows for interaction
* block actions
* tinyMCE styling
* paste feature
* prevalue display Inline toggle
* inline mode in RTE
* todo note
* fixes wording
* preparation for editor communication
* remove val-server-match for now
* clean up blocks that does not belong in markup
* remove blocks not used in the markup
* liveEditing
* displayAsBlock formatting
* clean up
* TODO note
* Serverside handling for RTE blocks (incl. refactor of Block List and Block Grid)
* ensure rich text loads after block editor
* trigger resize on block init
* Handle RTE blocks output in Delivery API
* sanitize ng classes
* simplify calls to init blocks
* move sanitisation
* make validation work
* only warn when missing one
* clean up
* remove validation border as it does not work
* more clean up
* add unsupported block entry editor
* Revert breaking functionality for Block List and Grid
* prevent re-inits of blocks
* make sure delete blocks triggers an update
* Refactor RichTextPropertyIndexValueFactory to index values from blocks + clean up RichTextPropertyEditor dependencies
* first working cursor solution
* inline element approach
* Handle both inline and block level blocks
* Fix the RTE block parser regex so it handles multiple inline blocks.
* Fix reference and tags tracking, add tests, make the editor backwards compatible and make deploy happy
* Use RichTextPropertyEditorHelper serialization in tests
* Ensure correct model in Block Grid value converter (incl unit test to prove it)
* do not include umbblockpicker in grid
* make blocks the new default, instead of macros
* only send value of body from DOMParser
* Blocks of deleted ElementTypes shows unsupported
* do not edit a unsupported block
* remove trying to be smart on the init
* fix missing culture issue
* set dirty
* alert when no blocks
* Revert "make blocks the new default, instead of macros"
This reverts commit 283e8aa473.
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Adds additional parameter to IFileSource.GetFilesAsync allowing the caller to continue on a file not found exception.
* Moved redirect tracking and creation logic out of handler into a service, allowing for re-use in Deploy.
* Reverted breaking change in IFileSource by obsoleting old method and
* Temp commit.. Initial work on XPath alternative for dymamically finding start nodes
* First commit that goes all the way from ui to db for NearestAncestorOrSelf
* Added more filters + return null from controller instead of not found
* Bugfix
* rewrite query to make sqlserver happy?
* Added more tests
* clean up initial step
* Added tests and refactor
* Update endpoint to take model instead of json
* pick origin
* Use model for config instead of string
* append add filter button
* fix
* default filter
* rename json fields
* correct field names
* minor corrections
* Renaming..
* Rename endpoint
* initial work for appending query steps
* query steps ui
* more localization
* query step UI
* Use doc type keys instead of alias
* only for Documents
* change to send keys to anyOfDocTypeKeys
* Fix potential bug
* Fix when level is impossible to get
* correct prop to dynamicRoot
* noValidStartNode dialog
* custom query step
* Renaming
* Rollback unintended file change
* Fixed issue if no doc type is chosen
* Remove unintended file changes
* More unintended changes
* Renaming
* Optimizations
- IDE Recommendation for better source
- Renaming for better clarity
- Improving spacing/formatting
- Typo corrections
- Remove warnings concerning IEnumerable
* Fix failed attempt bug
---------
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Create webhook models
* Define interfaces for service and repository
* Create Webhook dto and corresponding factory
* implement WebhookRepository.cs
* Remove entity name from models, as that should be resolved in mapping instead
* Add new table to schema creator
* Register repo for DI
* Remove more mentions of entityname
* Refactor repository to guids
* Implement WebhookService
* Use scopes in service
* Start creating tests for service
* Refactor delete to use Id and not entire entity
* Rework Webhooks to be able to have multiple entity keys
* Implement GetAll functionality
* Implement webhook controller
* Imeplement get all events action
* Add equalityComparer deletegate to Webhook
* Add datacontract attirbutes to properties
* Implement backoffice webhooks tree
* Implement first webhooks menu
* Make WebHookController authorized
* Update to have tabs with webhooks and logs
* Enable create overlay
* Push to entityKeys array
* Fix up pagination
* Implement delete functionality
* remove pagination
* add log view
* Fix create to be able to select more than one content type
* implement type name resolving for content
* Refactor to use less duplication
* Implement update functionality in frontend
* Rename database table
* Make multiple events possible
* create new event picker
* Refactor to actually add new database table with proper name
* Make it possible to select multiple events
* Fix updating current items
* Fix up update functionality after db rework
* Add webhook icon
* Switch to match heartcore icons
* Refactor to use bases instead of Enum
* Refactor to make IWebhookEvent to Collection, so it can be injected instead of using reflection
* Fix up frontend to match new models
* Fix integration tests
* Remove obsolete entity key from webhookdto
* Introduce constants instead of hard coded strings
* Start implementation of firing mechanism
* Add new GetByEventName method
* Add 1 to many list on WebhookDto
* Implement new repository pattern
* Implement GetByEventName
* Fix up repository to use all async
* Refactor events to fire
* Refactor WebhookEvents to be more DRY
* Add custom header
* Start implementing log repository
* Implement GetPaged
* Implement WebhookLogService
* Implement GetLogs
* Add url to webhook log
* Implement log overview
* Formatting
* Implement details view
* Refactor to get actual retry count
* Refactor firing to fire only when Enabled
* Add Status code to detailed view
* Add configuration to disable webhooks entirely
* Implement custom headers frontend
* Implement persistence of custom headers
* Refactor retry service to also retry on non success status codes.
* Refactor registration of Webhooks, to also register as NotificationHandler
* Add webhooks migration
* Add key for adding webhook headers
* Fix up test
* Change event icon to flag
* Remember event, when editing what events you have chosen
* Refactor reflection to check if INotificationAsyncHandler instead
* Formatting
* Refactor webhook model to no longer derive from EntityBase
* Rename entityKeys to content keys
* Rename controller to lowercase H
* Add null check before trying to access selectedEvents
* Add configuration for maximum number of retries
* Add index to date
* Add webhook Key to logs
* Check for SchedulingPublisher before sending webhooks
* rename requestObject to payload
* Refactor event to send appropriate payloads
* Refactor logging to happen for every try.
* Order date by descending
* Add todo
* Change firing service to use String not ByteContent
* Update Headers to Interface instead of concrete implementation
* Dont return if a table exists already
* Rename updateModel to webhook
* Annotate WebhookController.cs with PluginController attribute
* Add danish translations
* Do not check if fail
* Dont filter when selecting custom items
* Remove delay from WebhookFiringService
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
* Bump tinymce from 6.7.0 to 6.7.1
* Ensure PackageVersion is set correctly before transforming template.json
* rerun watchers every time we reinit the data
* handle variant content with only one language
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Ronald Barendse <ronald@barend.se>
* update versionSpec to nodejs 20 and avoid specifying minor and patch versions to improve Azure Pipelines stability
* update engines and package lock files
* update helpful displayNames for npm builds
* add retry to counter nodejs.org timeouts
add retryCountOnTaskFailure as suggested on https://developercommunity.visualstudio.com/t/NodeTool0-task-to-install-nodejs-fails/10455454
* implement interface
* add build targets for login screen
* package lock
* move components to pages folder
* load logo and background from property
* styling
* move mocks around
* remove unused vars
* add backoffice handlers
* install rxjs
* add mock data
* add element and context for localization
* mock data
* use umb-localize
* remove the extra logic with check for section_
* change key for login button
* add base to vite environment
* login styling
* cleanup and button styling
* use correct reset url
* change body of reset request
* validate password reset code
* redirect to /login/new on reset password code verify
* add obsolete messages
* remove inline scripts for old backoffice
* remove shadowdom from localize element
* Revert "remove shadowdom from localize element"
This reverts commit 46ae282f7c.
* hook up reset password to api
* rename pages to state as it is not actually used as different pages
* reset password styling
* more styling
* add confirmation page to new password
* set router to firstUpdated to avoid rAF
* set a custom baseUrl on the router to make sure it works without trailing slash
* use route parameters to redirect on the login page to ensure correct escaping
* add server variables
* make sure auth layout uses the provided properties for images
* format
* redirect to code expired page
* add missing properties
* use allowPasswordReset and allowInvite properties in routing and layout
* make ts happy
* cleanup
* init invite page
* hook up usernameIsEmail
* init external login providers
* add mock provider
* add padding to buttons
* replace uui button with normal button
* add external login providers as slot
* add disableLocalLogin property
* add form to external login providers
* remove unused method
* fix build errors
* add attributes for external login
* add custom view to external login
* add new custom icon registry
* attach two icon registries
* use relative paths
* use relative paths
* use main registry instead of providing directly
* add look and color to external login
* implement getIcons() method
* use getIcons() to request icons
* install remixicon to supplement backoffice icons (replacing font-awesome eventually)
* move icon registries to auth element
* Revert "install remixicon to supplement backoffice icons (replacing font-awesome eventually)"
This reverts commit 0c6659d8d9.
* add icons for common external providers
* add more icons
* remove resetCode hack as it is no longer needed
* add validation to new password
* get gretting from translation file
* add hack to get text left aligned in uui-button
* add custom router
* WIP Use router
* also change the URL during an action
* update login action to redirect to /new when needed
* redirect to login from reset and new if not allowed
* fix new password button href
* use property on login element instead of context
* check for redirect on invite-user
* move fake external login providers to index.html for use in dev server
* allow password reset on dev server
* add look and color
* only set styles for default view buttons
* suppress vite import warning
* check and inform for errors and show 'nothing' if a custom view fails to load
* fix mock path for localizedtext
* fix build errors
* ensure that msw (and all its dependencies) do not end up in the production bundle (saved ~500 KB)
* Revert AngularValueExternalLoginInfoScriptAsync removal
* forward the providerName to custom views
* change default icon
* add button look and color to external login provider options
* add obsolete to ButtonStyle and add a mapper to new values
* add required xml comments
* map external login providers to <umb-login-external />
* fix typo
* only show external login layout if there are slotted children
* pass on name as "provider"
* send externalLoginUrl to custom views
* cleanup
* global import
* hide external logins completely when empty
* cleanup
* setup redirect to invite
* rename pages to name-page
* fix names and paths
* use new password layout for invite and new password
* add comments
* cleanup and use confirmation element
* set parameters after successful verifyinvite
* map display-name and provider-name to the external element
* map display-name
* set up external login to handle correct display- and provider-name with documentation
* add support for disabling local login
* update path to handlers
* add more localization
* add handlers for 2fa
* router should support a factory for component
* push login to ?flow=mfa on 402 codes
* add page to handle 2fa/mfa
* add support for custom routing
* add fallback for welcome greeting
* handle AngularJS silliness
* fix typo
* fix router and replace custom umbroute:statechange event with native pushState
* simplify code and cleanup
* a11y improvements
* you can now navigate to anywhere from anywhere with pushState
* access the "twoFactorView" from the backend
* set the default implemented twoFactorView to NULL
* add initial logic to handle a custom mfa view
* roll back custom pushState changes
* add mocks for 2fa custom view
* use router redirect
* re-enable click url change
* cleanup
* remove debug buttons
* add unsafeHTML to localize element
* load mfa custom views
* load custom view
* improve external login custom views
* using optimisation
* add current culture
* only show mfa page if 402 code has been encountered in same session
* format
* remove unnesesary action
* add new user invite password
* remove console log
* fix getting stuck at new password page if you've triggered custom validity
* unify layouts
* add styling to buttons in error layout
* remove unused css
* add error message to new password page
* add error message to reset password
* add error message to invite page
* fix invite page not being rendered
* cleanup
* add obsolete notice to PostSetInvitedUserPassword
* add request model to set a new password for an invited user
* add new method to handle invited user password
* add get password config api call
* fix password config parameters and add invite call
* get invited user
* get password config
* assign unique guid to login project
* add userId to get password config and use the config as validation
* fix
* add alerts
* fix the new password layout
* auth redirects invite error to error page
* use password config on new password page
* remove console log
* move file and remove unused extension
* make ts happy
* file structure
* rename login-extern to external-login-provider
* update element name
* update dependencies
* export custom-view.element.ts
* remove debug
* use umb-custom-view to load custom views
* build types
* move @umbraco/uui to the login app and import from there in backoffice
* make the ui library and icon registry generally available as exports from the login app
* add mock handler for icons
* cleanup package
* use uui for external login providers in the backoffice
* add imports and enable the backoffice icon registry globally
* disable shadowdom
* default background image
* use undefined
* revert angular values
* remove legacy sys variables
* add logic to handle mfa in an overlay scenario without routing
* add new login screen to replace the overlay when logged in to the backoffice
* update spec to work with locators
* cleanup of legacy context
* ViewData is not always required
* add method to solely return the default view of the backoffice to simply BackofficeController as well as unit tests
* add test for the login view
* cleanup usings
* Apply suggestions from code review
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* remove 'remember me'
* add more contrast to external login divider
* update dependencies
* set "lang" attribute to lowercase
* remove default headline
* localize the "Or" divider and add aria-hidden
* remove Umbraco reference from logo and add aria-hidden
* add aria-hidden to uui-icon inside external login buttons
* format code
* update dependencies
* update dependencies
* add translations to invite user page
* use back to login button
* update localization-context.ts to match api from old LocalizeService in Angular
* add tsc to watch
* formatting
* add missing localizations
* fix a11y issues with muted text
* refresh current user after login
* remove unused variable
* add localization
* add localization for error messages
* remove unused var
* return user after login and set successful auth
* retry request queue after login
* add language keys for failed login
* add language keys for failed login
* render the views without a router so that it works inside a modal in the backoffice
* add autocomplete to reset password fields
* add autocomplete to login screen
* add generic error layout to new-password-page
* new-password-layout should be able to handle with and without username
* update language keys
* check for userId before trying to request invited user
* show error when no invited user is found
* place back-to-login button on all error layouts
* update lockfile
---------
Co-authored-by: Jesper Møller Jensen <26099018+JesmoDev@users.noreply.github.com>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Grant all users access to the content recycle bin
If users don't have access to the root node of the content section they now get access to the recycle bin.
* Content editors get access to their nodes and recycle bin
All users with access to the content section will get access to the recycle bin as well as the nodes they have access to, even if they don't have access to the root of the content section
* The second button shouldn't be highlighted automatically if it's in the second tab otherwise both the first and second tabs are highlighted
* Corrected the logic
When building and packaging at the same time, the original template.json file was still included in the generated NuGet package, which resulted in duplicate files with the same name. This change explicitly disables packaging the original file, ensuring only the transformed template.json file (containing the current Umbraco version) is included.
* add Audit Trail to the media info tab just alike the conten
* Change the tranlation from "content ..." to "Media ..."
---------
Co-authored-by: Lucas Bach Bisgaard <lom@novicell.dk>
* Added missing Welsh translations
* added missing mfa en_us keys
* Removed outdated lang keys from the cy lang file
* Fixed some instances of </> to use actual angle brackets in the cy lang file.
* Use DotNetCoreCLI for dotnet pack command
* Use NBGV to get major version and set build number
* Use NBGV_PublicRelease to determine stable build
* Use latest Node patch versions
* Generate NuGet packages during build
currently checks the first group or tab (index 0) that was added to see if there are properties.
This doesn't work well when the tab has a single group, and the group is created after the tab, as the tab will be empty, even though the group has the properties.
there is also some interactions when composing tabs from other doc types, but I didn't have a good amount of time to test this.
* Revert "V10/bugfix/14543 publish descendants (#14763)"
This reverts commit f750bca453.
* Add notification state to "final" published notification when publishing with descendants
* made link to umbraco learning base youtube visible with underline style as per the other links on other dashboards.
* Update membersdashboardvideos.html
---------
Co-authored-by: Georgina Bidder <georgina.bidder@truedigital.co.uk>
Co-authored-by: georgebid <91198628+georgebid@users.noreply.github.com>
* Updated playwright, our builders, and our helpers
* Updated the use of our testhelper methods, we removed the need for sending umbracoApi through the methods as a parameter since it was unnecessary
* Added a timeout
* Updated successNotifications and added a locator
* Removed timeout from successNotification
* Added additional timeouts and updated old locators which were failing
* Updated locator so it only finds one element
* Removed timeouts and added a waitForTimeout
* Removed timeouts
* Removed timeouts
* Added timeouts
* Updated locator
* Added a timeout
* Updated locators for clicking button
* Changed locator for adding the image, sometimes the old locator would find 2 locators
* add button group for multiple preview urls
* generate default + sub buttons for urls
* allow button group to render label without a localisation key
* remove the existing preview button
* add data-element attr for buttons for tours + tests
* use info button style
* set the target of the new window
* get the additional preview urls from the active variant
* Revert "Make sure the property editor layout is contained within its container (prevent Z-index bleed-through) (#13583)"
This reverts commit 8463d906a7.
* remove seemingly unused attribute readonly
* contain everything with contain:layout
this is set if the property editor is in preview mode to make sure all overlays work
* Revert "remove seemingly unused attribute readonly"
This reverts commit 7a2743e8f6.
* Revert "Make sure the property editor layout is contained within its container (prevent Z-index bleed-through) (#13583)"
This reverts commit 8463d906a7.
* remove seemingly unused attribute readonly
* contain everything with contain:layout
this is set if the property editor is in preview mode to make sure all overlays work
* Revert "remove seemingly unused attribute readonly"
This reverts commit 7a2743e8f6.
* Revert "Make sure the property editor layout is contained within its container (prevent Z-index bleed-through) (#13583)"
This reverts commit 8463d906a7.
* remove seemingly unused attribute readonly
* contain everything with contain:layout
this is set if the property editor is in preview mode to make sure all overlays work
* Revert "remove seemingly unused attribute readonly"
This reverts commit 7a2743e8f6.
* Added a longer timeout for the tests. Also bumped the timeout for isSuccessNotificationVisible
* Added a longer timeout for our tests and the isSuccessNotificationVisible method
* Updated the locator for the flaky test. The locator we had before could sometimes find two elements, which resulted in flaky tests.
* Bumped version of playwright
* Updated to use isSuccessNotificationVisible()
* Added a wait for timeout
* Updated to use isSuccessNotificationVisible()
* Bumped the timeouts
* Bumped our timeouts
* Bumped version of our testhelpers
* Updated the button for save and publish and added an wait for timeout
* Added a missing save for the test
* The test could sometimes find two locators. It should be fixes now
* Removed old usage of notification to be visible
* Removed unnecessary timeouts since we have defined the timeouts in the test helpers
* Add configuration/code to not run certain tests based on variables/release builds
* Applied longrunning testAttribute to the worst offenders (>200ms on my machine)
* Fix yaml notation
* split up windows/non windows test runs
* Added supression for moved tests
* Fix yaml validation issues
* Change yaml string parameter null value to empty string
* Convert empty strings to whitespace strings
* Rename and cleanup some paramater to better reflect why we use them
* Nightly build test
* Change nightly build authentication type
* template paramater fix
* Update nightly pipeline name
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Add visuallyHiddenTexts area and keys to swedish
Translations contributed by @plannero
* Add missing localizations.
* Revert prettier formatting
* Format in visual studio
* Change default UpgradeUnattended value to true (#13281)
* add labels to default en.xml + small glitch fix
* Added test for checking if a settings model contains default value.
Fixed tests
* Bumped version
* Moved createSliderWithDefaultValue function to our testHelpers. Removed the use of count in test since there was only one
Sometimes a tab, e.g. a "block list settings model" might register some default values, but if the user never clicks on the tab then they are not registered due to how AngularJS renders views with "ng-if".
* Added test for checking if a settings model contains default value.
Fixed tests
* Bumped version
* Moved createSliderWithDefaultValue function to our testHelpers. Removed the use of count in test since there was only one
Sometimes a tab, e.g. a "block list settings model" might register some default values, but if the user never clicks on the tab then they are not registered due to how AngularJS renders views with "ng-if".
* chore: Fix XML warnings
* docs: Fix XML warnings
* docs: Fix XML in resource designer
* docs: Fix XML warnings
* Revert "docs: Fix XML in resource designer"
This reverts commit 8ea61c51ac.
* Use interfaces for API media return values + introduce dedicated models for crops and focal points
* Move content and media controllers to their own namespaces
* WIP: Fix publish descendants and related notifications
* Removed related entitities from publish notification
* Fixed root not being saved when publishingWithDescendants
* Updated integrationtests to reflect the update view on when to save the root when its part of a branch
* PR formatting fix
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* PR Cleanup
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Spicing up the codebase with some PR pattern matching
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* WIP: Fix publish descendants and related notifications
* Removed related entitities from publish notification
* Fixed root not being saved when publishingWithDescendants
* Updated integrationtests to reflect the update view on when to save the root when its part of a branch
* PR formatting fix
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* PR Cleanup
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Spicing up the codebase with some PR pattern matching
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Revert "Change default UpgradeUnattended value to true (#13281)"
This reverts commit e5d6372dbd.
* Set UpgradeUnattended value to true for new projects
* Revert "Change default UpgradeUnattended value to true (#13281)"
This reverts commit e5d6372dbd.
* Set UpgradeUnattended value to true for new projects
This is needed so it can be used as a discriminator field by System.Text.Json
Changed both ApiElement and IApiElement to ensure not only ApiContentResponse,
but also ApiBlockItem, which uses the interface directly, are adjusted.
* don't set label key to entire content model...
* Remove the default parameter value
---------
Co-authored-by: kjac <kja@umbraco.dk>
(cherry picked from commit 5dfb914e0f)
* Fix IndexOutOfRangeException when converting single value to range in SliderValueConverter
* Fix NullReferenceException while deserializing empty value in TagsValueConverter
* Use invariant decimal parsing
* Handle converting from slider to single value
* Fix parsing range as single value
* Make Handle methods autonomous
---------
Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
* Fix IndexOutOfRangeException when converting single value to range in SliderValueConverter
* Fix NullReferenceException while deserializing empty value in TagsValueConverter
* Use invariant decimal parsing
* Handle converting from slider to single value
* Fix parsing range as single value
* Make Handle methods autonomous
---------
Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
* Fix IndexOutOfRangeException when converting single value to range in SliderValueConverter
* Fix NullReferenceException while deserializing empty value in TagsValueConverter
* Use invariant decimal parsing
* Handle converting from slider to single value
* Fix parsing range as single value
* Make Handle methods autonomous
---------
Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
* Introduce media API - controllers, services, tests, Swagger docs
* Add path to media API response + add "by path" endpoint
* Review comments
* Implement filtering and sorting
* Add explicit media access configuration
* Cleanup
* Adding default case as in the MediaApiControllerBase
* Update src/Umbraco.Cms.Api.Delivery/Services/ApiMediaQueryService.cs
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Swap sort order calculation to align with Content API
* Add CreateDate and UpdateDate to media responses
* Mirror Content Delivery API behavior for empty children selector
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Implemented modular architecture for filestream security sanitization with an svg-html example
* 31440: Refactoring, applied to more entry points and removed test analyzer
* 31440 Added Unittests for FileStreamSecurityValidator
* PR fixes and better unittest mock names
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Use minimal hosting model
* Make CoreRuntime backward compatible to the old hosting model
* Remove unneccessary methods from interface again
* Pushed the timeout for E2E test to 120 minutes instead of 60
* Updated the preview version from 6 to 7
* Explicitly call BootUmbracoAsync
* Add CreateUmbracoBuilder extension method
* Do not add IRuntime as hosted service when using WebApplication/WebApplicationBuilder
* Set StaticServiceProvider.Instance before booting
* Ensure Umbraco is booted and StaticServiceProvider.Instance is set before configuring middleware
* Do not enable static web assets on production environments
* Removed root namespace from viewImports
---------
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Updated the name of our Acceptance test project.
The reason is because we want the naming to be clear and concise.
* Changed the name of the e2e pipeline project name for linux
* Updated dll file
* Obsolete constructor with deprecated IScopeProvider
* Add exclusion setting to typefinder settings
* The old TypeFinder constructor calls the new constructor now instead and excluded duplicates by using Union instead of Concat.
* Revert "The old TypeFinder constructor calls the new constructor now instead and excluded duplicates by using Union instead of Concat."
This reverts commit 87801c6c1c.
* Add changes to TypeFinder
* Do not use null when type is not nullable
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Obsolete constructor with deprecated IScopeProvider
* Add exclusion setting to typefinder settings
* The old TypeFinder constructor calls the new constructor now instead and excluded duplicates by using Union instead of Concat.
* Revert "The old TypeFinder constructor calls the new constructor now instead and excluded duplicates by using Union instead of Concat."
This reverts commit 87801c6c1c.
* Add changes to TypeFinder
* Do not use null when type is not nullable
---------
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
The validation errors should not happen as the model mapping cleans up block data for entity types that do not longer exist (which is checked on the aformentioned key)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
The validation errors should not happen as the model mapping cleans up block data for entity types that do not longer exist (which is checked on the aformentioned key)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Added new configuration "Umbraco:CMS:Examine:ExplicitlyIndexEachNestedProperty" that can be used to avoid nested properties like block grid to index each property individually.
* Moved the setting "Umbraco:CMS:Examine:ExplicitlyIndexEachNestedProperty" to "Umbraco:CMS:Indexing:ExplicitlyIndexEachNestedProperty" to make it more future proof
* Added missing registration
* Fixed registration
* Small readability improvement
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Added new configuration "Umbraco:CMS:Examine:ExplicitlyIndexEachNestedProperty" that can be used to avoid nested properties like block grid to index each property individually.
* Moved the setting "Umbraco:CMS:Examine:ExplicitlyIndexEachNestedProperty" to "Umbraco:CMS:Indexing:ExplicitlyIndexEachNestedProperty" to make it more future proof
* Added missing registration
* Fixed registration
* Small readability improvement
---------
Co-authored-by: Sven Geusens <sge@umbraco.dk>
* Added explicit migration for AddOpenIddict and
* Renamed the UmbracoOpenIddictDbContextModelSnapshot to UmbracoDbContextModelSnapshot to align with the name of the DBContext
* Added comment to UmbracoDbContext about it is for internal use
* Only execute all migrations at initial install time
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Add position relative to button to fix issue with umb-outline on button element
* Add pattern attribute to get more specific virtual numeric keyboard on some devices as we expect integer values
* Fix missing localization of title attributes due missing @ prefix
* Fix incorrect end-closing tag
* V12: Dropzone should handle internal and external errors when uploading (#14579)
* fix: for safety measure check that a file is truthy before trying to upload it
* fix: push an error when file.$error is encountered to make sure it does not get uploaded
* fix: mark file as done if it errors
* format error messages
* fix: check for maxFileSize before uploading pasted images in tinymce
* remove the image from the DOM if any error is encountered
* feat: add property to fileManager to get and format the maxFileSize
* fix: make tinymce use fileManager to get maxFileSize
* fix(image cropper): check for maxFileSize before setting file to upload
* multiply by 1000 to get bytes
* V11/merge v10 into v11 (#14602)
* V10: Dropzone should handle internal and external errors when uploading (#14578)
* fix: mark files that result in error as processed
* fix: for safety measure check that a file is truthy before trying to upload it
* fix: push an error when file.$error is encountered to make sure it does not get uploaded
* fix: remove header from error messages since it is not being used anyway
* fix: check for maxFileSize before uploading pasted images in tinymce
* use stored blob variable
* feat: add property to fileManager to get and format the maxFileSize
* fix: make tinymce use fileManager to get maxFileSize
* fix(image cropper): check for maxFileSize before setting file to upload
* multiply by 1000 to get bytes
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
* Fix method invoke. (#14597)
* Ensure that the Slider does not crash the back-office (#14601)
* Ensure that the Slider does not crash the back-office
* Add field descriptions to config
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Adrian Cojocariu <95346674+acoumb@users.noreply.github.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Adrian Cojocariu <95346674+acoumb@users.noreply.github.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* V10: Dropzone should handle internal and external errors when uploading (#14578)
* fix: mark files that result in error as processed
* fix: for safety measure check that a file is truthy before trying to upload it
* fix: push an error when file.$error is encountered to make sure it does not get uploaded
* fix: remove header from error messages since it is not being used anyway
* fix: check for maxFileSize before uploading pasted images in tinymce
* use stored blob variable
* feat: add property to fileManager to get and format the maxFileSize
* fix: make tinymce use fileManager to get maxFileSize
* fix(image cropper): check for maxFileSize before setting file to upload
* multiply by 1000 to get bytes
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
* Fix method invoke. (#14597)
* Ensure that the Slider does not crash the back-office (#14601)
* Ensure that the Slider does not crash the back-office
* Add field descriptions to config
---------
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Adrian Cojocariu <95346674+acoumb@users.noreply.github.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
* fix: for safety measure check that a file is truthy before trying to upload it
* fix: push an error when file.$error is encountered to make sure it does not get uploaded
* fix: mark file as done if it errors
* format error messages
* fix: check for maxFileSize before uploading pasted images in tinymce
* remove the image from the DOM if any error is encountered
* feat: add property to fileManager to get and format the maxFileSize
* fix: make tinymce use fileManager to get maxFileSize
* fix(image cropper): check for maxFileSize before setting file to upload
* multiply by 1000 to get bytes
* fix: for safety measure check that a file is truthy before trying to upload it
* fix: push an error when file.$error is encountered to make sure it does not get uploaded
* fix: mark file as done if it errors
* format error messages
* fix: check for maxFileSize before uploading pasted images in tinymce
* remove the image from the DOM if any error is encountered
* feat: add property to fileManager to get and format the maxFileSize
* fix: make tinymce use fileManager to get maxFileSize
* fix(image cropper): check for maxFileSize before setting file to upload
* multiply by 1000 to get bytes
* fix: mark files that result in error as processed
* fix: for safety measure check that a file is truthy before trying to upload it
* fix: push an error when file.$error is encountered to make sure it does not get uploaded
* fix: remove header from error messages since it is not being used anyway
* fix: check for maxFileSize before uploading pasted images in tinymce
* use stored blob variable
* feat: add property to fileManager to get and format the maxFileSize
* fix: make tinymce use fileManager to get maxFileSize
* fix(image cropper): check for maxFileSize before setting file to upload
* multiply by 1000 to get bytes
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
* Fixes an incorrect property name used for generating JSON schema.
* Added JSON schema/intellisense for default data dictionary keys.
* Renamed private variable to match setting name.
* Update rte-content.less
#14325 - Remove wildcard-background from RTE
* Update rte-content.less
I did an update. 🙂
The transparent background is there because the tinymce theme Oxide adds a background-color to all selected elements.
So the umbraco added transparent background makes white text not be visible.
https://github.com/tinymce/oxide/blob/012346905578b0d7e59f7000d447f56243243b4a/src/less/theme/content/selection/selection.less#L50C2-L50C2
So I put back the transparent background-color and added a @blueExtraDark as text-color
I have updated the issue with more details.
* Change the obsoletion messages for language IDs to target V14 instead of V13.
* Wrong Language file
* Add ISO codes required to migrate custom code from language IDs
* Population of the new language FallbackIsoCode prop
* Changing obsoletion msgs from v13 to v14
* Fix breaking changes
* add method to find and persist embedded base64 (data-uri) images in a html string
* use method to find embedded images in the Umbraco.TinyMce and Umbraco.Grid property editors
* rename method to better reflect what it does
* set allowed upload file types for integration tests
* add test for embedded images in Umbraco.TinyMce
* let old ctor call new ctor
* Apply suggestions from code review
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* apply pattern matching
---------
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
* Don't login after install
* Fail the install if database is not created
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
* Don't login after install
* Fail the install if database is not created
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
* Don't login after install
* Fail the install if database is not created
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
* Added test for checking if a settings model contains default value.
Fixed tests
* Bumped version
* Moved createSliderWithDefaultValue function to our testHelpers. Removed the use of count in test since there was only one
* Cleaned up in Advanced
* Cleaned up in Areas
* Cleaned up in Content
* Cleaned up in Rendering
* Cleaned up in Settings
* Updated the timeout to 40 seconds, 30 seconds is not always enough anymore.
* Bumped version of testhelpers and builders
Sometimes a tab, e.g. a "block list settings model" might register some default values, but if the user never clicks on the tab then they are not registered due to how AngularJS renders views with "ng-if".
* Updated the package validation baseline version to 12 RC1
* Update PackageValidationBaselineVersion to 12.0.0 and remove CompatibilitySuppressions.xml files
* Clean up project files
---------
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Update to .net 8 preview 1
* Update npoco to 5.7.0
* Update pipeline to use .net 8
* Revert "Update npoco to 5.7.0"
This reverts commit f7795afa77.
* Fix tests and updated OpenApi.json
* use dotnet 8 in linux container
* Updated templates and docker image to dotnet 8
* Bugfix
* R
Updated docker images to 8.0 preview 1
* linux docker images updated
* Force use c# 11, in hope of the acceptance tests will pass
* Do not use C# 8 :)
* Update to preview 2
* CompatibilitySuppressions
* updated templates
* Disable package validation
* Update to .net8 preview 4
* change EnableStrictModeForCompatibleFrameworksInPackage to false
* Package validation
* Added CompatibilitySuppressions.xml
* Fix up IP networks
* Updated to preview 5
* Update docker images
* Post merge fixes
* Try to update dotnet version of codeql
* Delete empty suppression files
* Remove dependency
* Cleanup
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
* Fix broken CookieAuthenticationRedirect caused by PR #14036 when not in an API controller
* Added Integration Tests for the MemberAuthorizationFilter
* Fix merge conflict
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
(cherry picked from commit 1d239a30ca)
* Load default icons to show them next to checkboxes in configuration of richtext editor
* More mapping of icons
* Fix vertical align items centered not reflected
* Wrap mapping in function
* Map a few more icons
* Cleanup and formatting
* Cleanup
* Cleanup
* Add period in description
(cherry picked from commit 583965cf9d)
* fix: #12253 Anchor picker does not appear
* Update ContentServiceExtensions.cs
fix: #12253#13492 ; implement PR suggestions, test the new changes to confirm that they fix the issue with the anchorlink implementation on RTE from blocklist, blockgrid and normal RTE properties
Co-Authored-By: Laura Neto <12862535+lauraneto@users.noreply.github.com>
* Removed unnecessary using and code
* Small adjustments
---------
Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
(cherry picked from commit 1ba834a9ca)
* Update the tour text to the correct text and to save confusion
* Added extra information to the delete language warning to inform the user that it will also delete all content related to the language
* Updated language files with same message re deletion
---------
Co-authored-by: Paul Seal <p.seal@clerkswell.com>
Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
(cherry picked from commit 542d0f7f74)
* Fix broken CookieAuthenticationRedirect caused by PR #14036 when not in an API controller
* Added Integration Tests for the MemberAuthorizationFilter
* Fix merge conflict
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
* check section when determining package template path
* return sectionAlias as packageFolder and the route segment won't always match
* fix test
* adds PluginController attribute to StylesheetsTreeController
fixes actionUrl generation to ensure valid URL
find controller by fullname to avoid incorrect controller selection when multiple exist with same name
* Fix frontend breaking changes
* Adding missing PluginController attribute for ScriptsTreeController
---------
Co-authored-by: Elitsa <elm@umbraco.dk>
* Added migrations to install EF Core OpenIddict tables
* Handle Install of ef core data (Needs to be outside of transaction
* Cleanup and renaming, as these things will be reused for more than openiddict in the future
* Cleanup
* Extract db context setup
* Minor cleanup
---------
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
* Ensure path starts with forward slash in all cases
* Fix path in preview when getting by route
* Reintroduce path.length check
* Revert previous changes
* Add support for property value fallbacks in the delivery API
* Add dedicated tests for the IDeliveryApiPropertyValueConverter interface
* Rewrite for less impact and more streamlined with Razor output
* Clean up DistributedCache and add additional checks
* Add IEnumerable overloads to DistributedCacheExtensions
* Update handlers to use new IEnumerable overloads
* Move DistributedCacheExtensions to Core
* Restructure cache refreshers into folders
* Add IDistributedCacheNotificationHandler
* Rewrite DistributedCacheBinder into seperate IDistributedCacheNotificationHandler implementations
* Obsolete DistributedCacheBinder and use new IDistributedCacheHandler implementations
* Clean up ServerMessengerBase
* Ensure cache refreshers only process distinct values
* Add support for publishing multiple notifications and filter on handler type
* Suppress compatibility issues
* Remove DistributedCacheBinder and suppress compatibility issues
* Add ScopedNotificationPublisher<TNotificationHandler>
* Improve notification type lookup/enumeration
* Ensure INotificationAsyncHandler handles multiple notitications sequentially
* Minimize cache instruction JSON
* Chunk notifications by type to keep publish order
* Only serialize required RefreshInstruction properties
* Adding query params documentation
* Adding headers
* Rename file
* Added a few more descriptions and changed a few as well
---------
Co-authored-by: kjac <kja@umbraco.dk>
* Load default icons to show them next to checkboxes in configuration of richtext editor
* More mapping of icons
* Fix vertical align items centered not reflected
* Wrap mapping in function
* Map a few more icons
* Cleanup and formatting
* Cleanup
* Cleanup
* Add period in description
* Load default icons to show them next to checkboxes in configuration of richtext editor
* More mapping of icons
* Fix vertical align items centered not reflected
* Wrap mapping in function
* Map a few more icons
* Cleanup and formatting
* Cleanup
* Cleanup
* Add period in description
* Load default icons to show them next to checkboxes in configuration of richtext editor
* More mapping of icons
* Fix vertical align items centered not reflected
* Wrap mapping in function
* Map a few more icons
* Cleanup and formatting
* Cleanup
* Cleanup
* Add period in description
* Load default icons to show them next to checkboxes in configuration of richtext editor
* More mapping of icons
* Fix vertical align items centered not reflected
* Wrap mapping in function
* Map a few more icons
* Cleanup and formatting
* Cleanup
* Cleanup
* Add period in description
* fix: #12253 Anchor picker does not appear
* Update ContentServiceExtensions.cs
fix: #12253#13492 ; implement PR suggestions, test the new changes to confirm that they fix the issue with the anchorlink implementation on RTE from blocklist, blockgrid and normal RTE properties
Co-Authored-By: Laura Neto <12862535+lauraneto@users.noreply.github.com>
* Removed unnecessary using and code
* Small adjustments
---------
Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
* Update the tour text to the correct text and to save confusion
* Added extra information to the delete language warning to inform the user that it will also delete all content related to the language
* Updated language files with same message re deletion
---------
Co-authored-by: Paul Seal <p.seal@clerkswell.com>
Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
* Disable sortable if readonly or max is set limited to one item
* Disable sortable on single URL picker
* Don't disable block list sorting based on validation limit, but do for single block mode
* Disable sorting in media picker 3 in single mode
* Remove extra whitespace
* Disable draggable
* Tweaked wording of "item(s)"
---------
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
* Added secure to the UMB-XSRF-V cookie when global https is true.
* tweaked markdown handling
* added in link handling tweak for simpleMarkdown filter
* tweaked simple markdown filter to modify all links instead of just the first one
* moved transformation of markdown content in description into C# code
* Format of white space
* Reverted unecessary change.
* Removed unwanted framework version lines
* Reduce nesting of if statements.
* Changed to .Contains for readability.
---------
Co-authored-by: Corey Philipp <CPhilipp@dewpoint.com>
Co-authored-by: jaandrews <jaandrews88@gmail.com>
Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
* Support draft-only content in the Delivery API query
* Allow outputting "entirely unpublished" content
* Make the preview path explicit to avoid clashing endpoints
* Handle trailing slash setting for preview URLs
* Update src/Umbraco.Infrastructure/Examine/DeliveryApiContentIndexValueSetBuilder.cs
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Remove superfluous (and incorrect) unpublished route handling
* Make sure preview output includes routes for unpublished cultures
* Ensure that published content with unpublished ancestors are available in preview
* Fix route start item when previewing published content with unpublished parent
---------
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
* Add VersionAssemblyName to package manifest
* Fix/improve nullability
* Ensure package version from manifest is set when package migration exists
* Set versionAssemblyName in umbracopackage template
* Use Assembly.Load instead of ITypeFinder
* Use AssemblyLoadContext to get asesmbly by name
* Add PackageId to package manifest
* Show ID on installed packages overview
* Fallback to package ID to get assembly version
* Include package ID in telemetry data
* Set id in umbracopackage template
* Add PackageId to PackageMigrationPlan
* Get version from package migration assembly
* Hide unknown package version
* Always use package name from manifest
* Use IPackagingService to return package telemety data
* Set versionAssemblyName in umbracopackage-rcl template
* Set id in umbracopackage-rcl template
* Add VersionAssemblyName to package manifest
* Fix/improve nullability
* Ensure package version from manifest is set when package migration exists
* Set versionAssemblyName in umbracopackage template
* Use Assembly.Load instead of ITypeFinder
* Use AssemblyLoadContext to get asesmbly by name
* Get version from package migration assembly
* Hide unknown package version
* Set versionAssemblyName in umbracopackage-rcl template
* Adding support for contains filters
* Making a dedicated name filter and making changes to the sort indexer
* Fixed the merge from release/12.0
* Make the "name" filter support OR for comma separated filter values
---------
Co-authored-by: kjac <kja@umbraco.dk>
* add .nvmrc to instruct NVM of preferred version
* update azure-pipelines.yml with node 18.16
* update "engines" section of package.json with preferred node.js 18.16
* update lockfiles in accordance with node 18 (lockfileVersion: 3)
* add .nvmrc to instruct NVM of preferred version
* update azure-pipelines.yml with node 18.16
* update "engines" section of package.json with preferred node.js 18.16
* update lockfiles in accordance with node 18 (lockfileVersion: 3)
* Implement available culture in Interface and base classes
* Add available cultures
* DI localizationService and use it
* Make the new method have default implementation to avoid breaking change
* Create implementations for old method
* Pass available cultures
* Pass localization service
* Create new method that takes available cultures
* Add ILocalizationService to DI
* implement missing method
* Add database for schema test
* Fixed issue with indexes not added correctly to nested types..
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Implement available culture in Interface and base classes
* Add available cultures
* DI localizationService and use it
* Make the new method have default implementation to avoid breaking change
* Create implementations for old method
* Pass available cultures
* Pass localization service
* Create new method that takes available cultures
* Add ILocalizationService to DI
* implement missing method
* Add database for schema test
* Fixed issue with indexes not added correctly to nested types..
---------
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
* Append start item to RTE markup
* Split the Examine specifics from API query service (#14257)
* Split the Examine specifics from API query service to a provider based model
* Review changes: Use paged model as provider return value + add logging
* Fix version
* Revert incidentally changed version number by targeting wrong branch
* Fix wrongly changed version number --- it's RC2 now
---------
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
* Split the Examine specifics from API query service to a provider based model
* Review changes: Use paged model as provider return value + add logging
These contribution guidelines are mostly just that - guidelines, not rules. This is what we've found to work best over the years, but if you choose to ignore them, we still love you! 💖 Use your best judgement, and feel free to propose changes to this document in a pull request.
## Coding not your thing? Or want more ways to contribute?
## Getting Started
We have a guide on [what to consider before you start](contributing-before-you-start.md) and more detailed guides at the end of this article.
This document covers contributing to the codebase of the CMS but [the community site has plenty of inspiration for other ways to get involved.][get involved]
If you don't feel you'd like to make code changes here, you can visit our [documentation repository][docs repo] and use your experience to contribute to making the docs we have, even better.
We also encourage community members to feel free to comment on others' pull requests and issues - the expertise we have is not limited to the Core Collaborators and HQ. So, if you see something on the issue tracker or pull requests you feel you can add to, please don't be shy.
## Table of contents
- [Before you start](#before-you-start)
* [Code of Conduct](#code-of-conduct)
* [What can I contribute?](#what-can-i-contribute)
+ [Making larger changes](#making-larger-changes)
+ [Pull request or package?](#pull-request-or-package)
+ [Ownership and copyright](#ownership-and-copyright)
- [Finding your first issue: Up for grabs](#finding-your-first-issue-up-for-grabs)
- [Making your changes](#making-your-changes)
+ [Keeping your Umbraco fork in sync with the main repository](#keeping-your-umbraco-fork-in-sync-with-the-main-repository)
+ [Style guide](#style-guide)
+ [Questions?](#questions)
- [Creating a pull request](#creating-a-pull-request)
- [The review process](#the-review-process)
* [Dealing with requested changes](#dealing-with-requested-changes)
| Small PRs | Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files. |
| Large PRs | New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGet’s packages.config, NPM’s packages.json, etc.). |
We’re usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly [as per the described process][review process].
We would love to follow the same process for larger PRs but this is not always possible due to time limitations and priorities that need to be aligned. We don’t want to put up any barriers, but this document should set the correct expectations.
Not all changes are wanted, so on occasion we might close a PR without merging it but if we do, we will give you feedback why we can't accept your changes. **So make sure to [talk to us before making large changes][making larger changes]**, so we can ensure that you don't put all your hard work into something we would not be able to merge.
#### Making larger changes
[making larger changes]: #making-larger-changes
Please make sure to describe your larger ideas in an [issue (bugs)][issues] or [discussion (new features)][discussions], it helps to put in mock up screenshots or videos. If the change makes sense for HQ to include in Umbraco CMS we will leave you some feedback on how we’d like to see it being implemented.
If a larger pull request is encouraged by Umbraco HQ, the process will be similar to what is described in the small PRs process above, we strive to feedback within 14 days. Finalizing and merging the PR might take longer though as it will likely need to be picked up by the development team to make sure everything is in order. We’ll keep you posted on the progress.
#### Pull request or package?
[pr or package]: #pull-request-or-package
If you're unsure about whether your changes belong in the core Umbraco CMS or if you should turn your idea into a package instead, make sure to [talk to us][making larger changes].
If it doesn’t fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and fix bugs. Eventually, a package could "graduate" to be included in the CMS.
#### Ownership and copyright
It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.
Similarly, if your contribution is copied or adapted from somewhere else, make sure that the license allows you to reuse that for a contribution to Umbraco-CMS.
If you're not sure, leave a note on your contribution and we will be happy to guide you.
When your contribution has been accepted, it will be [MIT licensed][MIT license] from that time onwards.
## Finding your first issue: Up for grabs
Umbraco HQ will regularly mark newly created issues on the issue tracker with [the `community/up-for-grabs` tag][up for grabs issues]. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. We encourage anyone to pick them up and help out.
If you do start working on something, make sure to leave a small comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has.
## Making your changes
Great question! The short version goes like this:
The following steps are a quick-start guide:
1.**Fork**
Create a fork of [`Umbraco-CMS` on GitHub][UmbracoCMS repo]
Create a fork of [`Umbraco-CMS` on GitHub](https://github.com/umbraco/Umbraco-CMS)

1.**Clone**
2.**Clone**
When GitHub has created your fork, you can clone it in your favorite Git tool
When GitHub has created your fork, you can clone it in your favorite Git tool or on the command line with `git clone https://github.com/[YourUsername]/Umbraco-CMS`.

1.**Switch to the correct branch**
3.**Switch to the correct branch**
Switch to the `contrib` branch
1.**Build**
4.**Build**
Build your fork of Umbraco locally as described in the build documentation: you can [debug with Visual Studio Code][build - debugging with code] or [with Visual Studio][build - debugging with vs].
Build your fork of Umbraco locally [as described in the build documentation](BUILD.md), you can build with any IDE that supports dotnet or the command line.
1.**Branch**
5.**Branch**
Create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case issue number `12345`. Don't commit to `contrib`, create a new branch first.
Create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp/12345`. This means it's a temporary branch for the particular issue you're working on, in this case issue number `12345`. Don't commit to `contrib`, create a new branch first.
1.**Change**
6.**Change**
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback][questions].
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](contributing-first-issue.md#questions).
1.**Commit and push**
7.**Commit and push**
Done? Yay! 🎉
Remember to commit to your new `temp` branch, and don't commit to `contrib`. Then you can push the changes up to your fork on GitHub.
#### Keeping your Umbraco fork in sync with the main repository
Once you've already got a fork and cloned your fork locally, you can skip steps 1 and 2 going forward. Just remember to keep your fork up to date before making further changes.
On GitHub, in your forked repository (`https://github.com/[YourUsername]/Umbraco-CMS`) you will see a banner saying that you pushed a new branch and a button to make a pull request. Tap the button and follow the instuctions.
To sync your fork with this original one, you'll have to add the upstream url. You only have to do this once:
Want to read further? [Creating a pull request and what happens next](contributing-creating-a-pr.md).
- [Other ways to contribute](contributing-other-ways-to-contribute.md)
```
git fetch upstream
git rebase upstream/contrib
```
In this command we're syncing with the `contrib` branch, but you can of course choose another one if needed.
[More information on how this works can be found on the thoughtbot blog.][sync fork ext]
#### Style guide
To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up.
That said, the Umbraco development team likes to follow the hints that ReSharper gives us (no problem if you don't have this installed) and we've added a `.editorconfig` file so that Visual Studio knows what to do with whitespace, line endings, etc.
#### Questions?
[questions]: #questions
You can get in touch with [the core contributors team][core collabs] in multiple ways; we love open conversations and we are a friendly bunch. No question you have is stupid. Any question you have usually helps out multiple people with the same question. Ask away:
- If there's an existing issue on the issue tracker then that's a good place to leave questions and discuss how to start or move forward.
- If you want to ask questions on some code you've already written you can create a draft pull request, [detailed in a GitHub blog post][draft prs].
- Unsure where to start? Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"][contrib forum] forum. The team monitors that one closely, so one of us will be on hand and ready to point you in the right direction.
## Creating a pull request
Exciting! You're ready to show us your changes.
We recommend you to [sync with our repository][sync fork] before you submit your pull request. That way, you can fix any potential merge conflicts and make our lives a little bit easier.
GitHub will have picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go.

We like to use [git flow][git flow] as much as possible, but don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to `contrib`. This is the branch you should be targeting.
Please note: we are no longer accepting features for v8 and below but will continue to merge security fixes as and when they arise.
## The review process
[review process]: #the-review-process
You've sent us your first contribution - congratulations! Now what?
The [Core Collaborators team][Core collabs] can now start reviewing your proposed changes and give you feedback on them. If it's not perfect, we'll either fix up what we need or we can request that you make some additional changes.
You will get an initial automated reply from our [Friendly Umbraco Robot, Umbrabot][Umbrabot], to acknowledge that we’ve seen your PR and we’ll pick it up as soon as we can. You can take this opportunity to double check everything is in order based off the handy checklist Umbrabot provides.
You will get feedback as soon as the [Core Collaborators team][Core collabs] can after opening the PR. You’ll most likely get feedback within a couple of weeks. Then there are a few possible outcomes:
- Your proposed change is awesome! We merge it in and it will be included in the next minor release of Umbraco
- If the change is a high priority bug fix, we will cherry-pick it into the next patch release as well so that we can release it as soon as possible
- Your proposed change is awesome but needs a bit more work, we’ll give you feedback on the changes we’d like to see
- Your proposed change is awesome but... not something we’re looking to include at this point. We’ll close your PR and the related issue (we’ll be nice about it!). See [making larger changes][making larger changes] and [pull request or package?][pr or package]
### Dealing with requested changes
If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco!
#### No longer available?
We understand you have other things to do and can't just drop everything to help us out.
So if we’re asking for your help to improve the PR we’ll wait for two weeks to give you a fair chance to make changes. We’ll ask for an update if we don’t hear back from you after that time.
If we don’t hear back from you for 4 weeks, we’ll close the PR so that it doesn’t just hang around forever. You’re very welcome to re-open it once you have some more time to spend on it.
There will be times that we really like your proposed changes and we’ll finish the final improvements we’d like to see ourselves. You still get the credits and your commits will live on in the git repository.
### The Core Collaborators team
[Core collabs]: #the-core-collaborators-team
The Core Contributors team consists of one member of Umbraco HQ, [Sebastiaan][Sebastiaan], who gets assistance from the following community members who have committed to volunteering their free time:
- [Busra Sengul][Busra Sengul]
- [Emma Garland][Emma Garland]
- [George Bidder][George Bidder]
- [Jason Elkin][Jason Elkin]
- [Laura Neto][Laura Neto]
- [Michael Latouche][Michael Latouche]
- [Sebastiaan][Sebastiaan]
These wonderful people aim to provide you with a reply to your PR, review and test out your changes and on occasions, they might ask more questions. If they are happy with your work, they'll let Umbraco HQ know by approving the PR. HQ will have final sign-off and will check the work again before it is merged.
[](https://twitter.com/intent/follow?screen_name=umbraco)
[](https://discord.gg/umbraco)
[](https://discord-chats.umbraco.com)
[](https://github.com/codespaces/new?hide_repo_select=true&ref=contrib&repo=10601208&machine=basicLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=WestEurope)
Umbraco is the friendliest, most flexible and fastest growing ASP.NET CMS, and used by more than 500,000 websites worldwide. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social.
| Small PRs | Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files. |
| Large PRs | New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGet’s packages.config, NPM’s packages.json, etc.). |
We’re usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly [as per the described process][review process].
We would love to follow the same process for larger PRs but this is not always possible due to time limitations and priorities that need to be aligned. We don’t want to put up any barriers, but this document should set the correct expectations.
Not all changes are wanted, so on occasion we might close a PR without merging it but if we do, we will give you feedback why we can't accept your changes. **So make sure to [talk to us before making large changes][making larger changes]**, so we can ensure that you don't put all your hard work into something we would not be able to merge.
#### Making larger changes
[making larger changes]: #making-larger-changes
Please make sure to describe your larger ideas in an [issue (bugs)][issues] or [discussion (new features)][discussions], it helps to put in mock up screenshots or videos. If the change makes sense for HQ to include in Umbraco CMS we will leave you some feedback on how we’d like to see it being implemented.
If a larger pull request is encouraged by Umbraco HQ, the process will be similar to what is described in the small PRs process above, we strive to feedback within 14 days. Finalizing and merging the PR might take longer though as it will likely need to be picked up by the development team to make sure everything is in order. We’ll keep you posted on the progress.
#### Pull request or package?
[pr or package]: #pull-request-or-package
If you're unsure about whether your changes belong in the core Umbraco CMS or if you should turn your idea into a package instead, make sure to [talk to us][making larger changes].
If it doesn’t fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and fix bugs. Eventually, a package could "graduate" to be included in the CMS.
#### Ownership and copyright
It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.
Similarly, if your contribution is copied or adapted from somewhere else, make sure that the license allows you to reuse that for a contribution to Umbraco-CMS.
If you're not sure, leave a note on your contribution and we will be happy to guide you.
When your contribution has been accepted, it will be [MIT licensed][MIT license] from that time onwards.
The Core Contributors team consists of one member of Umbraco HQ, [Sebastiaan][Sebastiaan], who gets assistance from the following community members who have committed to volunteering their free time:
- [Busra Sengul][Busra Sengul]
- [Emma Garland][Emma Garland]
- [George Bidder][George Bidder]
- [Jason Elkin][Jason Elkin]
- [Laura Neto][Laura Neto]
- [Kyle Eck][Kyle Eck]
- [Michael Latouche][Michael Latouche]
- [Sebastiaan][Sebastiaan]
These wonderful people aim to provide you with a reply to your PR, review and test out your changes and on occasions, they might ask more questions. If they are happy with your work, they'll let Umbraco HQ know by approving the PR. HQ will have final sign-off and will check the work again before it is merged.
We recommend you to [sync with our repository][sync fork] before you submit your pull request. That way, you can fix any potential merge conflicts and make our lives a little bit easier.
GitHub will have picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go.

We like to use [git flow][git flow] as much as possible, but don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to `contrib`. This is the branch you should be targeting.
Please note: we are no longer accepting features for v8 and below but will continue to merge security fixes as and when they arise.
## The review process
[review process]: #the-review-process
You've sent us your contribution - congratulations! Now what?
The [Core Collaborators team][Core collabs] can now start reviewing your proposed changes and give you feedback on them. If it's not perfect, we'll either fix up what we need or we can request that you make some additional changes.
You will get an initial automated reply from our [Friendly Umbraco Robot, Umbrabot][Umbrabot], to acknowledge that we’ve seen your PR and we’ll pick it up as soon as we can. You can take this opportunity to double check everything is in order based off the handy checklist Umbrabot provides.
You will get feedback as soon as the [Core Collaborators team][Core collabs] can after opening the PR. You’ll most likely get feedback within a couple of weeks. Then there are a few possible outcomes:
- Your proposed change is awesome! We merge it in and it will be included in the next minor release of Umbraco
- If the change is a high priority bug fix, we will cherry-pick it into the next patch release as well so that we can release it as soon as possible
- Your proposed change is awesome but needs a bit more work, we’ll give you feedback on the changes we’d like to see
- Your proposed change is awesome but... not something we’re looking to include at this point. We’ll close your PR and the related issue (we’ll be nice about it!). See [making larger changes][making larger changes] and [pull request or package?][pr or package]
### Dealing with requested changes
If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco!
#### No longer available?
We understand you have other things to do and can't just drop everything to help us out.
So if we’re asking for your help to improve the PR we’ll wait for two weeks to give you a fair chance to make changes. We’ll ask for an update if we don’t hear back from you after that time.
If we don’t hear back from you for 4 weeks, we’ll close the PR so that it doesn’t just hang around forever. You’re very welcome to re-open it once you have some more time to spend on it.
There will be times that we really like your proposed changes and we’ll finish the final improvements we’d like to see ourselves. You still get the credits and your commits will live on in the git repository.
[ Umbrabot ]: https://github.com/umbrabot
[git flow]: https://jeffkreeftmeijer.com/git-flow/ "An explanation of git flow"
Umbraco HQ will regularly mark newly created issues on the issue tracker with [the `community/up-for-grabs` tag][up for grabs issues]. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. We encourage anyone to pick them up and help out.
If you do start working on something, make sure to leave a small comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has.
## Making your changes
Great question! The short version goes like this:
1.**Fork**
Create a fork of [`Umbraco-CMS` on GitHub][Umbraco CMS repo]

1.**Clone**
When GitHub has created your fork, you can clone it in your favorite Git tool

1.**Switch to the correct branch**
Switch to the `contrib` branch
1.**Build**
Build your fork of Umbraco locally as described in the build documentation: you can [debug with Visual Studio Code][build - debugging with code] or [with Visual Studio][build - debugging with vs].
1.**Branch**
Create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case issue number `12345`. Don't commit to `contrib`, create a new branch first.
1.**Change**
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback][questions].
1.**Commit and push**
Done? Yay! 🎉
Remember to commit to your new `temp` branch, and don't commit to `contrib`. Then you can push the changes up to your fork on GitHub.
#### Keeping your Umbraco fork in sync with the main repository
Once you've already got a fork and cloned your fork locally, you can skip steps 1 and 2 going forward. Just remember to keep your fork up to date before making further changes.
To sync your fork with this original one, you'll have to add the upstream url. You only have to do this once:
Then when you want to get the changes from the main repository:
```
git fetch upstream
git rebase upstream/contrib
```
In this command we're syncing with the `contrib` branch, but you can of course choose another one if needed.
[More information on how this works can be found on the thoughtbot blog.][sync fork ext]
#### Style guide
To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up.
That said, the Umbraco development team likes to follow the hints that ReSharper gives us (no problem if you don't have this installed) and we've added a `.editorconfig` file so that Visual Studio knows what to do with whitespace, line endings, etc.
#### Questions?
[questions]: #questions
You can get in touch with [the core contributors team][core collabs] in multiple ways; we love open conversations and we are a friendly bunch. No question you have is stupid. Any question you have usually helps out multiple people with the same question. Ask away:
- If there's an existing issue on the issue tracker then that's a good place to leave questions and discuss how to start or move forward.
- If you want to ask questions on some code you've already written you can create a draft pull request, [detailed in a GitHub blog post][draft prs].
- Unsure where to start? Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"][contrib forum] forum. The team monitors that one closely, so one of us will be on hand and ready to point you in the right direction.
<!-- Local -->
[build - debugging with vs]: BUILD.md#debugging-with-visual-studio "Details on building and debugging Umbraco with Visual Studio"
[build - debugging with code]: BUILD.md#debugging-with-vs-code "Details on building and debugging Umbraco with Visual Studio Code"
[sync fork ext]: http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated "Details on keeping a git fork updated"
[draft prs]: https://github.blog/2019-02-14-introducing-draft-pull-requests/ "Github's blog post providing details on draft pull requests"
## Coding not your thing? Or want more ways to contribute?
This document covers contributing to the codebase of the CMS but [the community site has plenty of inspiration for other ways to get involved.][get involved]
If you don't feel you'd like to make code changes here, you can visit our [documentation repository][docs repo] and use your experience to contribute to making the docs we have, even better.
We also encourage community members to feel free to comment on others' pull requests and issues - the expertise we have is not limited to the Core Collaborators and HQ. So, if you see something on the issue tracker or pull requests you feel you can add to, please don't be shy.
While most changes are welcome, there are certain types of changes that are discouraged and might get your pull request refused.
Of course this will depend heavily on the specific change, but please take the following examples in mind.
- **Breaking changes (code and/or behavioral) 💥** - sometimes it can be a bit hard to know if a change is breaking or not. Fortunately, if it relates to code, the build will fail and warn you.
- **Large refactors 🤯** - the larger the refactor, the larger the probability of introducing new bugs/issues.
- **Changes to obsolete code and/or property editors ✍️**
- **Adding new config options 🦾** - while having more flexibility is (most of the times) better, having too many options can also become overwhelming/confusing, especially if there are other (good/simple) ways to achieve it.
- **Whitespace changes 🫥** - while some of our files might not follow the formatting/whitespace rules (mostly old ones), changing several of them in one go would cause major merge conflicts with open pull requests or other work in progress. Do feel free to fix these when you are working on another issue/feature and end up "touching" those files!
- **Adding new extension/helper methods ✋** - keep in mind that more code also means more to maintain, so if a helper is only meaningful for a few, it might not be worth adding it to the core.
While these are only a few examples, it is important to ask yourself these questions before making a pull request:
- How many will benefit from this change?
- Are there other ways to achieve this? And if so, how do they compare?
- name:Fetch random comment 🗣️ and add it to the PR
uses:actions/github-script@v6
with:
@@ -44,13 +41,13 @@ jobs:
});
} else {
console.log("Returned data not indicate success.");
if(response.status !== 200) {
console.log("Status code:", response.status)
}
console.log("Returned data:", data);
if(data === '') {
console.log("An empty response usually indicates that either no comment was found or the actor user was not eligible for getting an automated response (HQ users are not getting auto-responses).")
<!-- Both OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer bring in a vulnerable version of Microsoft.IdentityModel.JsonWebTokens -->
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<!-- Both OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer bring in a vulnerable version of Microsoft.IdentityModel.JsonWebTokens -->
@@ -2,6 +2,8 @@ using Microsoft.Extensions.DependencyInjection;
usingMicrosoft.Extensions.Options;
usingMicrosoft.OpenApi.Models;
usingSwashbuckle.AspNetCore.SwaggerGen;
usingUmbraco.Cms.Api.Common.OpenApi;
usingUmbraco.Cms.Api.Delivery.Filters;
namespaceUmbraco.Cms.Api.Delivery.Configuration;
@@ -15,6 +17,14 @@ public class ConfigureUmbracoDeliveryApiSwaggerGenOptions: IConfigureOptions<Swa
{
Title=DeliveryApiConfiguration.ApiTitle,
Version="Latest",
Description=$"You can find out more about the {DeliveryApiConfiguration.ApiTitle} in [the documentation]({DeliveryApiConfiguration.ApiDocumentationContentArticleLink})."
Description=QueryParameterDescription("Explicitly defines which properties should be included in the response (by default all properties are included)"),
Schema=newOpenApiSchema{Type="string"},
Examples=newDictionary<string,OpenApiExample>
{
{"Include all properties",newOpenApiExample{Value=newOpenApiString("properties[$all]")}},
@@ -6,30 +6,42 @@ using Umbraco.Cms.Core.Models.DeliveryApi;
namespaceUmbraco.Cms.Api.Delivery.Json;
// see https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/polymorphism?pivots=dotnet-7-0
// TODO: if this type resolver is to be used for extendable content models (custom IApiContent implementations) we need to work out an extension model for known derived types
_logger.LogWarning("Sort implementation for field name {FieldName} does not match an index handler implementation, cannot resolve field type.",sort.FieldName);
_logger.LogInformation($"The current implementation of {nameof(IApiMediaQueryService)} expects \"{childrenOfParameter}[id/path]\" in the \"{nameof(fetch)}\" query option");
_logger.LogInformation("An unsupported filter option was supplied for the query. Please use only valid filter options. See the documentation for details.");
_logger.LogInformation("An unsupported sort option was supplied for the query. Please use only valid sort options. See the documentation for details.");
:thrownewInvalidOperationException("Could not retrieve the current member. This method should only ever be invoked when a member has been authorized.");
BaseLuceneSearchersearcher=index.SearcherasBaseLuceneSearcher??thrownewInvalidOperationException($"Index searcher must be of type {nameof(BaseLuceneSearcher)}.");
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.