Compare commits

...

2278 Commits

Author SHA1 Message Date
Stephan d0ab80bfde Support clearing all datatype cache 2019-02-08 11:40:49 +01:00
Warren Buckley 9eaa0361be Merge pull request #4437 from umbraco/temp8-4302-bugfix-for-media-validation
Bugfixes for media validation
2019-02-08 09:50:26 +00:00
Stephan 67e90ca21b Cleanup configuration editors 2019-02-08 09:56:24 +01:00
Stephan 88b0dccfa1 Fix TreeEntityPath 2019-02-08 09:02:27 +01:00
Shannon 73ce546f0c ensures idType in JS is always udi by default instead of int 2019-02-08 16:12:30 +11:00
Shannon 964447d546 fixes up the web.config view file with the right mvc version 2019-02-08 16:08:29 +11:00
Shannon 40097c441a Ensure the same logic for property editors is executed for parameter editors to get the final configuration object 2019-02-08 16:07:03 +11:00
Shannon 63b3c06b3a Ensures the correct DefaultConfiguration values are specified for any editor that is actively overriding ToValueEditor and setting these values there 2019-02-08 16:00:59 +11:00
Shannon ccaaa9ab93 Ensures everything doesn't explode if a non-found property editor alias exists in the db 2019-02-08 16:00:02 +11:00
Shannon b08218240c updates package json ... lets see how the build server does with the new build 2019-02-08 10:26:21 +11:00
Shannon e67bbdc25f Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-08 10:09:39 +11:00
Warren Buckley d9ac1868e6 Merge pull request #4465 from umbraco/temp8-fix-for-non-root-start-node-for-media
V8: Bugfix for loading paths Ids into TreeEntityPath
2019-02-07 15:25:42 +00:00
Robert a9b7c649ae Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-07 15:44:42 +01:00
Robert 1095948c27 Sets prop's prefixed with "$" to undefined. 2019-02-07 15:44:17 +01:00
Warren Buckley 7bd0a8edc2 Merge pull request #4429 from umbraco/temp8-4398
#4398 - Added validation to the grid editor, such that columns must b…
2019-02-07 14:38:59 +00:00
Warren Buckley 4a2b6116f2 Merge pull request #4418 from kjac/v8-feature-allow-all-at-root
V8: Allow all content types at root if none are explicitly allowed
2019-02-07 13:47:33 +00:00
Warren Buckley 2c0fc737a7 Merge pull request #4421 from umbraco/temp8-4405-reload-history-on-rollback
#4405 - Load history on init if the active tab is info
2019-02-07 13:29:52 +00:00
Stephan df53b93ae0 Fix nuspec 2019-02-07 13:59:43 +01:00
Claus 7c3b5d1086 Merge remote-tracking branch 'origin/temp8-update-deps' into temp8 2019-02-07 13:40:17 +01:00
Stephan dbd6e0adbb Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-07 13:10:26 +01:00
Stephan c607c7e259 Merge branch 'temp8-contentAndType' into temp8 2019-02-07 13:09:56 +01:00
Stephan 29334ed2d5 Fix ModelsBuilder changes 2019-02-07 12:57:10 +01:00
Stephan 990e82d183 Upgrade ModelsBuilder, cleanup dashboard 2019-02-07 12:37:52 +01:00
Stephan 2092156db3 Cleanup 2019-02-07 12:27:19 +01:00
Bjarke Berg f7ee8c0899 Merge pull request #4411 from kjac/v8-fix-redirect-tracking-composer
V8: Fix the redirect tracking composer
2019-02-07 11:09:22 +01:00
Stephan a9adc4eee5 Merge branch 'temp8' into temp8-contentAndType 2019-02-07 10:10:55 +01:00
Stephan c59ff8d995 Merge branch 'temp8-fix-default-userid-param' into temp8 2019-02-07 10:02:13 +01:00
Stephan 4a8e5935c2 Merge branch 'temp8' into temp8-fix-default-userid-param 2019-02-07 10:01:15 +01:00
Stephan 8ed2dcb8bf Don't capture content caches! 2019-02-07 09:59:16 +01:00
Bjarke Berg fc6548d87b Fix issue where Id was not set when loading all entity paths 2019-02-07 09:56:14 +01:00
Warren Buckley 5944ea20cc Merge remote-tracking branch 'origin/temp8' into temp8-fix-default-userid-param
# Conflicts:
#	src/Umbraco.Core/Services/IContentService.cs
#	src/Umbraco.Core/Services/Implement/ContentService.cs
2019-02-07 08:24:03 +00:00
Stephan 8329097974 Review PR, adjustments 2019-02-07 08:53:49 +01:00
Stephan d15f20f560 Merge branch 'temp8' into temp8-contentAndType 2019-02-07 08:40:46 +01:00
Bjarke Berg 87c85341fb Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-07 08:20:02 +01:00
Bjarke Berg f6da7e4444 JS error, handle user dialog in the same way as help dialog. Don't close on change of section. Before was a js error with missing method 2019-02-07 08:19:44 +01:00
Stephan d11fd67a09 Bugfix PublishedContentTypeFactory 2019-02-07 08:04:53 +01:00
Shannon 977250dcdd tests as part of build 2019-02-07 17:15:49 +11:00
Shannon 1703c918d9 test pass now 2019-02-07 17:06:50 +11:00
Shannon d76f7db700 fixes the runTest build so that it properly builds the babel js and fixes one of the tests 2019-02-07 16:59:25 +11:00
Shannon 261ddfbcd6 Gets unit tests running again and added a task runTests 2019-02-07 16:22:29 +11:00
Shannon 86b31c2782 fixes test.js to point to the correct karma config 2019-02-07 15:41:20 +11:00
Shannon Deminick cb309e7f9e Merge pull request #4432 from kjac/v8-fix-rename-umbraco-domains-table
V8: Rename umbracoDomains table to umbracoDomain (singular)
2019-02-07 15:28:37 +11:00
Shannon ed5023e431 Adds some null checks to Examine's value set builders in case some of the data is strangely incorrect 2019-02-07 15:13:45 +11:00
Shannon fcec180dc4 Ship with correct skipIIsCustomeerrors setting 2019-02-07 14:54:22 +11:00
Shannon a9045c254e Removes the need to do any lookup for GetNonGroupedProperties, we already know if they belong to a non-group based on the ID 2019-02-07 14:01:00 +11:00
Shannon 03eaf3aa3d So yup ISimpleContentType needs the IUmbracoEntity, so we'll explicitly implement essentially hiding the implementation from the API unless it's explicitly cast 2019-02-07 13:29:01 +11:00
Shannon 3b12e0b72a Updates ContentBase to track the original PropertyType's which means we don't ever need to look them up again, adds notes about this too since it seems it is probably unnecessary to begin with. 2019-02-07 13:28:23 +11:00
Shannon 123daed990 Removes the need for .Current in some places, adds TODO notes to test a theory, removes IUmbracoEntity from ISimpleContentType since all tests seem to pass without it and because the SimpleContentTypeMapper doesn't actually use ISimpleContentType i don't think it's needed, we'll see what the tests say. 2019-02-07 12:43:11 +11:00
Shannon 9df0f384af Removes the need for another .Current and a lookup, simplifies the whole GetUrl for media 2019-02-07 12:02:47 +11:00
Shannon 562855a687 removes fixme, adds comments and null checks 2019-02-07 11:53:43 +11:00
Shannon 030b626350 Removes the need for a .Current, removes an unused method 2019-02-07 11:49:30 +11:00
Shannon 78849bb7ff removes unused methods and internalizes methods we can't expose yet 2019-02-07 11:42:16 +11:00
Shannon c04da30547 Merge branch 'temp8' into temp8-contentAndType
# Conflicts:
#	src/Umbraco.Core/Models/Content.cs
#	src/Umbraco.Core/Models/ContentBase.cs
#	src/Umbraco.Tests/Models/ContentTests.cs
2019-02-07 11:41:06 +11:00
Shannon Deminick 0606d1bc8b Merge pull request #4341 from umbraco/temp8-3640
Support culture in content Saving and Publishing events
2019-02-07 11:26:45 +11:00
Shannon 4655acfdeb Fixes ambiguous call 2019-02-07 11:26:09 +11:00
Stephan 37c130194f Merge branch 'temp8' into temp8-3640 2019-02-06 16:31:04 +01:00
Stephan 162e691828 Bugfix PublishedContentTypeFactory 2019-02-06 16:26:32 +01:00
Warren Buckley 51ad0f75d1 Fix up unit test but also uses constant for -1 as the parent id aka System Root Node Id 2019-02-06 15:16:11 +00:00
Warren Buckley de5b32749e Merge branch 'temp8' into temp8-fix-default-userid-param 2019-02-06 14:56:52 +00:00
Stephan 19d8796c40 Merge branch 'temp8' into temp8-3640 2019-02-06 15:07:49 +01:00
Stephan 0be5ff64bc Be friendly 2019-02-06 15:05:56 +01:00
Warren Buckley 8b4315cd46 🦸🦸 Is it a bird, is it a plane, no it's SuperUser 🦸🦸 2019-02-06 14:01:14 +00:00
Stephan 48e11ab439 Fix 8.0 migration 2019-02-06 14:53:49 +01:00
Shannon f98727e08d fixing tests 2019-02-07 00:15:47 +11:00
Stephan 7863cd3ab7 Refactor OrderedCollectionBuilderBase AppendAfter to InsertAfter 2019-02-06 14:11:33 +01:00
Shannon 34c65a94bf dont allocate an empty object if the collection is empty 2019-02-07 00:07:43 +11:00
Shannon e2c86a96fe Ensures change collections are cleared on clone 2019-02-07 00:05:25 +11:00
Shannon b95b02d0c0 ensure the culture is bumped if a property of that culture is modified, fixes up the AdjustDates method and tests 2019-02-06 23:51:12 +11:00
Shannon bcfbab2add fixing tests 2019-02-06 23:12:01 +11:00
Stephan b260c18056 Refactor IContent vs IContentType 2019-02-06 13:06:31 +01:00
Shannon 5b33416b7b adds fixme notes 2019-02-06 23:02:28 +11:00
Shannon 5b3f21c541 fixes tests 2019-02-06 22:12:00 +11:00
Shannon 3f8efed392 updates nuspecs to have the correct target framework 2019-02-06 21:55:59 +11:00
Shannon 68cdbf50b2 removes old unused dependency from tests 2019-02-06 21:48:33 +11:00
Shannon 47d660041e updates test proj dependencies 2019-02-06 21:47:21 +11:00
Shannon 817ce71e83 updates threading libs 2019-02-06 21:44:12 +11:00
Shannon 4c2ea81c53 updates Light Inject 2019-02-06 21:41:46 +11:00
Shannon 7c21a42804 Update serilog 2019-02-06 21:39:09 +11:00
Shannon e556e39cd1 latest HtmlAgility 2019-02-06 21:31:50 +11:00
Bjarke Berg a4a437a746 Fixed view after UmbracoHelper ctor changes 2019-02-06 11:18:52 +01:00
Shannon 0947a1a109 Automapper upgraded 2019-02-06 21:14:50 +11:00
Shannon b4bf1cb01c puts the profiler back to the right 2019-02-06 19:58:56 +11:00
Shannon 4b9a13c3a1 Updates mini profiler 2019-02-06 19:04:52 +11:00
Bjarke Berg 48531c6193 #4302 - Sets the default values for Media File and Image File as mandatory 2019-02-06 08:07:50 +01:00
Bjarke Berg b82dde240b #4302 - Bugfixes for media validation. 2019-02-06 08:07:04 +01:00
Shannon 5bf0b143d9 another owin update and nuspec fix 2019-02-06 17:08:47 +11:00
Shannon 33bc979cfc Fixes binding of FormDataCollection for GET requests which fixes the compatibility with the latest WebApi 5.2.7 version (cherry picked from https://github.com/umbraco/Umbraco-CMS/pull/3851), fixes a binding redirect 2019-02-06 17:03:23 +11:00
Shannon 50d1b9ddfd Latest MVC, WebApi, Owin and Signalr 2019-02-06 16:53:15 +11:00
Shannon 1bbb9c2b6e updates to latest newtonsoft 2019-02-06 16:43:04 +11:00
Shannon 3b60ffeb28 fixes test 2019-02-06 16:27:19 +11:00
Shannon 92606e7122 Fixes up dirty tracking of cultures and published cultures the same way we handle that with other entities which uses observable collection events. This simplifies the dirty tracking logic and means we dont require lookup the original object, but now we need to figure out the fixme stuff 2019-02-06 16:10:20 +11:00
Stephan 0f85c921e3 Merge pull request #4433 from umbraco/nul800sebastiaan-patch-1
Why so sad! :-)
2019-02-05 20:02:09 +01:00
Stephan f752861e10 Bugfix null timer in CoreRuntime 2019-02-05 20:01:20 +01:00
Stephan b403e9b3b7 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-05 20:00:30 +01:00
Sebastiaan Janssen eafb9a46f7 Why so sad! :-) 2019-02-05 19:59:13 +01:00
Kenn Jacobsen 1e24981576 Rename umbracoDomains table to umbracoDomain (singular) 2019-02-05 19:48:13 +01:00
Warren Buckley 4c79269081 Merge pull request #4422 from umbraco/temp8-ui-refactoring-infinity-editing-to-css-animation
V8: UI refactoring infinity editing to css animation
2019-02-05 15:49:49 +00:00
Warren Buckley a1a3267c0b Merge pull request #4366 from kjac/v8-fix-icon-picker-color-selection
V8: Doctype icon color picker selection is broken
2019-02-05 15:15:23 +00:00
Bjarke Berg 6f9be482be #4398 - Added validation to the grid editor, such that columns must be at least as large as the layouts. 2019-02-05 14:52:02 +01:00
Stephan 29f2f34f9b Refactor IContent vs IContentType 2019-02-05 14:06:48 +01:00
Stephan 6125643c3f Bump copyright year 2019-02-05 13:43:04 +01:00
Robert 9e8e62dc71 Merge pull request #4346 from kjac/v8-fix-nested-content-elements-with-culture-variance
V8: Make Nested Content resilient towards culture variance in elements
2019-02-05 12:57:51 +01:00
Stephan d2692a2ff5 NuCache respects global local temp storage 2019-02-05 12:20:13 +01:00
Stephan d3b0913047 Fix UmbracoHelper preventing upgrades 2019-02-05 12:19:57 +01:00
Bjarke Berg 4290249719 #4405 - Load history on init if the active tab is info 2019-02-05 11:55:10 +01:00
Niels Lyngsø ff497b413e V8: UI, refactoring of infinity editing to use CSS to fix issue regarding stacking of layers. 2019-02-05 11:54:23 +01:00
Robert ea95b4f454 Merge pull request #4345 from kjac/v8-fix-relation-types-editor
V8: Relation type editor crashes for root relations and is using excessive XHR
2019-02-05 10:35:25 +01:00
Robert bec61a00c9 Merge pull request #4336 from kjac/v8-fix-disappearing-thumbnails
V8: Fix disappearing thumbnails in the media grid
2019-02-05 10:05:14 +01:00
Robert 4054e0ab72 Merge pull request #4357 from kjac/v8-fix-media-picker-upload-button
V8: Media picker upload button does nothing
2019-02-05 09:54:01 +01:00
Stephan f07a2715b4 Add assembly-level composer attributes 2019-02-05 08:37:48 +01:00
Kenn Jacobsen 9579b42330 Allow copying/moving any content type to root if none are marked as "AllowAsRoot" 2019-02-05 07:54:59 +01:00
Kenn Jacobsen c9936058b5 Allow creating any content type at root if none are marked as "AllowAsRoot" 2019-02-05 07:54:42 +01:00
Shannon b65dac946f Merge branch 'temp8-IContentService-SaveAndPublish-4324' into temp8-3640
# Conflicts:
#	src/Umbraco.Core/Models/Content.cs
#	src/Umbraco.Core/Models/ContentBase.cs
#	src/Umbraco.Core/Models/IContent.cs
#	src/Umbraco.Tests/Services/ContentServiceTests.cs
2019-02-05 16:14:46 +11:00
Shannon f1b23ba0e9 Merge remote-tracking branch 'origin/temp8' into temp8-3640
# Conflicts:
#	src/Umbraco.Core/Models/Content.cs
2019-02-05 14:27:40 +11:00
Shannon 3dab68b70d adds note 2019-02-05 14:15:03 +11:00
Shannon 9f612465cf Cleans up IContent/IContentBase, no more internal methods or setters, moves manipulation used by the DocumentRepository to ext methods 2019-02-05 14:13:03 +11:00
Kenn Jacobsen be881ba9ca Fix the redirect tracking composer 2019-02-04 20:09:17 +01:00
Warren Buckley cd566a6397 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-04 17:21:16 +00:00
Warren Buckley 0061f997e9 Fix up logviewer - search error/mesage drodpwon button to search on Goggle, GitHub, Our.Umb etc 2019-02-04 17:12:41 +00:00
Stephan 1e8b8feee8 Make ContainerControllerFactory exceptions more explicit 2019-02-04 17:59:12 +01:00
Stephan 2e5967ff9e Make TypeLoader less verbose 2019-02-04 17:58:36 +01:00
Shannon a5947356e7 Removes WasCulturePublished from IContent 2019-02-05 01:58:18 +11:00
Shannon 09255019b2 removes CommitDocumentChanges from the public interface 2019-02-05 01:22:52 +11:00
Shannon c20e597115 Merge remote-tracking branch 'origin/temp8' into temp8-IContentService-SaveAndPublish-4324 2019-02-05 01:13:43 +11:00
Stephan 3c65770008 Upgrade ModelsBuilder, cleanup 2019-02-04 14:08:35 +01:00
Stephan e636f12459 Fix leak in BackgroundTaskRunner 2019-02-04 13:39:32 +01:00
Sebastiaan Janssen d3eb48cef9 Fixes #4388 File uploads no longer has dragover styles 2019-02-04 13:29:02 +01:00
Bjarke Berg 825b07b823 Merge pull request #4332 from umbraco/temp8-macros-dont-render-and-other-macro-bugs
v8 Macros don't render in the RTE and various
2019-02-04 13:23:46 +01:00
Bjarke Berg 2d2862517a Merge pull request #4327 from umbraco/temp8-4229-validation-from-main-variant-does-not-prevent-publishing
#4229 - If the property do not support variantions, we need to valida…
2019-02-04 13:14:14 +01:00
Bjarke Berg 327b820a25 Fixed broken test 2019-02-04 12:59:58 +01:00
Stephan 3c3b9e3946 Fixes 2019-02-04 12:55:04 +01:00
Bjarke Berg dccea19847 Merge pull request #4370 from kjac/v8-fix-default-dropdowns
V8: Fix the default dropdowns
2019-02-04 11:42:37 +01:00
Stephan 23159ce9a6 Merge branch 'temp8' into temp8-4229-validation-from-main-variant-does-not-prevent-publishing 2019-02-04 11:11:34 +01:00
Niels Lyngsø b13be6840b Merge pull request #3485 from dawoe/temp-3434
V8 - #3434 - change checkboxes on property type settings to toggle
2019-02-04 10:19:25 +01:00
Stephan dbab435f1e Merge branch 'temp8-fixes-allocations-for-property-selectors' into temp8 2019-02-04 10:09:43 +01:00
Stephan bc987a825a Cleanup 2019-02-04 10:09:32 +01:00
Stephan d6181b042b Merge branch 'temp8' into temp8-fixes-allocations-for-property-selectors 2019-02-04 09:58:55 +01:00
Shannon 80165c3c0f Fixes allocations of property selectors, with nameof we save a bunch of both memory and initial reflection lookups 2019-02-04 19:52:04 +11:00
Stephan 7fd51a298d Upgrade ModelsBuilder, following changes in Umbraco 2019-02-04 09:47:37 +01:00
Niels Lyngsø 93dbbd6bbe Merge pull request #4384 from kjac/v8-fix-actions-menu
V8: Fix the editor actions menu
2019-02-04 08:37:10 +01:00
Niels Lyngsø 72f6b2fd11 removing comments from temp8-4257-refactoring-of-infinite-editor-layers 2019-02-04 08:12:27 +01:00
Shannon b51d3036e3 Adds overload of SaveAndPublish to accept multiple cultures, renames SavePublishing to CommitDocumentChanges, removes IContent.ChangeContentType 2019-02-04 16:55:35 +11:00
Shannon 30452f0b17 Fixes rte toolbar pinning in the grid 2019-02-04 14:00:01 +11:00
Shannon 9fba7345aa When rendering macro contents, be sure to use the preview published content since the item 2019-02-04 13:48:53 +11:00
Shannon a0cda4075d Fixes issue with rendering macro content when the page doesn't exist 2019-02-04 13:42:07 +11:00
Shannon c5819ca702 Merge branch 'temp8' into temp8-macros-dont-render-and-other-macro-bugs
# Conflicts:
#	src/Umbraco.Web/Editors/EntityController.cs
#	src/Umbraco.Web/Editors/MediaController.cs
#	src/Umbraco.Web/Runtime/WebRuntimeComposer.cs
2019-02-04 12:42:07 +11:00
Shannon 9be6acf449 Oops forgot to remove the IconClosed and IconOpen TreeAttribute props 2019-02-04 12:09:04 +11:00
Kenn Jacobsen 6141d88407 Don't set the menu state until the action is about to be carried out. 2019-02-03 17:05:27 +01:00
Kenn Jacobsen 4b69a7859d Make sure the app menu state is set 2019-02-03 13:56:00 +01:00
Kenn Jacobsen 5d15db8468 Make sure the default dropdowns are created correctly 2019-02-02 13:42:24 +01:00
Kenn Jacobsen 6874a5486b Fix selected color 2019-02-01 20:28:27 +01:00
Kenn Jacobsen 90a282c083 Fix the icon color picker 2019-02-01 20:09:54 +01:00
Stephan c53258a7d2 Merge branch 'temp8-oembed-collection' into temp8 2019-02-01 17:57:21 +01:00
Stephan df61a76868 Cleanup PR 2019-02-01 17:52:29 +01:00
Stephan 3a0f80fc7e Merge branch 'temp8' into temp8-oembed-collection 2019-02-01 17:44:53 +01:00
Stephan add9ee73db Merge branch 'feature/IContentType-removale-from-IContent' into temp8 2019-02-01 17:42:32 +01:00
Stephan 132c3c0c8e Cleanup PR, document and rename things 2019-02-01 17:19:12 +01:00
Stephan e88443e549 Merge branch 'temp8' into feature/IContentType-removale-from-IContent 2019-02-01 16:25:36 +01:00
Warren Buckley e17d6df023 It helps if you put in a valid value - it expects Information and not Info as the loglevel 2019-02-01 15:13:41 +00:00
Warren Buckley 0a9bc82551 Merge pull request #4347 from umbraco/temp8-4068-grid-fixes
Grid fixes
2019-02-01 14:13:23 +00:00
Claus 7d17b1be16 Merge pull request #4337 from umbraco/temp8-appsetting-conventions-constants
Web.Config AppSetting key conventions & move to constants class
2019-02-01 15:11:54 +01:00
Niels Lyngsø 59c43fe8cb Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-01 14:54:54 +01:00
Niels Lyngsø d4b2ac3f1e V8: UI — changed color for focus point on medias 2019-02-01 14:54:49 +01:00
Claus 05a40b32c6 Merge pull request #4361 from kjac/v8-media-items-default-property-descriptions
V8: Add descriptions to properties on default media items
2019-02-01 14:35:36 +01:00
Kenn Jacobsen bf87ecb818 Add descriptions to properties on default media items 2019-02-01 14:32:17 +01:00
Bjarke Berg 9acf913872 #3545 - Added IContentTypeServiceBaseFactory to create a IContentTypeServiceBase (E.g. IContentTypeService or IMediaTypeService) based on the type of the IContentBase 2019-02-01 14:07:31 +01:00
Warren Buckley fec046347b Merge pull request #4352 from umbraco/temp8-4257-refactoring-of-infinite-editor-layers
Temp8 4257 refactoring of infinite editor layers
2019-02-01 12:43:31 +00:00
Niels Lyngsø 7261432461 V8: UI — changed look of media-picker upload button 2019-02-01 13:23:09 +01:00
Niels Lyngsø b645cc8e54 Merge pull request #4355 from umbraco/temp8-4354-publish-fix
Fix for javascript's strict equality
2019-02-01 13:21:40 +01:00
Kenn Jacobsen 712a260159 Fix wrong class name in media picker element selector 2019-02-01 13:01:42 +01:00
Bjarke Berg bfc2d53fa4 Merge remote-tracking branch 'origin/temp8' into feature/IContentType-removale-from-IContent
# Conflicts:
#	src/Umbraco.Web/Macros/PublishedContentHashtableConverter.cs
2019-02-01 12:52:20 +01:00
Niels Lyngsø 0c34de4524 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-01 12:38:59 +01:00
Niels Lyngsø f5d904c88c V8: add spacing around tabs 2019-02-01 12:38:12 +01:00
Bjarke Berg ab5c33e340 #4354 - Fix for stupid javascript's strict equality 2019-02-01 12:34:56 +01:00
Warren Buckley a6d0449671 Merge pull request #4335 from umbraco/temp8-3648-retain-cculture-in-urls
#3648 - Besides mculture also retain cculture in querystring on navig…
2019-02-01 10:40:17 +00:00
Warren Buckley d1edc45d4d Merge pull request #4304 from umbraco/temp8-3645-change-culture-in-preview
Allow changing culture in the preview bar
2019-02-01 10:27:37 +00:00
Warren Buckley fde9e9b654 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-01 10:14:39 +00:00
Warren Buckley d38dba1660 Update nuspec to include new hosted image/icon for Nuget packages from .com site 2019-02-01 10:14:29 +00:00
Niels Lyngsø 0bb69aeeee V8: preview colors changed for brandcolors 2019 2019-02-01 11:10:20 +01:00
Warren Buckley 3fac16eda8 Fix count bug - so it works with two languages 2019-02-01 09:58:10 +00:00
Niels Lyngsø 979f7b404c V8: refactoring of layers add and removal methods 2019-02-01 10:51:14 +01:00
Niels Lyngsø 4ab42e0dc7 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-01 10:49:22 +01:00
Niels Lyngsø fc6e17f3f9 V8: UI — umb-content-grid color change 2019-02-01 10:49:09 +01:00
Stephan a6d04aa5bb Merge branch 'temp8' into temp8-3640 2019-02-01 10:47:34 +01:00
Bjarke Berg 045020e739 #4068 - Changed save event triggered when save dialog is opened. save is still broadcasted on the actual save.
Changed the grid event listener to only execute on `save` events
2019-02-01 08:37:06 +01:00
Shannon Deminick ed734d0f80 Merge pull request #4232 from umbraco/temp8-member-search-and-tags
Fixes for search of members + Removed fixme in member that apparently…
2019-02-01 17:11:10 +11:00
Shannon c0ab9d9e59 Merge branch 'temp8' into temp8-member-search-and-tags
# Conflicts:
#	src/Umbraco.Web/Editors/MemberController.cs
2019-02-01 16:43:03 +11:00
Shannon bb64141207 removes obsolete method 2019-02-01 16:35:10 +11:00
Shannon ad5b166f3f Fixes tests, simplifies constructors 2019-02-01 15:44:32 +11:00
Shannon 036ca7f1e5 fixing tests 2019-02-01 15:30:38 +11:00
Shannon c2ff32aaab Fixing tests, don't expose UmbracoContext on UmbracoHelper, fixing all of the editor constructors 2019-02-01 15:24:07 +11:00
Shannon 493ee63cb9 Merge branch 'temp8' into temp8-macros-dont-render-and-other-macro-bugs 2019-02-01 14:57:13 +11:00
Shannon c846d69507 Merge branch 'kjac-v8-fix-copy-media-types' into temp8 2019-02-01 14:52:06 +11:00
Shannon e540902ee1 Merge branch 'v8-fix-copy-media-types' of https://github.com/kjac/Umbraco-CMS into kjac-v8-fix-copy-media-types 2019-02-01 14:51:42 +11:00
Shannon d7d82ea98d Allows grid rte to be distraction-free, the parameter was not being passed but it can be configured 2019-02-01 14:02:45 +11:00
Shannon 3eb6cd9e21 Macros are now working inline in the rte with both the Classic and Distraction free modes 2019-02-01 13:50:39 +11:00
Shannon e79e07af77 Merge branch 'temp8' into temp8-macros-dont-render-and-other-macro-bugs 2019-02-01 13:50:10 +11:00
Shannon 7614ba42df Fixes the tag editor and tag suggestions 2019-02-01 13:32:17 +11:00
Shannon dae8dfdc59 fix merge 2019-02-01 11:34:28 +11:00
Shannon 0c4712de56 Merge branch 'temp8' into temp8-macros-dont-render-and-other-macro-bugs
# Conflicts:
#	src/Umbraco.Tests/Testing/TestingTests/MockTests.cs
#	src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs
#	src/Umbraco.Web/Templates/TemplateRenderer.cs
2019-02-01 11:33:13 +11:00
Shannon d8fbbeccfe Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-01 11:27:53 +11:00
Shannon 452badab41 Fixes tag editor for proper dirty tracking and model updating, the models weren't being updated correctly 2019-02-01 11:27:40 +11:00
Shannon f74a49f5a3 Gets the macros being able to be updated, now to fix the Classic mode, since this now only works in distraction free mode 2019-02-01 10:18:53 +11:00
Kenn Jacobsen eeaf8d594d Make NC resilient towards culture variance in elements 2019-01-31 19:43:57 +01:00
Bjarke Berg 4a480ab391 #4068 - Added interceptor to remove $ variables from post data 2019-01-31 15:10:19 +01:00
Bjarke Berg 6bf3b19d86 #4068 - Fix for ordering of grid 2019-01-31 15:09:57 +01:00
Stephan 3199aa6693 Support culture in content Saving and Publishing events 2019-01-31 15:06:24 +01:00
Warren Buckley 14c43d76c1 Adds OEmbedProviders to the composition extension to make it easier to add/append the collection 2019-01-31 13:37:47 +00:00
Warren Buckley bc7748aed6 Adds in XML docs summary - still need assitance with a few keys so put in some TODOs 2019-01-31 12:37:54 +00:00
Warren Buckley 3f8f1a215e Merge remote-tracking branch 'origin/temp8' into temp8-appsetting-conventions-constants 2019-01-31 12:06:29 +00:00
Warren Buckley 69f7a1b7b9 Finish up remaining AppSetting keys as Constants 2019-01-31 12:05:56 +00:00
Niels Lyngsø d59bddfe9a Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 12:58:21 +01:00
Niels Lyngsø d45d0a816e V8: UI — changed colors for selection state for rows in list-view 2019-01-31 12:58:17 +01:00
Warren Buckley 34be548aec Start work on adding AppSettings keys into a constants class & use new prefix of Umbraco.Core. 2019-01-31 10:56:09 +00:00
Kenn Jacobsen 1a64c0a803 Fix disappearing media thumbnails 2019-01-31 11:45:08 +01:00
Warren Buckley 14b97b6abe Fix up JS as the API model had changed 2019-01-31 10:24:15 +00:00
Warren Buckley 8d55340325 Fix up youtube URL regex matching 2019-01-31 10:23:54 +00:00
Bjarke Berg 92d53eb527 #3648 - Besides mculture also retain cculture in querystring on navigation 2019-01-31 11:10:27 +01:00
Stephan a6f9598a23 Introduce IPublishedRouter 2019-01-31 11:07:45 +01:00
Kenn Jacobsen 26e0c6cb79 Don't break for root relations + minimize number of XHR 2019-01-31 10:43:34 +01:00
Warren Buckley ad9c4ec9a5 Merge remote-tracking branch 'origin/temp8' into temp8-oembed-collection 2019-01-31 09:34:10 +00:00
Warren Buckley a36b1962c6 Last of providers moved across & the old config file gone 2019-01-31 09:32:50 +00:00
Niels Lyngsø b65e042b4c Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 10:13:11 +01:00
Niels Lyngsø b558023f9e V8: UI interact vs. select 2019-01-31 10:13:07 +01:00
Bjarke Berg 169221a5da Merge pull request #4188 from umbraco/v8/bugfix/temp8-fe-infinityediting-fixing-contentapps-after-edit-doctype
V8/bugfix/temp8 fe infinityediting fixing contentapps after edit doctype
2019-01-31 09:52:23 +01:00
Warren Buckley 160d01e783 Merge remote-tracking branch 'origin/temp8' into temp8-oembed-collection 2019-01-31 08:50:34 +00:00
Bjarke Berg 228480a2ef Merge remote-tracking branch 'origin/temp8' into v8/bugfix/temp8-fe-infinityediting-fixing-contentapps-after-edit-doctype 2019-01-31 09:50:30 +01:00
Bjarke Berg 9d9597dbc3 Merge remote-tracking branch 'origin/temp8' into v8/bugfix/temp8-fe-infinityediting-fixing-contentapps-after-edit-doctype
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/media/media.edit.controller.js
2019-01-31 09:39:43 +01:00
Niels Lyngsø 01ecd49256 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 09:37:14 +01:00
Niels Lyngsø 2ab391eb69 V8: UI select colors 2019-01-31 09:37:04 +01:00
Sebastiaan Janssen a1f72826c7 Remove duplicate css class 2019-01-31 08:39:59 +01:00
Bjarne Fyrstenborg 3ba32dafa5 Localize edit link, remove duplicate class attributes and only make remove link red 2019-01-31 08:34:54 +01:00
Bjarne Fyrstenborg d55262b322 Revert "Localize edit link, remove duplicate class attributes and only make remove link red"
This reverts commit 63cc250c0f929b1f7e6f9f05fae2fd302682d418.
2019-01-31 08:34:54 +01:00
Bjarne Fyrstenborg 7b3623a9d9 Localize edit link, remove duplicate class attributes and only make remove link red 2019-01-31 08:34:54 +01:00
Shannon 9abd72f623 gets macro content loading on rte load 2019-01-31 17:12:44 +11:00
Shannon f9e673ca4c Updates tinymce, adds back the styles for the rendered macro in the rte, properly uses tinymce's noneditable plugin and removes a ton of code relating to the old work arounds we had, now just need to get the macro re-rendering 2019-01-31 16:54:17 +11:00
Shannon 2f1c39ab96 Removes the old/strange "pageElements" thing, it's no longer needed 2019-01-31 15:44:39 +11:00
Shannon 7b55d2f1b2 New IMacroRenderer and ITemplateRenderer and hides underlying logic for these in internal classes. Massively cleans up the macro rendering logic (almost makes sense now), removes unused macro code, injects UmbracoHelper wherever it's needed (not creating manually), fixes UmbracoHelper to have it's services injected, no more empty services, allows setting the AssignedContentItem on the UmbracoHelper and ensures it's lifespan is Transient, updates all corresponding ctors. Fixes macro rendering, ensures the correct culture variation is assigned, and that we can render macros for any given IPublishedContent, not just the one assigned in the request. 2019-01-31 15:09:31 +11:00
Shannon Deminick 7f9ca716e7 Merge pull request #4210 from umbraco/temp8-fixme-get-all-entities-with-postfilter
Fixme - Handle not implemented exception on pick of macro
2019-01-31 14:51:55 +11:00
Shannon d9cb605f22 Fixing getting the macro to render in the rte, incorrect params being set 2019-01-31 14:48:43 +11:00
Shannon 8c813fa40d Merge branch 'temp8' into temp8-fixme-get-all-entities-with-postfilter 2019-01-31 11:10:01 +11:00
Shannon 0e9eae6f73 removes a bunch of console.log that was recently added 2019-01-31 11:05:41 +11:00
Shannon dcacff0124 Updates user section routing so that it has nice urls 2019-01-31 11:03:25 +11:00
Warren Buckley fe9700b3f7 A handful more providers moved across & removed any that no longer supported 2019-01-30 21:52:12 +00:00
Callum Whyte 2036da5e84 V8: kill usercontrol support, cleanup macros (#4329) 2019-01-30 18:37:07 +01:00
Sebastiaan Janssen 74a1bb9123 Update .net version, don't insert examine nor defaultuilanguage 2019-01-30 18:02:48 +01:00
Sebastiaan Janssen 781f63b805 There is no log4net.config 2019-01-30 18:01:16 +01:00
Sebastiaan Janssen b7a788e219 There is no trees.config 2019-01-30 18:01:01 +01:00
Sebastiaan Janssen 396fa73283 There is no UI.xml 2019-01-30 18:00:40 +01:00
Warren Buckley 880faeebd3 Adds a few more providers to the collection 2019-01-30 16:50:08 +00:00
Sebastiaan Janssen 1a298be9fa Removes obsoleted settings that prevent v8 startup 2019-01-30 17:47:54 +01:00
Sebastiaan Janssen 2353863092 Fix merge error 2019-01-30 17:35:06 +01:00
Sebastiaan Janssen 5ebe1b19ee Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-30 17:28:07 +01:00
Sebastiaan Janssen 8be93f91ba Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/Services/Implement/MemberGroupService.cs
#	src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagegravity.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/umbcolorswatches.directive.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/boolean/boolean.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/colorpicker/colorpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/colorpicker/colorpicker.html
2019-01-30 17:27:34 +01:00
Warren Buckley 74dcaea879 Merge remote-tracking branch 'origin/temp8' into temp8-oembed-collection 2019-01-30 16:02:02 +00:00
Kenn Jacobsen f2e1978ddb Support start node IDs for media picker in infinite editing 2019-01-30 16:46:33 +01:00
Kenn Jacobsen 4dd51f645a Make sure the color picker label is stored on first select (#4325) 2019-01-30 16:12:50 +01:00
Shannon f8fd255239 Last cleanup of unused umbraco settings 2019-01-31 01:37:38 +11:00
Shannon 6b2831c606 kill more useless umbraco settings 2019-01-31 01:30:17 +11:00
Shannon 2a54b2931c Removes providers section from umbraco settings 2019-01-31 01:20:19 +11:00
Shannon f28c60ced3 Removes all irrelevant logging settings from umbraco settings 2019-01-31 01:11:15 +11:00
Shannon a20c75d3c7 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 00:57:39 +11:00
Shannon 1c8b4412e3 Removes scheduled tasks 2019-01-31 00:57:10 +11:00
Bjarke Berg 5561029e07 Merge pull request #4070 from kjac/v8-fix-redirects-search-box-styling
V8: Fix the styling of the search box on the Redirect URL Management dashboard
2019-01-30 14:41:19 +01:00
Shannon 7a50856d32 Removes AutoLegacy routing and the legacy UseDomainPrefixes from umbraco settings 2019-01-31 00:33:02 +11:00
Shannon d1d9779a71 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 00:30:44 +11:00
Shannon 9571f48bd3 Removes AutoLegacy routing and the legacy UseDomainPrefixes from umbraco settings 2019-01-31 00:30:28 +11:00
Bjarne Fyrstenborg 0016962bc2 v8: Edit macro parameters (#4317) 2019-01-30 14:27:58 +01:00
Shannon 82ba360435 removes defaultDocumentTypeProperty from umbraco settings 2019-01-31 00:16:15 +11:00
Shannon 36d7c26120 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 00:09:46 +11:00
Shannon d852422328 removes CloneXmlContent from umbraco settings 2019-01-31 00:09:30 +11:00
Kenn Jacobsen 14a216778e V8: Align delete dialogs with the other dialogs (take two) (#4288) 2019-01-30 14:08:50 +01:00
Shannon 06cf8abfee Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-31 00:03:20 +11:00
Shannon 357da8ac6e removes PropertyContextHelpOption from umbraco settings 2019-01-31 00:03:03 +11:00
Stephan c8d9e59436 Fix SqlServer version detection 2019-01-30 14:02:45 +01:00
Bjarne Fyrstenborg 69af591b78 v8: Fix general localization (#4274) 2019-01-30 14:01:22 +01:00
Shannon f1b168fc46 removes ForceSafeAliases from umbraco settings, etc... 2019-01-30 23:58:54 +11:00
Bjarke Berg fe2af90caa #4229 - If the property do not support variantions, we need to validate the default language 2019-01-30 13:56:50 +01:00
Shannon 3dce2c870e removes XmlCacheEnabled, ContinouslyUpdateXmlDiskCache, XmlContentCheckForDiskChanges from umb settings 2019-01-30 23:52:35 +11:00
Shannon a123bc7084 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-30 23:42:39 +11:00
Shannon fccfa4f412 Removes umbraco settings: ImageTagAllowedAttributes, UploadAllowDirectories, ensureUniqueNaming, ImageTagAllowedAttributes, ScriptEditorDisable, ScriptFolderPath, UploadAllowDirectories 2019-01-30 23:42:25 +11:00
Kenn Jacobsen 31765a7a47 Remove the tooltip position flickering 2019-01-30 13:26:21 +01:00
Warren Buckley 88eb29e199 Removes EmbedProviders.config & moves into C# types (As its a config file that is rarely ammended IMO) 2019-01-30 11:46:15 +00:00
Callum Whyte 0cdccc1a9b V8: Removing legacy content tree menu items (#4278) 2019-01-30 12:01:57 +01:00
Shannon 19633b8d70 Merge branch 'temp8' into temp8-fixme-get-all-entities-with-postfilter 2019-01-30 20:41:37 +11:00
Shannon a331632800 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-30 20:33:26 +11:00
Shannon 90eae73d9b By default allow all trees to support both main and dialog usages 2019-01-30 20:33:14 +11:00
Shannon 7bb0eb109a moves class to separate file 2019-01-30 20:31:44 +11:00
Shannon c213408b92 Changes OperatorFactory to internal 2019-01-30 20:24:42 +11:00
Niels Lyngsø 0b0371af7e Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-30 10:17:05 +01:00
Bjarke Berg b1b71a4444 Merge pull request #4300 from kjac/v8-fix-respect-template-casing
V8: Respect the name casing when creating a new template
2019-01-30 10:16:40 +01:00
Niels Lyngsø ab77623248 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-30 10:16:36 +01:00
Niels Lyngsø bf7372c6ba V8: Color corrections for several components 2019-01-30 10:16:32 +01:00
Shannon 273441a2fb Merge branch 'temp8' into temp8-fixme-get-all-entities-with-postfilter
# Conflicts:
#	src/Umbraco.Web/Editors/EntityController.cs
2019-01-30 20:09:07 +11:00
Shannon 6ff787046b Fixing trees regression issue 2019-01-30 19:52:24 +11:00
Shannon df5c685bc2 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-30 19:48:55 +11:00
Shannon 6c0321ce72 Fixing trees regression issue 2019-01-30 19:48:42 +11:00
Stephan aa20584588 Merge branch 'temp8-move-xml-published-cache-to-tests' into temp8 2019-01-30 08:40:08 +01:00
Stephan 99ec2d18f2 Merge branch 'temp8' into temp8-move-xml-published-cache-to-tests 2019-01-30 08:37:42 +01:00
Stephan 7ba4fd7ad1 Cleanup Umbraco module 2019-01-30 08:35:50 +01:00
Bjarke Berg 2287c0e402 #3645 - remove badge again in preview mode + added spinner 2019-01-30 08:24:47 +01:00
Shannon Deminick e960d06449 Merge pull request #4298 from umbraco/temp8-fix-partialview-templates
PartialView & PartialViewMacros template generation fix
2019-01-30 18:10:26 +11:00
Shannon 134cc176ff Moves the Xml published cache to the tests project since that is the only place it is used, removes the xml data integrity check since it's not needed, removes the xml published cache benchmark since it's not needed. Now we don't include the old xml published cache at all in the shipped product. 2019-01-30 17:50:13 +11:00
Bjarke Berg 126c91fe51 Merge remote-tracking branch 'origin/temp8' into temp8-3645-change-culture-in-preview 2019-01-30 07:50:02 +01:00
Bjarke Berg cf0095dc1c #3645 - removed viewmodel and uses ILanguage directly in the view 2019-01-30 07:49:45 +01:00
Shannon 3371dbaa48 Merge remote-tracking branch 'origin/temp8-remove-legacy-controls' into temp8 2019-01-30 17:40:00 +11:00
Shannon Deminick f11d22f43a Merge pull request #4249 from umbraco/temp8-remove-unused-filesystem-config
V8 Remove unused filesystemproviders.config
2019-01-30 17:37:38 +11:00
Shannon f02da1fdd2 nucache bug fix 2019-01-30 17:36:33 +11:00
Shannon 08a886b724 nucache bug fix 2019-01-30 17:35:57 +11:00
Bjarke Berg ae9141f9e7 Merge remote-tracking branch 'origin/temp8' into temp8-3645-change-culture-in-preview
# Conflicts:
#	src/Umbraco.Web/Editors/PreviewController.cs
2019-01-30 07:34:19 +01:00
Shannon f49516ff13 fix csproj building 2019-01-30 17:14:04 +11:00
Shannon c2f82d184f Merge branch 'temp8' into temp8-remove-unused-filesystem-config
# Conflicts:
#	src/Umbraco.Web.UI/web.Template.config
2019-01-30 16:58:57 +11:00
Shannon 35b78cc224 Adds notes 2019-01-30 16:56:14 +11:00
Shannon 16b655fd62 Adds null check to SingleServerRegistrar 2019-01-30 16:47:48 +11:00
Shannon Deminick ac19aa4f91 Merge pull request #4243 from umbraco/temp8-remove-legacy-controls
🔥🔥 V8: Bye bye legacy stuff 🔥🔥
2019-01-30 15:22:27 +11:00
Shannon febc788c20 Merge remote-tracking branch 'origin/temp8' into temp8-remove-legacy-controls
# Conflicts:
#	src/Umbraco.Web/UI/Pages/UmbracoEnsuredPage.cs
2019-01-30 14:36:40 +11:00
Shannon 45bfaee590 fixing tests 2019-01-30 14:26:41 +11:00
Kenn Jacobsen a025568196 Handle element types in the multi URL picker 2019-01-29 22:30:06 +01:00
Kenn Jacobsen 9d3d4b77a0 Handle element types in the MNTP 2019-01-29 22:30:06 +01:00
Kenn Jacobsen 10fbffcfcc Handle element types in the conten picker 2019-01-29 22:30:06 +01:00
Vigan Shemsiu cca1393f2b Validate both width and height
Make sure to validate both width and height before running "setDimensions();". 

The focus point will not work if we have "img { width: 100%; }" in the stylesheet. 

This pull request will fix the bug.
2019-01-29 22:26:26 +01:00
Kenn Jacobsen 69548aed20 Fix the offset in the crop editor 2019-01-29 22:22:34 +01:00
Kenn Jacobsen 27ce8c8ebc Add a few missing localizations for edit media 2019-01-29 22:21:59 +01:00
Kenn Jacobsen 3f080ab277 Remove the annoying menuDialogTitle tooltip 2019-01-29 22:20:15 +01:00
Damiaan Peeters 7656de693c Add unittest 2019-01-29 22:18:53 +01:00
Damiaan Peeters 4806920179 Do not allow a empty name with for the MemberGroup 2019-01-29 22:18:53 +01:00
Kenn Jacobsen 2f146934d3 Show the error message and localize it 2019-01-29 22:11:17 +01:00
Kenn Jacobsen 1002113e7d Server side validation of illegal chars in folder names 2019-01-29 22:11:17 +01:00
Kenn Jacobsen 55aec0bf07 Make sure the install doesn't fail if the user opts out of a custom machine key 2019-01-29 22:03:33 +01:00
Niels Lyngsø 9d37e7ceda Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-29 21:28:29 +01:00
Niels Lyngsø 106c044ba5 V8: Color corrections 2019-01-29 21:28:25 +01:00
Kenn Jacobsen bda8128e93 Proper handling of the selected color 2019-01-29 21:00:40 +01:00
Kenn Jacobsen 4915efbb8d Re-select selected color on reload 2019-01-29 21:00:40 +01:00
Kenn Jacobsen c778249fed Fix the approved color styling 2019-01-29 21:00:40 +01:00
Callum Whyte 1340a5ce4b Removing support for legacy webservices 2019-01-29 20:23:20 +01:00
Kenn Jacobsen 5637c44f69 Explicitly set the form dirty when toggling a boolean 2019-01-29 17:41:28 +01:00
Bjarke Berg 414f838476 #3645 - Lists available languages in the preview bar (if more than 1)
Reads the culture from hash instead of query and updates the hash when changing culture.
2019-01-29 15:30:25 +01:00
Niels Lyngsø d75cace85d color variable clean up 2019-01-29 15:23:21 +01:00
Niels Lyngsø 2fa2e0109d Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-29 15:14:41 +01:00
Niels Lyngsø 78c3797e5a V8: colors for tags 2019-01-29 15:14:38 +01:00
Stephan 5d65ba3147 Merge branch 'temp8-fixtree' into temp8 2019-01-29 14:59:45 +01:00
Stephan cd5dc410cc Refactor IDataTypeConfigurationConnector for Deploy 2019-01-29 14:49:41 +01:00
Niels Lyngsø f94e0fd3ec V8: CSS — variable correction 2019-01-29 14:38:33 +01:00
Niels Lyngsø d39045caef V8: CSS — adding missing unit for umb-loader in umb-tree 2019-01-29 14:31:27 +01:00
Kenn Jacobsen 99f0e6c05a Fix callback 2019-01-29 14:11:04 +01:00
Kenn Jacobsen 2c40e46d56 Set form dirty on color picker value change + update selected item label + clean up unused code 2019-01-29 14:11:04 +01:00
Niels Lyngsø d2934f6be4 Merge remote-tracking branch 'origin/temp8-ui-update-color-to-2019-brandcolor-pink' into temp8 2019-01-29 14:10:18 +01:00
Niels Lyngsø b573b9a50a brandcolor 2019 corrections 2019-01-29 14:09:48 +01:00
Shannon c0026d3c23 Removes UseDirectoryUrls, have better defaults for reserved paths, don't ship with values in them just have them blank 2019-01-29 23:58:43 +11:00
Niels Lyngsø f0b4f31a9e Merge remote-tracking branch 'origin/temp8-ui-niels-adjustments' into temp8-ui-update-color-to-2019-brandcolor-pink
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/less/buttons.less
#	src/Umbraco.Web.UI.Client/src/less/components/editor.less
#	src/Umbraco.Web.UI.Client/src/less/components/html/umb-expansion-panel.less
2019-01-29 13:33:44 +01:00
Shannon 1897c0f162 moves package actions to correct namespace, no more _Legacy namespace 2019-01-29 23:31:59 +11:00
Niels Lyngsø 34f93331bd brandcolor 2019 corrections 2019-01-29 13:31:54 +01:00
Shannon 2e527163f9 no more umbraco.presentation namespace! no more "page" class, has been refactored and renamed to what it actually is and internalized 2019-01-29 23:27:00 +11:00
Sebastiaan Janssen 7a778d4c42 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/StringExtensions.cs
#	src/Umbraco.Web/Models/Mapping/UserModelMapper.cs
2019-01-29 13:11:03 +01:00
Shannon eef86689c8 Removes booting.aspx and creates embedded html pages for booting and failed (if those are ever seen ), renames some classes and namespaces, removes old cdf bundle classes 2019-01-29 23:05:59 +11:00
Benjamin Carleski 2c3a2b29b2 Obsolete direct hash generation methods, and switch to generic GenerateHash
As noted in https://github.com/umbraco/Umbraco-CMS/issues/4292, using direct hash methods can break compliance when on restricted systems that require FIPS compliance.  This has been addressed in a few commits.  This commit goes further to obsolete methods not previously obsoleted relating to direct hashing calls, and switches a direct call to one of these methods to use the correct, generic GenerateHash.
2019-01-29 12:58:51 +01:00
Shannon e7b0e43d98 removes scripting.config, EnableSplashWhileLoading, RenderingEngine, and more! 2019-01-29 22:38:03 +11:00
Kenn Jacobsen 66ca8c6018 Respect the name casing when creating a new template 2019-01-29 12:25:23 +01:00
Niels Lyngsø 6bf7db79e3 frontend design update for brandcolors 2019 2019-01-29 12:05:52 +01:00
Shannon cf1bf123da Merge branch 'temp8' into temp8-remove-legacy-controls
# Conflicts:
#	src/Umbraco.Web/Editors/DashboardController.cs
2019-01-29 22:02:37 +11:00
Shannon Deminick 19686496e6 Merge pull request #4228 from umbraco/temp8-3396-fix-YSOD-for-publishing
Publish a variant without a name gives YSOD
2019-01-29 21:57:07 +11:00
Shannon 1f7a0600c6 Merge remote-tracking branch 'origin/temp8' into temp8-3396-fix-YSOD-for-publishing 2019-01-29 21:48:09 +11:00
Warren Buckley e2d4110685 When creating a PartialView we do a string.replace for Model.Content. to be Model. as MacroPartialViews work with Model.Content and PartialViews like Model. 2019-01-29 10:46:10 +00:00
Shannon Deminick de237c36aa Merge pull request #4227 from umbraco/temp8-fixme-no-caching-of-url-and-inject-umbraco-context-accessor
Fixme - No caching of url and inject IUmbracoContextAccessor
2019-01-29 21:29:53 +11:00
Shannon 649aa82c63 Merge branch 'temp8' into temp8-fixme-no-caching-of-url-and-inject-umbraco-context-accessor 2019-01-29 21:29:32 +11:00
Shannon 9bcb2bfb38 removes unused code 2019-01-29 21:27:22 +11:00
Shannon c272c2ad3b Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-29 21:22:17 +11:00
Shannon fd80aecb20 fixes more of the ConvertRelatedLinksToMultiUrlPicker migration 2019-01-29 21:22:01 +11:00
Warren Buckley 7d2024d3fd Merge pull request #4295 from umbraco/temp8-macro-picker-fixes
Fixes UI for macropicker and added submit button
2019-01-29 09:31:41 +00:00
Stephan d24b7f2aba Refactor enums 2019-01-29 10:17:26 +01:00
Niels Lyngsø 9cd2e36c4b more color corrections for brandcolors 2019 2019-01-29 10:00:38 +01:00
Shannon 47bde0f507 Merge branch 'temp8' into temp8-fixme-no-caching-of-url-and-inject-umbraco-context-accessor 2019-01-29 19:58:40 +11:00
Shannon 7b85ebab56 Adds migration to convert start nodes for picker configuration to UDIs 2019-01-29 19:54:32 +11:00
Bjarke Berg 9c3e501a60 Fixes UI for macropicker and added submit button 2019-01-29 09:46:24 +01:00
Niels Lyngsø 08a8e0793e Design & color changes for 2019 brand colors 2019-01-29 09:30:42 +01:00
Stephan 5135635bf8 Cleanup 2019-01-29 09:15:10 +01:00
Shannon 89a99e1c5f Makes IDashboard IDiscoverable 2019-01-29 18:10:50 +11:00
Shannon 70f23b2245 Merge branch 'temp8' into temp8-fixme-no-caching-of-url-and-inject-umbraco-context-accessor 2019-01-29 17:56:11 +11:00
Shannon ee693b63bd Fixes issue with ConvertRelatedLinksToMultiUrlPicker migration since it produces invalid SQL if there are no values in the .Contains calls 2019-01-29 17:52:48 +11:00
Shannon 86d8bc0c62 fix merge 2019-01-29 17:19:58 +11:00
Shannon 22d879ab35 Merge branch 'temp8' into temp8-fixme-no-caching-of-url-and-inject-umbraco-context-accessor
# Conflicts:
#	src/Umbraco.Tests/PublishedContent/NuCacheTests.cs
#	src/Umbraco.Web/Models/PublishedContentBase.cs
#	src/Umbraco.Web/PublishedCache/NuCache/ContentNode.cs
#	src/Umbraco.Web/PublishedCache/NuCache/PublishedSnapshotService.cs
2019-01-29 17:12:35 +11:00
Stephan c2f51be0a1 Bugfix 2019-01-28 22:44:00 +01:00
Niels Lyngsø 052cee31b3 color corrections for pink theme 2019-01-28 21:36:04 +01:00
Warren Buckley 4a5eca3c6a Adds in Composition Extension Methods to allow Setting the LogViewer without having to know the composition.RegisterUnique syntax 2019-01-28 15:39:49 +00:00
Stephan 9eabc1fb3f More NuCache/PublishedContent cleanup 2019-01-28 16:23:10 +01:00
Warren Buckley 633d9c6fb4 Merge pull request #4218 from umbraco/temp8-dashboards-collection
V8 - Remove dashboards.config - use CollectionBuilder
2019-01-28 14:47:44 +00:00
Stephan 9b4b8b9d86 Cleanup NuCache/PublishedContent 2019-01-28 14:15:47 +01:00
Stephan 85d4b4a61d Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-28 14:07:19 +01:00
Stephan d901e14e4f Merge branch 'temp8-ispublished-again' into temp8 2019-01-28 14:06:17 +01:00
Stephan 27fd908517 Refactor IPublished 2019-01-28 14:05:59 +01:00
Niels Lyngsø d262b524df Merge remote-tracking branch 'origin/temp8-ui-overlay-button-style' into temp8-ui-update-color-to-2019-brandcolor-pink 2019-01-28 13:18:04 +01:00
Niels Lyngsø f619b03b04 Correct spelling 2019-01-28 13:17:38 +01:00
Niels Lyngsø 1f09292ee3 Merge remote-tracking branch 'origin/temp8-ui-overlay-button-style' into temp8-ui-update-color-to-2019-brandcolor-pink 2019-01-28 13:15:52 +01:00
Niels Lyngsø 9a0f50291c color adjustments for proposal 2019-01-28 13:15:40 +01:00
Stephan a344a2f240 Merge branch 'temp8' into temp8-ispublished-again 2019-01-28 13:08:30 +01:00
Stephan fac25b5971 Bugfix 2019-01-28 13:04:37 +01:00
Stephan c675708388 Refactor dashboards 2019-01-28 12:38:58 +01:00
Warren Buckley 117b836cd7 Merge pull request #4259 from umbraco/temp8-remove-related-links-with-migration
Remove related links and migrate existing data to Multi URL Picker
2019-01-28 09:42:56 +00:00
Stephan 918908a785 Merge branch 'temp8' into temp8-dashboards-collection 2019-01-28 10:35:34 +01:00
Stephan c2a404c02d Update ModelsBuilder 2019-01-28 10:34:57 +01:00
Stephan e410b8b067 Fix TreeUse 2019-01-28 10:27:36 +01:00
Stephan 27ecd795b2 Merge branch temp8 into temp8-fixtree 2019-01-28 10:19:36 +01:00
Warren Buckley e7181915ff Merge remote-tracking branch 'origin/temp8' into temp8-remove-legacy-controls 2019-01-28 08:40:25 +00:00
Warren Buckley 9f79f1833f Merge remote-tracking branch 'origin/temp8' into temp8-dashboards-collection
# Conflicts:
#	src/Umbraco.Web/Services/DashboardService.cs
2019-01-28 08:33:52 +00:00
Niels Lyngsø df00cfab40 Merge remote-tracking branch 'origin/temp8-ui-update-colors-to-2019-brandcolors' into temp8-ui-update-color-to-2019-brandcolor-pink 2019-01-28 09:31:24 +01:00
Niels Lyngsø f0611fff90 correct color variable for variant switcher 2019-01-28 09:30:08 +01:00
Niels Lyngsø da3a5d35c1 make unpublish button in overlay appear as button-style warning 2019-01-28 09:00:38 +01:00
Bjarke Berg 3c24aac81d Merge remote-tracking branch 'origin/temp8' into temp8-ispublished-again 2019-01-28 08:46:17 +01:00
Bjarke Berg 9b01910d44 Removed isPublished stuff from XmlPublishedContent. 2019-01-28 08:27:42 +01:00
Niels Lyngsø 6b0158f761 color update 2019-01-27 18:14:55 +01:00
Sebastiaan Janssen 7e8c0ed369 Apply changes from PR #4197 to v8 too 2019-01-27 15:17:08 +01:00
Sebastiaan Janssen cebf1e6c22 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js
#	src/Umbraco.Web/Editors/ContentController.cs
#	src/Umbraco.Web/Routing/PublishedRequest.cs
2019-01-27 13:47:22 +01:00
Sebastiaan Janssen d174499e50 Fixes #4260 incorrect permissions required for Notifications sign up 2019-01-27 13:30:44 +01:00
Sebastiaan Janssen 647d92775c Make right-click menu work in Firefox 2019-01-27 12:02:39 +01:00
Kenn Jacobsen a185d56ae5 Ensure that element types can't be assigned as allowed children to other content types 2019-01-27 11:46:55 +01:00
Chris Houston 193e24afd2 Fixing all the TODO, FIXME & HACK comments so they all follow the same layout. 2019-01-27 11:16:00 +01:00
Kenn Jacobsen d31e25281d Fix infinite loop when saving multiple variants using list view 2019-01-27 10:41:50 +01:00
Kenn Jacobsen df20feb703 Make cache properties on PublishedContentRequest public 2019-01-27 10:39:34 +01:00
Sebastiaan Janssen ae25e4564e Fix the tests 2019-01-27 10:26:41 +01:00
Kenn Jacobsen 1955409582 Don't allow creation of element types in the content tree 2019-01-26 18:30:50 +01:00
Kenn Jacobsen b709ed4aa3 Don't attempt to resolve URLs for element types 2019-01-26 18:27:53 +01:00
Kenn Jacobsen 57fb9888a2 Add localization to Flatpickr 2019-01-26 18:22:12 +01:00
Kenn Jacobsen 54bb3384b2 Add "time" and "bigint" to value types 2019-01-26 17:48:30 +01:00
Kenn Jacobsen 9f2477ad75 Remove the hover underline from grid items 2019-01-26 17:47:23 +01:00
Kenn Jacobsen 35a6d721ee Make sure to inform the content editor of an app change when split view is opened 2019-01-26 17:38:59 +01:00
Nathan Woulfe a4c5b7118d check for editorstate.current before attempting to access properties object 2019-01-26 17:33:45 +01:00
Niels Lyngsø 0194ccdad7 corrected on-edit method for MultiUrlPicker, Fixes #4171 2019-01-26 17:30:42 +01:00
Kenn Jacobsen a2f0ad67ab Fix the flickering tooltip 2019-01-26 17:30:27 +01:00
Sebastiaan Janssen 8d4da215fa Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/Models/PublishedContent/PublishedContentType.cs
#	src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs
#	src/Umbraco.Tests/LibraryTests.cs
#	src/Umbraco.Tests/Membership/DynamicMemberContentTests.cs
#	src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentDataTableTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentTestElements.cs
#	src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs
#	src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
#	src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/es.xml
#	src/Umbraco.Web/Scheduling/HealthCheckNotifier.cs
#	src/Umbraco.Web/WebBootManager.cs
2019-01-26 17:24:21 +01:00
Ronald Barendse 52a56c8852 Only add TLS 1.2 if explicit protocols are defined 2019-01-26 17:09:47 +01:00
Kenn Jacobsen 32f228fa7c Use the media file name as display name in the file link 2019-01-26 17:05:38 +01:00
Chris Houston 8d2c1332d3 Fixed a few typos I spotted in the last commit :) (#4215) 2019-01-26 16:56:30 +01:00
Chris Houston 0b6ba5aa52 Temp8 - Fixing spelling / typos etc in Umbraco.Web (#4148) 2019-01-26 16:52:19 +01:00
Chris Houston a13a38a482 Updated all the TODO: comments in the Umbraco.Core project so they are all in the same format. ( // TODO: ) (#4220)
Also moved some of the comments so they are will work better / are not within Code Documentation comments
2019-01-26 15:42:14 +01:00
Ronald Barendse 7a2f09643a Changed health check to indicate HTTPS endpoint connectivity using TLS 1.2 2019-01-26 15:30:47 +01:00
Paul Seal c9819b2d89 - disabled the duplicated community health checks (#4175) 2019-01-26 15:01:03 +01:00
Kenn Jacobsen 43a97185b6 Clean up file system tree controller handling of no-op for nodes 2019-01-26 14:58:47 +01:00
Kenn Jacobsen de8516d2c7 Make it possible to create folders for stylesheets 2019-01-26 14:58:47 +01:00
Niels Lyngsø 98cee55dda Merge remote-tracking branch 'origin/temp8' into temp8-ui-update-colors-to-2019-brandcolors 2019-01-25 16:35:56 +01:00
Niels Lyngsø dfaa297104 V8: Color refactoring up + first draft to fit with 2019 brand colors. 2019-01-25 16:33:06 +01:00
Sebastiaan Janssen 5a896e7417 Remove obsoleted RelatedLinks picker (replaced by Multi URL Picker)
(cherry picked from commit fedf0c78de)
2019-01-25 16:06:49 +01:00
Sebastiaan Janssen 2c6b5f21b0 Migrates RelatedLink data to MultiUrlPicker and changes all RelatedLink datatypes to MultiUrlPicker ones 2019-01-25 16:06:32 +01:00
Warren Buckley b1f94c66dc Remove name property from dashboard package.manifest collection 2019-01-25 12:18:15 +00:00
Warren Buckley 4b3cd91188 Remove Name property from IDashboardSection & the C# types (We use localization of dashboardTabs_alias) 2019-01-25 12:17:52 +00:00
Warren Buckley 19d084e086 Localize dashboard tabs with a convention of dashboardsTabs_dashboardAlias as the localization key 2019-01-25 12:11:07 +00:00
Bjarke Berg 66959baabe Reimplemented IsPublished on PublishedContent 2019-01-25 12:56:53 +01:00
Stephan e8cb30fbc4 Fix exception when replacing IServerRegistrar 2019-01-25 12:33:20 +01:00
Stephan 427ac259f4 Refactor datatype configuration connector 2019-01-25 11:57:42 +01:00
Stephan bb07921363 KeyValueService supports more weird situations 2019-01-25 11:57:08 +01:00
Warren Buckley a8e8832a75 Bye bye dashboard.config.install XDT transform as part of NuGet install 2019-01-25 10:17:40 +00:00
Bjarke Berg 11f8192e52 Merge pull request #4248 from umbraco/temp8-dashboards-collection-review
Dashboards collection review
2019-01-25 11:07:37 +01:00
Bjarke Berg 15c197abd3 public AccessRule.cs, to let third party create dashboards from code without having to implement there own 2019-01-25 11:04:56 +01:00
Warren Buckley b88ca1db49 Remove FIleSystemProviders.config from web.config XML files 2019-01-25 09:22:02 +00:00
Warren Buckley 6ee8ef0a07 Fix the build! Sorry Stephan 👌 2019-01-25 09:18:19 +00:00
Warren Buckley bee2776035 Bye bye FileSystemProvider.config - we no longer use you 2019-01-25 09:10:49 +00:00
Bjarke Berg 1c55f4ed4f changed correct file 2019-01-25 10:09:28 +01:00
Bjarke Berg 8926e28706 revert 2019-01-25 10:08:52 +01:00
Bjarke Berg 6626edbfa8 unused using 2019-01-25 10:04:18 +01:00
Bjarke Berg 87a5b63492 Merge branch 'temp8-dashboards-collection' into temp8-dashboards-collection-review 2019-01-25 09:57:59 +01:00
Bjarke Berg 0f8784b9f5 Merge remote-tracking branch 'origin/temp8' into temp8-dashboards-collection-review 2019-01-25 09:56:06 +01:00
Bjarke Berg 51d2c3f351 Merge remote-tracking branch 'origin/temp8-dashboards-collection' into temp8-dashboards-collection 2019-01-25 09:55:19 +01:00
Bjarke Berg 544b13f05d Merge remote-tracking branch 'origin/temp8' into temp8-dashboards-collection 2019-01-25 09:54:49 +01:00
Bjarke Berg 5f80faa725 Review fix suggestions for dashboards. 2019-01-25 09:52:18 +01:00
Stephan d5c2e21c4a Merge branch 'temp8' into temp8-fixtree 2019-01-25 09:51:08 +01:00
Stephan 585abf2902 Cleanup trees 2019-01-25 09:49:55 +01:00
Warren Buckley d257396013 Missing Serilog.Formatting.Compact.Reader from Nuspec for the Logviewer stuff- thanks Twitter for the heads up 👍 2019-01-25 08:21:43 +00:00
Bjarke Berg d9c6d8c568 Merge remote-tracking branch 'origin/temp8' into temp8-dashboards-ciollection-review 2019-01-25 07:35:07 +01:00
Stephan 4067ac7d93 Merge branch temp8 into tmp8-fixtree 2019-01-24 18:34:25 +01:00
Stephan 0ffa4702ba Bugfix install 2019-01-24 18:26:08 +01:00
Warren Buckley 3e69ceb487 Remove dashboard from web.config 2019-01-24 15:52:56 +00:00
Warren Buckley 79eaeef258 Fixup NuSpec as we no longer ship with default.aspx 2019-01-24 15:44:47 +00:00
Warren Buckley 37b614a577 Another file that can be gone as was used by LegacyDialogTask 2019-01-24 15:41:38 +00:00
Niels Lyngsø 874c89656c action colors 2019-01-24 15:57:28 +01:00
Warren Buckley 7257d19445 Merge remote-tracking branch 'origin/temp8' into temp8-remove-legacy-controls 2019-01-24 14:45:57 +00:00
Warren Buckley 1ad0c88731 👻👻 Nightmares of writing WebForms controls with CSS markup & attributes in a .cs file 👻👻 2019-01-24 14:34:18 +00:00
Stephan e4c644e745 Consistent PublishedContentExtensions, culture always optional 2019-01-24 15:29:50 +01:00
Warren Buckley 1f79d9e635 🔪🔪Next on the chobbing block is config/create/ui.xml & references back to it which was Legacy Controller, DialogTask etc🔪🔪 2019-01-24 14:29:00 +00:00
Stephan 38ec97bbe3 Need to refactor IsPublished 2019-01-24 15:22:20 +01:00
Niels Lyngsoe 74bd8fa0db added 2019 brand colors 2019-01-24 15:11:34 +01:00
Warren Buckley 85da2a94b9 Bye 404Handlers XML config file - add/remove IContentFinders in your own composer/component 2019-01-24 14:09:28 +00:00
Warren Buckley ba098f49c4 ☠️☠️ Bye bye feedproxy.config ☠️☠️ 2019-01-24 13:59:17 +00:00
Warren Buckley c7bbad3c0c Lots or removal & tidy up - still WIP & may break build 2019-01-24 13:58:16 +00:00
Stephan a6d3078638 Improve CoreRuntime handling of boot fails 2019-01-24 14:04:31 +01:00
Stephan 31a6f2d67c Add runtime hooks for Deploy 2019-01-24 14:04:31 +01:00
Niels Lyngsø b9fd04c8b9 Merge remote-tracking branch 'origin/temp8-ui-resizeable-handler' into temp8 2019-01-24 13:31:02 +01:00
Bjarke Berg 5f1ddad835 Merge remote-tracking branch 'origin/temp8' into temp8-dashboards-collection 2019-01-24 13:27:15 +01:00
Warren Buckley def6d67fcc Merge branch 'temp8' into temp8-remove-legacy-controls 2019-01-24 12:21:49 +00:00
Warren Buckley 26f0090fd0 Merge pull request #4205 from umbraco/temp8-fixmes-add-ispublished-to-ipublished-content
Added IsPublished(culture) to IPublishedContent
2019-01-24 12:12:52 +00:00
Warren Buckley 344026ec23 Merge pull request #4240 from umbraco/temp8-update-fixme-comments-to-todo-with-link-to-task
Changed Fixme/task to TODO [Link]
2019-01-24 12:06:38 +00:00
Warren Buckley db3116ff9c Merge pull request #4212 from umbraco/temp8-fixme-only-allow-local-keep-alive-pings
Fixme - Only allow local KeepAlive Pings requests
2019-01-24 11:49:05 +00:00
Bjarke Berg 49b2a9a080 Fixes for search of members + Removed fixme in member that apparently are not necessary after tags refactoring 2019-01-24 12:17:30 +01:00
Warren Buckley 6e1a860e77 Merge pull request #4211 from umbraco/temp8-PublishedContentExtensions-handling-methods-hidden-by-overload
Fixme - Handled "Method with optional parameter is hidden by overload" issues
2019-01-24 11:07:12 +00:00
Niels Lyngsø eef6c783ea updated package-lock.json 2019-01-24 11:59:33 +01:00
Sebastiaan Janssen 9e0d2e5873 Revert "Remove obsoleted RelatedLinks picker (replaced by Multi URL Picker)"
This reverts commit fedf0c78de.
2019-01-24 11:37:28 +01:00
Bjarke Berg ec8c455635 Fixes for search of members + Removed fixme in member that apparently are not necessary after tags refactoring 2019-01-24 11:28:27 +01:00
Warren Buckley f70df699db Merge pull request #4114 from umbraco/temp8-ui-expansion-panel-hover
Temp8 ui expansion panel hover
2019-01-24 10:03:00 +00:00
Bjarke Berg 3eb01a1557 Merge remote-tracking branch 'origin/temp8' into temp8-3396-fix-YSOD-for-publishing 2019-01-24 10:27:47 +01:00
Warren Buckley d8751365c8 Merge pull request #4206 from umbraco/temp8-fixme-children-wrong-merge-and-unused-file
Fixme - Wrong merge in PublishedContentExtensions and renamed prevalue connector
2019-01-24 09:24:58 +00:00
Bjarke Berg 5842337d02 3396 - Fix for when clearing the name again 2019-01-24 09:42:49 +01:00
Bjarke Berg cc897285c9 3396 - Force publish for all mandatory langauges that has not yet beed published 2019-01-24 08:31:42 +01:00
Bjarke Berg b389e6c07f 3396 - don't let user determine whether to publish mandatory languages on first publish. All mandatory languages with data is saved. If a mandatory language does not have data we cannot publish anything. 2019-01-24 08:16:55 +01:00
Warren Buckley 0480242532 Some sneaky MasterPages kill the last of them off with fire 🔥 2019-01-23 18:56:33 +00:00
Warren Buckley 31509beb1c 🙈 WOW this was super old Umbraco V3 days of <umbraco:item runat="server" /> WebForms days 2019-01-23 18:17:10 +00:00
Warren Buckley fcb3f8e791 Remove Umbraco.Web.UI.Controls folder & classes - Controis reek of WebForms era 2019-01-23 17:57:20 +00:00
Warren Buckley 03498b3c61 Update comment about this Interface usage - maybe we can remove this later on 2019-01-23 17:56:44 +00:00
Warren Buckley 5e9f861991 Cleanup of WebRuntimeComposer 2019-01-23 15:09:31 +00:00
Warren Buckley f2cc0eebf5 Remove the dashboard XML config file 2019-01-23 14:43:05 +00:00
Warren Buckley 5d34ee271c Forgot to remove my test App_Plugin Dashboard 2019-01-23 14:42:49 +00:00
Warren Buckley 26f43cda97 Merge remote-tracking branch 'origin/temp8' into temp8-dashboards-collection 2019-01-23 14:38:26 +00:00
Warren Buckley 69a3c85bbc Refactor of dashboards
* Remove dashboards from Configs().Dashboards
* Remove dashboard.config XML file & associated code reading from XML
* Load Dashboards from TypeLoader into a CollectionBuilder
* Load merge/concat C# Dashboard Types with package.manifest
* Add buildercolletion to an extension method on Composition
2019-01-23 14:37:33 +00:00
Bjarke Berg f8b9fb039f Handle culture not set in HasCulture. 2019-01-23 15:35:20 +01:00
Niels Lyngsø d16aa91a5e remove extra border from MCE-edit-area 2019-01-23 15:13:42 +01:00
Bjarke Berg f8b52a57c3 Injecting Umbraco Context Accessor and not saving the url on the class 2019-01-23 14:16:42 +01:00
Bjarke Berg ca76a5424a Only allow local KeepAlive Pings requests 2019-01-23 12:34:41 +01:00
Bjarke Berg d2d852f0f3 Handled "Method with optional parameter is hidden by overload" issues 2019-01-23 10:39:51 +01:00
Bjarke Berg f10b35780c - Removed PostFilterParams
- Handling of PostFilter using Expression trees
2019-01-23 10:22:29 +01:00
Sebastiaan Janssen fedf0c78de Remove obsoleted RelatedLinks picker (replaced by Multi URL Picker) 2019-01-23 09:01:53 +01:00
Bjarke Berg 6f25bc7c37 Reintroduced a interface for deploy 2019-01-23 08:17:39 +01:00
Bjarke Berg e871392405 Added IsPublished(culture) to IPublishedContent 2019-01-23 07:54:45 +01:00
Bjarke Berg dcb616157d Removed unused IPreValueConnector 2019-01-23 07:52:24 +01:00
Bjarke Berg ddace54f45 Fixed wrong merge in Children() method 2019-01-23 07:51:43 +01:00
Christian Alkærsig 7acafe67a4 Delete template2.cshtml
Auto-generated test file
2019-01-23 00:28:21 +01:00
Alkaersig 9eb2b28232 Added (Doctype) Name and Description to PublishedContentType 2019-01-23 00:28:21 +01:00
Paul Seal 832ec68140 - tls check to check if the site is set up to use at least TLS 1.2 for outgoing connections.
- added translations for all languages which have a healthcheck section in the language file.
2019-01-23 00:11:35 +01:00
Chris Houston 78319bae9e Temp8 fix typos 2 (#4130) 2019-01-23 00:03:39 +01:00
Bjarne Fyrstenborg 01de2eb266 Synctree in log viewer overview 2019-01-22 23:05:17 +01:00
Bjarne Fyrstenborg ca98fad918 Update box heading in log viewer overview 2019-01-22 23:02:05 +01:00
Bjarne Fyrstenborg d8f0af1a94 Fix plural localization 2019-01-22 22:59:52 +01:00
Bjarne Fyrstenborg fc12f2b802 Add track by on package lists 2019-01-22 22:57:46 +01:00
Bjarne Fyrstenborg 977423e094 Remove old delete dialog, add new dialog view + set delete button state 2019-01-22 22:57:46 +01:00
Bjarne Fyrstenborg c405d1b6d1 Fix localization of buttons in modals 2019-01-22 22:52:01 +01:00
Kenn Jacobsen 6983f3d43a V8: Clean up trashed content options (#4136) 2019-01-22 22:50:12 +01:00
Sebastiaan Janssen d380f75d31 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web/Editors/ContentController.cs
#	src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
#	src/Umbraco.Web/WebApi/Filters/EnsureUserPermissionForContentAttribute.cs
2019-01-22 22:46:15 +01:00
Sebastiaan Janssen 8e61276b8a Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/datepicker/datepicker.controller.js
#	src/Umbraco.Web/PropertyEditors/DatePreValueEditor.cs
#	src/Umbraco.Web/WebBootManager.cs
2019-01-22 22:06:19 +01:00
Kenn Jacobsen a8d5bd6d1f Don't let the users empty the recycle bin without delete permissions (#3699) 2019-01-22 22:05:12 +01:00
Kenn Jacobsen e252a0849b Add "default empty" prevalue to date and datetime 2019-01-22 21:58:17 +01:00
Bjarne Fyrstenborg 45735a5529 v8: Add missing localizations (#4199) 2019-01-22 21:57:16 +01:00
Stephan d9cc1f4cb8 Fix more tests 2019-01-22 18:25:02 +01:00
Stephan ce4fc6654e Fix NestedContent tests now we have isElement 2019-01-22 17:32:46 +01:00
Rasmus John Pedersen e1175b814e Add Multi Url Picker 2019-01-22 16:00:15 +01:00
Warren Buckley 9b9c9ef455 Adds Sections() ordered collection to the Composition, so devs can ammend the collection, change order etc 2019-01-22 14:59:32 +00:00
Stephan 917b83be92 Merge branch 'temp8' into temp8-fixtree 2019-01-22 15:11:55 +01:00
Stephan b54155d1c9 Merge remote-tracking branch 'origin/temp8' into temp8 2019-01-22 15:05:23 +01:00
Stephan 6d6828eaaf Merge branch 'temp8-pr4102' into temp8 2019-01-22 15:04:32 +01:00
Niels Lyngsø e651d5917a Finds and set the active ContentApp when running init, fixing the issue of retuning to a node after editing the DocType in infinity editing.
Fixes #4185
2019-01-22 14:38:10 +01:00
Stephan fd0ee6bb11 Merge branch 'v8-fix-nested-content-only-elements' of https://github.com/kjac/Umbraco-CMS into temp8-pr4102 2019-01-22 14:30:38 +01:00
Robert 1fc2ea9345 Fixes composition in Media Types 2019-01-22 14:30:23 +01:00
Stephan 9628d6f761 Merge branch 'temp8-pr4117' into temp8 2019-01-22 14:28:47 +01:00
Stephan c1e81fe40c Merge branch 'v8-fix-remove-element-type-template-assignment' of https://github.com/kjac/Umbraco-CMS into temp8-pr4117 2019-01-22 14:22:36 +01:00
Stephan e36ca2e957 Merge branch temp8 into temp8-fixtree 2019-01-22 14:08:14 +01:00
Stephan ad026e25d7 Cleanup trees 2019-01-22 13:55:31 +01:00
Stephan e349ead8b5 Better error message 2019-01-22 13:08:47 +01:00
Bjarke Berg 4981f0e828 Merge pull request #2926 from umbraco/temp8-logviewer
Merged V8 LogViewer
2019-01-22 12:04:32 +01:00
Bjarke Berg 7b0acf9844 Merge pull request #4179 from umbraco/tem8-logviewer-review
Temp8 logviewer review fixes
2019-01-22 11:29:51 +01:00
Warren Buckley 626b9e8f7b Remove a TODO comment that was hanging around 2019-01-22 10:07:56 +00:00
Warren Buckley 62617537fa Change icon from scary bug to box-alt 2019-01-22 10:05:14 +00:00
Bjarke Berg 70315d4a5f Make as must of the log viewer internal as possible 2019-01-22 10:36:44 +01:00
Bjarke Berg c8daf1d8db Merge branch 'temp8-logviewer' into tem8-logviewer-review 2019-01-22 10:20:26 +01:00
Bjarke Berg 70010bc344 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs
2019-01-22 10:19:43 +01:00
Bjarke Berg 025d0eae18 Logviewer code cleanup. 2019-01-22 10:14:07 +01:00
Stephan c840895f90 Deal with more fixme 2019-01-22 09:49:35 +01:00
Stephan a53a15f4d8 Merge branch 'temp8-remove-mysql' into temp8 2019-01-22 08:30:35 +01:00
Stephan 04a4e2d00e cleanup 2019-01-22 08:30:08 +01:00
Bjarke Berg 2c86e87917 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-22 08:23:07 +01:00
Stephan 0c07af9a41 Merge branch temp8 into temp8-remove-mysql 2019-01-22 08:15:24 +01:00
Stephan 53d767e978 Fix clearing property values #4119 2019-01-22 08:09:21 +01:00
Stephan afd6236406 Merge pull request #4164 from umbraco/temp8-broken-view-fixes
Fixes for broken views..
2019-01-21 18:55:24 +01:00
Stephan 6fb41e364b Fix query builder 2019-01-21 18:50:27 +01:00
Stephan 76d2421f0c Restore some InternalsVisibleTo that we do need 2019-01-21 18:02:31 +01:00
Warren Buckley 6d0f505e2d Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-21 16:39:51 +00:00
Stephan 706b865a5f Merge branch 'temp8-3668-query-builder-snippits' into temp8 2019-01-21 17:38:39 +01:00
Stephan 9e811ddd50 Fix fallback 2019-01-21 17:38:06 +01:00
Warren Buckley dda9c5183c Updates the composer/registration of JSONLogViewer - Can't use default parameters with DI hence needed to use factory & new up an instance 2019-01-21 16:36:47 +00:00
Warren Buckley 8ab5142357 Moves tree into Settings group as opposed to third party trees & positions last 2019-01-21 16:36:00 +00:00
Warren Buckley 3af859e020 Updates default log levels that we ship out of the box for V8 - It was a very chatty Verbose, now set to Info 2019-01-21 16:29:59 +00:00
Stephan 358a36dd87 Merge branch temp8 into temp8-3668-query-builder-snippits 2019-01-21 16:07:20 +01:00
Stephan ee0c868687 Misc fixes for PR and Fallback 2019-01-21 16:02:16 +01:00
Stephan 9522ee826f Deal with fixme in Umbraco.Web 2019-01-21 16:01:37 +01:00
Stephan 4a0b969777 Deal with fixme in Umbraco.Core 2019-01-21 16:01:37 +01:00
Warren Buckley 9407c85d71 Remove TreesAndSection tests (must have been a funky merge gone wrong) 2019-01-21 12:40:19 +00:00
Niels Lyngsø 735c2ccfd7 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-21 13:30:55 +01:00
Niels Lyngsø dd29deec6a V8 Gulp — only run imagemin in production mode. 2019-01-21 13:30:49 +01:00
Warren Buckley 1d39c177cc Adds in private method EnsureFileExists as it was removed from IOHelper 2019-01-21 11:48:55 +00:00
Warren Buckley f6154a38d9 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs
#	src/Umbraco.Web.UI.Client/gulpfile.js
#	src/Umbraco.Web.UI/config/trees.Release.config
#	src/Umbraco.Web.UI/config/trees.config
2019-01-21 11:17:14 +00:00
Bjarke Berg a32c8b3a68 Merge pull request #4167 from umbraco/temp8-3417-macro-crud
Macro delete stuff
2019-01-21 11:36:10 +01:00
Niels Lyngsø 82d6af2013 Merge remote-tracking branch 'origin/temp8' into bugfix/temp8-media-could-not-be-moved-to-root
# Conflicts:
#	src/Umbraco.Web/Trees/ApplicationTreeController.cs
2019-01-21 11:13:08 +01:00
Sebastiaan Janssen ba4b84d7f4 Fixes #4166 - Outgoing connections sometimes fail because they require TLS 1.2 2019-01-21 11:10:01 +01:00
Bjarke Berg 57902892f9 Constructor injection 2019-01-21 10:55:48 +01:00
Stephan d4664fbae6 Merge branch 'temp8' into temp8-3668-query-builder-snippits 2019-01-21 10:50:40 +01:00
Bjarke Berg 252d31a5f5 Delete macros 2019-01-21 10:44:11 +01:00
Bjarke Berg 269273f294 Merge pull request #4165 from umbraco/temp8-3417-macro-crud
Macro CRUD angularized
2019-01-21 09:55:26 +01:00
Matthew-Wise 2744afab00 Disable LastPass on page heading (#4153) 2019-01-21 09:49:00 +01:00
Niels Lyngsø 60d86354f3 Media Picker adjustments 2019-01-21 09:46:00 +01:00
Bjarke Berg 566895d3cd Merge branch 'temp8' into temp8-3417-macro-crud 2019-01-21 09:14:40 +01:00
Bjarke Berg 3fd8c63542 - Show Ids
- Hide "Render in rich text editor and the grid" if "Use in rich text editor and the grid" is false
2019-01-21 09:10:39 +01:00
Bjarke Berg d5c6e0c6e7 - Saving paramters 2019-01-21 09:10:08 +01:00
Bjarke Berg ec57f35374 Named arguments cannot precede positional 2019-01-21 08:03:12 +01:00
Bjarke Berg 333c143005 GetPropertyValue change to Value 2019-01-21 07:59:05 +01:00
Bjarke Berg 46f7c76c0b Fixes for broken view..
- Create new UmbracoHelper (Missing parameter)
- string.replace can't handle string and IHtmlString
2019-01-21 07:54:35 +01:00
Bjarne Fyrstenborg a502be606b v8: Fix package localization (#4159) 2019-01-20 21:27:32 +01:00
Sebastiaan Janssen 0b19c07756 Merge branch 'dev-v7' into temp8
# Conflicts:
#	.github/README.md
#	src/Umbraco.Core/Constants-PropertyEditors.cs
#	src/Umbraco.Core/PropertyEditors/PropertyEditorResolver.cs
#	src/Umbraco.Web.UI.Client/src/views/media/media.restore.controller.js
#	src/Umbraco.Web/Cache/DataTypeCacheRefresher.cs
#	src/Umbraco.Web/PropertyEditors/RelatedLinks2PropertyEditor.cs
2019-01-20 21:23:51 +01:00
Bjarne Fyrstenborg d6855d18f9 v8: Nicer delete language confirm (#4108) 2019-01-20 21:19:06 +01:00
Rasmus John Pedersen e1c9b1818e Add Multi Url Picker to core (#2323) 2019-01-20 21:12:00 +01:00
Abi Noda 76bece07ef add pull reminders badge to readme 2019-01-20 21:10:02 +01:00
Matthew Wise ba85681f8c updated css file location 2019-01-20 21:07:58 +01:00
Kenn Jacobsen 09cc3f89ed Make sure the decimal field value converter can handle double values when converting 2019-01-20 21:05:20 +01:00
Kenn Jacobsen 2c1ba1d23d Make sure the style preview text does not overlap for large font sizes 2019-01-20 21:01:32 +01:00
Bjarne Fyrstenborg 07329103b1 v8: Fix doctype iconpicker (#4053) 2019-01-20 20:56:49 +01:00
Dave Woestenborghs 7729dc946e Fix 4058 : restore from recycle bin when item has multiple relations (#4073) 2019-01-20 20:47:13 +01:00
Callum Whyte da58673b44 Removing unused insertMasterpage dialog language dictionary keys 2019-01-20 20:44:57 +01:00
Callum Whyte f8b382ea0a Eliminating bower (#4146) 2019-01-20 20:43:47 +01:00
Kenn Jacobsen abbd45c476 Remove hardcoded "Root" when restoring to tree root 2019-01-20 20:34:36 +01:00
Sebastiaan Janssen c56e84af2d Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/content/content.restore.controller.js
#	src/Umbraco.Web.UI.Client/src/views/media/media.restore.controller.js
#	src/Umbraco.Web.UI/config/umbracoSettings.Release.config
2019-01-20 20:28:52 +01:00
Stephan ed97dbc1a0 Merge branch 'temp8-appCaches' into temp8 2019-01-18 15:51:39 +01:00
Stephan 1506d8c3fa Kill AppCaches.StaticCache 2019-01-18 15:49:54 +01:00
Sebastiaan Janssen 9e7eb2ad75 Remove MySQL support 2019-01-18 15:47:22 +01:00
Stephan 3982732b7d Fix merge + cleanup 2019-01-18 15:05:20 +01:00
Dave Woestenborghs 2dc9eb3a90 #3417 handle saving of general macro data 2019-01-18 15:02:18 +01:00
Stephan 876056f0bb Merge branch temp8 into temp8-appCaches 2019-01-18 14:54:08 +01:00
Kenn Jacobsen 5b285f71fa Remove hardcoded "Root" when restoring to tree root 2019-01-18 14:39:54 +01:00
Stephan cdf38af171 Bugfix the installer 2019-01-18 14:39:39 +01:00
Bjarke Berg e637854149 Merge pull request #4057 from umbraco/temp8-4037
Manual tested, all tests are green, and code changes at fine :) Merged
2019-01-18 13:49:16 +01:00
Bjarke Berg 6fce8810fc Merge remote-tracking branch 'origin/temp8' into temp8-4037
# Conflicts:
#	src/Umbraco.Web/PropertyEditors/MultiNodePickerConfigurationTreeSource.cs
2019-01-18 13:28:57 +01:00
Niels Lyngsø 4bf17c8a4e V8 UI Color adjustments 2019-01-18 13:19:16 +01:00
Niels Lyngsø 4fbeac48eb Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-18 13:17:12 +01:00
Niels Lyngsø 8f64d8d70c correction of editorconfig for *.js and *.less 2019-01-18 13:16:59 +01:00
Stephan 01e70648ba Merge branch 'temp8-packaging-view-3996' into temp8 2019-01-18 13:04:04 +01:00
Dave Woestenborghs 7fd7d7a582 #3417 also send id of parameter with api response 2019-01-18 12:37:04 +01:00
Stephan 6f9a63d035 Merge branch 'temp8' into temp8-packaging-view-3996 2019-01-18 11:04:28 +01:00
Stephan 07238b54e1 Merge branch 'temp8-tree-sections-no-more-xml' into temp8 2019-01-18 10:59:04 +01:00
Stephan 437385fd61 Bit of cleanup 2019-01-18 10:53:51 +01:00
Callum Whyte cee1171d39 Removing masterpages support from V8 (#3971) 2019-01-18 10:53:38 +01:00
Niels Lyngsø 6dd4d7f475 V8 FE Gulp Fastdev script 2019-01-18 10:12:24 +01:00
Dave Woestenborghs a83ac4a24d #3417 retreive data for edit screen 2019-01-18 09:31:38 +01:00
Stephan a7a3fca8a8 Merge branch 'temp8' into temp8-tree-sections-no-more-xml 2019-01-18 09:23:55 +01:00
Bjarke Berg 59fe603ef7 Merge remote-tracking branch 'origin/temp8' into temp8-3668-query-builder-snippits
# Conflicts:
#	src/Umbraco.Web/PublishedContentExtensions.cs
2019-01-18 08:34:14 +01:00
Bjarke Berg 7a74a329ab Merge remote-tracking branch 'origin/bugfix/temp8-media-could-not-be-moved-to-root' into bugfix/temp8-media-could-not-be-moved-to-root 2019-01-18 08:32:21 +01:00
Bjarke Berg 0daca21b51 Merge remote-tracking branch 'origin/temp8' into bugfix/temp8-media-could-not-be-moved-to-root 2019-01-18 08:31:54 +01:00
Bjarke Berg 8e597aabf3 Merge remote-tracking branch 'origin/temp8' into feature/IContentType-removale-from-IContent 2019-01-18 08:29:43 +01:00
Stephan ec58532f7b More renaming of caches 2019-01-18 08:29:16 +01:00
Stephan f952fe7aeb More renaming of caches 2019-01-18 08:14:08 +01:00
Stephan 5aba1a6bd2 IAppPolicedCache is IAppPolicyCache 2019-01-18 07:56:38 +01:00
Mikkel Holck Madsen 6e3618f627 Merge pull request #4129 from umbraco/temp8-gridcellvalueconnector
Redecided on renaming
2019-01-17 21:38:21 +01:00
Kenneth Jakobsen 9fed610902 Redecided on renaming 2019-01-17 21:32:08 +01:00
Mikkel Holck Madsen 1d349f9eb0 Merge pull request #4128 from umbraco/temp8-gridcellvalueconnector
Removed Property parameter from IGridCellValueVConnector
2019-01-17 21:16:30 +01:00
Kenneth Jakobsen 27a1e51f80 Removed Property parameter from IGridCellValueVConnector 2019-01-17 21:12:10 +01:00
Kenn Jacobsen fa8a754f88 Don't reset templates for element types 2019-01-17 20:57:39 +01:00
Kenn Jacobsen 8f205e7d8f Hide list view config for element types 2019-01-17 20:57:18 +01:00
Kenn Jacobsen a01c313345 Hide "allow as root" and "allowed child node types" for element types 2019-01-17 20:56:47 +01:00
Kenn Jacobsen f394bed017 Change StartNodeId from string to Udi 2019-01-17 20:38:03 +01:00
Kenn Jacobsen 1ceab77aef Fix start node configuration for tree pickers 2019-01-17 20:38:03 +01:00
Stephan b3d6de5994 Merge branch 'temp8' into temp8-appCaches 2019-01-17 19:05:56 +01:00
Stephan fc29422b8d Merge remote-tracking branch 'origin/temp8' into temp8 2019-01-17 19:01:06 +01:00
Stephan 32c0d04b1b Merge branch 'temp8-3305-filter-for-current-culture-in-ipublishedcontent-linq' into temp8 2019-01-17 19:00:23 +01:00
Stephan 8ea76a92c3 Merge branch 'temp8' into temp8-3305-filter-for-current-culture-in-ipublishedcontent-linq 2019-01-17 19:00:03 +01:00
Mikkel Holck Madsen 7a68df36a3 Merge pull request #4124 from umbraco/temp8-deploy-valueconnector
- Added PropertyType parameter to IValueConnector.FromArtifact
2019-01-17 18:57:12 +01:00
mclausen 537b7e5ce9 - Added PropertyType parameter to IValueConnector.FromArtifact 2019-01-17 18:52:08 +01:00
Stephan e42995cf10 Fixes for the IPublishedContent Linq/Culture PR 2019-01-17 18:23:23 +01:00
Mikkel Holck Madsen 4234d316fe Merge pull request #4123 from umbraco/temp8-deploy-valueconnector
- Added PropertyType to The IValueConnector
2019-01-17 17:24:07 +01:00
mclausen 42f32e61e9 - Added PropertyType to The IValueConnector 2019-01-17 17:15:22 +01:00
Niels Lyngsø 89a2c1b32d Fix merge of pull request #4120 2019-01-17 17:02:12 +01:00
Warren Buckley 207bcbc10d Merge pull request #4120 from umbraco/temp8-gulp-refactoring
V8 Client Gulp factoring
2019-01-17 15:47:22 +00:00
Warren Buckley e1f1336205 Merge branch 'temp8' into temp8-gulp-refactoring
# Conflicts:
#	src/Umbraco.Web.UI.Client/gulpfile.js
#	src/Umbraco.Web.UI.Client/package-lock.json
2019-01-17 15:46:53 +00:00
Niels Lyngsø b9812ca5c4 Added processJs 2019-01-17 16:37:33 +01:00
Niels Lyngsø 9d2c4d7b08 Stick to the same approach on as used on media move dialog 2019-01-17 15:57:43 +01:00
Callum Whyte e60417925b Consistency is king! Fix up " vs ' in installer service facts array 2019-01-17 15:41:44 +01:00
Callum Whyte 5a78c000a0 Correcting punctuation in installer screen facts 2019-01-17 15:41:44 +01:00
Callum Whyte 54faeee837 Updating number of active Umbraco sites in installer screen facts 2019-01-17 15:41:44 +01:00
Nicholas-Westby cefa2c9040 Typo ("thist"). 2019-01-17 15:34:52 +01:00
Kenn Jacobsen b6f6a4015a Style the content links in the info app 2019-01-17 15:33:17 +01:00
Kenn Jacobsen adc9957504 Show the media link in the info app 2019-01-17 15:32:04 +01:00
Bjarne Fyrstenborg 74a7fd50dd v8: Fix validation error label (#4094) 2019-01-17 15:25:07 +01:00
Kenn Jacobsen 2ac175135a Fix linkpicker overlay issues - manual merge of #3718 to V8 2019-01-17 15:18:49 +01:00
Kenn Jacobsen 367fceb3cb Handle selection from treepicker search result 2019-01-17 15:15:26 +01:00
Kenn Jacobsen 2f408e1a01 Style the dialog search results 2019-01-17 15:14:17 +01:00
Kenn Jacobsen 8b178d1be7 Allow linkpicker to select items from search/list view 2019-01-17 15:13:41 +01:00
Kenn Jacobsen aca14c14ca Add some comments 2019-01-17 15:12:20 +01:00
Kenn Jacobsen 56c4dbf77f Ensure that the link picker tree always loads 2019-01-17 15:12:20 +01:00
Niels Lyngsø 5cc0f58f7d Git will now ignorer files that contains *.ignorer.* 2019-01-17 15:10:58 +01:00
Niels Lyngsø 591d100726 Corrected paths 2019-01-17 15:07:18 +01:00
Kenn Jacobsen bf9284089d Update a comment 2019-01-17 15:03:05 +01:00
Kenn Jacobsen 651006fbaf Make sure to update cculture to the last open culture when closing the split view 2019-01-17 15:03:05 +01:00
Sebastiaan Janssen 87a3350cd6 Merge pull request #4074 from kjac/v8-fix-select-content-app-for-split-view
V8: Force select the content app for both views when opening split view
2019-01-17 14:59:51 +01:00
Stephan 640b21d802 Merge branch temp8 into temp8-3305-filter-for-current-culture-in-ipublishedcontent-linq 2019-01-17 14:49:02 +01:00
Stephan b2d22f5650 Merge branch 'temp8' into feature/IContentType-removale-from-IContent 2019-01-17 14:22:45 +01:00
Stephan 650f668edb Improve PublishedModelFactory error message on collisions 2019-01-17 14:21:35 +01:00
Stephan 2eabdbb55b Improve PublishedModelFactory error message on collisions 2019-01-17 14:19:52 +01:00
Stephan e56ad2d312 Fix migration from 7.14 2019-01-17 14:14:08 +01:00
Bjarke Berg ae3c8fe08c 3908 - removed tests for legacy up and down methods 2019-01-17 14:09:17 +01:00
Bjarke Berg 37b826b82f 3908 - Fix for multiple dropdowns opening when clicking on one. 2019-01-17 14:07:56 +01:00
Niels Lyngsø d744d6aabe Gulp factoring
- Moved tasks into separate files
- Moved all configuration into gulp/config.js
2019-01-17 13:57:59 +01:00
Stephan e6bff12337 Merge branch temp8 into feature/IContentType-removale-from-IContent 2019-01-17 13:33:55 +01:00
Bjarke Berg 174db65714 3908 - Query build returns v8 valid statement - and examples of returned items 2019-01-17 13:33:44 +01:00
Stephan 2c3b65c8b1 Fix migrations from 7.14 2019-01-17 13:24:19 +01:00
Chris Houston 941ede776b Corrected all the miss spellings of:
Seperator -> Separator
Seperate -> Separate
2019-01-17 13:16:43 +01:00
Kenn Jacobsen bcda4c186f Don't allow templates on element types 2019-01-17 12:42:38 +01:00
Kenn Jacobsen 57b8a187b8 Add "Move" option for deleted items in the media tree 2019-01-17 12:27:42 +01:00
Sebastiaan Janssen 98fe3e823c Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/media/media.restore.controller.js
#	src/Umbraco.Web.UI.Client/src/views/media/restore.html
2019-01-17 12:22:01 +01:00
Kenn Jacobsen 77cf071e04 Add "Move" option for deleted items in the media tree (#3914) 2019-01-17 12:20:13 +01:00
Sebastiaan Janssen 0d0179cb47 Use constants in upgrade migration 2019-01-17 12:14:17 +01:00
Sebastiaan Janssen effed9efa7 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-17 12:08:27 +01:00
Sebastiaan Janssen e6a99c5097 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbcontentnodeinfo.directive.js
#	src/Umbraco.Web.UI.Client/src/views/components/content/umb-content-node-info.html
#	src/Umbraco.Web/PropertyEditors/MemberGroupPickerPropertyEditor.cs
#	src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs
#	src/Umbraco.Web/Scheduling/ScheduledTasks.cs
#	src/Umbraco.Web/Trees/ContentTreeController.cs
2019-01-17 12:05:56 +01:00
Stephan d4c714eccd Stop injecting the runtime cache, use AppCaches 2019-01-17 11:19:06 +01:00
Stephan 0bee01e0ee Great AppCaches renaming 2019-01-17 11:01:23 +01:00
Niels Lyngsø d6c2fec5d2 Added UI hover for expansion panel 2019-01-17 10:16:04 +01:00
Niels Lyngsø 8aaaf4439a Changed UI for resizable handler 2019-01-17 10:12:28 +01:00
Shannon 1667e914cd Allows the tree collection to be manipulated by devs on startup, renames some things 2019-01-17 18:38:55 +11:00
Stephan 67e4703821 CacheHelper becomes AppCaches 2019-01-17 08:34:29 +01:00
Robert 4ff714ae94 Merge remote-tracking branch 'origin/temp8' into temp8-4037 2019-01-17 08:10:02 +01:00
Shannon 3f89558ddb Fixing tests 2019-01-17 17:51:38 +11:00
Shannon 6b9ba3c53c Fixing tests 2019-01-17 17:50:59 +11:00
Shannon 356209e013 renames ApplicationTree to just Tree 2019-01-17 17:33:38 +11:00
Shannon 1a734141f1 Allows package manifest to declare a section 2019-01-17 17:31:29 +11:00
Shannon 9df1773b78 more cleanup 2019-01-17 17:08:58 +11:00
Shannon 77dd816c51 more cleanup 2019-01-17 17:06:22 +11:00
Shannon 0160f141f4 cleanup and explicitly registering sections 2019-01-17 17:04:53 +11:00
Shannon cfe1b17eec Gets trees and sections loading now in a much more simplified way without any xml, now to cleanup 2019-01-17 16:40:11 +11:00
Shannon 355ac09d90 WIP - moved out the tree and section service from Core, these are web only things, removes their xml parsing, fixes base controller ctor params with UmbracoContext, need to implement tree/section collections taking into account controllers and not scanning so much 2019-01-17 13:20:19 +11:00
Shannon 67c571fb28 Fixes tests 2019-01-17 10:56:24 +11:00
Stephan 5f7bf3a211 Ignore failing test 2019-01-16 17:04:15 +01:00
Dave Woestenborghs c0e62c4c5f #3417 retreive a list with parameter editors from API 2019-01-16 16:37:33 +01:00
Dave Woestenborghs b6a8ad1b6e #3417 load available partial views from api 2019-01-16 16:21:19 +01:00
Shannon Deminick c9ddd783f9 Merge pull request #4080 from umbraco/temp8-auto-install
install for Deploy
2019-01-17 01:44:27 +11:00
Shannon 899bb812aa Creates RuntimeStateOptions and pre-loads the error page on the installer 2019-01-17 01:42:56 +11:00
Bjarke Berg 664a892fd5 3305 - fixed tests 2019-01-16 15:25:42 +01:00
Stephan 3ed1b44710 Try to bugfix a failing test 2019-01-16 15:21:10 +01:00
Shannon c5da10cf10 Merge remote-tracking branch 'origin/temp8' into temp8-auto-install 2019-01-17 00:45:25 +11:00
Shannon ddcead2658 Updates EntityController to support stylesheets, languages and dictionary items GetAll so we can use it for the packager without worrying about security access to sections 2019-01-17 00:29:43 +11:00
Shannon 9ac47d6e85 Merge remote-tracking branch 'origin/temp8' into temp8-packaging-view-3996 2019-01-16 23:54:28 +11:00
Shannon 7bb3588889 Adds the whole package definition to the scope model for devs to use, adds a custom query string parameter when redirecting to the angular view after install (so devs know its a new install) 2019-01-16 23:53:10 +11:00
Stephan d170e4b5c3 Merge branch 'temp8-packages-ui' into temp8 2019-01-16 13:52:24 +01:00
Stephan 9f41457f45 Public composition.UrlProviders 2019-01-16 13:44:19 +01:00
Stephan ba84d95308 Merge branch 'temp8' into temp8-packages-ui 2019-01-16 13:27:14 +01:00
Stephan b5bda0b637 Some things have to be public for service events 2019-01-16 13:26:30 +01:00
Stephan a60bdf5c01 HttpContext VariationContextAccessor fails nicely 2019-01-16 13:26:13 +01:00
Bjarke Berg 35650536c8 3305 - Use the VariationContext instead of thread directly 2019-01-16 13:23:19 +01:00
Stephan 8347fd79a3 Reviewing packages PR, various fixes 2019-01-16 13:20:49 +01:00
Kenn Jacobsen 9ffeb34643 Whoops. Spelling. 2019-01-16 13:17:14 +01:00
Kenn Jacobsen ae97ec4277 Update the doctypes configuration help text 2019-01-16 13:16:41 +01:00
Shannon 70574b6564 Merge remote-tracking branch 'origin/temp8-packages-ui' into temp8-packaging-view-3996
# Conflicts:
#	src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
2019-01-16 23:15:09 +11:00
Bjarke Berg 5f3596c7d9 Fixes after merge of temp8 2019-01-16 13:11:46 +01:00
Kenn Jacobsen 4303b4eb80 Ensure that all items passed to rendering are element types 2019-01-16 13:05:54 +01:00
Kenn Jacobsen 93f991b140 Only allow element types in the NC editor 2019-01-16 13:05:16 +01:00
Kenn Jacobsen e924a8ef83 Only return element types for the NC configuration 2019-01-16 13:04:46 +01:00
Bjarke Berg 4ccc468cb6 Merge remote-tracking branch 'origin/temp8' into feature/IContentType-removale-from-IContent
# Conflicts:
#	src/Umbraco.Web/Models/Mapping/ContentMapperProfile.cs
2019-01-16 12:53:58 +01:00
Bjarke Berg fe0d0ce1c7 Merge remote-tracking branch 'origin/temp8' into temp8-3668-query-builder-snippits 2019-01-16 12:49:23 +01:00
Bjarke Berg 00158b42e7 Merge remote-tracking branch 'origin/temp8' into bugfix/temp8-media-could-not-be-moved-to-root
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/content/move.html
#	src/Umbraco.Web.UI.Client/src/views/media/restore.html
2019-01-16 11:47:13 +01:00
Bjarke Berg b4f2d514be #3305 - changed new method to be internal 2019-01-16 11:44:27 +01:00
Shannon c4418185ec Gets the angular view loading and allows navigating back to the view, cleans up non used lang keys 2019-01-16 21:27:14 +11:00
Stephan da079cf393 Merge branch 'temp8' into temp8-packages-ui 2019-01-16 10:42:52 +01:00
Stephan d0016d6a7e Upgrade to MB -alpha.33 supporting elements 2019-01-16 10:40:04 +01:00
Stephan f56e2f0c72 Merge branch temp8 into temp8-packages-ui 2019-01-16 10:02:43 +01:00
Stephan 26b31f1fc8 Fix Git repository issue with casing of some filepaths 2019-01-16 10:01:04 +01:00
Shannon 903d90aff2 Merge remote-tracking branch 'origin/temp8-packages-ui' into temp8-packaging-view-3996 2019-01-16 19:30:58 +11:00
Shannon 572c6989ce Changes control to view for the package view 2019-01-16 19:30:07 +11:00
Shannon 31545db91e Fixes routing with the packages section 2019-01-16 19:29:42 +11:00
Stephan ef3b542ff3 Merge branch temp8 into temp8-packages-ui 2019-01-16 08:54:40 +01:00
Dave Woestenborghs 5ebf51e6df #3417 added mockup of parameter editing 2019-01-16 08:40:00 +01:00
Stephan 8f9813d597 Merge branch 'temp8' into temp8-auto-install 2019-01-16 08:34:46 +01:00
Bjarke Berg 8ad998ab12 #3305 - Clean up and xml-comments 2019-01-16 08:21:24 +01:00
Bjarke Berg c71f438e62 #3305 - Uncommented irrelevant tests. These tests are irrelevant because they use the legacy XmlPublishedContent and not the NuCache 2019-01-16 08:08:13 +01:00
Bjarke Berg 5687287453 Merge remote-tracking branch 'origin/temp8' into temp8-3305-filter-for-current-culture-in-ipublishedcontent-linq
# Conflicts:
#	src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs
2019-01-16 07:47:06 +01:00
Bjarke Berg a27577c17d #3305 - Handle invariants 2019-01-16 07:46:10 +01:00
Shannon e8dead52c7 renames tests 2019-01-16 17:43:12 +11:00
Shannon 94da9a6681 Gets package upgrading working along with package uninstallation with multiple versions 2019-01-16 17:25:46 +11:00
Shannon 90be93d948 Got upgrade status showing in the ui, started implementing merging the package definitions for upgrades but have decided to have an element for each install like we currenlty have in case there are problems installing. 2019-01-16 16:27:51 +11:00
Stephan d4edbc8e79 Fix tests 2019-01-15 19:38:52 +01:00
Stephan eb3d3e129c Bugfix package service 2019-01-15 19:15:06 +01:00
Stephan 4770756621 Bugfix ContentCacheRefresher 2019-01-15 18:41:02 +01:00
Stephan 1bd5127bcf Actually run HealthCheck notifier 2019-01-15 17:27:18 +01:00
Shannon 00e951c394 fixes installer with async 2019-01-16 02:35:21 +11:00
Shannon d97b100bab fixes merge 2019-01-16 02:18:02 +11:00
Shannon b34582b35c Merge remote-tracking branch 'origin/temp8' into temp8-packages-ui
# Conflicts:
#	src/Umbraco.Core/Services/Implement/PackagingService.cs
2019-01-16 02:00:44 +11:00
Shannon b7c15dc393 gets readme and our package install working 2019-01-16 01:53:08 +11:00
Robert 561ce94398 Merge pull request #3933 from umbraco/temo8-3895-infinite-editor-shortcut
Close an infinite editor through Escape key
2019-01-15 15:43:43 +01:00
Robert f9cd22d908 Added a comment explaining why we need the delay 2019-01-15 15:43:10 +01:00
Bjarke Berg f70aea4f8a Merge remote-tracking branch 'origin/temp8' into temp8-3305-filter-for-current-culture-in-ipublishedcontent-linq
# Conflicts:
#	src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs
2019-01-15 15:20:56 +01:00
Bjarke Berg be02d33fd6 Merge pull request #4082 from umbraco/temp8-elements-again
Merged
2019-01-15 15:15:48 +01:00
Bjarke Berg 0b9705ca3f Revert "Revert "Support IContentType.IsElement""
This reverts commit a5efc25c
2019-01-15 15:13:10 +01:00
Bjarke Berg 11ffafacdf Revert "Revert "Identify element types""
This reverts commit ff6a9ba9
2019-01-15 15:12:59 +01:00
Robert 2e782a4f11 Mapping IsContainer into AdditionalData using IEntitySlim to EntityBasic mapper 2019-01-15 15:10:50 +01:00
Bjarke Berg 0436fb3699 Merge pull request #4081 from umbraco/tem8-elements-again
unrevert of Identify "element" content types. #4076
2019-01-15 15:07:47 +01:00
Bjarke Berg 5995a7ec84 a small change to let Git see changes 2019-01-15 15:05:04 +01:00
Shannon 20d6a3b4b4 some cleanup and ensure the package file is deleted after install 2019-01-16 01:02:21 +11:00
Bjarke Berg 16eae7c4fc #3305 Added optional culture parameter to Children and Descendants extension methods 2019-01-15 14:54:34 +01:00
Shannon db2a003444 change how the install status works, fixes infinite loop 2019-01-16 00:54:25 +11:00
Shannon 709df804e5 Updates tests and better type support for importing content 2019-01-16 00:13:40 +11:00
Shannon f6fdc9ae2d Updates test, fixes some other issues during testing 2019-01-15 23:46:58 +11:00
Stephan 62fcbd8e84 Handle max runtime level for components 2019-01-15 13:43:56 +01:00
Stephan 2a36d2625b Merge branch 'temp8' into temp8-auto-install 2019-01-15 13:38:09 +01:00
Stephan 93ba694106 Upgrade ModelsBuilder (bugfix) 2019-01-15 13:36:30 +01:00
Shannon 56ab88983a updates a test 2019-01-15 23:10:08 +11:00
Shannon 8c7d29bd02 file update missing 2019-01-15 23:03:23 +11:00
Shannon 430c95dfad Merge remote-tracking branch 'origin/temp8' into temp8-packages-ui 2019-01-15 22:59:49 +11:00
Shannon a5ff29ccc7 Gets package uninstall working, fixes other UI issues with packages 2019-01-15 22:59:13 +11:00
Bjarke Berg 2d2d0b200b Merge pull request #4014 from umbraco/temp8-40120tags-validation-bug
Fixes - temp8-40120 tags-validation-bug
2019-01-15 12:27:02 +01:00
Bjarke Berg ff6a9ba97f Revert "Identify element types"
This reverts commit 4ad2505b
2019-01-15 12:23:45 +01:00
Bjarke Berg a5efc25c81 Revert "Support IContentType.IsElement"
This reverts commit ba38b67b
2019-01-15 12:23:14 +01:00
Bjarke Berg 87b4254e39 Merge remote-tracking branch 'origin/temp8' into temp8-40120tags-validation-bug 2019-01-15 12:16:52 +01:00
Bjarke Berg 5b1ca92184 Fixes for tag validation and build 2019-01-15 12:12:35 +01:00
Bjarke Berg bdeee95300 Merge remote-tracking branch 'origin/temp8-40120tags-validation-bug' into temp8-40120tags-validation-bug 2019-01-15 12:09:41 +01:00
Shannon 44ab0991ce Package installing is working 2019-01-15 22:08:08 +11:00
Stephan ba38b67b9d Support IContentType.IsElement 2019-01-15 11:30:30 +01:00
Robert 0092cac394 DRY 2019-01-15 10:31:12 +01:00
Warren Buckley e27ea962d9 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-15 09:30:09 +00:00
Robert 9bc047c03f Adding code to re-validate on value change 2019-01-15 10:17:26 +01:00
Kenn Jacobsen 64469fcb5c Force select the content app for both views when opening split view 2019-01-15 10:03:10 +01:00
Bjarke Berg 1f87ce02a1 Merge remote-tracking branch 'origin/temp8' into feature/IContentType-removale-from-IContent 2019-01-15 09:26:00 +01:00
Sebastiaan Janssen f7671ec9a7 Fixes #4071 - Error executing scheduled task - This instance has already started one or more requests. 2019-01-15 08:39:43 +01:00
Kenn Jacobsen 862d522758 Fix the styling of the search box on the redirect url management dashboard 2019-01-14 22:53:19 +01:00
Stephan 4ad2505bea Identify element types 2019-01-14 16:56:44 +01:00
Warren Buckley 525175c939 Merge pull request #4059 from umbraco/temp8-fs
Cleanup Filesystems registrations
2019-01-14 14:56:16 +00:00
Stephan 9ba3f47690 Cleanup 2019-01-14 15:55:18 +01:00
Stephan e2fe1c8260 Refactor IValueConnector for Deploy 2019-01-14 15:01:24 +01:00
Stephan a68b19f1ee More composition / filesystems fixes 2019-01-14 14:28:19 +01:00
Robert 8e4090fb84 Added proper memberPicker in the editorService 2019-01-14 14:00:17 +01:00
Robert 1ac8bbc570 Fixes MNTP member selection tree 2019-01-14 13:23:57 +01:00
Robert 2ce3249c5e Renaming variable to allow MNTP media selection 2019-01-14 13:23:00 +01:00
Warren Buckley a8638f5f43 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web.UI.Client/package-lock.json
2019-01-14 11:10:58 +00:00
Kenn Jacobsen b9430158ce Move member group picker property data store from NVarchar to NText (#3712) 2019-01-14 09:25:59 +01:00
Robert 6ee1c96bf0 Merge remote-tracking branch 'origin/temp8' into temp8-4037 2019-01-14 09:05:05 +01:00
Stephan c912feff28 Merge remote-tracking branch 'origin/temp8' into temp8-fs 2019-01-14 08:53:11 +01:00
Stephan 561b359a72 Name change 2019-01-14 08:53:04 +01:00
Kenn Jacobsen db8954e0a5 Verify that the current member is approved and not locked out (#3588) 2019-01-14 08:52:02 +01:00
Sebastiaan Janssen 05f1a24caf Fix duplicate IIS Express settings 2019-01-14 08:28:58 +01:00
Kenn Jacobsen b08e922600 Only allow setting up scheduled publishing if the user has the correct permissions to do so 2019-01-14 08:21:58 +01:00
Bjarke Berg aaedfe0309 Added access to the dictionary tree with we have access to the templates tree. 2019-01-14 08:14:10 +01:00
Kenn Jacobsen fbf60fbac4 Don't add the "Notification" tree menu item if Umbraco can't send emails 2019-01-14 08:13:10 +01:00
Stephan 05fbf6c38a Fix DistributedCacheBinder ContentService.TreeChanged event 2019-01-14 08:09:43 +01:00
Stephan c17ee34edb Support enlisting in exiting scope contexts (why not?) 2019-01-14 08:09:43 +01:00
Stephan eb6b172be2 Cleanup 2019-01-14 08:09:43 +01:00
Shannon b3585b0083 some cleanup 2019-01-14 18:03:06 +11:00
Shannon aa6342cc30 adds test 2019-01-14 17:56:41 +11:00
Shannon 65e98928d4 Package data installation is now all migrated 2019-01-14 17:46:12 +11:00
Sebastiaan Janssen 92c278c593 Adds missing translation, fixes #4054 2019-01-14 07:12:21 +01:00
Shannon 18c90c5325 Package file installation logic all migrated and tests are running, now to do the package data installation 2019-01-14 14:28:00 +11:00
Sebastiaan Janssen b865c6b476 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Tests/Web/Mvc/HtmlHelperExtensionMethodsTests.cs
#	src/Umbraco.Web.UI.Client/src/common/resources/codefile.resource.js
#	src/Umbraco.Web.UI.Client/src/less/components/umb-table.less
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js
#	src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
#	src/Umbraco.Web/HtmlHelperRenderExtensions.cs
2019-01-13 23:22:10 +01:00
Kenn Jacobsen 941baf09ce Fix linkpicker overlay issues (#3718) 2019-01-13 16:17:44 +01:00
Anders Bjerner be44741bf9 Localized parts of the codefile and template resources (#3495) 2019-01-13 15:58:31 +01:00
Kenn Jacobsen 3b8a570c3c V8: Safeguard against invalid culture in UMB_MCULTURE cookie (#4051) 2019-01-13 15:53:42 +01:00
Kenn Jacobsen 74986d24f1 V8: Add "Move" option for deleted items in the content tree (#3931) 2019-01-13 15:49:37 +01:00
christophnz 282ac2b9c5 Added 2 HtmlHelper extension methods for rendering RelatedLinks, including Unit tests 2019-01-13 15:17:13 +01:00
Jannik Anker 1224f68297 Issue 3018 - non-admin users cannot create groups (derpness cleanup) 2019-01-13 15:13:26 +01:00
Jannik Anker 8d1733fd12 Issue 3018 - non-admin users cannot create groups 2019-01-13 15:13:26 +01:00
Bjarne Fyrstenborg 1213551ca9 Only show extension if media item has a file
(cherry picked from commit 168febae24)
2019-01-13 14:55:44 +01:00
Bjarne Fyrstenborg 9968cd257d Rename wrapper class on umb-file-dropzone 2019-01-13 14:51:59 +01:00
Bjarne Fyrstenborg 168febae24 Only show extension if media item has a file 2019-01-13 14:51:59 +01:00
Bjarne Fyrstenborg b354eda7ac Add styles for umb-property-file-upload and move styles for umb-upload-big-button 2019-01-13 14:51:59 +01:00
Steve f620d0deca Fixes #4016 unpublished content styling in list view 2019-01-13 14:43:24 +01:00
Kenn Jacobsen d350ab0789 Ensure some spacing between properties within Nested Content items 2019-01-13 14:42:58 +01:00
Kenn Jacobsen 0f7cb7c177 Use built-in localization for Nested Content + fix element picker title 2019-01-13 14:40:38 +01:00
Sebastiaan Janssen c94a6b1777 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagegravity.directive.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.html
2019-01-13 14:22:00 +01:00
Kenn Jacobsen d1cfe84723 Set the form dirty when changing focal point and editing crops 2019-01-13 14:01:11 +01:00
Kenn Jacobsen cd6cdcfda4 Visualize image transparency in upload and image cropper thumbnails (#4050) 2019-01-13 13:54:30 +01:00
Sebastiaan Janssen c40d30d2dc Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-13 13:29:24 +01:00
Sebastiaan Janssen ef8ffc5149 Merge branch 'dev-v7' into temp8 2019-01-13 13:29:06 +01:00
Bjarne Fyrstenborg 2ebd7a077c Fix placeholder text when empty alias input after generating alias (#4032)
(cherry picked from commit c619b79276)
2019-01-13 13:16:00 +01:00
Bjarne Fyrstenborg c619b79276 Fix placeholder text when empty alias input after generating alias (#4032) 2019-01-13 13:06:16 +01:00
Kenn Jacobsen 291d58900f V8: Remember editor language between sessions (#4035) 2019-01-13 12:42:42 +01:00
Claus 1c401b9589 Merge branch 'kjac-v8-fix-tags-remove-setdirty' into temp8 2019-01-13 01:04:35 +01:00
Claus 5715b26bb7 Merge branch 'v8-fix-tags-remove-setdirty' of https://github.com/kjac/Umbraco-CMS into kjac-v8-fix-tags-remove-setdirty 2019-01-13 01:02:05 +01:00
Claus 21ffb5cdb9 Merge branch 'kjac-v8-fix-contentnodeinfo-js-error' into temp8 2019-01-13 00:54:40 +01:00
Kenn Jacobsen e88c789b88 Add some defensive coding to avoid JS errors 2019-01-11 15:44:54 +01:00
Robert 8f41fe8d38 Fixes MNTP only being able to open contentPicker 2019-01-11 15:17:29 +01:00
Robert 29390a3624 Fixes string to int conversion error 2019-01-11 15:15:59 +01:00
Stephan ca75b2f4d3 Fix recent Examine changes 2019-01-11 14:54:56 +01:00
Warren Buckley fded793f8e Removes the accidently Web.UI.csproj V7 port numbers for IISExpress when merging up from V7 to V8 2019-01-11 13:32:45 +00:00
Warren Buckley 5a23ca9de7 Merge pull request #4045 from umbraco/temp8-chartjs
Chartjs
2019-01-11 13:30:32 +00:00
Warren Buckley 8f1cd8110d Adds in the missing chart.js & wrapper lib (part of it was put in the solution it seems but not fully merged in correctly perhaps?!) 2019-01-11 13:27:39 +00:00
Bjarke Berg 4566b88e37 #3668 - Fixed test that was failing due to wrong setup 2019-01-11 14:21:03 +01:00
Warren Buckley 250c24de40 Adds in chart.js & the angular wrapper library 2019-01-11 12:54:50 +00:00
Warren Buckley ab565f1d27 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-11 12:18:29 +00:00
Bjarke Berg b6f4ec3cbc #3668 - Handle fallback strategy with default value and ancestor + Handle fallback strategy when the ancestor is invariant and the item is variant 2019-01-11 11:47:42 +01:00
Bjarke Berg f02bd4bca4 #3668 - Generate v8 code from "insert value" 2019-01-11 11:46:23 +01:00
Sebastiaan Janssen dcf2e4830f Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/SolutionInfo.cs
#	src/Umbraco.Core/Configuration/UmbracoVersion.cs
#	src/Umbraco.Core/IO/MediaFileSystem.cs
#	src/Umbraco.Core/Media/Exif/ImageFile.cs
#	src/Umbraco.Core/PropertyEditors/ValueConverters/TagsValueConverter.cs
#	src/Umbraco.Core/Services/MediaService.cs
#	src/Umbraco.Web.UI.Client/src/canvasdesigner.loader.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbtoggle.directive.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/colorpicker/colorpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
#	src/Umbraco.Web/Editors/ContentController.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/translation/details.aspx.cs
2019-01-11 10:23:27 +01:00
Sebastiaan Janssen 9e33581391 Merge branch 'patch-7.13.1' into dev-v7
# Conflicts:
#	src/SolutionInfo.cs
#	src/Umbraco.Core/Configuration/UmbracoVersion.cs
2019-01-11 09:53:50 +01:00
Stephan d0153b1105 Merge branch 'temp8' into temp8-auto-install 2019-01-11 08:57:59 +01:00
Bjarke Berg 586a7a167a Merged v8 2019-01-11 08:55:25 +01:00
Stephan 798c01c514 Merge pull request #4034 from aaronpowell/temp8-4033
Fixing default ProfilingLogger
2019-01-11 08:49:43 +01:00
Stephan a3fc321296 Merge branch 'temp8-examine-updates-3920' into temp8 2019-01-11 08:29:41 +01:00
Bjarke Berg 0330be4e6b Merge remote-tracking branch 'origin/temp8' into feature/IContentType-removale-from-IContent
# Conflicts:
#	src/Umbraco.Core/ContentExtensions.cs
#	src/Umbraco.Core/Models/Content.cs
#	src/Umbraco.Tests/Models/ContentTests.cs
#	src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs
#	src/Umbraco.Tests/Models/VariationTests.cs
#	src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs
#	src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs
#	src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs
#	src/Umbraco.Web.UI/Umbraco/dialogs/ChangeDocType.aspx.cs
2019-01-11 08:29:29 +01:00
Stephan ba282ab81a Comments 2019-01-11 08:26:53 +01:00
Stephan 19233c2e5f Merge branch temp8 into temp8-examine-updates-3920 2019-01-11 08:24:36 +01:00
Stephan 677311aa49 reduce allocs 2019-01-11 08:06:12 +01:00
Aaron Powell a5630a3448 Fixing 4033 by using the right Logger instance 2019-01-11 14:35:24 +11:00
Shannon c89b50f0b8 large refactor/cleanup of most of the old package installer logic dealing with persisting the installedPackages.config which is now in the services, creates new parsers and removes a ton of old code, changes fetching packages to be async, uses XElement instead of old XmlNode apis, next we need to do the actual package installer updates 2019-01-11 14:30:04 +11:00
Shannon 687aa8cc99 Merge remote-tracking branch 'origin/temp8' into temp8-packages-ui 2019-01-11 10:37:22 +11:00
Shannon 74c01af369 Splits logic for IPackageBuilder into ICreatedPackagesRepository and IInstalledPackagesRepository since it's nearly the same for both 2019-01-11 10:35:37 +11:00
Shannon Deminick 7dbd8a3515 Merge pull request #4024 from umbraco/temp8-4005
Temp8 4005
2019-01-11 10:17:22 +11:00
Warren Buckley 2e8a6c88a6 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-10 19:18:28 +00:00
Quan Tran 59349dd355 Fix - refine code 2019-01-10 19:35:51 +01:00
Quan Tran 4170faf76e add null checking 2019-01-10 19:35:51 +01:00
Sebastian Hoffback cc13b99787 Removed already deleted file canvasdesigner.panel.js from canvasdesigner.loader.js 2019-01-10 19:32:59 +01:00
Stephan 4586a55571 Merge branch 'temp8-pr3583' into temp8 2019-01-10 18:38:07 +01:00
Stephan 2baf3b5b41 Fixes 2019-01-10 18:37:48 +01:00
Stephan 09d28f720a Merge branch 'temp8' into temp8-fs 2019-01-10 16:45:50 +01:00
Stephan ed7c8da81f Merge branch 'temp8' of https://github.com/StefanoChiodino/Umbraco-CMS into temp8-pr3583 2019-01-10 16:29:36 +01:00
Stephan 003907358d Better runtime state detection, to support auto-install 2019-01-10 16:01:13 +01:00
Stephan 95ef6cd249 Merge branch 'temp8' into temp8-examine-updates-3920 2019-01-10 15:44:16 +01:00
Sebastiaan Janssen d69f0fe9dd #3993 Move color picker fix to correct method and update backwards compatibility test 2019-01-10 15:35:48 +01:00
Stephan 4700d8a69c Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-10 15:33:22 +01:00
Stephan 167084b39e Merge branch 'temp8-removes-config-based-indexes-3901' into temp8 2019-01-10 15:32:07 +01:00
Claus 875b7fc354 Merge remote-tracking branch 'origin/temp8-3642-content-templates-fixes' into temp8 2019-01-10 14:45:44 +01:00
Bjarke Berg 10d0c79c1d #3642 - also save all languages with content on publish 2019-01-10 14:28:22 +01:00
Claus 7ed66f41dc Merge branch 'temp8-3642-content-templates-fixes' into temp8 2019-01-10 14:20:51 +01:00
Stephan 7db3644fcd Merge remote-tracking branch 'origin/temp8' into temp8-removes-config-based-indexes-3901 2019-01-10 14:04:52 +01:00
Robert b000ead96b CTRL+K+D 2019-01-10 12:09:44 +01:00
Robert eafbf6dcae Update current urls on 'node.updateDate' 2019-01-10 12:07:53 +01:00
Bjarke Berg 228fca04ec #3642 - moved functionality to frontend about saving all variants the first time. 2019-01-10 10:06:42 +01:00
Kenn Jacobsen d2baf03119 Fix content picker dirty checking (#4003)
(cherry picked from commit d41dbce601)
2019-01-10 09:54:39 +01:00
Shannon 4bf3c1d05b Handles trying to create a package with a duplicate name 2019-01-10 19:27:25 +11:00
Shannon 568d5c2583 Fixes issue with redirect 2019-01-10 19:08:52 +11:00
Shannon 5cb99bfddc forgot to add the test class 2019-01-10 18:55:24 +11:00
Shannon 091c9471bb Gets macros in packages, gets the download button working to download a created package, more tests 2019-01-10 18:51:02 +11:00
Bjarke Berg d672531b0b #3642 - reuse method for determine if the content is new 2019-01-10 07:58:45 +01:00
Bjarke Berg b0b0477dab #3642 -bugfix for nonvariant 2019-01-10 07:34:28 +01:00
Shannon b8d2309b9c Gets the IPackageBuilder working and tested, now the controller can create and update packages, validation is also working, need to do some more tests for adding other entities , removes more of the old packaging code. 2019-01-10 17:18:47 +11:00
Bjarke Berg 7421378330 #3642 - use nameof instead of magic strings that has to be equal to variable name 2019-01-10 07:03:08 +01:00
Bjarke Berg 8594af3fe3 #3642 - Also do dirty checks if we have changed the culture. 2019-01-10 06:58:12 +01:00
Bjarke Berg 28d93175d5 #3642 - When saving content the first time, we need to save all variants (even when save is not true), otherwise we loose the information when the url are updated. 2019-01-10 06:56:56 +01:00
Bjarke Berg 50b98a65d3 Merge remote-tracking branch 'origin/temp8' into temp8-3642-content-templates-fixes 2019-01-10 06:26:06 +01:00
Shannon 5f972384b1 WIP - new IEntityXmlSerializer, IPackageCreation, PackageActionRunner, large refactor of entity serialization, no more IPackagingService.Export methods, ports legacy package creation code to new IPackageCreation, more more ExportEventArgs (makes no sense) 2019-01-10 12:44:57 +11:00
Stephan 944d47f669 Refactor filesystems registration 2019-01-09 17:39:32 +01:00
Stephan 2bc63b9700 fix build 2019-01-09 16:06:36 +01:00
Stephan 49668a48bc Upgrade ModelsBuilder (bugfix) 2019-01-09 15:09:16 +01:00
Sebastiaan Janssen ff085c97ce Revert "Added eslintignore file"
This reverts commit 673735c2fe.
2019-01-09 14:57:17 +01:00
Stephan 39028cd240 Upgrade ModelsBuilder (bugfix) 2019-01-09 14:09:31 +01:00
Warren Buckley 36541fa77c Merge pull request #4017 from kjac/v8-feature-content-app-badge-without-text
V8: Allow Content App badges without "count"
2019-01-09 13:01:07 +00:00
Kenn Jacobsen cd1338db82 Make the count-less badge a little bit bigger 2019-01-09 13:20:16 +01:00
Kenn Jacobsen aea41937f7 Allow content app badges without "count" 2019-01-09 13:18:27 +01:00
Warren Buckley 898f1f2397 Merge pull request #3995 from umbraco/temp8-3656-3988-fixes-for-variants
Temp8 3656 3988 fixes for variants
2019-01-09 12:00:39 +00:00
Kenn Jacobsen 10cf10b33a Set form as dirty when removing a tag 2019-01-09 12:22:55 +01:00
elitsa fe689e6855 Added timeout to for rebinding editor shortcuts, and a shortcut for a media picker. 2019-01-09 12:08:46 +01:00
Warren Buckley 6d808cb121 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-09 10:46:44 +00:00
elitsa bea740c6e0 Merge remote-tracking branch 'origin/temp8' into temo8-3895-infinite-editor-shortcut 2019-01-09 11:39:02 +01:00
Robert a809e35e5d Fixes - temp8-40120 tags-validation-bug 2019-01-09 11:29:42 +01:00
Kenn Jacobsen d41dbce601 Fix content picker dirty checking (#4003) 2019-01-09 11:20:34 +01:00
Shannon e27b873a5a Merge branch 'temp8-remove-package-ascx-3996' into temp8-packages-ui
# Conflicts:
#	src/Umbraco.Web.UI/Umbraco/Views/Default.cshtml
#	src/Umbraco.Web/Trees/PackagesTreeController.cs
2019-01-09 20:57:02 +11:00
Sebastiaan Janssen ec60ba142a Fixes #3993 Recent changes in color picker has caused incompatibility with existing picker 2019-01-09 10:50:27 +01:00
Shannon 1772bc1e05 Merge branch 'temp8' into temp8-remove-package-ascx-3996 2019-01-09 20:47:26 +11:00
Warren Buckley 6e8b00d85c Merge pull request #3426 from kjac/v8-feature-content-app-badge
V8: Add notification badge to content app
2019-01-09 09:47:15 +00:00
Shannon fa82e1660b Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-09 20:44:17 +11:00
Shannon b3414166a6 webforms and legacy file cleanup 2019-01-09 20:43:46 +11:00
Bjarke Berg 70aa29ec7a #3642 - removed new stuff with on change event and fixed the old and broken, thats shared in tinymce 2019-01-09 10:20:01 +01:00
Stephan 9ef8e9afc1 Cleanup task runner 2019-01-09 10:05:10 +01:00
Shannon 2e558ed58d Merge branch 'temp8' into temp8-remove-package-ascx-3996 2019-01-09 19:12:01 +11:00
Shannon 4b58e34220 Align namespaces with _Legacy folder
# Conflicts:
#	src/Umbraco.Web/_Legacy/Packager/PackageInstance/InstalledPackage.cs
2019-01-09 19:08:09 +11:00
Shannon a955ef2b36 Align namespaces with _Legacy folder 2019-01-09 19:05:01 +11:00
Shannon 640de1c1a4 very small cleanup before some package code changes 2019-01-09 18:59:59 +11:00
Shannon e73884250a references the form directly 2019-01-09 18:41:52 +11:00
Shannon Deminick e6abfe0720 Merge pull request #3978 from umbraco/temp8-3708
Fixes - Fix publish/draft status for variant content when invariant p…
2019-01-09 17:03:55 +11:00
Shannon c7598bf647 changes the invariant check back since this is how it was done before in code above, plus means a later refactor of property/propertytype will be easier 2019-01-09 17:03:34 +11:00
Shannon a1ad04e04e Refactors a bit of the BuildDtos method and adds a unit test 2019-01-09 16:57:40 +11:00
Shannon 0267378bf9 Merge remote-tracking branch 'origin/temp8' into temp8-3708 2019-01-09 13:19:40 +11:00
Bjarke Berg 9bbe743686 syntax 2019-01-08 22:30:12 +01:00
Kenn Jacobsen a16e31c671 Safeguard the tags value converter against empty tags
(cherry picked from commit cc6c16894c)
2019-01-08 21:52:58 +01:00
Floris Robbemont d19a23eec6 Fix for wrong sorting overload in MediaService (#3948)
(cherry picked from commit 0852b20b31)
2019-01-08 21:50:58 +01:00
Sebastiaan Janssen 0f61de8bcd Bumps version to 7.14.0 2019-01-08 21:49:17 +01:00
Sebastiaan Janssen 5b17072d55 Bump version to 7.13.1 2019-01-08 21:45:34 +01:00
Sebastiaan Janssen 51875539b9 Fixes #4000 - 7.13.0 Creating new node as an editor causes exception
(cherry picked from commit caf7a6a1ca)
2019-01-08 21:44:17 +01:00
Sebastiaan Janssen 030fd4d375 Git clone includes a directory to clone to now,
should fix Azure Gallery release.
Tightened up the variables and paths.

(cherry picked from commit e0a38a4d9b)
2019-01-08 21:44:07 +01:00
Sebastiaan Janssen 7658fba725 Fixes #3990 All images uploaded to media section have umbracoHeight / umbracoWidth of 200x200px
(cherry picked from commit 086157cff8)
2019-01-08 21:43:53 +01:00
Sebastiaan Janssen caf7a6a1ca Fixes #4000 - 7.13.0 Creating new node as an editor causes exception 2019-01-08 21:32:47 +01:00
Stephan 349f48aa2d Refactor task runner maindom hooks 2019-01-08 20:49:21 +01:00
Warren Buckley 2422000b3e Updates RemoteDashboard so FINALLY the main image on the left loads in V8 backoffice
* Adds a new filter that uses the Angular $sce.trustAsHtml() function
2019-01-08 16:20:11 +00:00
Sebastiaan Janssen e0a38a4d9b Git clone includes a directory to clone to now,
should fix Azure Gallery release.
Tightened up the variables and paths.
2019-01-08 15:53:58 +01:00
Bjarke Berg 33ee239406 #3642 - Worked on creating blueprints 2019-01-08 15:23:05 +01:00
Bjarke Berg f2dac9df3c #3988 - Save RTE value on model.value on each change event 2019-01-08 13:59:33 +01:00
Stephan 429423c07f Unwrap wrapped filesystems 2019-01-08 12:52:16 +01:00
Sebastiaan Janssen 086157cff8 Fixes #3990 All images uploaded to media section have umbracoHeight / umbracoWidth of 200x200px 2019-01-08 12:51:14 +01:00
Bjarke Berg 89b5984794 #3695 - force the form to be dirty if any variant is still dirty 2019-01-08 11:01:28 +01:00
Dave Woestenborghs b9d779e921 #3417 prototyped the UI for settings of the macro 2019-01-08 08:34:46 +01:00
Stephan cf631e60dd Fix nuspec 2019-01-08 07:55:38 +01:00
Shannon c6d13ebc39 Merge remote-tracking branch 'origin/temp8' into temp8-3708 2019-01-08 17:17:10 +11:00
Shannon 801e9da028 Fixes issue with dynamically creating/storing field definitions, latest examine update 2019-01-08 16:37:16 +11:00
Shannon 340a7e5383 Changes published index flag to y/n instead of 1/0 2019-01-08 14:04:37 +11:00
Shannon 4a1ae0573f Gets definitions dynamically applied for culture specific fields. 2019-01-08 13:25:07 +11:00
Stephan 436fa261f5 Merge remote-tracking branch 'origin/temp8' into temp8 2019-01-07 19:42:33 +01:00
Stephan a1400d33fd Fixes, version 8.0.0-alpha.58 2019-01-07 19:41:23 +01:00
Stephan 19ae9f5dee Refactor configuration for DI 2019-01-07 19:40:07 +01:00
Robert e0511646af Fixes - Fix publish/draft status for variant content when invariant properties are edited 2019-01-07 16:23:26 +01:00
Warren Buckley 9b7737f0e4 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-01-07 14:11:09 +00:00
Warren Buckley c67cb0e8f2 Adds the TourFilterCollectionBuilder into the CompositionExtensions, as StarterKit uses this in its current ApplicationEventHandler 2019-01-07 14:11:00 +00:00
Shannon f7c70bde1e Fixing up the PublishedContentQuery.Search implementation 3920 2019-01-07 23:49:29 +11:00
Sebastiaan Janssen 21612454d0 Update umbtoggle.directive.js 2019-01-07 13:45:43 +01:00
Claus 003d54cacd cleanup usings 2019-01-07 12:59:38 +01:00
Sebastiaan Janssen d53d0b4271 Add disabled state to toggle (#3967)
(cherry picked from commit d231db8ef2)

# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/languages/edit.html
2019-01-07 12:53:31 +01:00
Bjarne Fyrstenborg d231db8ef2 Add disabled state to toggle (#3967) 2019-01-07 12:41:07 +01:00
Kenn Jacobsen 4564623899 Don't use a hardcoded folder type alias to determine folder types in the list view 2019-01-07 12:31:05 +01:00
Sebastiaan Janssen 12f7268423 Also update web.Template.config with latest version of Microsoft.CodeDom.Providers.DotNetCompilerPlatform 2019-01-07 12:01:53 +01:00
Kenn Jacobsen ab11be50a3 Don't change content app when saving media items 2019-01-07 11:22:27 +01:00
Warren Buckley 9ce35d25d2 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs
2019-01-07 09:59:15 +00:00
Kenn Jacobsen cc6c16894c Safeguard the tags value converter against empty tags 2019-01-07 10:36:05 +01:00
Stephan 775dd67254 Version 8.0.0-alpha-57 2019-01-07 09:46:11 +01:00
Stephan 4fa43abe23 Fix nuspec 2019-01-07 09:46:11 +01:00
Stephan 84f6239c98 Components Initialize and Terminate 2019-01-07 09:46:11 +01:00
Stephan 5855eaa4c9 Fix nuspec 2019-01-07 09:32:44 +01:00
Shannon 4ca95a11ee Fixes index populator registration and fixes the populators/rebuilders to not execute any lookups if there are no indexes 2019-01-07 18:49:55 +11:00
Kenn Jacobsen b861b379db Make the on-click-outside directive work again 2019-01-07 08:45:37 +01:00
Dave Woestenborghs edd2adc8a0 #3417 changed path of macro tree item to use angular view instead of webform 2019-01-07 08:31:06 +01:00
Dave Woestenborghs 2ca7bb0cf3 #3417 implemented create dialog for macros 2019-01-07 08:28:50 +01:00
Shannon 0356e5a224 Updates to latest examine, fixes issue with rebuilding indexes in the back office seeming to timeout but was a problem with the callback registration in examine 2019-01-07 18:16:06 +11:00
Shannon 118ad5361a Merge remote-tracking branch 'origin/temp8' into temp8-removes-config-based-indexes-3901
# Conflicts:
#	src/Umbraco.Examine/UmbracoExamineIndex.cs
2019-01-07 16:17:58 +11:00
Shannon e20e570dc8 Fixes tests 2019-01-07 16:15:51 +11:00
Stephan 8ce50ca357 Missing change broke the build 2019-01-05 16:24:49 +01:00
Stephan 048b6aa529 Expose FileSystemWrapper.InnerFileSystem 2019-01-05 15:49:35 +01:00
Stephan 5670c6354e Introduce ComponentComposer to simplify registration of components 2019-01-05 15:49:10 +01:00
Dave Woestenborghs d7af9d9fca #3417 added method to macro resource to create a macro 2019-01-04 17:36:42 +01:00
Dave Woestenborghs 03ce922124 #3417 register new api url in server variables 2019-01-04 17:10:53 +01:00
Stephan edfc3996d6 Adjustments for Forms and Deploy 2019-01-04 16:42:55 +01:00
Sebastiaan Janssen 62d6cf111e Applies fix for #3937 to v8 as well 2019-01-04 15:12:09 +01:00
Claus 2fad3c745a Merge branch 'temp8-3539-support-for-variants-in-redirects' into temp8
# Conflicts:
#	src/Umbraco.Web/Routing/RedirectTrackingComponent.cs
2019-01-04 14:36:55 +01:00
Dave Woestenborghs c61b5f947d #3417 renamed server variable 2019-01-04 13:49:03 +01:00
Bjarke Berg 6ad2adf4a2 #3539 - use culture to find the url in the actual redirect 2019-01-04 13:47:23 +01:00
Stephan b0ccdaa4f9 Merge branch 'temp8-di2690' into temp8 2019-01-04 13:17:04 +01:00
Bjarke Berg da6a815f16 #3539 - reverted one line 2019-01-04 13:17:01 +01:00
Floris Robbemont 0852b20b31 Fix for wrong sorting overload in MediaService (#3948) 2019-01-04 11:55:52 +00:00
Dave Woestenborghs e1906113b9 #3417 added macro api controller and create method 2019-01-04 12:31:58 +01:00
Dave Woestenborghs bb6848dd03 #3417 renamed existing macrocontroller to macro rendering controller 2019-01-04 11:44:23 +01:00
Stephan 025cdede6c Merge branch origin/temp8 into temp8-di2690 2019-01-04 11:43:14 +01:00
Stephan 52ada8cec3 Fix nuspec for MB 2019-01-04 11:42:39 +01:00
Dave Woestenborghs 8304ada528 #3417 added create view 2019-01-04 11:39:33 +01:00
Claus 9821901717 Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/StringExtensions.cs
#	src/Umbraco.Web/UI/LegacyDialogHandler.cs
#	src/Umbraco.Web/WebServices/SaveFileController.cs
2019-01-04 11:30:51 +01:00
Bjarke Berg 9bf66b0881 #3539 - Re-enabled url redirect tracking and implemented support for culture variants 2019-01-04 11:24:30 +01:00
Stephan 2705de5d60 Revert "Temporary downgrade of MB due to missing onlien pkg"
This reverts commit b8191c3652.
2019-01-04 11:13:41 +01:00
Dave Woestenborghs d50061b4af Merge branch 'temp8' into temp-3417 2019-01-04 10:50:56 +01:00
Stephan 1875270db1 Compose after/before 2019-01-04 10:29:29 +01:00
Claus 08e13ac530 Merge pull request #3814 from umbraco/temp7-269-xss-stylesheets
Removing malicious code from the name of a Stylesheet.
2019-01-04 10:11:25 +01:00
Stephan 97272e6220 Bugfix 2019-01-04 09:55:09 +01:00
Claus 71f2b7ee06 updating unit tests. 2019-01-04 09:40:55 +01:00
Claus 7ead62730b reverting changes to StripHtml method. 2019-01-04 09:34:24 +01:00
Stephan f6cd13488e Refactor collection builders to be nicer with DI 2019-01-04 09:34:08 +01:00
Stephan 3f1843def0 Merge remote-tracking branch 'lars-erik/temp8-u4-11427-remove-propertyinjection' into temp8-di2690 2019-01-04 08:36:48 +01:00
Stephan 1bd4cba9ac Fix component constructors 2019-01-04 08:36:38 +01:00
Bjarke Berg e1709eaed5 Bugfix, missing return, when publishing with decendants and the root do not have variants. 2019-01-04 08:16:20 +01:00
Lars-Erik Aabech 7cfe2115c0 Actually uses a scope in the ScopeBuilderCreatesScopedCollection tests 2019-01-04 00:15:06 +01:00
Lars-Erik Aabech 8e5ed6eaa6 Internalize testing ctor to provide unambiguous ctor for container. (Non LI req. / MS-DI) 2019-01-03 22:43:08 +01:00
Lars-Erik Aabech 0455c7ffd5 Public ctor on ExamineComponent to allow construction 2019-01-03 22:14:49 +01:00
Lars-Erik Aabech c18ed7e15a Registering WebRuntimeComponent and publicizing its dep. chain 2019-01-03 22:11:25 +01:00
Lars-Erik Aabech b8191c3652 Temporary downgrade of MB due to missing onlien pkg 2019-01-03 21:38:56 +01:00
Lars-Erik Aabech b8a939d1a1 Public ctor on CoreRuntimeComponent 2019-01-03 21:37:35 +01:00
Stephan 0481c2c736 Fix components 2019-01-03 21:10:13 +01:00
Stephan 9b756b9ce6 Fix components 2019-01-03 21:04:39 +01:00
Stephan 816ed84a2f Refactor components 2019-01-03 21:00:28 +01:00
Warren Buckley baa37549fb Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2019-01-03 13:52:14 +00:00
Claus f69cb89e30 Merge pull request #3810 from kjac/v8-fix-replace-snippet-jquery-dependencies
V8: Replace jquery dependencies for partial snippets
2019-01-03 13:44:57 +01:00
Stephan 9fe8b5f654 TEMP 2019-01-03 11:41:56 +01:00
Stephan 7a37c8743b Add container tests 2019-01-03 11:41:40 +01:00
Bjarke Berg 6490f57f70 Removed commented out code. 2019-01-03 10:53:33 +01:00
Sebastiaan Janssen aceb5c7971 Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/IO/MediaFileSystem.cs
#	src/Umbraco.Web.UI.Client/src/less/helveticons.less
#	src/Umbraco.Web.UI.Client/src/views/content/copy.html
#	src/Umbraco.Web.UI.Client/src/views/content/move.html
#	src/Umbraco.Web.UI.Client/src/views/media/move.html
#	src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
#	src/Umbraco.Web.UI/umbraco/dialogs/rollBack.aspx
#	src/Umbraco.Web/Editors/LogController.cs
#	src/Umbraco.Web/Editors/PasswordChanger.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/rollBack.aspx.cs
2019-01-03 10:32:34 +01:00
Stephan 4f7a5e3046 Bugfix RuntimeState 2019-01-03 09:50:51 +01:00
Bjarke Berg eda46a16d0 Changed IContentType on IContent to a more simple class with lesser properties 2019-01-03 09:27:52 +01:00
Stephan a434ac8c74 Upgrade to ModelsBuilder -alpha.26 2019-01-03 09:11:11 +01:00
Kenn Jacobsen 4b60d8bca6 Fix the content template selector in the content tree 2019-01-03 07:57:23 +00:00
Kenn Jacobsen 525b229b42 Fix content creation from list views 2019-01-03 07:56:17 +00:00
Kenn Jacobsen 2dfbb1d555 Don't attempt to apply a filter if none is submitted 2019-01-03 07:53:20 +00:00
Stephan 81a9807206 Version 8.0.0-alpha.56 2019-01-02 18:14:48 +01:00
Stephan ceab758100 Merge branch 'temp8' into temp8-di2690 2019-01-02 16:44:35 +01:00
Stephan 986a7f368f Merge branch 'temp8' into temp8-removes-config-based-indexes-3901 2019-01-02 15:37:20 +01:00
Stephan 17d818b604 Make Current.Container public for Deploy, wont last 2019-01-02 15:29:22 +01:00
Stephan ebf15b9052 Fix CacheRefresher and DistributedCache 2019-01-02 15:24:33 +01:00
Claus 5b7a205835 Merge branch 'kjac-v8-feature-angular-public-access' into temp8 2019-01-02 13:42:36 +01:00
Claus fb9d5a3c5d Merge branch 'v8-feature-angular-public-access' of https://github.com/kjac/Umbraco-CMS into kjac-v8-feature-angular-public-access 2019-01-02 11:58:24 +01:00
Stephan b21d07a282 Merge branch origin/temp8 into temp8-di2690 2019-01-02 10:23:24 +01:00
Warren Buckley 4651325d77 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js
2019-01-01 19:08:59 +00:00
Aaron Powell 0e56f2035d Using npx for running gulp (#3938) 2018-12-31 14:10:31 +00:00
Kenn Jacobsen 0150b97278 Show password change validation errors at the correct fields (#3918)
* Show password change validation errors at the correct password fields + remove the redundant "Could not reset password, errors: " message text

* Explicitly find the user instead of mapping it.
2018-12-31 14:02:59 +00:00
Kenn Jacobsen af2f531d31 Add missing localization of dialogs (#3844) 2018-12-31 13:37:58 +00:00
Kenn Jacobsen 884eaf50c3 Fix the flickering name when moving/copying mediatypes 2018-12-31 13:37:24 +00:00
Kenn Jacobsen d054771fc6 Fix the flickering name when moving/copying doctypes 2018-12-31 13:36:25 +00:00
Sebastiaan Janssen 5e680e80e6 Deletes commented out code 2018-12-31 12:49:54 +00:00
Dave Woestenborghs ee8b4c5884 #3916 fix multiple enumerations of ienumerable...so usernames and avatars are displayed correctly 2018-12-31 12:49:54 +00:00
Dave Woestenborghs 0ce54847b0 #3916 mapping to a IEnumerable resulted in all items in the result list being the same. Now map items indiviually. Could be caused by this : https://stackoverflow.com/questions/17268362/automapper-for-a-list-scenario-only-seems-to-repeat-mapping-the-first-object-in 2018-12-31 12:49:54 +00:00
Callum Whyte b852c78861 Fixing spelling mistakes in helveticons CSS class names
The icon picker uses these class names as labels, kept the old class names for backwards compatibility
2018-12-31 12:47:04 +00:00
Kenn Jacobsen cace1af958 Fix the flickering name when moving datatypes 2018-12-31 12:45:37 +00:00
Anders Bjerner 91616a527d Should be "Add group" to keep the casing consistent 2018-12-31 12:44:25 +00:00
Kenn Jacobsen debbf87a04 Support image crop data set when overwriting files using the API 2018-12-31 12:43:06 +00:00
Brian Juul Andersen b2a1b11a5b Fixed minor grammatical error 2018-12-29 20:20:02 +00:00
Stephan 8d9bf91512 Merge branch 'temp8-migrations' into temp8 2018-12-28 21:33:00 +01:00
Brian Juul Andersen 51c9912828 Update CONTRIBUTION_GUIDELINES.md
Fixed minor grammatical error.
2018-12-28 11:43:20 +01:00
elitsa f1197a6db2 Adding shortcuts for closing an infinite editor through Escape key. 2018-12-27 13:23:20 +01:00
elitsa 0aa1dc1dc7 Adding tests for verifying that malicious code input will be cleaned for XSS. 2018-12-27 10:02:49 +01:00
elitsa bb60d5e035 Reverting changes made from merge. 2018-12-27 09:57:31 +01:00
elitsa 247f213d26 Merge remote-tracking branch 'origin/dev-v7' into temp7-269-xss-stylesheets 2018-12-27 08:50:44 +01:00
Stephan f21dbb3e77 Fix merge 2018-12-21 16:25:16 +01:00
Stephan a60fd1b7be Merge branch origin/temp8 into temp8-di2690 2018-12-21 15:47:08 +01:00
Stephan 29540b1835 TypeLoader TLC, better perfs and logging 2018-12-21 15:11:23 +01:00
Stephan a571af8be2 Make more types IDiscoverable 2018-12-21 13:42:24 +01:00
Stephan 90ab90d6b9 Fix ExamineComponent crashing on shutdown 2018-12-21 13:42:04 +01:00
Stephan bb9846a6ca Merge branch origin/temp8 into temp8-di2690 2018-12-21 10:58:38 +01:00
Stephan 798eb1099a Merge branch 'temp8' into temp8-migrations 2018-12-21 10:46:37 +01:00
Stephan 70dd85f708 Misc fix 2018-12-21 10:38:14 +01:00
Stephan d0623bc494 Merge branch 'temp8' into temp8-removes-config-based-indexes-3901 2018-12-21 09:25:37 +01:00
Stephan f807d40b95 Merge branch 'temp8-contentquery-search-culture-3828' into temp8 2018-12-21 09:00:13 +01:00
Stephan 7f6994514f Merge branch 'temp8' into temp8-contentquery-search-culture-3828 2018-12-21 09:00:03 +01:00
Stephan 9db0f540d0 Fix failing tests 2018-12-21 08:58:20 +01:00
Shannon 698b83c455 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-12-21 14:17:36 +11:00
Shannon d1befc876f manual merges 2018-12-21 13:48:59 +11:00
Shannon 711304dffe manual merges 2018-12-21 13:44:18 +11:00
Shannon 7e20e81cc8 Fixes EntityRepository and EntityService to perform order by operations correctly 2018-12-21 13:15:46 +11:00
Stephan 4a71d14097 Simplify migrations 2018-12-20 18:38:55 +01:00
Stephan b0eb0d1205 Fix tests 2018-12-20 15:36:12 +01:00
Stephan 4e91a5bb3e Merge branch 'temp8-3658-contextual-info-app' into temp8 2018-12-20 14:32:03 +01:00
Stephan e959605b39 Cleanup and deal with FIXMEs 2018-12-20 14:31:46 +01:00
Stephan 1ffd457985 Merge branch 'temp8' into temp8-3658-contextual-info-app 2018-12-20 13:42:19 +01:00
Stephan 4039127c3d Merge branch 'temp8' into temp8-contentquery-search-culture-3828 2018-12-20 13:31:38 +01:00
Stephan 23eabee1a2 Misc fixes 2018-12-20 13:31:34 +01:00
Stephan 56c82d120b Bugfix keepalive route issue 2018-12-20 13:30:19 +01:00
Stephan 5286e02f11 Merge branch 'temp8' into temp8-contentquery-search-culture-3828 2018-12-20 10:19:02 +01:00
Stephan 8219e0ccdd Fix failing test 2018-12-20 08:25:58 +01:00
Shannon e7a06467f1 Fixes merge issues, manually merges other changes 2018-12-20 17:50:16 +11:00
Shannon 2fcb30e54e Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	.editorconfig
#	.gitignore
#	src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs
#	src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
#	src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js
#	src/Umbraco.Web.UI.Client/src/less/components/buttons/umb-era-button.less
#	src/Umbraco.Web.UI.Client/src/views/common/dialogs/login.html
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/compositions/compositions.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/contenttypeeditor/compositions/compositions.html
#	src/Umbraco.Web.UI.Client/src/views/content/content.delete.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/content.restore.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/restore.html
#	src/Umbraco.Web.UI.Client/src/views/dashboard/developer/healthcheck.html
#	src/Umbraco.Web.UI.Client/src/views/media/media.move.controller.js
#	src/Umbraco.Web.UI.Client/src/views/media/move.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/dialogs/layoutconfig.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/dialogs/rowconfig.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
#	src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/config/umbracoSettings.Release.config
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
#	src/Umbraco.Web/Controllers/UmbLoginController.cs
#	src/Umbraco.Web/Controllers/UmbLoginStatusController.cs
#	src/Umbraco.Web/Controllers/UmbProfileController.cs
#	src/Umbraco.Web/Controllers/UmbRegisterController.cs
#	src/Umbraco.Web/Editors/ContentController.cs
#	src/Umbraco.Web/Editors/ContentTypeControllerBase.cs
#	src/Umbraco.Web/HtmlHelperRenderExtensions.cs
#	src/Umbraco.Web/Trees/ContentTreeController.cs
#	src/Umbraco.Web/Trees/MediaTreeController.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/create/XsltTasks.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/create/xslt.ascx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/Xslt/editXslt.aspx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/webservices/codeEditorSave.asmx.cs
2018-12-20 16:58:01 +11:00
Kenn Jacobsen 6ca2c27ed3 Remove member groups controller TODO's 2018-12-19 21:01:19 +01:00
Kenn Jacobsen 97f9151473 Add "Move" option for deleted items in the content tree (#3772) 2018-12-19 18:19:51 +01:00
Kenn Jacobsen d01dfb4ba6 Add search to move media dialog 2018-12-19 18:10:50 +01:00
Kenn Jacobsen 49387aaa02 Fix errors creating content templates + support variants (#3831) 2018-12-19 18:08:14 +01:00
Kenn Jacobsen 7e144eeacf V8: Fix listviews in pickers (#3894) 2018-12-19 18:01:36 +01:00
Kenn Jacobsen 47ccc8f584 Group content and media types by folder when setting up compositions (#3900) 2018-12-19 17:59:31 +01:00
Kenn Jacobsen b173b41ce0 V8: Fix and clean up the restore media dialog (#3781) 2018-12-19 17:42:42 +01:00
Kenn Jacobsen d431e80df2 Fix more missing localization 2018-12-19 17:30:39 +01:00
Kenn Jacobsen 28ac63a22c Re-introduce accidentally removed localization 2018-12-19 17:30:39 +01:00
Kenn Jacobsen 5944cec8fc Fix and clean up the restore content dialog 2018-12-19 17:30:39 +01:00
Steve Temple fcbfb1a56e Rename PluginManager to TypeLoader in tests 2018-12-19 16:44:35 +01:00
Dave Woestenborghs 8aa5fe8695 Setting hide-alias to false still hides the alias
When using umb-editor-header setting hide-alias to false still hides the alias.

I would expect that it would be visible. The only thing that works to make it visible to is removing the hide-alias attribute.

This PR fixes this. So now you can hide the alias based on property of your scope.

Dave
2018-12-19 16:28:03 +01:00
Kenn Jacobsen 506319695b Fix container creation for media types (#3839) 2018-12-19 16:24:56 +01:00
Kenn Jacobsen 12586df562 Use a member group picker for member group assignment (#3888) 2018-12-19 16:21:14 +01:00
Kenn Jacobsen bb53c020e9 Fix the member group picker 2018-12-19 16:20:22 +01:00
Kenn Jacobsen a165a2b719 Reload list views after deleting items (#3853) 2018-12-19 16:18:11 +01:00
Lukasz Wojciech Kaleta 9c101622d0 Delete user start node assignments before deleting the user 2018-12-19 16:16:58 +01:00
Tristan Thompson 2a61d0d988 Remove/Replace ping.aspx
Remove ping.aspx
Add KeepAliveController to receive ping requests
Update KeepAlive.cs to call new MVC route rather than ping.aspx
2018-12-19 16:13:23 +01:00
Thomas Morris 3b7e8e05f2 Fixes references to docs in sln 2018-12-19 16:11:14 +01:00
Stephan fd6a5f60d2 Merge branch 'temp8' into temp8-contentquery-search-culture-3828 2018-12-19 16:06:35 +01:00
Stephan 720ad984dc Merge branch 'temp8-backoffice-search-with-variants' into temp8 2018-12-19 16:02:54 +01:00
Stephan 5593d49719 Minor fixes as per PR#3852 discussion 2018-12-19 16:00:29 +01:00
Karl Tynan 9f9b9d8ccc Update translation alias to use existing emptyRecycleBin naming instead of Trashcan
Removed unused translation alias also
2018-12-19 16:00:04 +01:00
Gregory Dove 6365f910bc Better Validation Options (#3882) 2018-12-19 15:58:06 +01:00
Tristan Thompson 65f7e44338 Remove/Replace endPreview.aspx with MVC endpoint 2018-12-19 15:47:31 +01:00
Thomas Morris c79f557e94 Remove ClientRedirect.aspx 2018-12-19 15:43:57 +01:00
Kenn Jacobsen 9af6e3027f Don't show (blank) for non blueprint content types (#3887) 2018-12-19 15:41:24 +01:00
Paul Seal e41db72ef7 - added class and style rule to make health check fix message look be… (#3747) 2018-12-19 15:38:08 +01:00
Kenn Jacobsen b087b862e8 Make Nested Content support variant doctypes 2018-12-19 15:36:37 +01:00
Kenn Jacobsen 4d48254a93 Don't show "Create" and "Sort" for deleted items in the media tree 2018-12-19 15:33:53 +01:00
Kenn Jacobsen f3e8b70b8c Show only the success message upon successful update of notifications 2018-12-19 15:32:31 +01:00
Thomas Morris 7b804e27ad Removes umbraco.aspx 2018-12-19 15:30:07 +01:00
Kenn Jacobsen 410ab3447c Fix "toggle all editors" for grid rows 2018-12-19 15:13:36 +01:00
Kenn Jacobsen 96f529c669 Fix "allow all row configurations" for grid layouts 2018-12-19 15:12:32 +01:00
Kenn Jacobsen 08dc5a4038 Fix the disappearing action button by using a promise 2018-12-19 15:03:00 +01:00
Kenn Jacobsen b81f2512cb Fix the disappearing preview/save/publish buttons in listviews (#3906) 2018-12-19 15:01:18 +01:00
Marc Goodson 150ab13668 Honour 'Order Direction' passed into GetPagedResultsByQuery
Wanting to update the MiniListView so that you can change the sort order of the results, so that the most recent items are first, eg sort by descending, however chasing this through to the Entity Repository GetPagedResultsByQuery although the sort direction is passed at each stage, inside this method it is ignored... is this the best way to add it back in?
2018-12-19 14:06:11 +01:00
Mads Rasmussen cf56dbd34e add more docs for infinite editing - how to create a custom infinite editor 2018-12-19 13:43:58 +01:00
Shannon f724748225 No more IUserService.SavePassword - passwords are managed with Identity. 2018-12-19 23:27:47 +11:00
Shannon 0ad66c488b Long live Operathor 2018-12-19 22:06:04 +11:00
Shannon Deminick 4a83f1f37f Merge pull request #3897 from umbraco/temp8-3653-infinite-animations
reenable infinite editing animations
2018-12-19 17:30:10 +11:00
Shannon Deminick 6de9379b86 Merge pull request #3904 from umbraco/temp8-3650-infinite-keyboard-shortcuts
Temp8 3650 infinite keyboard shortcuts
2018-12-19 17:23:10 +11:00
Shannon 6a8c7d1a3b Writes some tests, fixes a bug, orders results, writes notes 2018-12-19 17:13:46 +11:00
Shannon 72d42e4228 updates the UI to show culture when the item is not variant and shows the unpublished status if the culture has no variants 2018-12-19 15:58:18 +11:00
Mads Rasmussen abb4ab6b0a fix open template/open doctype buttons 2018-12-18 21:56:06 +01:00
Stephan 7cdbe39ce5 Merge branch 'temp8' into temp8-backoffice-search-with-variants 2018-12-18 17:05:17 +01:00
Stephan 115b0cd2aa Merge branch temp8 into temp8-di2690 2018-12-18 15:42:45 +01:00
Shannon 36fd32ee9a remove unused comparer 2018-12-19 00:04:35 +11:00
Shannon 7047a07660 Shows the culture for URLs if the node is invariant but it has cultural URLs (it exists underneath a variant) 2018-12-19 00:03:49 +11:00
Mads Rasmussen 88d328a4e9 unbind all keyboard shortcuts from the underlaying editor so only keyboard shortcuts from the open editor works 2018-12-18 13:40:37 +01:00
Mads Rasmussen 9eecf9898e rebind keyboard shortcuts when infinite editors closes 2018-12-18 13:24:52 +01:00
Shannon a19a58796f Changes IUrlProvider to return UrlInfo 2018-12-18 22:02:39 +11:00
elitsa d7696e8d91 Making a variable const 2018-12-18 11:34:50 +01:00
Stephan 61fd924675 Merge branch 'temp8-3866' into temp8 2018-12-18 10:45:21 +01:00
Stephan 792bf40037 Rework for #3866 2018-12-18 10:44:59 +01:00
Stephan 00c6f77f7d Merge branch 'temp8' into temp8-3866 2018-12-18 10:39:48 +01:00
Stephan 53c67fad63 Rework for #3866 2018-12-18 10:39:39 +01:00
Stephan 813eccdc5a Fixes 2018-12-18 10:39:17 +01:00
Stephan d8d04c54e6 Fix IOHelper for debugging other apps 2018-12-18 08:33:54 +01:00
Stephan 8152862ad2 Fix issue with figuring out whether a published content version is draft 2018-12-18 08:31:10 +01:00
Stephan c020383c22 Remove confusing LazyCollectionBuilderBase.Remove 2018-12-18 08:31:10 +01:00
Shannon b9580b389e Merge remote-tracking branch 'origin/temp8' into temp8-3658-contextual-info-app 2018-12-18 18:04:38 +11:00
Shannon 193bc74f26 removes configuration based indexes 2018-12-18 17:55:30 +11:00
Shannon Deminick 2377d3ac11 Merge pull request #3891 from kjac/v8-fix-publish-on-preview
V8: Don't publish on preview
2018-12-18 17:24:14 +11:00
Stephan 35ebced4ed True standalone test 2018-12-17 18:55:36 +01:00
Mads Rasmussen 4068dca938 reenable infinite editing animations 2018-12-17 13:55:08 +01:00
Mads Rasmussen ebc689032d fix dictionary pickers in code editors 2018-12-17 10:48:33 +01:00
Shannon Deminick fde64f157c Merge pull request #3818 from umbraco/temp7-268-xss-xslt
Fixing XSS issue with Xslt files.
2018-12-17 15:20:36 +11:00
Shannon Deminick 518f5137e6 Merge pull request #3847 from umbraco/temp7-267-membership-tokens
Implementing a validation token when a membership form is submitted.
2018-12-17 15:14:32 +11:00
Shannon 07d2320898 fixes bool 2018-12-17 13:44:11 +11:00
Shannon 7484626893 Allows passing in a culture to the IPublishedContentQuery search methods 2018-12-17 13:11:51 +11:00
Shannon 4976782247 Updates search published content search extensions to correspond with new examine api changes, updates examine api changes 2018-12-17 12:17:03 +11:00
Kenn Jacobsen 33b9870aec Only perform save when previewing - not a publish 2018-12-16 21:52:45 +01:00
Shannon 4a23a6d3d0 Merge branch 'temp8-backoffice-search-with-variants' into temp8-examine-extensibility-3535 2018-12-14 13:17:51 +11:00
Shannon 9cc729d90b Merge branch 'temp8' into temp8-backoffice-search-with-variants
# Conflicts:
#	src/Umbraco.Examine/ExamineExtensions.cs
2018-12-14 13:06:54 +11:00
Shannon Deminick 6e4ec6e020 Merge pull request #3807 from umbraco/temp8-3675-variant-tags
Support variant tags
2018-12-14 12:38:42 +11:00
Shannon d38e4e6e34 latest examine, fixes sortability 2018-12-14 11:32:20 +11:00
Shannon 162f8480d1 more tweaks to get config based indexes working, updates to IIndexPopulator to have strongly typed association 2018-12-13 23:17:58 +11:00
Shannon c129375dd0 more bug fixes 2018-12-13 22:33:41 +11:00
Stephan 7cad591b86 Fixes 2018-12-13 11:12:48 +01:00
Shannon 2060f69ab0 Allow configuring a DirectoryFactory for all LuceneIndexes created with LuceneIndexCreator 2018-12-13 21:09:56 +11:00
Warren Buckley 3d391fdfb6 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-12-13 08:49:35 +00:00
Stephan 96aff943d5 Bugfix tags (in)variant 2018-12-13 09:15:51 +01:00
Shannon 7159bca71f Update to latest examine api changes 2018-12-13 18:24:06 +11:00
Shannon 5e6320730d Updates nuspec to latest examine 2018-12-13 18:18:04 +11:00
Shannon 8be55f8f98 Merge branch 'temp8' into temp8-examine-extensibility-3535 2018-12-13 16:40:56 +11:00
Shannon ce3395cc1e fix build 2018-12-13 15:13:56 +11:00
Shannon c8b3f11498 latest examine, tweaks to UmbracoFieldDefinitionCollection, adds some test code for testing 2018-12-13 15:04:18 +11:00
Aaron Powell 9649e61f17 Fixing #3866 - making a few methods public 2018-12-13 11:54:32 +11:00
Stephan adced099be Move UmbracoConfig singleton to Current 2018-12-12 23:31:16 +01:00
Kenn Jacobsen 082d65b78f Merge branch 'v8-feature-angular-public-access' of https://github.com/kjac/Umbraco-CMS into v8-feature-angular-public-access 2018-12-12 23:07:53 +01:00
Kenn Jacobsen 41624c8c16 Remove the old aspx page 2018-12-12 23:07:41 +01:00
Stephan e40c9cb227 Fix missing dependencies errors, simplify 2018-12-12 16:07:21 +01:00
Stephan 3150f5d24e Merge branch temp8 into temp8-3675-variant-tags 2018-12-12 16:04:58 +01:00
Kenn Jacobsen 8ff4d821a8 Merge branch 'temp8' into v8-feature-angular-public-access 2018-12-12 15:42:31 +01:00
Kenn Jacobsen 1ba41986d7 Make sure the public access supports member based access 2018-12-12 15:35:34 +01:00
Stephan a74052d647 Further simplify upgrader 2018-12-12 15:29:40 +01:00
Mads Rasmussen defa231c4b add label for history 2018-12-12 14:29:20 +01:00
Stephan 3e082f1a94 Restructure registration of essential services, validate 2018-12-12 14:28:57 +01:00
Kenn Jacobsen e4f9c2916d Use "groups", not "roles" + return richer group models from API 2018-12-12 14:27:20 +01:00
Stephan 54c352f1f9 Kill sql.WriteToConsole 2018-12-12 13:28:52 +01:00
Stephan 376203a4e1 Further simplify upgrader 2018-12-12 13:28:52 +01:00
Stephan b60cda2e1b Add a missing null check 2018-12-12 13:28:51 +01:00
Stephan b086fd2f0b Cleanup the Umbraco migration plan 2018-12-12 13:28:51 +01:00
Stephan 84e0d0571f Refactor migration plan and upgrader 2018-12-12 13:28:51 +01:00
Stephan 478522a573 Migrations TLC 2018-12-12 13:28:51 +01:00
Stephan 68ee1181cb Execute true Sql<ISqlContext> in Migrations 2018-12-12 13:28:51 +01:00
Stephan 7b3cded115 Cleanup 2018-12-12 13:28:51 +01:00
Stephan 11edbc8638 Remove obsolete post-migrations 2018-12-12 13:28:51 +01:00
Stephan e65470de8b Document SqlContext 2018-12-12 13:28:51 +01:00
Stephan d7e61515de Refactor TypeLoader 2018-12-12 13:28:51 +01:00
Stephan e3cd19fed5 Fix tags (in)variant 2018-12-12 13:27:08 +01:00
Mads Rasmussen 4f6f959d7f Add missing translations 2018-12-12 13:12:13 +01:00
Mads Rasmussen c8593c23e6 show correct createDate for variants, only show contextual variant status, only show context variant urls, add variant log colors 2018-12-12 11:59:08 +01:00
Kenn Jacobsen 22b78ec617 Make sure at least one member is selected 2018-12-12 11:18:16 +01:00
Kenn Jacobsen 35f0bf92f2 Support custom membership providers (untested) 2018-12-12 09:55:35 +01:00
Kenn Jacobsen efb9b37f5d Change from member IDs to usernames in member selections 2018-12-12 09:27:03 +01:00
Stephan fc620af9d0 Merge branch 'temp8' into temp8-3675-variant-tags 2018-12-12 08:58:25 +01:00
Kenn Jacobsen e12d374ffa Merge branch 'temp8' into v8-fix-copy-media-types 2018-12-12 07:12:22 +01:00
Shannon 826a8baff5 Merge branch 'temp8' into temp8-backoffice-search-with-variants 2018-12-12 13:37:19 +11:00
Shannon 85b25485da removes trees from trees.Release.config 2018-12-12 13:34:54 +11:00
Shannon 51cfec4157 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-12-12 13:23:44 +11:00
Shannon b5da641d48 Uses the DefaultLockFactory to set the lock 2018-12-12 13:23:29 +11:00
Shannon Deminick bfcc68c7f9 Merge pull request #3856 from umbraco/temp8-forms-fullscreen
Makes the Forms Promo App/Section become fullscreen & removes the empty tree
2018-12-12 13:23:06 +11:00
Shannon 7cb83373ca Creates base class LuceneIndexCreator 2018-12-12 12:46:58 +11:00
Shannon 15c7d7ce77 Creates a sub-generic interface for creating indexes 2018-12-12 12:37:21 +11:00
Shannon 2254c3d00c Merge branch 'temp8' into temp8-backoffice-search-with-variants 2018-12-12 12:06:21 +11:00
Shannon e1743ae3ea Changes IValueSetBuilder to not be strongly typed, no need for that 2018-12-12 12:05:19 +11:00
Kenn Jacobsen ec24ebf93c Fix media type copying and move media type service unit tests to a separate class 2018-12-11 17:00:43 +01:00
Warren Buckley 767cd93f08 Adds in some logic if we have no child trees for that application/section then we create a SingleTreeRoot 2018-12-11 14:09:44 +00:00
Warren Buckley b0157d7116 We do not need to ship with these Umbraco Forms trees in the config file 2018-12-11 14:08:44 +00:00
Stephan 0dff7680fd Fix ContentTypeServiceTests (but, why???) 2018-12-11 14:05:04 +01:00
Mads Rasmussen b19f9c8114 update styling on forms install dashboard 2018-12-11 13:39:12 +01:00
Mads Rasmussen d06ccebf7c update docs for infinite editing 2018-12-11 13:03:18 +01:00
Warren Buckley acc238f6ef Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-12-11 11:23:18 +00:00
Warren Buckley 0ae9d30373 Revert recent change to Forms dashboard back into XML config - now that we have a way to modify from Umbraco Forms component 2018-12-11 09:43:47 +00:00
Mads Rasmussen 27f9490837 fix docs build 2018-12-11 10:14:18 +01:00
Stephan b6f55d12da Merge branch 'temp8' into temp8-3675-variant-tags 2018-12-11 10:11:27 +01:00
Stephan 8c31f69a6f Merge branch origin/temp8 into temp8-di2690 2018-12-11 10:04:42 +01:00
Stephan 35f4bba119 fix UrlProvider for invariant under variant 2018-12-11 10:00:55 +01:00
Stephan d077f9c8a7 Merge pull request #3600 from JimBobSquarePants/temp8
Optimized CombinedGuidsMediaPathScheme
2018-12-11 08:56:41 +01:00
Shannon 8048d57ffe ensures query fields contained the lowercased iso code 2018-12-11 17:57:40 +11:00
Shannon 1fe3045b4c Adds TODO notes 2018-12-11 17:54:10 +11:00
Shannon eb3841fc0a Searches on variant nodeName, orders ISearchableTree results by the corresponding tree SortOrder, fixes assembly scanning ISearchableTree 2018-12-11 17:51:47 +11:00
Shannon 5148f34b32 Fixes ISearchableTree lifetime registration, fixes routing that clears required query strings, fixes lucene search string, gets URls in search results working with default lang/variants 2018-12-11 15:42:32 +11:00
Shannon 9b52fa215f Allows replacing the model with the outgoing event args 2018-12-11 12:53:15 +11:00
Shannon e91cf0039b Adds ability to filter the outgoing dashboard model 2018-12-11 12:32:51 +11:00
James Jackson-South 64dc401be5 Merge branch 'temp8' into temp8 2018-12-11 06:28:23 +11:00
Stephan 046f6f3cd9 Merge branch origin/temp8 into temp8-di2690 2018-12-10 17:49:11 +01:00
Stephan f9967e2d7d Fix e25e509d84 breaking tests, fix original issue 2018-12-10 17:48:24 +01:00
Stephan f10b86c9ec Fix RelationMapperProfiler 2018-12-10 17:08:14 +01:00
Warren Buckley c4cf843b82 Adds in the Umbraco Forms Promo dashboard in via package.manifest so that Forms install can override when installed 2018-12-10 14:59:17 +00:00
Warren Buckley 20a65166be Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web/Editors/BackOfficeServerVariables.cs
2018-12-10 14:31:03 +00:00
Stephan e173ea6dac Cleanup 2018-12-10 15:30:56 +01:00
Claus 5fb3ccd758 Merge branch 'temp8-3436-relationtypes' into temp8 2018-12-10 14:24:00 +01:00
Mads Rasmussen c61ac406bb fix fade animation when closing the last infinite editor 2018-12-10 14:20:57 +01:00
Claus ca0cd8711e minor fixes. 2018-12-10 14:11:02 +01:00
Claus cfd6a08366 Merge branch '3436-relations-editor' of https://github.com/jamescoxhead/Umbraco-CMS into jamescoxhead-3436-relations-editor 2018-12-10 13:27:34 +01:00
Mads Rasmussen 98cc48c0d3 remove infinite editing backdrop when discarding changes 2018-12-10 11:38:43 +01:00
elitsa 8518aaf4c1 Merge branch 'temp7-269-xss-stylesheets' of https://github.com/umbraco/Umbraco-CMS into temp7-269-xss-stylesheets
# Conflicts:
#	src/Umbraco.Core/StringExtensions.cs
2018-12-10 11:00:31 +01:00
elitsa 9edafe37e1 Merge branch 'dev-v7' into temp7-269-xss-stylesheets
# Conflicts resolved:
#	src/Umbraco.Core/StringExtensions.cs
2018-12-10 10:57:30 +01:00
elitsa 3c74ce2427 Implementing anti forgery token which will not allows members to be created by sending a request directly to the registration controller when the request is not coming from a page in the application 2018-12-10 08:55:54 +01:00
Jack Lawry a11b442cfd Update text 2018-12-10 08:31:07 +01:00
Kenn Jacobsen 9f9286ae45 Redirect to recycle bin after deletion 2018-12-10 08:16:37 +01:00
Shannon 86b0ab7dab Fixes the typeahead (mostly) 2018-12-10 17:32:10 +11:00
Shannon c80a9b1402 Fixes the typeahead (mostly) 2018-12-10 17:26:15 +11:00
Shannon 971e92d659 fixes last PublishedMediaTests 2018-12-10 14:11:41 +11:00
Shannon 5d028eea04 Merge branch 'temp8' into temp8-3675-variant-tags
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/tags/tags.html
2018-12-10 14:07:20 +11:00
Shannon db1a535af4 Fixes published media tests with Examine and un-ignores them... more tests are better than less even if we aren't using Examine for real media cache 2018-12-10 14:06:25 +11:00
Shannon bcd908e47d Changes term Indexer to Index and fixes a failing test 2018-12-10 13:06:39 +11:00
Anders Bjerner 7c8ab96b51 As Gitter has been removed from Our, we might as well remove it here 2018-12-09 18:20:41 +01:00
Kenn Jacobsen 87478163ed Reload the recycle bin when deleting an item (#3820) 2018-12-09 18:19:48 +01:00
Kenn Jacobsen 7149ebcb68 Localize document type scaffolds for nested content (#3483) 2018-12-09 18:15:11 +01:00
Kenn Jacobsen 852b44af0e Fix member roles assignment YSOD 2018-12-09 17:56:41 +01:00
Jannik Anker c2a8378b89 V8, Getting Started: typo in URL
Using HHTTPS as protocol just doesn't work :-/
2018-12-09 17:54:13 +01:00
Kenn Jacobsen 3ab5e166d3 Update the select avatar step for invited users 2018-12-09 17:48:10 +01:00
Sébastien Sougnez 1d9bb4605b Improvement to the .editorconfig file (#3795) 2018-12-09 17:44:11 +01:00
Kenn Jacobsen 939b320971 Fix the OK button for move and close success messages 2018-12-09 17:28:21 +01:00
Kenn Jacobsen 8ff697ad98 Fix the flickering source name and the close button when moving items in the media tree. 2018-12-09 17:26:24 +01:00
Kenn Jacobsen c00b3e283d Add dirty tracking for slider and datetime 2018-12-09 17:19:40 +01:00
Kenn Jacobsen a8b0ede770 Whoops forgot a file 2018-12-09 15:03:35 +01:00
Kenn Jacobsen c860a6b574 Pick members instead of entering username and password 2018-12-09 14:58:52 +01:00
Kenn Jacobsen a51d241dc2 Fix missing "opens dialog dots" for menu items created using the MenuItemList helper methods 2018-12-09 14:36:35 +01:00
Andy Neil e25e509d84 Resolved check for removed properties 2018-12-09 14:31:53 +01:00
Kenn Jacobsen e3e3e06458 Markdown editor: Fix the redo button + remove the button hover flicker 2018-12-09 14:29:39 +01:00
Kenn Jacobsen 573db0d142 V8 fix remove custom event directives (#3622) 2018-12-09 14:25:42 +01:00
Kenn Jacobsen 14fd9c835d V8: Fix the media picker folder creation and "sub folders" toggle button (#3630) 2018-12-09 14:17:57 +01:00
Kenn Jacobsen 0c9ecacca0 Undo the leftovers from another issue 2018-12-09 13:51:33 +01:00
Kenn Jacobsen 9b4a580734 Fix the changing source name when moving a node 2018-12-09 13:51:33 +01:00
Kenn Jacobsen a072278490 Fix the changing source name when copying a node 2018-12-09 13:47:37 +01:00
Kenn Jacobsen 355f02971d Fix the mardown editor button bar in split view 2018-12-09 13:36:40 +01:00
Kenn Jacobsen a795ed66e8 Use a member group picker instead of checkboxes 2018-12-08 14:50:05 +01:00
Stephan 8b0ab01df6 Merge branch 'temp8' into temp8-3675-variant-tags 2018-12-07 17:34:24 +01:00
Stephan 7f8eeeab83 Merge branch temp8 into temp8-di2690 2018-12-07 16:12:08 +01:00
Stephan bd91706f89 Cleanup test 2018-12-07 16:00:01 +01:00
Stephan 0d83da9327 Fix some tests 2018-12-07 15:59:57 +01:00
Stephan 02617885b4 Disable media tests that use Examine (no point) 2018-12-07 15:57:19 +01:00
Stephan 6d898128d4 Fix nuspec for Examine 2018-12-07 15:32:02 +01:00
Mads Rasmussen 2f7772d40a fix control picker 2018-12-07 15:19:41 +01:00
Kenn Jacobsen 33613f3c31 Merge branch 'temp8' into v8-feature-angular-public-access 2018-12-07 15:10:53 +01:00
Mads Rasmussen 53d7023b40 fix file picker 2018-12-07 15:01:12 +01:00
Stephan 04b38a2c46 Merge branch 'temp8' into temp8-3675-variant-tags 2018-12-07 14:26:19 +01:00
Kenn Jacobsen fb094f46be Fix edit content localization errors (#3840)
* Fix wrongly formatted localizations

* Swap hardcoded time format for a localized one

* Split date and time in publish messages
2018-12-07 14:17:34 +01:00
Stephan 1eee6dfb2f Cleanup 2018-12-07 14:05:47 +01:00
Stephan 6dad124d5b Merge branch 'temp8' into temp8-manifest 2018-12-07 13:53:28 +01:00
Stephan d1ab980048 Cleanup 2018-12-07 13:44:41 +01:00
Mads Rasmussen ce3729678e fix dictionary items and data types 2018-12-07 13:25:07 +01:00
Stephan ed222510f0 Fixes 2018-12-07 13:24:25 +01:00
Mads Rasmussen 90b0a8b14b correct binding of languages 2018-12-07 13:20:28 +01:00
Mads Rasmussen a411d13d0e fix binding of documenttypes and templates 2018-12-07 13:10:50 +01:00
Stephan 3df1c242c4 Merge remote-tracking branch 'lars-erik/temp8-u4-11427-remove-propertyinjection' into temp8-di2690 2018-12-07 13:09:22 +01:00
Warren Buckley f390e2979d Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Core/EnumerableExtensions.cs
2018-12-07 12:06:23 +00:00
Stephan 41b7d33d9a Cleanup test 2018-12-07 13:01:26 +01:00
Stephan 1919fa8a03 Fix some tests 2018-12-07 12:44:54 +01:00
Warren Buckley bb5a561932 Wiring up server side validation in the UI 2018-12-07 11:43:36 +00:00
Kenn Jacobsen 7fc69e5eb0 Add instructions on how to apply a display name in notification emails 2018-12-07 12:37:59 +01:00
Stephan ccd0437b2e Disable media tests that use Examine (no point) 2018-12-07 12:06:25 +01:00
Warren Buckley c94cfc0156 Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-07 10:37:47 +00:00
Warren Buckley b35a8b406b Fix API Controller for Package create to support new entry & update existing entry 2018-12-07 10:37:33 +00:00
Mads Rasmussen 8252f4d95a clear create query string when using back button 2018-12-07 11:31:33 +01:00
Warren Buckley c7b49d928a Adds in validation to the POST / Create package to ensure name, author is set etc... 2018-12-07 10:22:33 +00:00
Mads Rasmussen 5d3432db51 get render model for content item 2018-12-07 11:15:08 +01:00
Warren Buckley ac3d82b2d8 Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-07 09:30:10 +00:00
Warren Buckley a9aba6731d Update to CreatePackage API endpoint - the ID & Guid was getting overwritten by mistake 2018-12-07 09:29:44 +00:00
Mads Rasmussen fbf29f9f47 bind stylesheets correctly 2018-12-07 10:13:55 +01:00
Mads Rasmussen 6566a43ef9 change end point for delete created package 2018-12-07 10:05:31 +01:00
Stephan 710ec704b3 Merge branch temp8 into temp8-di2690 2018-12-07 09:52:46 +01:00
Stephan c62d64a9b7 Merge temp8 into temp8-3675-variant-tags 2018-12-07 09:36:58 +01:00
Stephan fb4717d31e Merge branch 'temp8-3527-indexes-via-code' into temp8 2018-12-07 09:27:38 +01:00
Sebastiaan Janssen 0095429ff0 Fix package.json after merge 2018-12-07 09:24:15 +01:00
Stephan 04b2765d72 Document 2018-12-07 09:03:36 +01:00
Stephan 159ae136f3 Merge branch 'temp8' into temp8-3675-variant-tags 2018-12-07 08:49:25 +01:00
Shannon 62d74f07bf fixes boolean change mistake to make sure that the Internal/external index has the correct PublishedOnlyFlag, latest examine update, fixes issue with queuing deletions before updates 2018-12-07 15:06:07 +11:00
Shannon ecce3604af Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/StringExtensions.cs
#	src/umbraco.presentation.targets
2018-12-07 13:16:13 +11:00
Shannon 3d3d249e7e adds notes 2018-12-07 13:13:00 +11:00
Shannon 413fea03aa reverts changes for published messaging with scheduled dates, we'll have to deal with that another day 2018-12-07 13:11:19 +11:00
Shannon 91af2c7708 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-12-07 12:50:09 +11:00
Shannon 5c49069805 removes XmlCacheComponent since we will never use the xml cache in a website 2018-12-07 12:49:41 +11:00
Shannon 9b3de7b655 manually merges in publishing messaging when publishing something that has an expire date 2018-12-07 12:49:20 +11:00
Shannon 219a236069 removes unused lang keys 2018-12-07 12:06:16 +11:00
Shannon 8da992aabf manually merges changed lang files and a few other things 2018-12-07 12:03:33 +11:00
Sebastiaan Janssen ebcf011287 Revert the addition of + which was a leftover from debugging 2018-12-06 16:58:12 +01:00
Warren Buckley 7f380347dc Some WIP binding updates in the view - will mostly need to bind an array of integers back to items 2018-12-06 15:35:40 +00:00
Warren Buckley 2013fd1619 Try the MakeNew method on CreatedPackage() 2018-12-06 14:41:53 +00:00
Mads Rasmussen 57f462b204 wire up create package 2018-12-06 15:26:12 +01:00
Warren Buckley c67cb46510 Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-06 13:55:44 +00:00
Warren Buckley 6f5155b0f3 Adds in new attribute to override the specific PackageController JSON Serializer to use the NewtonSoft built-in VersionConvertor 2018-12-06 13:54:38 +00:00
Mads Rasmussen e566e240b1 prefill umbraco version number 2018-12-06 14:49:02 +01:00
Warren Buckley 6c25062e4b Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-06 13:09:59 +00:00
Warren Buckley 34dc81058a Move the Delete method over into our new controller 2018-12-06 13:09:34 +00:00
Mads Rasmussen 9409b46ef4 fix back buttons 2018-12-06 13:57:21 +01:00
Sebastiaan Janssen 47287d9d80 Codebase now runs on VS2019 2018-12-06 13:19:04 +01:00
Mads Rasmussen 7df0869649 wire up delete 2018-12-06 13:13:55 +01:00
Sebastiaan Janssen 67f9d9d665 Codebase now runs on VS2019 2018-12-06 13:09:21 +01:00
Mads Rasmussen 3c399ade16 last textarea should be actions 2018-12-06 12:50:08 +01:00
Warren Buckley dfe224486c Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-06 11:21:42 +00:00
Warren Buckley 465229fb39 Return PackageInstance as opposed to CreatedPackage in API responses 2018-12-06 11:21:28 +00:00
Warren Buckley c7e6cf44ed Anotate model so its camelCase friendly for API responses for Mads 2018-12-06 11:21:01 +00:00
Mads Rasmussen 452f97de62 wire up get created package by id 2018-12-06 11:53:26 +01:00
Warren Buckley 17a005c163 Fix up Umbraco.Sys object URL to API endpoint 2018-12-06 10:42:05 +00:00
Mads Rasmussen 68006f78ee wire up end point for get created packages 2018-12-06 11:33:03 +01:00
Warren Buckley de86dace70 Adds a Create/Publish method - will need to figure out validation 2018-12-06 10:18:31 +00:00
Warren Buckley cd8bb8ed99 Adds the package api controller to Umbraco.Sys JS object 2018-12-06 10:07:53 +00:00
Bjarke Berg 1aaa4a353e Bugfix 2018-12-06 11:02:35 +01:00
Warren Buckley 9df8c71bf4 Adds in Delete method 2018-12-06 09:54:21 +00:00
Warren Buckley 17d489bb54 Adds new API/Editor endpoint to deal with created packages - get methods 2018-12-06 09:50:05 +00:00
Warren Buckley 046b35e242 Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-06 09:32:42 +00:00
Warren Buckley 3546de3207 Update packages tree so that its a full screen app/section like users 2018-12-06 09:32:04 +00:00
Mads Rasmussen 849cc2d383 remove tree sync for packages and users as we don't have a tree 2018-12-06 10:20:48 +01:00
Stephan 65370cf4e6 Fix copying tags when (un)variant 2018-12-06 10:20:40 +01:00
Bjarke Berg aee6156a09 Refactored the ManifestContentAppDefinition to have a factory and a seperate data class. 2018-12-06 10:02:23 +01:00
Shannon f671f41f7c removes commented out Relation type editor and the unused/disabled xml health check 2018-12-06 17:25:24 +11:00
Shannon 3e95d94726 fixes build 2018-12-06 17:24:06 +11:00
Shannon 07f15ec7b3 Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/Models/UserExtensions.cs
#	src/Umbraco.Core/Persistence/Repositories/AuditRepository.cs
#	src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs
#	src/Umbraco.Core/Services/ContentService.cs
#	src/Umbraco.Core/StringExtensions.cs
#	src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs
#	src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	src/Umbraco.Web.UI.Client/src/common/services/contenteditinghelper.service.js
#	src/Umbraco.Web.UI.Client/src/views/common/dialogs/treepicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/linkpicker/linkpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/dropdownFlexible/dropdownFlexible.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/dropdownFlexible/dropdownFlexible.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/radiobuttons/radiobuttons.html
#	src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml
#	src/Umbraco.Web.UI/Umbraco/developer/RelationTypes/EditRelationType.aspx
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/es.xml
#	src/Umbraco.Web/Editors/ContentController.cs
#	src/Umbraco.Web/HealthCheck/Checks/DataIntegrity/XmlDataIntegrityHealthCheck.cs
#	src/Umbraco.Web/HealthCheck/NotificationMethods/EmailNotificationMethod.cs
#	src/Umbraco.Web/Routing/ContentFinderByRedirectUrl.cs
#	src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/create/language.ascx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/settings/editLanguage.aspx.cs
#	src/umbraco.cms/businesslogic/language/Language.cs
2018-12-06 17:13:23 +11:00
Shannon 3be300db09 Merge remote-tracking branch 'origin/revert-3745-temp8-tinymce' into temp8 2018-12-06 16:44:52 +11:00
Shannon 2216a40d01 Merge commit '2a0748fc1e85c468064f309c03b24a43ed42e177' into temp8 2018-12-06 16:41:45 +11:00
Shannon 311b523c8e dont' write to console unless compiled in debug 2018-12-06 13:12:07 +11:00
Shannon d63492bf41 missing nullable parameter in ITagQuery, removes old wrappign logic in PublishedContentQuery 2018-12-06 12:41:38 +11:00
Shannon 45a6789fde Added a failing test 2018-12-06 12:17:40 +11:00
Lars-Erik Aabech 72fd8534a6 Update comments on controller registration 2018-12-05 23:10:42 +01:00
Lars-Erik Aabech 91f2d47cf8 Merge branch 'temp8-u4-11427-remove-propertyinjection' of https://github.com/lars-erik/Umbraco-CMS into temp8-u4-11427-remove-propertyinjection 2018-12-05 23:02:59 +01:00
Lars-Erik Aabech 542b08650b Also register RenderMvcControllers 2018-12-05 23:01:16 +01:00
Stephan c3d0bee4d3 Fix boot issue 2018-12-05 17:34:34 +01:00
Warren Buckley 5870db0273 Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui 2018-12-05 15:15:58 +00:00
Warren Buckley 8425c3124d Modify FileSystemTree Controller - that if * is used for file extension then we will return all files :) 2018-12-05 15:15:45 +00:00
Mads Rasmussen 74d9945e09 Add title to files and control pickers 2018-12-05 15:42:44 +01:00
Mads Rasmussen 749a25aabb user overlayService for ysods 2018-12-05 15:41:55 +01:00
Warren Buckley 28c4b2ee7f Merge branch 'temp8-packages-ui' of https://github.com/umbraco/Umbraco-CMS into temp8-packages-ui
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/packages/edit.controller.js
2018-12-05 14:29:32 +00:00
Warren Buckley 00428ec2de Adds in new hidden aka initialized=false tree (so that it can be displayed only as a dialog/infinite editor) to display files & folders from root of the site for the package creator UI 2018-12-05 14:28:07 +00:00
Shannon 85efd4dc59 Moves SqlNullableEquals to SqlExpressionExtensions 2018-12-06 01:14:06 +11:00
Shannon a239d50e89 Merge branch 'temp8-3675-variant-tags' of https://github.com/umbraco/Umbraco-CMS into temp8-3675-variant-tags 2018-12-06 01:11:12 +11:00
Shannon dd2c43485d Moves tag editor to a component, fixes issue with typeahead and invariant properties, fixes migration to update the IX_cmsTags index correctly 2018-12-06 01:10:53 +11:00
Mads Rasmussen d77796bcac show selected files and control 2018-12-05 15:06:50 +01:00
Mads Rasmussen e599685684 wip file pickers ui 2018-12-05 14:20:34 +01:00
Mads Rasmussen bd505a8574 get doctypes, datatypes, languages etc from the server and bind selection to model + add content picker 2018-12-05 13:37:01 +01:00
Stephan c74fc7a8f9 Misc cleanup and renaming 2018-12-05 12:57:23 +01:00
Stephan 0dda7c81a0 Rename NEquals 2018-12-05 12:18:52 +01:00
Sebastiaan Janssen f26353a34e Fix broken build 2018-12-05 11:00:49 +01:00
Shannon b8b0404393 adds notes and ignores failing tests (to be fixed later) 2018-12-05 20:51:30 +11:00
Sebastiaan Janssen 901af2be8e Fix docs build 2018-12-05 10:44:06 +01:00
Sebastiaan Janssen f002b371b9 Update npm marked reference 2018-12-05 10:42:44 +01:00
Mads Rasmussen a4bdcf99b1 wip create package editor 2018-12-05 10:36:20 +01:00
Stephan c6a9701e53 Merge branch temp8 into temp8-di2690 2018-12-05 09:05:47 +01:00
Stephan e5d12117d5 Composition can set default renderMvc controller 2018-12-05 08:19:21 +01:00
Shannon 24300e76f9 oops committed a config change 2018-12-05 17:42:31 +11:00
Shannon d549cb8e3d Merge remote-tracking branch 'origin/temp8' into temp8-3527-indexes-via-code 2018-12-05 17:36:50 +11:00
Shannon cb9eec97e2 Fixes tests 2018-12-05 17:20:48 +11:00
Shannon 11d8d17156 Fixes build with ctor change to UmbracoHelper 2018-12-05 17:00:51 +11:00
Shannon 1eba69b070 Fixes build with ctor change to UmbracoHelper 2018-12-05 16:59:33 +11:00
Shannon b48a7fa4a9 Gets search tools working for explicitly defined searchers, have tested with a multi index searcher, refactors SupportsUnpublished vs SupportSoftDelete vs OnlyPublishedContent booleans and made some sense out of the reindexing items in ExamineComponent which didn't really work, cleans up IPublishedContentQuery implementation 2018-12-05 16:53:25 +11:00
Stephan 50f4e12ca1 Merge pull request #3819 from umbraco/temp8-fix-dashboard-manifest
Refactor package.manifest dashboards JSON structure
2018-12-04 12:12:44 +01:00
Stephan 73f31dd800 Refactor manifest dashboards, security 2018-12-04 11:37:07 +01:00
Mads Rasmussen bd455aaede fixing up styles to better fit new UI 2018-12-04 11:19:08 +01:00
Mads Rasmussen 04e8fc7fa3 fix missing form from install local package 2018-12-04 11:18:32 +01:00
Mads Rasmussen cb7c1f9bbd use table for installed packages 2018-12-04 11:18:12 +01:00
Stephan 5c140762c4 Handle tags when variations change 2018-12-04 08:23:18 +01:00
Shannon 1717f94fcf Gets searching on dashboard working with paging and viewing field values 2018-12-04 15:41:54 +11:00
Shannon 56d1a317c0 Gets searching working in the dashboard, updates to latest examine 2018-12-04 14:25:37 +11:00
Kenn Jacobsen 9ad69c11cb Fix publish dates issues (#3507) 2018-12-03 18:45:50 +01:00
Kenn Jacobsen ce980fc822 Merge branch 'temp8' into v8-feature-angular-public-access 2018-12-03 15:56:10 +01:00
Warren Buckley b361d1c950 Refactor package.manifest dashboards JSON structure 2018-12-03 14:26:16 +00:00
Warren Buckley e620d26769 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web.UI.Client/package.json
#	src/Umbraco.Web/UI/JavaScript/JsInitialize.js
2018-12-03 13:28:07 +00:00
Sebastiaan Janssen a8d7660150 So close, come on dependencies! 2018-12-03 13:30:25 +01:00
Sebastiaan Janssen 0410a788cb One more attempt to fix vulnerable dependencies 2018-12-03 13:23:37 +01:00
Shannon fce5b29b1c index rebuilding updates 2018-12-03 23:15:18 +11:00
Warren Buckley 8b5eb1f0a4 Merge pull request #2478 from Shazwazza/U4-2827
U4-2827 Allow dashboards via manifest
2018-12-03 12:13:12 +00:00
Sebastiaan Janssen 763fda2857 Hopefully resolve the rest of the vulnerabilities 2018-12-03 13:11:39 +01:00
Elitsa Marinovska 914d956ada Merge branch 'dev-v7' into temp7-269-xss-stylesheets 2018-12-03 12:50:40 +01:00
Sebastiaan Janssen 137439d6eb Fixes the flatmap-stream issue. package-lock went nuts, but couldn't figure it out even with Mads' help :/ 2018-12-03 12:43:39 +01:00
elitsa 41271c7fab Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2018-12-03 12:38:28 +01:00
Warren Buckley 53df1dfc82 Merge pull request #3815 from umbraco/temp8-upgrade-dev-dependencies
Temp8 upgrade dev dependencies
2018-12-03 11:19:51 +00:00
Shannon 69c939c444 Some cleanup and renames 2018-12-03 22:19:35 +11:00
elitsa 3ef4da0615 Reverting. 2018-12-03 12:15:34 +01:00
elitsa ae8e20546f Reverting - unrelated changes. 2018-12-03 12:15:01 +01:00
Shannon f8d203abff Updates latest examine + api updates + fixes tests, gets different validation working (valid, failed, filtered) 2018-12-03 22:10:56 +11:00
elitsa 978f409f23 Removing malicious code when creating or editing the name of a xslt file. 2018-12-03 12:07:41 +01:00
Warren Buckley 0d6ee927bc Merge remote-tracking branch 'origin/temp8' into temp8-upgrade-dev-dependencies 2018-12-03 11:01:32 +00:00
Warren Buckley 37eeeba76b Merge pull request #3798 from umbraco/temp8-upgrade-depdendencies
Temp8 upgrade depdendencies
2018-12-03 10:07:16 +00:00
Warren Buckley e4fb2dff96 Merge remote-tracking branch 'origin/temp8' into temp8-upgrade-depdendencies 2018-12-03 09:39:26 +00:00
Warren Buckley 8b77c5e278 Merge pull request #3792 from umbraco/temp8-upgrade-jquery
Temp8 upgrade jquery
2018-12-03 09:35:45 +00:00
Warren Buckley dd7b4669d5 Merge pull request #3786 from umbraco/temp8-3651
add overlay to tree when infinite editing is open
2018-12-03 09:21:41 +00:00
Warren Buckley a40a6fbe8f Merge pull request #3783 from umbraco/temp8-3110
Temp8 3110
2018-12-03 09:16:33 +00:00
Matthew Wise 673735c2fe Added eslintignore file 2018-12-03 09:50:24 +01:00
Mads Rasmussen 32ed237729 package-lock 2018-12-03 09:48:59 +01:00
elitsa 0abe685d7f Removing malicious code from the name of a Stylesheet. 2018-12-03 09:00:44 +01:00
elitsa ae36e02f4c Reverting to the origin. 2018-12-03 08:54:08 +01:00
elitsa 3a26fe8fe2 Removing malicious code from the name of a Stylesheet. 2018-12-03 08:45:11 +01:00
Shannon 774b968112 Cleans up the dashboard config that we release 2018-12-03 16:55:06 +11:00
Shannon a5b331f6d7 Gets site running with dashboards 2018-12-03 16:40:28 +11:00
Shannon 162b90194d Gets sln building, removes old legacy settings, removes ascx dashboard support 2018-12-03 16:14:49 +11:00
Shannon 953f37f2db Merge remote-tracking branch 'umbraco/temp8' into U4-2827
# Conflicts:
#	src/Umbraco.Core/Manifest/ManifestBuilder.cs
#	src/Umbraco.Core/Manifest/ManifestParser.cs
#	src/Umbraco.Core/Manifest/PackageManifest.cs
#	src/Umbraco.Web/Editors/DashboardController.cs
#	src/Umbraco.Web/Editors/SectionController.cs
2018-12-03 15:25:31 +11:00
James Coxhead df961d9199 Merge branch 'temp8' into 3436-relations-editor
# Conflicts:
#	src/Umbraco.Web/Trees/RelationTypeTreeController.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx.cs
2018-12-02 23:31:54 +00:00
James Coxhead c6d09cbcff Split relation type and associated relations into tabbed view 2018-12-02 22:53:30 +00:00
James Coxhead a4f270bd02 Added localisation 2018-12-02 22:33:15 +00:00
James Coxhead f87dac9972 Remove redundant webforms views 2018-12-02 21:56:03 +00:00
James Coxhead 4617c0c24f Tidy up - remove obsoleted classes 2018-12-02 18:17:20 +00:00
James Coxhead 2dfcb8ed4e Completed delete action 2018-12-02 18:10:03 +00:00
Kenn Jacobsen 8990a8fcb0 Remove the Umbraco core jQuery dependency for macro partials 2018-12-01 09:26:55 +01:00
Stephan 18c382d888 in progress tags 2018-11-30 16:30:59 +01:00
Stephan 3ad0904129 Some benchmarking 2018-11-30 16:30:58 +01:00
James Coxhead a6ab471505 Added delete endpoint. Updated tree controller to use Angular delete view 2018-11-30 14:09:48 +00:00
Anders Bjerner 5f165d23db Link picker overlay: Changed the order of execution to avoid an unnecessary delay 2018-11-30 10:38:36 +01:00
Warren Buckley b5e12aa29e Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-30 08:34:09 +00:00
Mads Rasmussen 704a1ee840 upgrade dev-dependencies 2018-11-30 09:12:58 +01:00
Shannon 6103832b8a Gets index rebuilding working 2018-11-30 12:22:23 +11:00
James Coxhead c3a3f4cf22 Create new relation type 2018-11-29 23:11:03 +00:00
James Coxhead 12d11b7c88 Render create view
Load object types from API
2018-11-29 22:07:17 +00:00
Mads Rasmussen 80afcb64e0 remove bootstrap javascript 2018-11-29 15:10:11 +01:00
Mads Rasmussen 3a839ca1ef don't ship with moments libraries including locales 2018-11-29 14:24:15 +01:00
Mads Rasmussen 45feb9577d get spectrum color picker from npm + get latest version 2018-11-29 13:30:37 +01:00
Mads Rasmussen 9f557d5697 fix color picker model.value 2018-11-29 13:03:43 +01:00
Stephan 2c2873492f Fix merge 2018-11-29 12:48:13 +01:00
Stephan 146bbcec4b Merge branch temp8 into temp8-di2690 2018-11-29 12:38:44 +01:00
Mads Rasmussen 5a33990a74 fix js error in diff + break words 2018-11-29 12:29:52 +01:00
Stephan eb0d2464aa Minor fixes 2018-11-29 12:27:16 +01:00
Mads Rasmussen 89cac781ae fix checkmark when copying password 2018-11-29 11:01:50 +01:00
Mads Rasmussen aa9950ff29 fix assets service 2018-11-29 11:01:21 +01:00
Mads Rasmussen 1daddf484c update npm for packages not running latest 2018-11-29 11:00:09 +01:00
Stephan c6891c6c70 RegisterUnique 2018-11-29 10:35:16 +01:00
Shannon 1767bff255 Quite far revamping the examine dashboard 2018-11-29 16:54:13 +11:00
Shannon afe234e21c better index diag 2018-11-29 14:54:35 +11:00
Shannon 340b8e6cef Latest examine, updates for dashboard, adds UmbracoExamineIndexDiagnostics 2018-11-29 13:55:51 +11:00
Stephan ec3fd890ec Merge pull request #3761 from kjac/v8-fix-move-copy-status-type-ysod
V8: Fix YSODs when moving and copying things in the Settings section
2018-11-28 21:45:15 +01:00
Warren Buckley cbc6a2ddfd Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-28 20:18:56 +00:00
Mads Rasmussen 44478201cf update package-lock 2018-11-28 20:47:02 +01:00
Mads Rasmussen e512ba0b8b remove css for jquery-ui 2018-11-28 20:40:40 +01:00
Stephan e9de6c1fc9 Naming is hard 2018-11-28 17:35:12 +01:00
Stephan e42f140a2c Cleanup 2018-11-28 16:57:01 +01:00
Stephan b1651b8c9e Delete legacy code 2018-11-28 16:22:20 +01:00
Stephan 8d49fb3e8b Cleanup and document controller constructors 2018-11-28 16:19:50 +01:00
Laura W 9ecc0f35f8 Saving content id against initial SavePublish action 2018-11-28 16:09:07 +01:00
Mads Rasmussen e4a4a17739 get jquery touch punch from npm 2018-11-28 15:34:51 +01:00
Mads Rasmussen df193987c4 add back jquery-ui and remove jquery-migrate 2018-11-28 15:18:14 +01:00
Mads Rasmussen d0d44bf542 remove unused treepicker overlay 2018-11-28 14:54:01 +01:00
Mads Rasmussen 6fc38b1d12 fix tooltip and overlay calculations 2018-11-28 14:53:39 +01:00
Mads Rasmussen 350bfb3461 remove keypress shorthand 2018-11-28 14:52:49 +01:00
Mads Rasmussen f3d30342b4 change from bind/unbind to on/off 2018-11-28 14:32:30 +01:00
Mads Rasmussen 9c9a05f32c changing from click and focus shorthands 2018-11-28 13:22:30 +01:00
Mads Rasmussen 85d61ee127 remove unused focus search field code 2018-11-28 13:17:08 +01:00
Mads Rasmussen 4e29a3709d upgrade jquery + temp add jquery migrate + temp remove other jquery libraries 2018-11-28 13:16:26 +01:00
Mads Rasmussen f956a035a1 remove jquery validation libraries 2018-11-28 13:12:00 +01:00
Stephan f9a19ada04 IContainer.die.die.die 2018-11-28 12:59:40 +01:00
Stephan 49a0b68b28 IContainer is IRegister+IFactory 2018-11-28 11:05:41 +01:00
Shannon dd571060b9 Starts integrating changes into the Examine mgmt dashboard 2018-11-28 21:02:45 +11:00
Mads Rasmussen 7032f1424d add overlay to tree when infinite editing is open 2018-11-28 10:13:48 +01:00
Shannon 011209bd03 Fixes bool check and member index fields 2018-11-28 19:53:25 +11:00
Shannon 8ba694c4fb more tests 2018-11-28 19:10:43 +11:00
Shannon 6ab5d6ec9f More cleanup, removes options since it was irrelevant 2018-11-28 18:39:03 +11:00
Kenn Jacobsen 9ac3b98acf Add some indents around the various sections of configuration 2018-11-28 07:39:48 +01:00
Shannon 2b05d54fb7 Fixes tests, adds test, renames class 2018-11-28 14:55:05 +11:00
Shannon a7f6985b38 Cleans up the BaseValueSetBuilder 2018-11-28 14:46:45 +11:00
Shannon e3548efed4 Uses IIndexPopulator to populate/rebuild indexes 2018-11-28 14:17:11 +11:00
Kenn Jacobsen d62de961a0 Add a minimum height to the query builder dropdowns 2018-11-27 23:51:14 +01:00
Steve Morgan af6b649845 #3565 - U 7.12.3 - Validation of Value type for Label Data Type
Added a required flag. Seems to now require a selection. Not sure if this will affect anything else that relies on this though?
2018-11-27 23:49:31 +01:00
Kenn Jacobsen 2ae2c3f6f6 Fix the flickering on the data type selector 2018-11-27 23:40:03 +01:00
Kenn Jacobsen 451fb50539 Fix checkbox list mandatory validation 2018-11-27 23:37:29 +01:00
Kenn Jacobsen 8393856b15 Fix dropdown validation (#3504) 2018-11-27 23:36:49 +01:00
Sebastiaan Janssen 3ce30f5fcb Merge pull request #3582 from avs099/dev-v7
Update ContentFinderByRedirectUrl.cs: only set headers for redirect IF redirect happens
2018-11-27 23:10:16 +01:00
Sebastiaan Janssen f316b45ff8 Merge branch 'dev-v7' into dev-v7 2018-11-27 23:08:44 +01:00
prjseal d6662febec - added the change to the control in the umbraco.web.ui folder as I don't believe it is generated automatically from the other file. 2018-11-27 23:04:04 +01:00
prjseal 75fdee6d6d - added links to relation items in relatin view 2018-11-27 23:04:04 +01:00
George Jones ea1a25eb84 Fix typo in SqlCeUpgradeTests.cs
Fix very minor typo in code comment
2018-11-27 22:59:16 +01:00
GIBE\jack.durcan 566459cb54 Fixed typo in base database factory test class 2018-11-27 22:58:18 +01:00
Kenn Jacobsen 8d1bf6a1b8 Make it possible to fetch more than 2000 entities 2018-11-27 22:56:28 +01:00
Gareth Wright 63f548ea35 removed languages used for creating language. Removed languages used when editing language apart from current language. 2018-11-27 22:55:04 +01:00
Gareth Wright 353b6a728d Added check for existing language when adding new language in the backoffice 2018-11-27 22:55:04 +01:00
Kenn Jacobsen 8e423d9c75 Sort the dictionary items alphabetically 2018-11-27 22:43:19 +01:00
Søren Kottal 75be42f8ff Change back to a-tag
Has to be an `<a>` with an empty `href` for the ng-click to fire.
2018-11-27 22:39:02 +01:00
Søren Kottal 7f858899a3 Changes add-button to a button
Makes it possible to tab to the button.
2018-11-27 22:39:02 +01:00
Kenn Jacobsen 269f12edbf Remove the default action from tree menus if it isn't allowed 2018-11-27 22:35:38 +01:00
sebastien-sougnez 57fa452c49 Allow the "hideHeader" property of the treepicker dialog to be configurable 2018-11-27 22:30:23 +01:00
Kenn Jacobsen fe26239f73 Fix the sort order of dictionary items in both the tree and list view 2018-11-27 22:20:54 +01:00
darrenferguson 4e887b843b Include the umbracoApplicationUrl Host in the Healthcheck email notifier (#3595) 2018-11-27 22:16:24 +01:00
Kenn Jacobsen 34416d9c0a Change role toggles to checkboxes and restyle the page pickers 2018-11-27 22:11:18 +01:00
Kenn Jacobsen 4092ab7277 Ensure that the sort order of crops is saved 2018-11-27 21:39:04 +01:00
Benjamin Carleski a37b2d42fb Disable Gravatar images when FIPS is enabled
Gravatar image URLs require an MD5 hash of the email be generated.  On a FIPS-enabled server, the MD5 algorithm is not available.  As Gravatar doesn't offer any other method for getting user images, enabling FIPS means that no user images will be available.
2018-11-27 21:30:46 +01:00
Enkel Media e9d53252b8 #3317 Appening Querystrings to url in ContentFinderByRedirectUrl (#3731) 2018-11-27 21:23:11 +01:00
Mike Masey 60c613e366 Add build requirements to Contributing details readme. 2018-11-27 21:10:58 +01:00
Kenn Jacobsen 60d5e3c449 Change the secondary action button to a link style button 2018-11-27 21:05:12 +01:00
Kenn Jacobsen 45cdb2af6e Align the list view save and close buttons to the right 2018-11-27 21:05:12 +01:00
Jannik Anker 80f9fed3f3 Pointed "unfinished tasks" link to Github
Link points to open tasks with v8 label. Not sure if "known issues" link also has a Github equivalent?
2018-11-27 21:00:03 +01:00
Laura Weatherhead 03d965eada U4-11088 - XML Data Integrity "Fix Button" not Visible (#3782) 2018-11-27 20:52:20 +01:00
Kenn Jacobsen a9d5d7a271 Merge branch 'temp8' into v8-feature-angular-public-access 2018-11-27 20:09:57 +01:00
Stephan f290065bb6 More container tests 2018-11-27 16:27:16 +01:00
Shannon 3fd0aef18e decouples data lookup from indexers and rebuilding logic 2018-11-28 01:23:02 +11:00
Stephan 80f3fc6864 Get rid of IContainer.GetRegistered 2018-11-27 15:20:26 +01:00
Stephan de8dbe0041 Cleanup 2018-11-27 15:17:26 +01:00
Stephan b365539368 Optimize 2018-11-27 15:15:44 +01:00
Stephan 5d167b49a4 More composition fixes 2018-11-27 15:09:08 +01:00
Mads Rasmussen 23853a43b8 Merge branch 'temp8' into temp8-3110
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbcontentnodeinfo.directive.js
2018-11-27 14:41:29 +01:00
Stephan c23c7749b4 Composition fixes 2018-11-27 14:04:08 +01:00
Mads Rasmussen 900c8355cc show prompt if node is dirty before opening the doc type editor in infinite editing 2018-11-27 14:04:05 +01:00
Mads Rasmussen 88e6797cac Refresh content when doc type is changed in infinite editing 2018-11-27 11:49:51 +01:00
Robert 2d30e57617 Merge pull request #3778 from umbraco/temp8-3777
When a node is opened through a content picker don't allow editing do…
2018-11-27 11:41:13 +01:00
Warren Buckley 7c5f5e873d Merge pull request #3621 from umbraco/temp8-controllers
Refactor/fix registering controllers
2018-11-27 10:18:28 +00:00
Stephan e47566ca4e Fix build 2018-11-27 10:49:41 +01:00
Stephan 5b111f9629 More composition simplification 2018-11-27 10:37:33 +01:00
Germán Díaz de Rada d1457cfd75 Updated with more accurate translations (#3742)
Updated Spanish translations
2018-11-27 10:22:01 +01:00
Mads Rasmussen c0f5158b03 When a node is opened through a content picker don't allow editing doc type and template 2018-11-27 09:58:57 +01:00
Robert 3f75274283 Merge pull request #3766 from umbraco/temp8-remove-bootstrap-slider
Temp8 remove bootstrap slider
2018-11-27 09:51:08 +01:00
Robert 4f7b9cd61a Update umbrangeslider.directive.js
Updated comment
2018-11-27 09:50:22 +01:00
Warren Buckley 9b39c6ad5b Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-27 08:47:04 +00:00
Stephan 13f6469590 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-27 09:45:07 +01:00
Stephan d2a474f6ff ContentService should remain public for now 2018-11-27 09:44:08 +01:00
Shannon ff3af8b7a7 Updates the content value set validator + tests 2018-11-27 17:43:56 +11:00
Sebastiaan Janssen 4024095555 Revert "Style the default browser radio button as a custom one to provide a nicer UI experience" #3226 2018-11-26 17:23:40 +01:00
Stephan b8608f1b2e Refactor runtimes, injection and composition 2018-11-26 16:54:32 +01:00
Warren Buckley 0983726b85 Forgot to update the nuspec for the Serilog.Settings.AppSettings nuspec minor version upgrade 2018-11-26 15:17:15 +00:00
Warren Buckley 58b1c9e9fb Update Serilog.Settings.AppSettings Nupkg reference from 2.1.2 to 2.2.2 in Umbraco.Core 2018-11-26 15:03:39 +00:00
Mads Rasmussen f8068801af add docs 2018-11-26 15:12:38 +01:00
Stephan 27c2b3ba5e Cleanup 2018-11-26 14:43:19 +01:00
Mads Rasmussen 99c5fdbd9d Merge branch 'temp8' into temp8-remove-bootstrap-slider 2018-11-26 14:30:17 +01:00
Mads Rasmussen d314361996 delete bootstrap slider javascript and css files 2018-11-26 14:28:51 +01:00
Robert 334fd778dd Merge pull request #3723 from umbraco/temp8-remove-bootstrap-datepicker
Temp8 remove bootstrap datepicker
2018-11-26 14:23:48 +01:00
Mads Rasmussen d6b24ac92d Merge branch 'temp8' into temp8-remove-bootstrap-slider
# Conflicts:
#	src/Umbraco.Web.UI.Client/package.json
2018-11-26 14:10:57 +01:00
Mads Rasmussen a7e53be079 Merge branch 'temp8' into temp8-remove-bootstrap-datepicker 2018-11-26 13:57:52 +01:00
Mads Rasmussen 16b57ac022 remove bootstrap logic from slider controller 2018-11-26 13:46:47 +01:00
Mads Rasmussen e169de917d remove unused config 2018-11-26 11:53:52 +01:00
Mads Rasmussen 6257416c4a remove a bunch of slider prevalues. 2018-11-26 11:38:15 +01:00
Robert 7a53d58b4a Merge pull request #3759 from marcemarc/#3758-V7-Fix-Audit-Repository-GetPagedResultsByQuery
Fix for #3758 - Map NodeId of Audited Item instead of Log entry PK
2018-11-26 11:36:28 +01:00
Mads Rasmussen f4728e5b83 add custom styling + add pips 2018-11-26 11:18:23 +01:00
Kenn Jacobsen fee968b94e Make MoveOperationStatusType of underlying type byte to fix move and copy YSODs 2018-11-26 08:19:49 +01:00
Bjarke Berg a50a46f9fa Alt of "close dialog" buttons was not functioning on the success message 2018-11-26 07:50:15 +01:00
Bjarke Berg e8818b36bd Media could not be moved to the root (The root was not available as target) 2018-11-26 07:49:32 +01:00
Shannon d3057ea2e1 Merge remote-tracking branch 'origin/temp8' into temp8-3527-indexes-via-code
# Conflicts:
#	src/Umbraco.Core/StringExtensions.cs
2018-11-26 17:34:22 +11:00
Shannon b6790261c4 Adds test 2018-11-26 17:20:15 +11:00
Shannon 9368c71ced fixes tests 2018-11-26 14:43:08 +11:00
Shannon 985572690f IValueSetBuilder implementations 2018-11-26 14:27:44 +11:00
Shannon 977d18e200 Adds IValueIndexer for the RTE 2018-11-26 13:41:32 +11:00
Shannon 9a9fcab0e9 New IValueIndexer and implements it for grid, new UmbracoValueSetBuilder to create the value sets, no more event handling for grid index data 2018-11-26 13:33:15 +11:00
Shannon 4f7de35e04 Adds HtmlValueType 2018-11-26 12:06:38 +11:00
Marc Goodson aac278a4e3 Fix for #3758 - Map NodeId of Audited Item instead of Log entry PK
The Entity NodeIds aren't being passed through from the database Audit table, instead the Log Entry Primary Key is used incorrectly instead, this commit fixes it so the NodeId is passed!
2018-11-26 00:07:27 +00:00
Shannon fba549e59c Creates IUmbracoIndexer to decouple lucene from the indexers 2018-11-26 11:06:11 +11:00
Shannon 75116e1585 Creates IUmbracoIndexer to decouple lucene from the indexers 2018-11-26 11:05:53 +11:00
Kenn Jacobsen 924419f403 Ensure that the dialog always closes on close() 2018-11-25 11:04:28 +01:00
Kenn Jacobsen 4192a11de0 Update ngdoc and en-us translations 2018-11-25 11:02:33 +01:00
Kenn Jacobsen bf50aba515 A bit of styling 2018-11-25 10:54:26 +01:00
Kenn Jacobsen aa581feebb Pick pages for login and error 2018-11-25 10:49:19 +01:00
Kenn Jacobsen bbea0e3e4c Introduce an option to disallow hiding the current dialog 2018-11-25 10:48:56 +01:00
Kenn Jacobsen ed56845bc1 Implement remove protection + add success messages 2018-11-25 09:17:04 +01:00
Kenn Jacobsen 5026bc03e1 A lot more implementation :) 2018-11-24 19:39:15 +01:00
Stephan 8b74453c13 Simplify IContainer.CreateInstance 2018-11-24 16:41:27 +01:00
Stephan 392c9ed83b More filesystem DI fixes 2018-11-24 15:38:00 +01:00
Stephan ce47eae85b Various fixes 2018-11-23 16:19:03 +01:00
Kenn Jacobsen 18258fe487 Initial setup of public access dialog 2018-11-23 16:16:06 +01:00
Stephan 6ffc340725 Merge branch temp8 into temp8-di2690 2018-11-23 14:58:08 +01:00
Bjarke Berg 31b4e944e7 Fixed issue where tree root was not shown when moving items. Pair programming with @mads 2018-11-23 13:57:26 +01:00
James Coxhead 5872b6de22 Prototyped create view 2018-11-22 14:19:40 +00:00
Warren Buckley 7eee1ac76c Merge remote-tracking branch 'origin/temp8-tinymce' into temp8-logviewer 2018-11-22 14:18:58 +00:00
Warren Buckley dd6e764588 Merge pull request #3746 from umbraco/revert-3745-temp8-tinymce
Revert "Temp8 tinymce"
2018-11-22 14:07:57 +00:00
Warren Buckley 54a2aa00a7 Revert "Temp8 tinymce" 2018-11-22 14:05:51 +00:00
Warren Buckley 2a0748fc1e Merge pull request #3745 from umbraco/temp8-tinymce
Temp8 tinymce
2018-11-22 14:05:44 +00:00
Warren Buckley 9f2043c68d Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-22 11:19:56 +00:00
Mads Rasmussen e54e1989ba format numbers to not have decimals 2018-11-22 10:52:48 +01:00
Mads Rasmussen f24a347b01 load in new slider + basic setup 2018-11-22 10:06:00 +01:00
Shannon 77f855a649 Removes a ton of duplicate code 2018-11-22 17:46:49 +11:00
Shannon 08dc94a535 Merge branch 'temp8' into temp-tinymce
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/grid/grid.rte.directive.js
#	src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js
#	src/Umbraco.Web.UI.Client/src/less/property-editors.less
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.html
2018-11-22 15:38:58 +11:00
Shannon 57074d3545 some code cleanup 2018-11-22 15:26:10 +11:00
Shannon ff2b2893ae adds notes 2018-11-22 15:23:50 +11:00
Shannon 845a652c1c adds some notes 2018-11-22 14:31:27 +11:00
Shannon c5b36773c9 Removes the old _searchEmail and configures the 'email' field to be of type EmailAddress 2018-11-22 14:26:26 +11:00
Shannon 2965523029 Configures Umbraco indexes via code, updates to latest examine, simplifies some logic 2018-11-22 14:05:36 +11:00
Warren Buckley 880176e91e Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-21 13:16:56 +00:00
Shannon 80af1641ae rebuilds empty indexes on startup on managed background thread 2018-11-21 23:14:12 +11:00
Shannon a8db9d19cb adds a __VariesByCulture field 2018-11-21 21:48:39 +11:00
Shannon 1721f37c43 Gets variant data being indexed and fixes how the __Raw fields are processed 2018-11-21 20:36:15 +11:00
Shannon 62e99aaed5 removes usages of singleton in ExamineComponent 2018-11-21 17:04:20 +11:00
Shannon 3947a471be Fixes tree sync with sorting media 2018-11-21 16:59:23 +11:00
Shannon fda327a604 removes $routeParams from a dependency on content.resource, fixes event ordering during nav init, fixes tree re-syncing after sorting, removes some obsolete/old code 2018-11-21 16:40:13 +11:00
James Coxhead 738b42964d Added save action 2018-11-20 23:15:16 +00:00
Stephan 64dd7c113c Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-20 15:19:07 +01:00
Stephan e056f1b282 Fix tests 2018-11-20 15:17:01 +01:00
Mads Rasmussen d754aa94c0 Merge branch 'temp8' into temp8-remove-bootstrap-datepicker 2018-11-20 13:18:46 +01:00
Mads Rasmussen 219b38ff77 fix authorize upgrade screen 2018-11-20 12:33:26 +01:00
Mads Rasmussen b685c04c51 Merge branch 'temp8' into temp8-remove-bootstrap-datepicker 2018-11-20 11:52:02 +01:00
Shannon 63470c80dd fixes build 2018-11-20 20:28:17 +11:00
Shannon Deminick e8e6374c95 Merge pull request #3693 from umbraco/temp8-3096-angular-bulk-publish
Angular bulk publishing integration
2018-11-20 19:38:12 +11:00
Shannon 9e7384a330 Merge branch 'temp8' into temp8-3096-angular-bulk-publish
# Conflicts:
#	src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs
2018-11-20 19:37:39 +11:00
Shannon d2a61e5b9c Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-20 19:31:08 +11:00
Shannon 82e7be4ae9 Fixes creating content type collections 2018-11-20 18:43:41 +11:00
Stephan 8aaa75778e Cleanup 2018-11-20 08:35:28 +01:00
Stephan 5f8e46e3cd Merge branch 'temp8' into temp8-3713 2018-11-20 08:15:26 +01:00
Shannon fad566afba Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html
2018-11-20 18:14:36 +11:00
Shannon 3dfa3eaac7 fixes media picker svg handling to only use a single IMG tag, else this resulted in a number of 404's with invalid paths like [Object,object] 2018-11-20 18:13:19 +11:00
Shannon e6718c6989 more manual merging 2018-11-20 17:44:24 +11:00
Shannon bc66d4cbc6 manually merges list view changes with new blueprint functionality, manually merges other files, fixes issue with Action drop down in v8 2018-11-20 17:00:37 +11:00
Shannon d5a8e7751b Removes the word "Kim" from the list view 2018-11-20 15:25:02 +11:00
Shannon 96d7cca68d Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Core/Services/MediaService.cs
#	src/Umbraco.Web.UI.Client/src/common/directives/validation/valtab.directive.js
2018-11-20 14:12:26 +11:00
Shannon b4c2c8bd74 manually merging 2018-11-20 14:11:35 +11:00
Shannon 9ae4d1cdf5 fixes how the grid rte resizes when a tab changes to use the proper event handler 2018-11-20 14:10:20 +11:00
Shannon 80070e7332 Fixes how the new move method on MediaService deals with event messages 2018-11-20 12:20:16 +11:00
Shannon f7f81945a0 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-20 11:51:59 +11:00
Shannon Deminick c981f5e1b0 Merge pull request #3711 from aaronpowell/temp8-3710
Fixes 3710: Removing the usage of HostingEnvironment.MapPath
2018-11-20 11:31:26 +11:00
Mads Rasmussen bd23cbed20 null checks clean up debug data 2018-11-19 15:50:11 +01:00
Warren Buckley 1452a702e0 More tests for LogViewer around fetching logs & getting the results we expect back 2018-11-19 14:23:07 +00:00
Warren Buckley 28fa60ea46 Fix when querying logs with invalid log level passed in as a string filter - now checks its valid/part of the enum 2018-11-19 14:22:29 +00:00
Stephan e41790b886 Add IContainer tests 2018-11-19 15:16:55 +01:00
Stephan b69cbf0c53 Remove RegisterOrdered requirement from IContainer 2018-11-19 15:10:35 +01:00
Mads Rasmussen 0f07e6830d delete bootstrap datepicker files 2018-11-19 14:56:27 +01:00
Stephan 199e09c789 Remove named services support requirement from IContainer 2018-11-19 14:52:55 +01:00
Stephan 87a64b7406 Refactor filesystems (again) 2018-11-19 14:40:59 +01:00
Mads Rasmussen 301cc00e10 use flatpickr in query builder 2018-11-19 14:29:35 +01:00
Mads Rasmussen d6bd5e7e85 change query builder dropdowns to umb dropdowns 2018-11-19 14:14:37 +01:00
Mads Rasmussen 477a9bae0e use umb dropdown instead of boostrap dropdown in permissions context menu 2018-11-19 13:15:28 +01:00
Mads Rasmussen 138895d5e7 use umb dropdown component for actions menu 2018-11-19 12:48:31 +01:00
Mads Rasmussen 5e4770fd8c use umbraco components instead of bootstrap for button groups 2018-11-19 12:47:30 +01:00
Mads Rasmussen 24913128d1 add option to show a caret in a umb-button 2018-11-19 12:42:27 +01:00
Aaron Powell 8a809fe97a Pushing crash handling on app domain into CoreRuntime 2018-11-19 22:02:51 +11:00
Aaron Powell bcf542506d setting up more of the core in CoreRuntime, this time the logger and Umbraco Core 2018-11-19 22:00:50 +11:00
Aaron Powell c9b2cbc75f Removing files that weren't meant to be added 2018-11-19 21:26:32 +11:00
Aaron Powell 71026d6d15 Fixes 3713
Moved the UmbracoApplicationBase from Core to Web
Moved the WebProfiler from Core to Web
Removed UmbracoApplicationBase from the CoreRuntime, it's still in the WebRuntime (and registered there in DI)
2018-11-19 21:23:08 +11:00
Shannon 543a34a6f3 Fixes how the new move method on MediaService deals with event messages 2018-11-19 17:58:42 +11:00
Shannon 99d9c49c9f Gets sln building and manually merges the entity/media service changes 2018-11-19 17:54:36 +11:00
Shannon c3736ce7ab Merge remote-tracking branch 'origin/dev-v7' into temp8
# Conflicts:
#	.github/README.md
#	build.bat
#	src/Umbraco.Core/Migrations/Expressions/Alter/Table/AlterTableBuilder.cs
#	src/Umbraco.Core/Migrations/Expressions/Create/Column/CreateColumnBuilder.cs
#	src/Umbraco.Core/Migrations/Expressions/Create/Index/CreateIndexBuilder.cs
#	src/Umbraco.Core/Migrations/Expressions/Create/Table/CreateTableBuilder.cs
#	src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DefinitionFactory.cs
#	src/Umbraco.Core/Persistence/DatabaseModelDefinitions/IndexDefinition.cs
#	src/Umbraco.Core/Persistence/Factories/MediaFactory.cs
#	src/Umbraco.Core/Persistence/Migrations/Syntax/Alter/Column/AlterColumnBuilder.cs
#	src/Umbraco.Core/Persistence/Repositories/EntityRepository.cs
#	src/Umbraco.Core/Persistence/Repositories/UserRepository.cs
#	src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs
#	src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs
#	src/Umbraco.Core/Services/EntityService.cs
#	src/Umbraco.Core/Services/IMediaService.cs
#	src/Umbraco.Core/Services/MediaService.cs
#	src/Umbraco.Core/Services/NotificationService.cs
#	src/Umbraco.Web.UI.Client/bower.json
#	src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagegravity.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtreeitem.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/validation/valtab.directive.js
#	src/Umbraco.Web.UI.Client/src/common/resources/media.resource.js
#	src/Umbraco.Web.UI.Client/src/common/resources/mediatype.resource.js
#	src/Umbraco.Web.UI.Client/src/controllers/navigation.controller.js
#	src/Umbraco.Web.UI.Client/src/less/main.less
#	src/Umbraco.Web.UI.Client/src/less/panel.less
#	src/Umbraco.Web.UI.Client/src/less/property-editors.less
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.html
#	src/Umbraco.Web.UI.Client/src/views/components/imaging/umb-image-gravity.html
#	src/Umbraco.Web.UI.Client/src/views/content/copy.html
#	src/Umbraco.Web.UI.Client/src/views/content/emptyrecyclebin.html
#	src/Umbraco.Web.UI.Client/src/views/content/move.html
#	src/Umbraco.Web.UI.Client/src/views/dashboard/settings/settingsdashboardintro.html
#	src/Umbraco.Web.UI.Client/src/views/datatypes/move.html
#	src/Umbraco.Web.UI.Client/src/views/documenttypes/copy.html
#	src/Umbraco.Web.UI.Client/src/views/documenttypes/create.html
#	src/Umbraco.Web.UI.Client/src/views/documenttypes/move.html
#	src/Umbraco.Web.UI.Client/src/views/documenttypes/views/templates/templates.controller.js
#	src/Umbraco.Web.UI.Client/src/views/documenttypes/views/templates/templates.html
#	src/Umbraco.Web.UI.Client/src/views/media/move.html
#	src/Umbraco.Web.UI.Client/src/views/mediatypes/copy.html
#	src/Umbraco.Web.UI.Client/src/views/mediatypes/create.html
#	src/Umbraco.Web.UI.Client/src/views/mediatypes/move.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/fileupload/fileupload.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.prevalues.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/mediapicker/mediapicker.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/radiobuttons/radiobuttons.html
#	src/Umbraco.Web.UI.Client/src/views/users/views/user/details.html
#	src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/pl.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
#	src/Umbraco.Web.UI/Umbraco/config/lang/zh.xml
#	src/Umbraco.Web.UI/Umbraco/developer/Macros/editMacro.aspx
#	src/Umbraco.Web.UI/Umbraco/dialogs/ChangeDocType.aspx
#	src/Umbraco.Web.UI/umbraco/config/lang/en.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
#	src/Umbraco.Web.UI/umbraco/config/lang/es.xml
#	src/Umbraco.Web.UI/umbraco/dialogs/editMacro.aspx
#	src/Umbraco.Web/Controllers/UmbLoginController.cs
#	src/Umbraco.Web/Editors/ContentControllerBase.cs
#	src/Umbraco.Web/Editors/ContentTypeController.cs
#	src/Umbraco.Web/Editors/MediaController.cs
#	src/Umbraco.Web/Editors/PasswordChanger.cs
#	src/Umbraco.Web/HttpRequestExtensions.cs
#	src/Umbraco.Web/Models/ContentEditing/Tab.cs
#	src/Umbraco.Web/PropertyEditors/ImageCropperPropertyEditor.cs
#	src/Umbraco.Web/Templates/TemplateRenderer.cs
#	src/Umbraco.Web/Trees/ApplicationTreeController.cs
#	src/Umbraco.Web/Trees/ContentTreeController.cs
#	src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
#	src/Umbraco.Web/Trees/MediaTreeController.cs
#	src/Umbraco.Web/_Legacy/Controls/TabView.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/EditRelationType.aspx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/Xslt/editXslt.aspx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/protectPage.aspx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/settings/editLanguage.aspx.cs
#	src/umbraco.cms/Actions/Action.cs
#	src/umbraco.providers/members/UmbracoMembershipProvider.cs
2018-11-19 15:32:26 +11:00
Aaron Powell e1be4effca Fixes 3710: Removing the usage of HostingEnvironment.MapPath 2018-11-19 14:31:20 +11:00
Stephan 3960791bf2 Simplify CollectionBuilderBase, no more named services 2018-11-18 11:05:39 +01:00
Stephan 5b39e5e5c7 Fix typo in ReflectionUtilities 2018-11-18 11:05:14 +01:00
Stefano Chiodino e2455b14d9 Don't serialise null template id to 0. Use empty string instead as null doesn't work in this case. 2018-11-17 10:59:26 +00:00
Warren Buckley f6b0b35ff7 Couple more tests for logviewer 2018-11-16 15:16:18 +00:00
Warren Buckley c62f25c9a8 Adds two more new tests - perisistance with the saved search file & checking log counts are what we expect 2018-11-16 14:26:56 +00:00
Warren Buckley 1d093b4ecb Im clearly not with it today - heres that missing unit test 2018-11-16 13:46:24 +00:00
Warren Buckley b8409cdd2e Forgot to commit the test class file in previous commit
But now we have our first test running, checking that it failed & it now passes as expected
2018-11-16 13:44:29 +00:00
Warren Buckley d9dc32edcb Adds in example log file & JSON saved search file
Unit test class preps/copies files in setup/teardown as needed
2018-11-16 13:32:43 +00:00
Warren Buckley b1244dfa1b Update JsonLogViewer & undelrying base class to support setting path to log files & path to search file - so can be used in testing 2018-11-16 13:20:21 +00:00
Mads Rasmussen e84cbc7e19 wip swap out bootstrap datepicker for flatpickr 2018-11-16 14:07:41 +01:00
Warren Buckley b22ae2cf9f Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-16 12:55:04 +00:00
Warren Buckley 31969cd767 Merge pull request #3625 from umbraco/temp8-login-screen
Temp8 login screen
2018-11-16 12:34:05 +00:00
Stephan 35a5146cad Fix ContentService branch publishing 2018-11-16 13:30:42 +01:00
Shannon 3e5e9aa9d7 temp refactor for fixing issue with return AlreadyPublishedStatus 2018-11-16 16:39:27 +11:00
James Coxhead d019ba81f3 Get relation names 2018-11-15 22:34:43 +00:00
James Coxhead 10f6f8df90 Show relations in edit view 2018-11-15 22:22:15 +00:00
Stephan 889e48ea4a Detect incomplete migrations 2018-11-15 19:36:23 +01:00
Dave Woestenborghs 818e9f8b4c 3417 - don't use legacy action for create method 2018-11-15 15:28:35 +01:00
Stephan 149dfda975 Merge branch 'temp8-224-db-updates-sched-publishing-with-variants' into temp8-3096-angular-bulk-publish 2018-11-15 14:58:51 +01:00
Stephan 6a8fc09acd Fix ContentService branch publishing events 2018-11-15 14:58:10 +01:00
Stephan 243fa78edf Fix scheduled publishing 2018-11-15 14:57:56 +01:00
Bjarke Berg 0fedeab45d Merge pull request #3516 from umbraco/temp8-expr-visitor
Fix expression visitor for WHERE IN
2018-11-15 14:54:38 +01:00
Stephan f316931a50 Merge branch 'temp8-224-db-updates-sched-publishing-with-variants' into temp8-3096-angular-bulk-publish 2018-11-15 13:34:02 +01:00
Stephan eb37e03ebc Deal with fixme/review 2018-11-15 13:25:21 +01:00
Mads Rasmussen 40c0b4ef2b delete angular-bootstrap file. It is never loaded anyway 2018-11-15 13:18:15 +01:00
Sebastiaan Janssen 06db9d2223 Reverts PR #3449 and #3493 2018-11-15 13:00:54 +01:00
Mads Rasmussen 29a2e4664b Remove global close dialog events and add them to each component so we can clean up correctly 2018-11-15 10:58:47 +01:00
Stephan c2a72ad98f Fix tags migration 2018-11-15 10:11:22 +01:00
Stefano Chiodino 470585b50d Fix some more tests that were counting on defaulting to 0 2018-11-15 08:01:54 +00:00
Stephan 42857ebc2a Simplify version management, SolutionInfo is only the source now 2018-11-15 08:47:47 +01:00
Stephan bd9a67f5a9 Fix dropdown migration 2018-11-15 08:43:54 +01:00
Stefano Chiodino cc8cb96140 The change to nullable expands to even more neighbors... 2018-11-15 07:23:09 +00:00
Stefano Chiodino 8275050dee Comes to terms that we are now using nullables...spread the word to all other types that use a template ID one way or another. 2018-11-15 06:48:25 +00:00
Bjarke Berg 94790e5eab Merge pull request #3528 from umbraco/temp7-3015-change-password-should-not-reset
If a password is provided, then use this instead of an autogenerated …
2018-11-15 07:42:35 +01:00
Shannon e5e2194316 Updates some messaging 2018-11-15 17:20:00 +11:00
Shannon 7f6da8bca7 Merge branch 'temp8-224-db-updates-sched-publishing-with-variants' into temp8-3096-angular-bulk-publish 2018-11-15 16:27:31 +11:00
Shannon b515aea8dd Fixes issue with *, fixes some of the logic in tests, adds another test, adds fixme notes 2018-11-15 16:25:08 +11:00
Shannon b0e97ad772 Adds failing test that should work 2018-11-15 15:43:44 +11:00
Shannon 496ecf5c9a Cleans up how the content path permissions are checked, integrates the bulk publishing into the controller, adds security check to ensure the user can publish the whole branch, updates the UI messaging so they are grouped by publish statuses and deals with multiple publish status (i.e. in bulk), fixes some content tree issues 2018-11-15 15:24:09 +11:00
Shannon 5135cc93ac Merge branch 'temp8-226-sched-pub-angular' into temp8-3096-angular-bulk-publish 2018-11-15 10:04:18 +11:00
Mads Rasmussen a067242f5e fix list view card layout 2018-11-14 15:31:17 +01:00
Mads Rasmussen c7e1cdec17 delete dialogService 2018-11-14 14:49:11 +01:00
Mads Rasmussen 86e280f7d3 delete last dialogService views 2018-11-14 14:30:21 +01:00
Shannon cbd14c0a7d Merge remote-tracking branch 'origin/temp8-224-db-updates-sched-publishing-with-variants' into temp8-226-sched-pub-angular 2018-11-15 00:14:46 +11:00
Mads Rasmussen 136309dd29 remove dialogService from new login screen 2018-11-14 14:11:43 +01:00
Mads Rasmussen 10caf7b75b remove old login screen code 2018-11-14 14:11:11 +01:00
Shannon c8f1863e0d Getting publish with descendants working 2018-11-15 00:09:57 +11:00
Stephan e08189cc25 ContentSchedule Guid identifier 2018-11-14 13:59:53 +01:00
Claus 609609e1ee Merge pull request #3619 from umbraco/abjerner-patch-2
Spotted some minor typos
2018-11-14 13:55:19 +01:00
Mads Rasmussen 4f2ed545da remove migration code for legacy views 2018-11-14 13:52:43 +01:00
Mads Rasmussen 9f8f1a1df2 This file doesn't seem to be in use 2018-11-14 13:49:04 +01:00
Mads Rasmussen 66fd184480 remove references to dialogService 2018-11-14 12:50:50 +01:00
Shannon 204c4e21fc fix merge 2018-11-14 22:31:51 +11:00
Shannon 8020092099 Merge remote-tracking branch 'origin/temp8-224-db-updates-sched-publishing-with-variants' into temp8-226-sched-pub-angular 2018-11-14 22:23:40 +11:00
Stephan 3104b02db4 Deal with fixme/review 2018-11-14 11:59:16 +01:00
Mads Rasmussen 49a624ade7 fix discard changes for permissions context dialog 2018-11-14 11:56:04 +01:00
Mads Rasmussen bea074c964 fix up "Do something else"-buttons 2018-11-14 11:17:44 +01:00
Warren Buckley 23c4f88ce7 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-14 10:09:49 +00:00
Stephan 7a0040ce82 Bugfix visitor 2018-11-14 10:52:24 +01:00
Shannon 413791fb19 Fixes problem with UserRepository.GetProfile since it was looking up the wrong fields :( this meant that the security audit events were not being raised since it wasn't finding users by their login 2018-11-14 20:32:20 +11:00
Shannon b029215933 Updates logic for PasswordChanger so when the ChangePasswordWithMembershipProvider it correctly updates the password and raises the right event 2018-11-14 20:09:29 +11:00
Mads Rasmussen b38547396b fix up more context menu close buttons 2018-11-14 09:46:11 +01:00
Stephan 7c6b92b539 Merge branch 'temp8' into temp8-expr-visitor 2018-11-14 09:20:06 +01:00
Stephan 9ed7758d38 Deal with fixme/review 2018-11-14 09:16:22 +01:00
Shannon 0b403fe5e5 Merge remote-tracking branch 'origin/temp8' into temp8-226-sched-pub-angular 2018-11-14 19:07:54 +11:00
Shannon Deminick 5c255ba846 Merge pull request #3525 from umbraco/temp8-265-cant-create-partial-view-macro-files
Change sections on views for partial view macros
2018-11-14 19:07:26 +11:00
Shannon bcf5006e8c Merge remote-tracking branch 'origin/temp8' into temp8-226-sched-pub-angular 2018-11-14 18:58:13 +11:00
Shannon Deminick d4836d0cb8 Merge pull request #3523 from umbraco/temp8-264-cant-reload-tree-nodes-in-templating-area
Bugfix: Can't reload tree Nodes in the Templating area of the Settings section
2018-11-14 18:56:16 +11:00
Shannon d80ce16e66 Merge remote-tracking branch 'origin/temp8-224-db-updates-sched-publishing-with-variants' into temp8-226-sched-pub-angular 2018-11-14 17:40:04 +11:00
Mads Rasmussen 17497e7cc7 fixing up a bunch of close buttons in the context menu dialogs 2018-11-13 17:38:22 +01:00
Stefano Chiodino 6dd260a825 Update DocumentRepositoryTest.cs 2018-11-13 16:20:11 +00:00
Stefano Chiodino 8183f32399 Update DocumentRepository.cs 2018-11-13 16:18:40 +00:00
Stefano Chiodino 7c971b8366 Update DocumentRepository.cs 2018-11-13 16:17:45 +00:00
Stephan 0cd8f3787c Clear fixmes 2018-11-13 16:42:31 +01:00
Warren Buckley 8f6af7b41e Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-13 15:08:17 +00:00
Anders Bjerner cb636544c0 Spotted some minor typos 2018-11-13 15:06:58 +01:00
Mads Rasmussen d7f59adc64 dont get currentNode from dialogOptions 2018-11-13 14:26:43 +01:00
Mads Rasmussen 259e17b45d open context menu dialog based on appState instead of dialogService 2018-11-13 14:25:15 +01:00
Robert c1bbc22087 Merge pull request #3511 from umbraco/temp7-262-xss-updating-removing-publicAccess
Adding html encoding when updating or removing Public Access of a con…
2018-11-13 12:54:11 +01:00
Stephan 0376e48f51 Clear fixme 2018-11-13 11:59:27 +01:00
Stephan 6cb20c1d79 Deal with events and contexts in scheduled publishing 2018-11-13 11:51:25 +01:00
Stephan 76b1cd6573 Cleanup 2018-11-13 11:51:25 +01:00
Mads Rasmussen 530a3e2439 fix up invite user functionality 2018-11-13 10:41:09 +01:00
Stephan aa621f687e Refactor/fix registering controllers 2018-11-13 10:07:30 +01:00
Mads Rasmussen 340ad8b853 add white background to user invite confirmation screen 2018-11-13 09:40:04 +01:00
Shannon 31a9bf7091 Merge branch 'temp8-224-db-updates-sched-publishing-with-variants' into temp8-226-sched-pub-angular 2018-11-13 18:22:13 +11:00
Shannon ae91da1adb Updates the GetContentForExpiration, GetContentForRelease to ignore published/trashed flags so that callers can deal with those status, adds method to the repo to clear any schedule older than a given date. 2018-11-13 17:51:59 +11:00
Shannon ac5c76385c Fixes some logic with validation 2018-11-13 16:57:38 +11:00
Shannon c6ef3750df Merge branch 'temp8-224-db-updates-sched-publishing-with-variants' into temp8-226-sched-pub-angular 2018-11-13 16:17:23 +11:00
Shannon 6e63cc8c19 Fixes ScheduledPublishing since nothing was actually happening because the IEnumerable wasn't being resolved since the method does a yield return. Adds logging. 2018-11-13 16:16:52 +11:00
Shannon 5827a8a3e1 I think i've finally got saving a schedule working with the correct validation 2018-11-13 14:31:37 +11:00
James Jackson-South a8fc62cf42 Optimize Guid.Combine and HexString generation. 2018-11-12 16:22:33 +00:00
Shannon 66394926c0 Gets some validation messages working for sched pub 2018-11-13 00:46:13 +11:00
Mads Rasmussen 253797573e dont bind the form to the vm 2018-11-12 11:40:03 +01:00
Shannon c653d7adb9 Ensures that any persisted scheduling dates that are changed in the dialog are reset if the dialog is closed and not saved 2018-11-12 18:05:55 +11:00
Shannon 5d7e0ceff1 Updates the scheduled publish dialog to show all scheduled dates regardless of if the variant is selected. When the variant is selected then the date pickers are available, else if there is a persisted date, it's just text that is shown. 2018-11-12 17:52:21 +11:00
Shannon 4d13956372 better logic for validating and persisting schedules 2018-11-12 17:29:38 +11:00
Shannon 45822dba1e Merge remote-tracking branch 'origin/temp8-224-db-updates-sched-publishing-with-variants' into temp8-226-sched-pub-angular 2018-11-12 17:18:23 +11:00
Mads Rasmussen db2f1e9cb1 use overlayService for ysods 2018-11-09 13:49:19 +01:00
Mads Rasmussen ad805acd38 fix reset password flow 2018-11-09 11:18:01 +01:00
Mads Rasmussen 1e167113b7 fix show reset password button 2018-11-09 10:39:33 +01:00
Mads Rasmussen 4c3ac097ca wip move login logic from dialog to its own component 2018-11-09 09:59:36 +01:00
Stephan 5381eec6a4 fix+cleanup publishing with variants 2018-11-09 09:35:11 +01:00
Shannon 76f6721c80 Got some of the angular bits wired up 2018-11-09 16:12:08 +11:00
avs099 b2ffe4b685 Update ContentFinderByRedirectUrl.cs 2018-11-08 19:48:16 -05:00
Laura Weatherhead 1850d046e4 RelatedLinks2 validation in Nested content (#3578) 2018-11-08 16:53:25 +00:00
Stefano Chiodino 4a4a897ab1 Find that DB schema isn't happy with TemplateId being zero, using nullable instead 2018-11-08 16:46:12 +00:00
LindaSluijter 6a1568d562 Typo/spelling/grammar fixes for Dutch translation (#3576) 2018-11-08 16:36:40 +00:00
James Jackson-South bee1cd571a Merge branch 'temp8' of https://github.com/JimBobSquarePants/Umbraco-CMS into temp8 2018-11-08 16:31:44 +00:00
James Jackson-South 0803e0fa7f Recreate benchmark project and update deps Fix #3561 2018-11-08 16:28:17 +00:00
Owain Williams 3c74b7f112 Turning auto complete off on Password field 2018-11-08 16:05:49 +00:00
Owain Williams f13cc6a210 Turning autocomplete off on password field 2018-11-08 16:04:02 +00:00
James Jackson-South 78b7bb6a22 Recreate benchmark project and update deps Fix #3561 2018-11-08 15:33:14 +00:00
Emma Garland b065089bcb Renamed variable in order to fix issue when using content picker 2018-11-08 14:30:12 +00:00
Stefano Chiodino ccd6711a8a cleanup 2018-11-08 14:30:01 +00:00
Karl Tynan 8897ae18da Remove duplicate "?" on emptying recycle bins (#3556) 2018-11-08 14:13:53 +00:00
Stefano Chiodino 2e3cf979d3 #3544: Fix IFileService resolution (now it runs and seem functional) 2018-11-08 13:57:59 +00:00
Kenn Jacobsen 04d6704766 Change badge color from boolean (alert=true/false) to string (type=warning/error) 2018-11-08 14:56:43 +01:00
Kenn Jacobsen 75e1c9a0ae Merge branch 'v8-feature-content-app-badge' of https://github.com/kjac/Umbraco-CMS into v8-feature-content-app-badge 2018-11-08 14:28:33 +01:00
Kenn Jacobsen 355447d4e2 Merge branch 'temp8' into v8-feature-content-app-badge 2018-11-08 14:28:16 +01:00
Stefano Chiodino 993972fa62 #3544: change template reference for its ID (WIP: it builds) 2018-11-08 13:24:34 +00:00
Warren Buckley 5cc4370dc1 Fix log message templates to not use single quotes - as not helpful for searching with logviewer 2018-11-08 13:09:26 +00:00
Laura W c01d09744f Updated absolute-positioned validation error message to be readable when document types are attempting save with duplicate alias 2018-11-08 11:45:18 +00:00
Mads Rasmussen 1f3e67645d a bit of dependency injection clean up so we can figure out where the dialogService is used. 2018-11-08 12:44:24 +01:00
Warren Buckley 1d5ae45b06 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-08 09:58:56 +00:00
Mads Rasmussen 92dacf050b Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-08 10:10:07 +01:00
Mads Rasmussen 51895f949c fix client side docs build 2018-11-08 10:09:31 +01:00
Shannon 3ac3590f2c only enable the schedule button if a date is selected 2018-11-08 17:14:04 +11:00
Shannon 4b23090e97 fixes migrations 2018-11-08 14:42:46 +11:00
Shannon 6922e825f5 fixes migrations 2018-11-08 14:40:10 +11:00
Shannon fad2e048ff Merge remote-tracking branch 'origin/temp8' into temp8-224-db-updates-sched-publishing-with-variants 2018-11-08 14:32:37 +11:00
Shannon 99a8d899e0 Changes FullSchedule to just be a list 2018-11-08 13:15:56 +11:00
Shannon c4bce9ecb5 Adds publish status for mixed unpublish/publish action in the same operation 2018-11-08 12:49:37 +11:00
Shannon d4bf5f7ab9 Fixes test, removes nested scope 2018-11-08 12:28:53 +11:00
Warren Buckley 9608d20b38 Merge pull request #3542 from umbraco/temp8-stylesheet-fixes
Temp8 stylesheet fixes
2018-11-07 18:27:18 +00:00
Mads Rasmussen 1d07ef7e4d add preview 2018-11-07 18:23:43 +01:00
Stephan 399e0d9469 Merge branch 'temp8' into temp8-expr-visitor 2018-11-07 15:24:56 +01:00
Mads Rasmussen dca4c4e3bf open the correct view based on which item you are creating and on the content of the stylesheet file 2018-11-07 15:11:35 +01:00
Shannon 3b3824c33a Fixes merge issues and issue with StrategyCanUnpublish, 1 tests failing i need to fix 2018-11-07 22:18:43 +11:00
Shannon 6888ed088b Merge remote-tracking branch 'origin/temp8-3336-publish-branch' into temp8-224-db-updates-sched-publishing-with-variants
# Conflicts:
#	src/Umbraco.Core/Services/Implement/ContentService.cs
2018-11-07 22:09:51 +11:00
Shannon 607615c968 Adds another assert, fixes up issue 2018-11-07 21:40:19 +11:00
Shannon adf52425d2 Adds test for PerformScheduledPublish, fixes issues with resetting dirty props, fixes other issues found 2018-11-07 21:32:12 +11:00
Warren Buckley 7f0099ca57 Adds new create dialog option to create a stylesheet as RTE (will set URL location to include rtestyle=true) 2018-11-07 10:26:51 +00:00
Mads Rasmussen d021505062 use infinite editing for rich text rule dialog 2018-11-07 11:18:23 +01:00
Dave Woestenborghs 271e01262f #3434 set correct labels 2018-11-07 10:53:23 +01:00
Bjarke Berg c182428986 If a password is provided, then use this instead of an autogenerated one. 2018-11-07 10:51:55 +01:00
Dave Woestenborghs b25413abcd #3434 show indication on designer that property is varied by culture 2018-11-07 10:47:13 +01:00
Dave Woestenborghs 7bfce6e428 #3434 refactored toggle functions 2018-11-07 10:39:11 +01:00
Dave Woestenborghs ecb4e00516 #3434 changed checkboxes on member property settings to toggles 2018-11-07 10:31:16 +01:00
Shannon df40a3d588 merge fixes 2018-11-07 20:12:07 +11:00
Dave Woestenborghs 110ecc5fda #3434 use toggle for mandatory validation on property type settings and made a better distinction between mandatory and custom validation 2018-11-07 10:09:04 +01:00
Dave Woestenborghs d0908895dd #3434 removed usage of subview-classes 2018-11-07 09:48:31 +01:00
Shannon 92045c81bb Merge remote-tracking branch 'origin/temp8' into temp8-224-db-updates-sched-publishing-with-variants
# Conflicts:
#	src/Umbraco.Core/Models/Content.cs
#	src/Umbraco.Tests/Services/ContentServiceTests.cs
2018-11-07 19:44:37 +11:00
Shannon c57ac7752c Merges UnpublishResult into PublishResult, fixes dirty tracking for unpublishing a culture and logs the correct info along with returning the correct status, fixes ContentService so that all publishing/unpublishing logic happens in one one place including all Audit/Logs, gets ContentService.PerformScheduledPublish in place 2018-11-07 19:42:49 +11:00
Mads Rasmussen 1a41998bd1 add border radius to rich text rules 2018-11-07 09:29:56 +01:00
Mads Rasmussen ca749537b2 add a little more space underneath content app icons 2018-11-07 09:13:54 +01:00
Bjarke Berg 3e50ef694d Change sections on views for partial view macros 2018-11-07 08:42:22 +01:00
Bjarke Berg 9237480aca Bugfix: The root could not be found in getDescendantNode, when the treeAlias was not in the first child. 2018-11-07 08:21:43 +01:00
Mads Rasmussen 89266d4876 move server calls to resource 2018-11-06 21:24:55 +01:00
Mads Rasmussen 5e884fe06c align button to the left + use umb-button component 2018-11-06 21:12:04 +01:00
Stephan e91d485d1c 3336 - bulk branch publish with variants 2018-11-06 17:12:00 +01:00
Warren Buckley c5c4d93c5f Merge pull request #3515 from umbraco/temp8-266-empty-folders-still-shows-the-expand-arrow
Update HasChildren, on removeNode in treeService
2018-11-06 14:55:56 +00:00
Stephan f3e9e282fa Fix expression visitor for WHERE IN 2018-11-06 15:29:56 +01:00
Claus cfa3f58c33 fixing Stylesheet tests to fit with new line breaks and tabs added. 2018-11-06 15:10:01 +01:00
Bjarke Berg cd6b374d22 Update HasChildren, on removeNode in treeService 2018-11-06 14:51:51 +01:00
Warren Buckley 872932145f Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-06 13:26:32 +00:00
Warren Buckley 2b9720d18b Warnings cleanup - Another unused variable 2018-11-06 13:25:36 +00:00
Claus f764b46b8e Merge pull request #3429 from umbraco/temp8-231-send-to-publish-with-variants
v8 - send to publish with variants
2018-11-06 14:19:28 +01:00
Claus 61b0c49160 updating comment. 2018-11-06 14:19:10 +01:00
Warren Buckley d420f61e13 Reduce VS Warnings: Remove ununused const string 2018-11-06 13:15:45 +00:00
Claus 8f43451519 Merge pull request #3503 from kjac/feature-angular-stylesheets-editing-in-tabs
V8: Angular implementation of stylesheets editing
2018-11-06 13:52:32 +01:00
Robert 061297cdcf Merge pull request #3513 from umbraco/temp7-cropper-inputs
fix alignment of cropper prevalue inputs
2018-11-06 12:48:42 +01:00
Warren Buckley a5e9ce515f Merge branch 'temp8' into temp8-logviewer 2018-11-06 11:46:46 +00:00
Warren Buckley 812d9e2be9 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2018-11-06 11:09:12 +00:00
Mads Rasmussen 0f4cf0a97c fix alignment of cropper prevalue inputs 2018-11-06 12:00:37 +01:00
Robert 70624e3e64 Merge pull request #3502 from umbraco/temp8-3469-listview-publish
Temp8 3469 listview publish
2018-11-06 11:57:58 +01:00
Robert 7e8578c9fb Fixes unit test by ignoring VariesByCulture property on MemberMapperProfile and mapping on MediaMapperProfile. 2018-11-06 11:38:49 +01:00
Shannon 9b1d9e02bf Gets publishing validation working with scheduled cultures, cleans up some code, removes Status from IContent into an extension method 2018-11-06 21:33:24 +11:00
Warren Buckley 1ef487b7da Removing last of log entries that do string concat or interpolation & updates to use MessageTemplate format instead 2018-11-06 10:25:35 +00:00
Mads Rasmussen f2feaba604 fix tab styling in legacy dialogs 2018-11-06 10:13:15 +01:00
Robert bdd438e307 Merge branch 'temp8' into temp8-3469-listview-publish 2018-11-06 09:57:38 +01:00
Warren Buckley 21be52c60a Merge branch 'temp8' into temp8-logviewer 2018-11-06 08:43:39 +00:00
Warren Buckley 04bcd85e8e Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2018-11-05 14:50:06 +00:00
Warren Buckley 91ea16feb3 Merge branch 'temp7-create-template-fix' into dev-v7 2018-11-05 14:49:43 +00:00
Mads Rasmussen 9153e4443f check for "fake template" when creating a new doc type with a template 2018-11-05 15:39:56 +01:00
Warren Buckley 583828a5f3 Merge pull request #3499 from umbraco/temp7-create-template-fix
Only show "Add Template" button if the template does not currently ex…
2018-11-05 14:39:02 +00:00
Mads Rasmussen 42bcde2c59 rename button, use umb button directive, add icon to template + a bit of code clean up 2018-11-05 15:32:07 +01:00
Mads Rasmussen 4f73ef69d5 use overlayService for delete confirmation 2018-11-05 13:25:05 +01:00
Warren Buckley 88c56046c3 Merge pull request #3508 from umbraco/temp7-263-xss-parameters-injection
Fixes a reflected XSS issue due to a parameter consumed directly from…
2018-11-05 12:18:00 +00:00
Robert d5294568ce Merge pull request #3488 from umbraco/temp8-258-empty-trees-arrow
Adding a check to verify if there are any children which will resolve…
2018-11-05 12:47:19 +01:00
elitsa aaa920719f Adding html encoding when updating or removing Public Access of a content. 2018-11-05 12:41:19 +01:00
elitsa 2b33c5cfd7 Fix for chekcing the children belonging to MemberType tree. 2018-11-05 10:46:50 +01:00
Mads Rasmussen 0843badb15 reload nodes after publish/unpublish 2018-11-05 10:40:38 +01:00
elitsa 666a78f803 Fix for getting the right collection. 2018-11-05 10:36:17 +01:00
Mads Rasmussen ababd45f4a fix doc type saving in infinite editing 2018-11-05 10:29:17 +01:00
Mads Rasmussen ebca79f254 don't fade unpublished items 2018-11-05 10:09:56 +01:00
elitsa acd067bb4e Fixes a reflected XSS issue due to a parameter consumed directly from the request. 2018-11-05 10:07:50 +01:00
Kenn Jacobsen d7d367aeb2 Move rules editing to an overlay 2018-11-05 08:58:30 +01:00
Shannon 24360a762c Adds change tracking to the schedule collection, updates the DocumentRepository to add logic to fetch the schedule, adds/updates tests, all green 2018-11-05 17:20:26 +11:00
Shannon 0d35a6a140 Gets all tests fixed up, now to write some more 2018-11-05 13:59:55 +11:00
elitsa b9e30604a4 Fix for chekcing the children belonging to Templates tree. 2018-11-04 22:54:25 +01:00
elitsa 2f3483453c Merge remote-tracking branch 'origin/temp8' into temp8-258-empty-trees-arrow 2018-11-04 22:44:20 +01:00
Stephanie Youstra 9077eac698 Various grammar fixes to README.md (#3496) 2018-11-03 09:52:51 +01:00
Warren Buckley 2badacb8a8 Adds UmbracoFeatures to the Composition to allow user components to do something like this - composition.Features().Disabled.Controllers.Add<LogViewerTreeController>() 2018-11-02 15:35:20 +00:00
Warren Buckley 7091658a3b Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-02 15:34:09 +00:00
Warren Buckley 2f6e66184f Adds UmbracoFeatures to the Composition to allow user components to do something like this - composition.Features().Disabled.Controllers.Add<LogViewerTreeController>() 2018-11-02 15:33:43 +00:00
Warren Buckley c5b7543e54 Update to pass dates through correctly 2018-11-02 15:32:37 +00:00
Mads Rasmussen 9c80867320 fix notifications + bulk status 2018-11-02 15:42:32 +01:00
Mads Rasmussen 73d9731c1b make labels clickable 2018-11-02 15:10:45 +01:00
Mads Rasmussen 66ea4105b0 prevent save when dialogs are open 2018-11-02 13:47:45 +01:00
Mads Rasmussen b3e5f59fe4 pass cultures to publish method 2018-11-02 13:11:48 +01:00
Kenn Jacobsen e8856731f8 Break the rules editing out of the column view to utilize the space properly 2018-11-02 13:06:40 +01:00
Warren Buckley 7a23fdc1ea Update logic for pre-flight check 2018-11-02 11:09:59 +00:00
Mads Rasmussen a2f4c317e9 disable publish button if nothing is selected 2018-11-02 12:08:20 +01:00
Mads Rasmussen 05b47deb96 remove debugging code 2018-11-02 11:58:15 +01:00
Mads Rasmussen 51e13b9f7a add special keys for list view popups 2018-11-02 11:57:56 +01:00
Mads Rasmussen 3f31e2cd07 publish dialog preselect the active language 2018-11-02 11:17:13 +01:00
Mads Rasmussen 77f352f449 a little bit of code clean up 2018-11-02 10:55:40 +01:00
Mads Rasmussen ef24440277 unpublish by culture 2018-11-02 10:33:39 +01:00
Robert 853fbdaa61 Typo 2018-11-02 10:27:12 +01:00
Kenn Jacobsen 1336aa2c0b Refactor create script to reuse the generic method used by stylesheet 2018-11-02 09:31:17 +01:00
Kenn Jacobsen 60e8fed552 Set the form dirty when adding/removing/sorting rules 2018-11-02 09:20:42 +01:00
Mads Rasmussen 3f5fc56656 wip unpublish list view items 2018-11-02 09:10:22 +01:00
Kenn Jacobsen d0e6d0af2f Merge branch 'temp8' into feature-angular-stylesheets-editing-in-tabs 2018-11-02 08:46:57 +01:00
Shannon f223024164 Got database and persistence models in place for scheduled publishing, now need to start writing tests, fixing tests and cleaning up fixme statements 2018-11-02 14:55:34 +11:00
Mads Rasmussen 219c7284b6 add ellipsis to unpublish button 2018-11-01 19:55:59 +01:00
Warren Buckley 758eea479d Move the logic for checking can view logs out to a bool so it can be reused in the other API method calls 2018-11-01 16:24:48 +00:00
Warren Buckley 398134251e Add in some TODO notes to pickup from next time I get time to hack on this 2018-11-01 16:19:18 +00:00
Warren Buckley 24a6aecd73 Adds in a new API endpoint to get the size of logs - which will determine to display a warning message if the filesize is too big to read (to help prevent the CPU & memory being eaten up & killing the site) 2018-11-01 16:14:03 +00:00
Sebastiaan Janssen 1864dd8240 Update CONTRIBUTING_DETAILED.md 2018-11-01 16:56:10 +01:00
Sebastiaan Janssen 0315e9f338 Update CONTRIBUTING.md 2018-11-01 16:54:11 +01:00
Sebastiaan Janssen acd47ed143 Update PULL_REQUEST_TEMPLATE.md 2018-11-01 16:52:54 +01:00
Kenn Jacobsen 5001e2511d Translate "create" text 2018-11-01 16:04:07 +01:00
Kenn Jacobsen 57232c9c48 Implement delete 2018-11-01 16:01:34 +01:00
Kenn Jacobsen 617596cba4 Fix some newline issues 2018-11-01 15:53:04 +01:00
Kenn Jacobsen 4b79819a8c Move the style sheet manipulation back to CodeFileController 2018-11-01 15:49:30 +01:00
Kenn Jacobsen 2a312a7f21 Format the style rules nicely and add tests to back it up 2018-11-01 15:33:03 +01:00
Mads Rasmussen 888c08b56b wip list view publish 2018-11-01 14:44:12 +01:00
Robert 61e1301865 Merge pull request #3491 from umbraco/temp8-3130-examine-indexing-variant-switching
v8 - Examine indexing updates when content/media/member types change
2018-11-01 13:54:36 +01:00
Kenn Jacobsen 2f643259c8 Include the rest of the CSS assets for the ACE editor 2018-11-01 13:31:31 +01:00
Kenn Jacobsen 2b60769d0d More localization 2018-11-01 13:26:08 +01:00
Kenn Jacobsen c30b59b290 Oops. Broke the rules sorting. 2018-11-01 12:51:31 +01:00
Kenn Jacobsen 7e687b220b Ensure that rules are interpolated on save 2018-11-01 12:49:50 +01:00
Warren Buckley e07e12092c Adds 'VariesByCulture` property to ContentItemBasic model & its mapping - so that the GetChildren API call for list view can know if each child item varies by culture or not 2018-11-01 11:29:16 +00:00
Kenn Jacobsen 6b5a59c45f Fix rules validation 2018-11-01 12:23:25 +01:00
Kenn Jacobsen fc387b9f23 Localize rules.html 2018-11-01 11:53:08 +01:00
Mads Rasmussen 828c915691 add ellipsis to list view buttons 2018-11-01 11:46:03 +01:00
Robert 4b0b97752c Merge pull request #3489 from umbraco/temp7-nested-content-overlay
fixes position of nested content add item overlay
2018-11-01 11:27:52 +01:00
Robert 54d6d581f1 removed unused function 2018-11-01 11:27:08 +01:00
Kenn Jacobsen e726e6dffe Remove a bunch of inline styles 2018-11-01 11:08:41 +01:00
Robert ae5e549a8e Only show "Add Template" button if the template does not currently exists. 2018-11-01 10:40:42 +01:00
Warren Buckley ef30c1f005 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-01 09:16:04 +00:00
Shannon 2320b51df2 Removes old TemplateDto.Design column 2018-11-01 16:18:13 +11:00
Shannon Deminick 0d06828b76 Merge pull request #3460 from umbraco/temp-3457-entityrepository
EntityRepository is fetching all property data for media
2018-11-01 14:58:38 +11:00
Shannon ffd08d0a2e Fixes unit test 2018-11-01 14:56:55 +11:00
Shannon c5181607de Merge branch 'temp8' into temp8-231-send-to-publish-with-variants
# Conflicts:
#	src/Umbraco.Web/Components/NotificationsComponent.cs
#	src/Umbraco.Web/Editors/ContentController.cs
#	src/Umbraco.Web/NotificationServiceExtensions.cs
#	src/Umbraco.Web/Trees/LegacyTreeDataConverter.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/SendPublish.aspx.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/webservices/nodeSorter.asmx.cs
2018-11-01 14:02:43 +11:00
Shannon 83f1bbf6bd Merge remote-tracking branch 'origin/temp8' into temp8-231-send-to-publish-with-variants
# Conflicts:
#	src/Umbraco.Core/Services/Implement/ContentService.cs
2018-11-01 13:37:18 +11:00
Shannon 1429053681 Slight refactor and cleanup 2018-11-01 13:12:47 +11:00
Shannon 0e8bac0b09 fixes member indexing with list object 2018-11-01 11:24:03 +11:00
Shannon 6121479258 Merge remote-tracking branch 'origin/temp8' into temp8-3130-examine-indexing-variant-switching
# Conflicts:
#	src/Umbraco.Tests/Services/ContentServiceTests.cs
2018-11-01 10:31:26 +11:00
Shannon 047bce17bf Cleans up more IContentService and IMediaService and removes any string filtering methods 2018-11-01 10:28:53 +11:00
Shannon 76a8cd6dcf Changes recycle bin service queries to paged 2018-11-01 10:22:45 +11:00
Kenn Jacobsen a3232bb55c WIP: split editing into tabs 2018-10-31 21:33:32 +01:00
Bjarne Fyrstenborg b7b24a6a3d #3246 - Consistency of macro page and other legacy pages (#3247) 2018-10-31 19:43:30 +01:00
Jesper Mayntzhusen 2cc440c7ff Prevent error label from moving input box 2018-10-31 19:30:34 +01:00
sofietoft 26aec86850 Update link to Our Forum 2018-10-31 19:29:44 +01:00
Warwick Buzacott 557905580b Fix for #3296: Adding comments 2018-10-31 19:27:53 +01:00
Warwick Buzacott a09660128a Fix for #3296. Large paged Listview sorted by custom property has blank custom properties 2018-10-31 19:27:53 +01:00
Kenn Jacobsen f15d30b1b4 Assign the current main culture to GetChildren lookup if none is defined, as this is required for variant data 2018-10-31 19:23:52 +01:00
Daniel Brereton 4d5f952aa6 fixed typo 2018-10-31 19:21:15 +01:00
Poornima Nayar 14e503d0e9 3492 Added a property "Tooltip" to the tabs which can then be set in the the EditorModel Events (#3493) 2018-10-31 19:19:46 +01:00
bharanijayasuri f73d55d496 Change to "MoveToRecycleBinDo" function of the MediaService and IMediaService (#3453) 2018-10-31 19:13:58 +01:00
Warren Buckley 39bb4f3a1e Merge branch 'temp8' into temp8-logviewer 2018-10-31 14:33:40 +00:00
Shannon 082d860a5b fixes tests 2018-11-01 01:28:12 +11:00
Warren Buckley c01cdf2fdb Merge pull request #3479 from umbraco/temp8-IAction-cleanup
v8 IAction cleanup
2018-10-31 14:18:38 +00:00
Shannon 6a1d6668c4 Gets both media and member indexing working for when media/member types are changed 2018-11-01 01:01:50 +11:00
Warren Buckley b2c3944074 Remove a block of commented out code - that was forgotten 2018-10-31 13:47:07 +00:00
Mads Rasmussen a32271f280 fixes position of nested content add item overlay 2018-10-31 14:33:23 +01:00
Shannon ae5bda0910 Streamlines IMediaService to be consistent with IContentService for paging and using the Ordering class 2018-11-01 00:21:52 +11:00
Shannon b8d1dd7684 Cleans up paged methods of IContentService to use the Ordering parameter for consistency 2018-11-01 00:05:17 +11:00
elitsa 4d594e17aa Adding a check to verify if there are any children which will resolve the problem with showing a right-pointing arrow in front of empty trees in the Settings section. 2018-10-31 13:40:23 +01:00
Shannon 25dcc3f2c1 Removes GetChildren and GetDescendants from IMediaService, paging is now required 2018-10-31 23:11:37 +11:00
Robert ee431cdf6d Deleted unnecessary "drag and drop" info text. 2018-10-31 12:44:00 +01:00
Shannon 40eafe57b1 Fixes tests 2018-10-31 22:38:58 +11:00
Warren Buckley 569241eba3 Bumped [Tree] attribute type finder tests to 22 as now there is a new tree for log viewer 2018-10-31 11:18:55 +00:00
Warren Buckley bce6375300 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-10-31 11:11:29 +00:00
Warren Buckley 881ea22efe Fix lang typo in ContentService & fix up the breaking unit test 2018-10-31 10:24:40 +00:00
Robert bdb782b27f Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2018-10-31 11:21:07 +01:00
Robert 83b30809d2 Fixes uploading files with comma in the file name. 2018-10-31 11:20:15 +01:00
Mads Rasmussen fb5fa8c40a change toggles in media picker and create doc type collection to checkboxes. Toggles should only be used for settings. 2018-10-31 10:24:58 +01:00
Shannon 437bf978a1 Removes non paged GetChildren and GetDescendants from content service 2018-10-31 18:01:39 +11:00
Shannon 18f6e7ba78 Updates ExamineComponent to page over descendants when caches are updated 2018-10-31 17:57:35 +11:00
Shannon 23860e58b9 Update re-indexing logic for content types including updating content types affected by composition changes 2018-10-31 16:33:10 +11:00
Mads Rasmussen 21396a3042 fix border for color picker with labels 2018-10-30 21:21:39 +01:00
Mads Rasmussen 72f3739430 add pointer to list view content templates dropdown 2018-10-30 21:15:29 +01:00
Mads Rasmussen 6b0f393a65 use opacity instead of gray to set border color for color swatches so colors don't look blurry 2018-10-30 21:02:24 +01:00
Mads Rasmussen a27cf7fb1b dont collapse color in color picker prevalues 2018-10-30 20:56:10 +01:00
Dave Woestenborghs 44b837a9ec #3373 fixes error when going to forms section when forms is not installed 2018-10-30 17:30:34 +01:00
Kenn Jacobsen 1d87ceaacf Fix user email validation in IE and Edge by using ng-required instead of required on input type=email. 2018-10-30 17:18:54 +01:00
Warren Buckley 56f1637631 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-10-30 15:59:33 +00:00
Anders Bjerner 092d84a49d Exposed the "cssClass " property in the view 2018-10-30 16:56:38 +01:00
Anders Bjerner 115de5854e Added new "CssClass" property to the "Tab" class 2018-10-30 16:56:38 +01:00
Warren Buckley 3e3f2a92fd Merge pull request #3414 from umbraco/temp8-remove-legacy-drop-downs
v8 - Remove legacy drop downs
2018-10-30 15:30:49 +00:00
Mads Rasmussen 299af13c42 fixes the context menu node highlight bug 2018-10-30 15:51:32 +01:00
Mads Rasmussen 5537163c9f remove debug data in colorpicker prevalue editor 2018-10-30 15:19:48 +01:00
Warren Buckley ee8da06638 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-10-30 12:47:18 +00:00
Warren Buckley 1c9a960f3d Remove the date picker ranges - as not sure how to do the UI/UX best for this 2018-10-30 12:46:54 +00:00
Warren Buckley 436a6df917 Fix up log viewer - if viewing all log items & filterExpression is null or emtpy string return all log items 2018-10-30 12:33:28 +00:00
Kenn Jacobsen 4e85ede436 Fix the notifications footer 2018-10-30 11:19:14 +01:00
Kenn Jacobsen 8ed3a95a56 Fix #3204 and do some refactoring to avoid duplicate code 2018-10-30 11:17:04 +01:00
sweta jena 9b6204eb7b add a comma (#3480) 2018-10-30 09:48:28 +01:00
Pranjal Vyas 0a0dd025bf Update footer.tmpl.partial (#3481) 2018-10-30 09:48:03 +01:00
Shannon a383309e46 Gets indexes updating based on content type changes 2018-10-30 17:32:27 +11:00
Shannon 1805d30aaf Merge remote-tracking branch 'origin/temp8' into temp8-remove-legacy-drop-downs
# Conflicts:
#	src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs
2018-10-30 02:20:24 +11:00
Shannon 386dd2281c Fixes log messages 2018-10-30 02:18:07 +11:00
Shannon f123331d42 Fixes updating the storage type 2018-10-30 02:11:33 +11:00
Shannon 0d0d26d3e9 Fixes converting the Umbraco.DropDownMultiple to a multiple drop down, fixes boolean logic on the js single drop down 2018-10-30 02:05:43 +11:00
Warren Buckley 45e892a4b1 Now that developer section is no more - update the routes to use 'settings' 2018-10-29 14:41:14 +00:00
Shannon 15eaa33e08 updates migration to invariant string check 2018-10-30 01:15:23 +11:00
Shannon 372f77fde5 reverts accidental change 2018-10-30 00:36:11 +11:00
Shannon 77f4f0bbad Refactors how the 'OpensDialog' gets assigned to menu items, fixes permission check on rollback 2018-10-30 00:34:43 +11:00
Shannon b8a65febf4 Merge remote-tracking branch 'origin/temp8' into temp8-IAction-cleanup
# Conflicts:
#	src/Umbraco.Tests/Composing/ActionCollectionTests.cs
#	src/Umbraco.Web/Models/Trees/MenuItem.cs
#	src/Umbraco.Web/_Legacy/Actions/Action.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionAssignDomain.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionBrowse.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionChangeDocType.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionCopy.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionCreateBlueprintFromContent.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionDelete.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionEmptyTranscan.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionExport.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionImport.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionMove.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionNew.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionNotify.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionNull.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionPackage.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionPackageCreate.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionProtect.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionPublish.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionRePublish.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionRefresh.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionRestore.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionRights.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionRollback.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionSort.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionToPublish.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionTranslate.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionUnPublish.cs
#	src/Umbraco.Web/_Legacy/Actions/ActionUpdate.cs
#	src/Umbraco.Web/_Legacy/Actions/ContextMenuSeperator.cs
#	src/Umbraco.Web/_Legacy/Actions/IAction.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/TreeMenu/ActionDeleteRelationType.cs
#	src/Umbraco.Web/umbraco.presentation/umbraco/developer/RelationTypes/TreeMenu/ActionNewRelationType.cs
2018-10-29 23:35:24 +11:00
Shannon cb9843b023 Removes IActions that shouldn't be IActions 2018-10-29 23:23:21 +11:00
Sebastiaan Janssen 870fa2fe74 Merge pull request #3451 from angie1015/dev-v7
Fixed minor typos in README.md
2018-10-29 12:39:53 +01:00
Sebastiaan Janssen 65566f6c47 Merge branch 'dev-v7' into dev-v7 2018-10-29 12:39:27 +01:00
Shyam Jalan db3ae6c27d Added hyphenation to README at desired places 2018-10-29 12:35:50 +01:00
Warren Buckley f2667210b7 Add in chartjs & angular wrapper lib into the gulp to ensure they get copied over from node_modules 2018-10-29 11:15:37 +00:00
Warren Buckley dce485bc6f Adds chartjs & the angular wrapper lib to package.json now that bower has been removed 2018-10-29 10:41:58 +00:00
Warren Buckley 5b1e7e9b3d Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Core/Constants-Applications.cs
#	src/Umbraco.Web.UI.Client/bower.json
2018-10-29 10:34:23 +00:00
Dave Woestenborghs 397b3ca69f #3434 use toggle for varying by culture on property settings dialog in content type designer 2018-10-29 11:02:53 +01:00
Shannon bae9bb6108 Initial cleanup of IActions, menu items, etc... 2018-10-29 17:27:33 +11:00
James Coxhead 06d19f2735 Load relation type edit view 2018-10-28 19:04:00 +00:00
Kenn Jacobsen 1842aa4f11 Merge branch 'temp8' into feature-angular-stylesheets-editing 2018-10-28 12:12:34 +01:00
James Coxhead 083de95311 Stubbed out relation type controller and resource 2018-10-27 23:37:08 +01:00
James Coxhead 6b19ab3b46 Prototyped edit view 2018-10-27 22:04:47 +01:00
Kenn Jacobsen 68f05e05d1 Initial create and edit 2018-10-27 21:18:03 +02:00
Claus c0109e0531 whitespace 2018-10-27 13:02:21 +02:00
Claus c4ee9abe68 adds internal methods for getting media entities through the entity repository/service without fetching all property data.
ensures the trees use this method to avoid fetching property data in the media tree.
2018-10-27 12:51:05 +02:00
Lars-Erik Aabech 752ae16c1b Merge pull request #5 from lars-erik/castle-compatibility-cleanup
Changes needed for compatibility with other containers. (Castle Windsor used as representative selection)
2018-10-26 21:58:28 +02:00
Lars-Erik Aabech c967d6a0fc Makes Container.CreateInstance into an extension 2018-10-26 21:14:19 +02:00
Stephan eee7222e0b Refactor filesystems 2018-10-26 16:06:45 +02:00
Stephan 1644434ea7 Cleanup controller factories 2018-10-26 16:06:45 +02:00
Stephan a12778fd94 Cleanup IContainer 2018-10-26 16:06:45 +02:00
Stephan 246b9e5af8 Cleanup 2018-10-26 16:06:45 +02:00
Stephan 2b1ba45801 Cleanup, refactor components 2018-10-26 16:06:45 +02:00
Stephan d7adf63a62 Cleanup UmbracoContext registration 2018-10-26 16:06:45 +02:00
Stephan d1e377bc38 Cleanup BootFailedException 2018-10-26 16:06:45 +02:00
Stephan d3a894b7a3 Add package-lock.json back 2018-10-26 16:06:45 +02:00
Stephan 9958436f3b Merge branch 'temp8-di2690' into temp8-di2690c 2018-10-26 16:06:27 +02:00
Stephan a4c81b269f Merge branch temp8 into temp8-di2690 2018-10-26 15:10:20 +02:00
Jan van Helvoort 0daf197066 Unable to find suitable version for font-awesome (#3431) 2018-10-25 12:16:42 +02:00
Stephan 4dac5cc7a2 Merge branch temp8-di2690 into temp8-di2690c 2018-10-25 11:25:55 +02:00
Stephan 5c077c3e5d Fix merge 2018-10-25 11:04:49 +02:00
Stephan 8af1da3661 Merge branch temp8 into temp8-di2690 2018-10-25 10:59:49 +02:00
Stephan 0687677718 Fix merge 2018-10-25 10:57:57 +02:00
Shannon ca6fd56f09 Gets send to publish emails working for variants 2018-10-25 17:21:10 +11:00
Shannon de313a5d19 Adds tests for verifying remember dirty properties on content 2018-10-25 16:09:58 +11:00
Shannon 42f0d2b356 Fixes dirty tracking with resetting properties 2018-10-25 15:47:25 +11:00
Lars-Erik Aabech ccd3354b8a Revert "Wrapping server messenger factory to avoid re-registering for now."
This reverts commit 1198191e05.
2018-10-24 21:06:52 +02:00
Kenn Jacobsen abcdfc27c5 Add a white border around the badge to make it stand out if it overlaps the app icon 2018-10-24 20:15:17 +02:00
Shannon 9df4a8091e Merge remote-tracking branch 'origin/temp8' into temp8-231-send-to-publish-with-variants 2018-10-25 01:15:44 +11:00
Shannon 63fbe63656 Fixes js error and removes Current usage 2018-10-25 01:01:42 +11:00
Kenn Jacobsen 634c2072ca Add optional alert color 2018-10-24 15:49:35 +02:00
Shannon c3e50ecc48 Removes the broken text comparison for RTE 2018-10-25 00:45:45 +11:00
Shannon b716ed1964 Fixes UI error when there is an unathorized request, fixes NotificationService to accept IContent since that's all it supports 2018-10-25 00:28:37 +11:00
Shannon 81c7a1de78 Cleans up the notification system, removes coupling on System.Web, simplifies the whole thing, removes old legacy files, adds sort event, moves sort notification to be event based and not part of the controller 2018-10-24 23:55:55 +11:00
Kenn Jacobsen 25718dbe5a Add content app badges 2018-10-24 12:05:25 +02:00
Dave Woestenborghs 8262269592 Make sure indexes are created as unique when using .Unique() syntax builder (#3319) (#3363) 2018-10-24 11:51:07 +02:00
Sebastiaan Janssen fa2bd54f77 Update CONTRIBUTING.md 2018-10-24 11:05:05 +02:00
Joelvis Roman e7c55e6d70 Fix spelling mistake
Fix spelling mistake
2018-10-24 10:57:50 +02:00
Hemant Joshi 05f5f2715b Added Correct Link of Getting Started with V8 2018-10-24 10:50:07 +02:00
Kenn Jacobsen df1c4faeb9 Create doctype collections under the chosen parent 2018-10-24 10:47:59 +02:00
Shannon adae4325c9 Removes old legacy files 2018-10-24 19:07:35 +11:00
Shannon 1e1c7bec64 Merge remote-tracking branch 'origin/temp8-dirty-tracking-on-variants' into temp8-231-send-to-publish-with-variants 2018-10-24 16:47:02 +11:00
Shannon 9347e6205f fixes test 2018-10-24 16:36:13 +11:00
Shannon b199b7346b Fixes multiple selection with drop down 2018-10-24 16:35:30 +11:00
Shannon df7623e6a7 Fixes migration, ensure's that if it runs again it won't corrupt data, fixes flexible drop down angular editor to post string vals, not the int ids, removes old angular drop down prop editor 2018-10-24 16:32:13 +11:00
Shannon f332e9a07e Fix sql and table check 2018-10-24 15:45:24 +11:00
Shannon 74c373de84 Merge branch 'temp8' into temp8-remove-legacy-drop-downs 2018-10-24 15:45:13 +11:00
Shannon 9704c124ed Removes all old deprecated drop down editors, we only have one drop down editor now and it doesn't store IDs either in the db or in the cache, it just stores what is selected 2018-10-24 15:20:28 +11:00
Kenn Jacobsen f69976852e Disable move/copy button until a target node is selected (#3250) 2018-10-23 22:49:13 +02:00
skoomasteve 5f765967a6 Just a few spelling fixes. (#3405) 2018-10-23 22:47:14 +02:00
Søren Kottal ee3cbf08a2 #3215 Adds ability to create template from doctype editor (#3366)
### Prerequisites

- [x] I have [created an issue](https://github.com/umbraco/Umbraco-CMS/issues) for the proposed changes in this PR, the link is: #3215 
- [x] I have added steps to test this contribution in the description below

### Description
I added a button for creating a new template in the template view of the doctype editor. The button uses the template resource to fetch a template scaffold, and then save a new template. After saving, the template gets selected as allowed, and if there is no default template selected, the new template will also be the default.

https://i.imgur.com/KQbmjGH.gifv

<!-- Thanks for contributing to Umbraco CMS! -->
2018-10-23 22:43:46 +02:00
Lars-Erik Aabech 026f10f38a Register instance by name 2018-10-23 21:31:20 +02:00
KimHolzmann 3e14da5e9d #2927 - Cannot use content templates in list views (#3173) 2018-10-23 18:16:06 +02:00
Stephan d71c879374 Merge branch temp8 into temp8-di2690 2018-10-23 18:01:52 +02:00
Jan Skovgaard 9230de5383 3225 - Suggestion: Style the default browser radio button as a custom one to provide a nicer UI experience (#3226) 2018-10-23 17:06:10 +02:00
Bjarne Fyrstenborg 20c215ef8c #3211 - Add colorpicker prevalue editor (#3212) 2018-10-23 16:52:57 +02:00
agrath 1053a349f6 #3231 RTE editor in grid collapsed on tab shown (#3232) 2018-10-23 16:48:19 +02:00
Jan Skovgaard 39045b1edc 3324 - Suggestion: Align image cropper property editor UI with color picker and checkbox lists (#3325) 2018-10-23 16:32:07 +02:00
Jan Skovgaard c0b713d0e4 3381 - Media picker: Trashed media warning looks weird (#3382) 2018-10-23 16:06:06 +02:00
angie1015 ed07e85754 Merge pull request #1 from angie1015/angie1015-patch-1
Fixed minor typos in README.md
2018-10-23 19:26:46 +05:30
angie1015 e0b44c90ff Fixed minor typos 2018-10-23 06:55:31 -07:00
Kenn Jacobsen de42eaea44 Move some padding around to fix unaligned labels and values 2018-10-23 10:54:10 +02:00
Anders Bjerner 7df6b661c5 Mediatyperesource localized (#3378) 2018-10-23 10:23:09 +02:00
Søren Kottal 1080d98339 Fixes incorrect swedish translation 2018-10-23 09:51:05 +02:00
GwanYeong Kim b539cc2a7a Remove this commented out code 2018-10-23 09:43:29 +02:00
Lars-Erik Aabech fbd73dd596 Revert "REVIEW/FIX: Just removing placeholder IApplicationTreeService and ISectionService registrations until we figure defaulting."
This reverts commit 57d22a87c0.
2018-10-22 23:21:27 +02:00
emmaburstow 21cb0f79c3 Added dictionary item for member group save message (#3379) 2018-10-22 18:19:59 +02:00
Sebastiaan Janssen 4a49817322 Fixes a few oversights in image cropper 2018-10-22 08:31:10 +02:00
Lars-Erik Aabech ae88932bb8 Revert "Virtualizing registration of the cache helper"
This reverts commit 04944f2c0c.
2018-10-21 12:38:01 +02:00
Lars-Erik Aabech 8894df919e Should not have package-lock in git 2018-10-21 12:37:14 +02:00
Lars-Erik Aabech 8664f90167 Merge remote-tracking branch 'fork/temp8-u4-11427-remove-propertyinjection' into castle-compatibility-cleanup
# Conflicts:
#	src/Umbraco.Tests/Models/MediaXmlTest.cs
2018-10-16 19:44:48 +02:00
Shannon 02eb1aef91 Updates some styles so we get the button state back, cleans up some js 2018-10-16 12:15:48 +11:00
Warren Buckley bebc3b5f74 Remove inline mode - too many issues for now 2018-10-15 14:57:31 +01:00
Mads Rasmussen 7c1fae7462 add toolbar pinning back in 2018-10-15 15:54:54 +02:00
Mads Rasmussen b92978c7d3 fix resize + scrolling issues 2018-10-15 15:23:56 +02:00
Warren Buckley 47596af680 Changes theme prevalue to mode & toggles the various views TinyMCE ships with 2018-10-15 13:04:37 +01:00
Warren Buckley 9fa94b5366 Update dropdown to be mode & match the same terminology as TinyMCE Modes (Classic, Inline & Distraction Free) 2018-10-15 12:33:11 +01:00
Mads Rasmussen 30436eb72d fix styles 2018-10-15 13:19:00 +02:00
Mads Rasmussen 9c5a30f36c remove build in source code editor from tinymce 2018-10-15 13:00:35 +02:00
Warren Buckley cb0b1ef73d More CodeMirror stuff gone 2018-10-12 14:47:23 +01:00
Warren Buckley 69d1fea8f7 Thought I updated these already?! 2018-10-12 14:36:57 +01:00
Warren Buckley 996c48cc7f Package lock without codemirror 2018-10-12 14:35:47 +01:00
Warren Buckley 9495feb94d Updates the tinymce plugin alias to use the code icon for when configuring which toolbar buttons to add in the prevalue editor view 2018-10-12 14:21:08 +01:00
Warren Buckley 66d4541fc5 Remove codemirror files 2018-10-12 14:20:21 +01:00
Warren Buckley 9dcabd24d2 Cleanup of console.log, remove unused code and name button better than 'Warrens button' 2018-10-12 14:00:15 +01:00
Warren Buckley 6a4e9f5368 Bye bye codemirror TinyMce Wrapper Plugin 2018-10-12 13:59:39 +01:00
Mads Rasmussen e805305352 refresh model on save 2018-10-12 13:55:57 +02:00
Warren Buckley 4fb343e8d4 Merge branch 'temp-tinymce' of https://github.com/umbraco/Umbraco-CMS into temp-tinymce 2018-10-12 12:30:01 +01:00
Warren Buckley 1cb4df2750 WIP Ace editor for the HTML source code 2018-10-12 12:29:34 +01:00
Shannon ffc0ec4556 removes dimensions pre-values from rte 2018-10-12 10:51:43 +02:00
Shannon 93075a82de menu now wraps in classic mode 2018-10-12 10:42:11 +02:00
Shannon faec132f82 TEMP - removes inline mode adds stub code to have a fixed toolbar dom item 2018-10-12 10:28:36 +02:00
Shannon ab846ec4f6 Changes default theme to Modern 2018-10-12 10:00:47 +02:00
Shannon 9198d7976f changes the default to classic 2018-10-12 09:50:53 +02:00
Shannon 019bb3ee95 Merge branch 'temp-tinymce' of https://github.com/umbraco/Umbraco-CMS into temp-tinymce 2018-10-12 09:47:47 +02:00
Shannon 08bf996737 Revert "wip for trying tinymce5 (will revert and come back to this later)"
This reverts commit 8b6ede49b4.
2018-10-12 09:47:40 +02:00
Shannon 8b6ede49b4 wip for trying tinymce5 (will revert and come back to this later) 2018-10-12 09:47:16 +02:00
Shannon bf9bd4b1f5 delete the old skin files since we're not using them 2018-10-12 09:46:52 +02:00
Warren Buckley 43d4447498 Something went wrong with a merge temp8 into this after the removal of bower 2018-10-12 08:19:38 +01:00
Warren Buckley 4fd54ba339 Adds a class to the DIV so we can add a border for the inline editor when the RTE is yet to have any content/copy added - to make it obvious there is something there to click into 2018-10-11 15:56:05 +01:00
Warren Buckley e2c16f15da Adds in skins for tinymce 2018-10-11 15:19:32 +01:00
Warren Buckley 0e8c5f48fe tinymce to correct version - 4.8.3 2018-10-11 15:14:33 +01:00
Warren Buckley a275b47139 npm install of tinymce 2018-10-11 15:12:05 +01:00
Warren Buckley 7603ab6d47 Merge branch 'temp8' into temp-tinymce
# Conflicts:
#	src/Umbraco.Web.UI.Client/bower.json
#	src/Umbraco.Web.UI.Client/package-lock.json
2018-10-11 15:10:21 +01:00
Shannon 1597dce99e Adds pre-value drop down for theme selection 2018-10-11 15:39:18 +02:00
Shannon 1902ebd989 Fixes issue with umbsetdirtyonchange.directive 2018-10-11 14:56:22 +02:00
Shannon f816f19d60 Fixes some issues for rte 2018-10-11 14:25:33 +02:00
Shannon 926fef43d0 Fixes merge issues 2018-10-11 14:07:04 +02:00
Shannon f6c99f2bbc Merge remote-tracking branch 'origin/temp8' into temp-tinymce
# Conflicts:
#	src/Umbraco.Web.UI.Client/bower.json
#	src/Umbraco.Web.UI.Client/src/common/directives/components/grid/grid.rte.directive.js
#	src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/embed/embed.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/embed/embed.html
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.html
2018-10-11 13:33:18 +02:00
Warren Buckley 92aa41fe33 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-10-10 16:42:44 +01:00
Stephan 0d5bf5e9c6 Merge branch 'temp8' into temp8-di2690 2018-10-09 23:03:03 +02:00
Warren Buckley 3c747a1be6 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web.UI/config/trees.Release.config
#	src/Umbraco.Web.UI/config/trees.config
2018-10-09 13:34:19 +01:00
Stephan a9e0f90ef0 Fix merge 2018-10-08 19:27:32 +02:00
Stephan 66d931490e Merge branch temp8 into temp8-di2690 2018-10-08 19:22:20 +02:00
Warren Buckley 0dcbc9f303 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-10-04 15:15:20 +01:00
Warren Buckley 5084c82ac7 Suggestion after talking with Stephane for some refactorings 2018-10-04 15:13:56 +01:00
Warren Buckley 45b5cb0257 Move the tree from developer section to settings section - as we say goodbye to the developer section 2018-10-03 17:43:42 +01:00
Warren Buckley cb166526dc Merge remote-tracking branch 'origin/temp8' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web.UI.Client/package-lock.json
2018-10-03 16:49:37 +01:00
Warren Buckley 01c3585bd8 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-09-30 21:56:17 +01:00
Warren Buckley e0414414d7 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-09-27 10:14:57 +01:00
Warren Buckley 168f4d33d3 Update failing test - as the numkber of trees has increased (Added the Log Viewer tree controller & type attribute) 2018-09-26 18:24:40 +01:00
Warren Buckley e92563ffd8 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer (Diff from temp8 branch & ChartJS stuff merged in together now)
# Conflicts:
#	src/Umbraco.Web.UI.Client/bower.json
2018-09-26 15:37:05 +01:00
Warren Buckley 964dd0374d Makes SavedSearches Get, Add & Delete methods virtual - as you may only want to implement the GetLogs but NOT the GetSavedSearch method for example 2018-09-24 13:12:30 +01:00
Warren Buckley 23245a578a Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-09-20 11:03:38 +01:00
Warren Buckley 2ed048e4e1 Improves logic for single word search to use Message Like expression - Thanks Dan Booth
Co-authored-by: Dan Booth <dan@diplo.co.uk>
Co-authored-by: Warren Buckley <warren@umbraco.com>
2018-09-19 21:22:10 +01:00
Warren Buckley b54998f0af Adds 'lq' aka Log Query Search querystring to be ignored for reloading the view & controller for the log viewer search 2018-09-19 15:03:34 +01:00
Warren Buckley 9f5fe7ddfe Adds some logic if we get 0 results back and the search expression contains no spaces (we retry with a message like filter)
Moves some of the logic into methods - as we end up reusing it
2018-09-18 21:50:31 +01:00
Warren Buckley 1931011152 Adds in confirmation delete dialog for saved searches 2018-09-14 15:25:55 +01:00
Warren Buckley 2f9459f296 Adds in functionality to remove items from the saved searches - Thanks Dan Booth
Co-authored-by: Dan Booth <dan@diplo.co.uk>
Co-authored-by: Warren Buckley <warren@umbraco.com>
2018-09-14 15:17:12 +01:00
Warren Buckley 78b8e78761 Merge branch 'temp8' into temp8-logviewer 2018-09-14 13:49:27 +01:00
Warren Buckley 33fae0cd40 Fixup the back button to remove the lq querystring 2018-09-13 11:53:40 +01:00
Warren Buckley 2a0d73220a Merge branch 'temp8' into temp8-logviewer 2018-09-13 11:45:53 +01:00
Warren Buckley 9f484d0fe2 Update the overview page to link through to the search page and read the lq (log query) querystring 2018-09-13 11:30:50 +01:00
Warren Buckley 5bbe17af54 Start work on getting an overview page that will be entry point with shiny graphs and numbers before jumping over to search page 2018-09-12 22:46:58 +01:00
Warren Buckley 603a1c7814 Log property is now Duration as opposed to TimingDuration (A few diff logtypes that store ms all use same prop name of Duration) 2018-09-12 21:49:59 +01:00
Warren Buckley 6bee3a421f Make search page full width & remove some variables & func's in controller that is no longer needed (as will move to an overview/welcome type dashboard) 2018-09-12 21:46:22 +01:00
Warren Buckley 385bc9c770 Rename overview to search (so I can start maming this view focus only on searching) 2018-09-12 21:22:40 +01:00
Warren Buckley bad002b58a Same feature in Dan Booth's Log Viewer for Find Log message in Search places (Thx Dan Booth) 2018-09-12 16:57:03 +01:00
Warren Buckley a3a95c0f9d Makes the special links to find related values not buttons but simplier links with search icon (Thx Dan Booth) 2018-09-12 16:53:17 +01:00
Warren Buckley 142a319776 Adds full RAW timestamp to properties table (Thx Dan Booth) 2018-09-12 16:52:32 +01:00
Warren Buckley 756e0bbbe1 Update Machine name column in main table to take some less space (Thx Dan Booth) 2018-09-12 16:52:04 +01:00
Warren Buckley 1839c5b3a8 Wraps search input field with ng-form and updates button to submit so that we can then allow users to hit enter key to perform a search 2018-09-12 16:49:31 +01:00
Warren Buckley 3886d47c57 Forgot to add the WebAPI method for PostSavedSearch 2018-09-12 16:47:36 +01:00
Warren Buckley 962bdcf1b4 Remove dupe code 2018-09-12 16:38:35 +01:00
Warren Buckley 630a8af217 Adds in some example SQL like style queries 2018-09-12 16:30:10 +01:00
Warren Buckley 57a7cf3903 We can now save a query to the JSON file on disk now - for our cheap persistence layer 2018-09-12 16:14:42 +01:00
Warren Buckley 4501368cc3 Adds in UI for new overlay to add a logviewer saved search - will need to add API method in C# and AngularJS Resource etc 2018-09-12 14:38:43 +01:00
Warren Buckley 0933443cb3 Adds in new API endpoint that get the saved search - our default implmentation gets them from a JSON file off disk
* If the API call fails then we load in some defaults
* The GetSavedSearches is Abstract so along with the GetLogs the GetSavedSearches could be custom implemented if it needed to come from a DB or some other location for dev's needs
2018-09-12 11:35:51 +01:00
Warren Buckley c3cfee7b2c Need to use the EscapleLikeExpression method instead for the fallback check 2018-09-12 11:33:19 +01:00
Stephan 24b08c7a9b Merge branch temp8 into temp8-di2690 2018-09-12 12:01:18 +02:00
Warren Buckley d38e4a0442 Adds in fallback logic to do a search on @Message which is the rendered message template along with a SQL like. Thanks Diplo aka Dan Booth
@Message like '%find me%'
2018-09-11 15:06:35 +01:00
Warren Buckley 851c11153f Merge remote-tracking branch 'origin/temp8-MOAR-LOGGING' into temp8-logviewer 2018-09-11 09:18:11 +01:00
Warren Buckley 6d7fcb7d64 Adds buttons to find logs with a request number OR with a namespace/sourcecontext 2018-09-10 15:23:41 +01:00
Warren Buckley 0844cb15e0 Adds a clear/reset cross button in search box
Adds @MessageTemplate when listing out properties
Makes the dropdown level filter to be same as badges in main log list
2018-09-10 14:44:07 +01:00
Warren Buckley 53bdef68f4 * Click on a message template in right column - searches for it
* Show more button - to list out more/all message templates
* Get the variant style dropdown to work & display example queries
2018-09-10 11:23:48 +01:00
Warren Buckley c7bff0f9ff Update csproj after recent merge from MOAR logging branch 2018-09-10 11:22:32 +01:00
Warren Buckley 64384dc8b3 Merge remote-tracking branch 'origin/temp8-MOAR-LOGGING' into temp8-logviewer 2018-09-10 10:31:16 +01:00
Warren Buckley ce83e25390 Adds in a little better CSS styling for the error ex message block than a massive RED background
Starts work on getting the dropdown for some example queries setup
2018-09-10 10:30:23 +01:00
Warren Buckley 8cd28a62ea Rename CommonLogMessage to LogTemplate 2018-09-10 09:40:21 +01:00
Lars-Erik Aabech 4ffcdf6943 Replaced base controller factory with one using the container o:) 2018-09-09 22:58:19 +02:00
Lars-Erik Aabech 57d22a87c0 REVIEW/FIX: Just removing placeholder IApplicationTreeService and ISectionService registrations until we figure defaulting. 2018-09-09 22:58:06 +02:00
Lars-Erik Aabech 1418d3124d Registering IdentityMapperProfile as a Profile as well 2018-09-09 22:57:37 +02:00
Lars-Erik Aabech b4b09bc116 Changes to allow using container from third party tests 2018-09-09 22:57:04 +02:00
Lars-Erik Aabech 1198191e05 Wrapping server messenger factory to avoid re-registering for now. 2018-09-09 22:55:37 +02:00
Lars-Erik Aabech 236a755f78 Registration changes for LI when registereing transients.
Can now boot backoffice and can log in when using LightInject.
Before this, the automapper profiles weren't there on the container even if registered.
These changes seem to have solved it.
No real proof or testing back and forth, but it makes LI work...

# Conflicts:
#	src/Umbraco.Web/Runtime/WebRuntimeComponent.cs
2018-09-09 22:55:00 +02:00
Lars-Erik Aabech 04944f2c0c Virtualizing registration of the cache helper
# Conflicts:
#	src/Umbraco.Core/Runtime/CoreRuntime.cs
#	src/Umbraco.Web/Runtime/WebRuntime.cs
2018-09-09 22:52:35 +02:00
Lars-Erik Aabech 51c4962477 Registering lightinject with itself again due to mapper collection builder.
It now fails becuse it doesn't support last registered as default ootb when instantiating cachehelper.
Castle fails on missing mapper collection builder when examine starts indexing.
2018-09-09 22:48:59 +02:00
Lars-Erik Aabech 6bb507037b Initializer interface for components. Supports both reflected and injected versions for now. 2018-09-09 22:48:08 +02:00
Lars-Erik Aabech 97318ace1d MediaFileSystem created with reflection due to chicken and egg situation with registration 2018-09-09 22:47:51 +02:00
Lars-Erik Aabech ee654d0896 Profiles should implement a base class. Castle hiccups. :) 2018-09-09 22:47:33 +02:00
Lars-Erik Aabech 9da750c5c9 Support registering named singleton 2018-09-09 22:46:14 +02:00
Lars-Erik Aabech bc80affcf1 Dictionary params & error handling 2018-09-09 22:45:09 +02:00
Warren Buckley c403df1990 Update to Common Log Messages - it now returns all unique message templates and their counts
In the UI we display the total count of unique but use LimitTo AngularJS filter to continue to display 10 items
Returning all items so that we have a way to show the next 10 items or similar
2018-09-07 21:43:44 +01:00
Stephan 7e68f4724f Fix merge 2018-09-07 09:32:42 +02:00
Stephan 725fe61f91 Merge branch temp8 into temp8-di2690 2018-09-06 16:22:13 +02:00
Warren b4164521f7 Update UI for logviewer - toggle sort order by clicking table header name for timestamp 2018-09-04 13:16:01 +01:00
Warren ab3c5d4d52 Adds in same UI from user overview filters - to add dropdown list of checkboxes to filter by log levels 2018-09-03 21:30:16 +01:00
Warren 96d76c211c Adds in support for log level filtering - rather than using expressions 2018-09-03 21:29:13 +01:00
Warren 20cf8a7637 Create a base class - so we can have the GetLogs implemented by 3rd party devs. Say from Azure Table Storage for example 2018-08-31 21:57:51 +01:00
Stephan 70d93d4668 Merge branch temp8 into temp8-di2690 2018-08-31 08:47:01 +02:00
Warren b15e8a13db * Attempt to get date picker components setup
* Output ex nicer
* Add log level colours to badges
* Output date in friendlier format
2018-08-30 16:26:11 +01:00
Warren c3fa12be6e Exception needs to be a string as Serilog cant easily convert JSON serialised EX back to proper exceptions so we call ToString on it instead 2018-08-30 16:24:34 +01:00
Warren 04f7b14702 * Click to toggle row to see the log properties & ex if present
* Toggle timestamp order by ascending or descending
2018-08-30 14:27:31 +01:00
Warren 08618b653c Gets the rough wrieframe to use real API data now
* List number of total errors
* Pie Chart of log level counts
* Message counts
* Log items with paging & searching
2018-08-30 12:42:43 +01:00
Warren cce70f139c Changed to LogViewer as Logs in solution refers to AuditLogs so this makes it more explicit 2018-08-30 09:59:53 +01:00
Stephan 557bea5f95 Move LightInjectExtensions to proper space 2018-08-30 09:30:49 +02:00
Warren e4c7609675 Fixes paging and uses the same Serilog Expression filtering when setting up loggers to query the same LogEvents loaded into memory
* StartsWith(SourceContext, 'Umbraco.Core')
* StartsWith(SourceContext, 'Umbraco.Core') and @MessageTemplate='[Timing {TimingId}] {EndMessage} ({TimingDuration}ms)'
* @MessageTemplate='[Timing {TimingId}] {EndMessage} ({TimingDuration}ms)' and TimingDuration > 1000
2018-08-29 19:11:20 +01:00
Warren cc915d6ef1 Adds in URL to WebAPI/Editor to Umbraco.Sys global JS object 2018-08-29 19:01:26 +01:00
Warren 38e8feb588 Renames LogsController to LogViewerController to be more explicit only as we have a LogController already for audit logs 2018-08-29 18:42:12 +01:00
Warren fcf8290df9 Update WebAPI method for GetLogs so that we can test out some Expression filter queries in POSTMAN 2018-08-29 18:37:37 +01:00
Stephan 6692f3e7b7 Post-merge fixes 2018-08-29 19:02:35 +02:00
Stephan fed9e27332 Revert "Get rid of container TryGetInstance"
This reverts commit 00b1dda2fe.
2018-08-29 18:50:08 +02:00
Stephan 31a356d98e Merge branch temp8 into temp8-di2690 2018-08-29 12:15:39 +02:00
Warren 424ae7bb91 WIP to open a range of log files 2018-08-28 21:12:38 +01:00
Warren 4ce33c4e3d Updates signature with start/end date and prep for returning paginated logs items 2018-08-28 18:30:58 +01:00
Warren 50e3f84759 As new extension method - to set order by descending or ascending with a property 2018-08-28 18:29:05 +01:00
Warren fbd48b0bd7 Merge commit 'a151829b265b2b6def44b6df76668657469941f6' into temp8-logviewer
# Conflicts:
#	src/Umbraco.Web.UI.Client/bower.json
2018-08-28 14:53:00 +01:00
Warren 152ddbd252 Adds LogViewerComponent & registers singleton in DI (3rd party devs will have to disable this component & register their own implementation)
Get some more of the basic WebAPI stubs fleshed out to get some data to start using in the UI layer
2018-08-28 14:48:54 +01:00
Warren 3e75c69f10 Merge branch 'temp8-serilog' into temp8-logviewer 2018-08-28 11:27:11 +01:00
Warren df13af9dc2 Attempt to get a WebAPI Controller setup 2018-08-27 20:05:59 +01:00
Warren cae468eaeb Some rough untested POC code to read JSON log file from disk 2018-08-27 20:05:17 +01:00
Stephan 2319617fed Cleanup LightInjectContainer 2018-08-27 18:09:10 +02:00
Stephan 00b1dda2fe Get rid of container TryGetInstance 2018-08-27 18:08:59 +02:00
Stephan e8dfca5635 Merge branch temp8 into temp8-di2690 2018-08-27 10:19:41 +02:00
Warren cb5dca5544 More rough UI work - to figure out how it should look or work 2018-08-24 15:02:38 +01:00
Warren fbba60a56b Super rough - WIP UI/layout with a working chart with fake data 2018-08-24 12:58:50 +01:00
Warren 4d66b21084 Adds in chart.js Angular Wrapper lib 2018-08-24 12:57:59 +01:00
Warren 1a89fea816 Adds a Logs Tree controller in the Developer section 2018-08-24 10:53:53 +01:00
Stephan f0241a91b2 Post-merge 2018-07-31 14:51:56 +02:00
Stephan 2c66cdc102 Merge branch temp8 into temp8-di2690 2018-07-31 14:50:01 +02:00
Stephan 865d3f6e30 Cleanup and Fix DI 2018-07-30 16:16:10 +02:00
Stephan ec95017e2c Cleanup DI 2018-07-30 14:29:54 +02:00
Stephan 970d0e3324 Merge branch temp8 into temp8-di2690 2018-07-30 14:05:26 +02:00
Lars-Erik Aabech ce490a4c5b Adding null check to avoid nullref exception on 292 in WebSecurity during install. Still getting nullref on line 115 during install. 2018-07-28 01:12:14 +02:00
Lars-Erik Aabech c885f850e9 Container should be registered with itself 2018-07-28 01:05:07 +02:00
Lars-Erik Aabech caa2802c16 Moved creation of container into ContainerFactory 2018-07-27 21:21:21 +02:00
Stephan f7a599b607 Merge branch temp8 into temp8-di2690 2018-07-26 09:59:52 +02:00
Stephan 0eb1ba56a4 Comments 2018-07-23 12:19:26 +02:00
Stephan 6d40269ade More cleanup 2018-07-23 11:08:33 +02:00
Stephan d2376bf4e3 Cleanup registrations 2018-07-23 08:56:08 +02:00
Stephan a00f2f0bb9 Refactor, fix collection builders, fix tests 2018-07-21 10:47:29 +02:00
Stephan 981152b693 Move IContainer extension methods 2018-07-20 16:39:39 +02:00
Stephan 97da0829a2 Refactor collection builders for IContainer 2018-07-20 16:36:46 +02:00
Stephan 5836cd05cb Abstract container (in progress) 2018-07-20 15:45:01 +02:00
Stephan 5a1bba8a8d Merge branch 'temp8' into temp8-di2690 2018-07-20 11:31:35 +02:00
Stephan 9e9a0d301f Cleanup and Refactor 2018-07-20 09:49:05 +02:00
Shannon 88a7d56a08 gets inline/selection commands in place, things are looking better. 2018-07-20 16:40:31 +10:00
Shannon 829edf5307 removes unecessary skin/theme for tinymce 2018-07-20 16:32:10 +10:00
Shannon ab78242dd6 Grid pre-value fixing and updates tinymce with inline theme for the grid too 2018-07-20 01:30:40 +10:00
Shannon 223d5795c3 wip - newer tinymce, with the inlite/inline theme, updated config file, plenty of fixes, now need more fixes 2018-07-20 00:55:28 +10:00
Stephan e5f09a1420 Fix SqlTemplates concurrency 2018-07-19 15:05:55 +02:00
Stephan fded7db542 Merge branch temp8 into temp8-di 2018-07-18 10:46:42 +02:00
Stephan 77083f259d WIP 2018-07-16 14:03:41 +02:00
Stephan 9341278492 Cleanup CacheHelper 2018-07-13 12:11:00 +02:00
Stephan 68d9b19f65 Merge branch temp8 into temp8-di 2018-07-12 19:24:24 +02:00
Stephan f678c72c4d DisabledCacheHelper, LightInjectContainer 2018-07-06 18:52:23 +02:00
Stephan 60d73c55d0 Cleanup IContainer 2018-07-06 18:37:35 +02:00
Stephan eb8b3965b8 Split UmbracoModule, UmbracoInjectedModule 2018-07-06 18:37:07 +02:00
Stephan 57d7888740 Merge branch temp8 into temp8-di 2018-07-06 17:49:02 +02:00
Stephan 049ff7d882 Merge branch 'temp8' into temp8-u4-11227 2018-06-29 14:29:23 +02:00
Stephan 9bc8ace8db TEMP 2018-06-29 13:17:46 +02:00
Stephan 3bd7eedf03 Merge branch 'temp8-u4-11427-remove-propertyinjection' of https://github.com/lars-erik/Umbraco-CMS into temp8-u4-11227 2018-06-29 09:10:32 +02:00
Lars-Erik Aabech 91a5605341 MembershipHelper presumably working without property injection.
(But OMG! there's nearly no test coverage of Umbraco.Web :O )
2018-06-28 23:28:22 +02:00
Lars-Erik Aabech 3d2810e6b1 Fixes constructor dependency conondrum for MediaFileSystem. It is Completely Broken (tm). Need to review whole lifetime & registration of it. 2018-06-28 22:38:38 +02:00
Lars-Erik Aabech 5f2ec566b7 Merge branch 'temp8' into temp8-u4-11427-remove-propertyinjection 2018-06-26 00:37:08 +02:00
Lars-Erik Aabech 49e9514609 Added "Slow" category to several fixtures, cutting test time in half for most regression runs. 2018-06-26 00:33:38 +02:00
Lars-Erik Aabech 3a7d7e370e MediaFileSystem now purely injected.
A bit messy, and probably leaves quite a bit of dead / useless code around that should be deleted.
Needs some manual testing.
2018-06-26 00:26:57 +02:00
Lars-Erik Aabech 34390dec12 Almost got MediaFileSystem in container. 2018-06-20 22:00:41 +02:00
Lars-Erik Aabech 590765e9c6 Tests build >< 2018-06-20 20:00:34 +02:00
Lars-Erik Aabech db2ad87784 Removed named service reference from repo ctors. Now registered with factory method that looks up services by name instead. 2018-06-20 19:57:42 +02:00
Lars-Erik Aabech 7af04b0a2f Tests pass again 2018-06-19 19:59:12 +02:00
Lars-Erik Aabech ea9ab66ba7 Removed an extra using LI. :) 2018-06-19 18:59:57 +02:00
Lars-Erik Aabech e4aca5f5d8 Several property injections removed from Mvc artifacts and base classes 2018-06-19 18:53:25 +02:00
Lars-Erik Aabech 0e37b3b61b ScopeEventDispatcherTest needs IServiceContainer to be registered. 2018-06-19 18:19:10 +02:00
Lars-Erik Aabech e3d77fb012 Current.Container abstracted. Builds, but fails for collection builder tests. 2018-06-16 13:13:29 +02:00
Lars-Erik Aabech 9b1bd3be60 UmbracoModule parameterless ctor removed.
More notes / fixme.
2018-06-14 19:14:39 +02:00
Lars-Erik Aabech a8c5cd425d DataTypeValidateAttribute now uses bastard injection.
Notes on the UmbracoModule.
Need to abstract resolving via Current.Container to remove LightInject refs.
2018-06-14 18:46:25 +02:00
Lars-Erik Aabech 4c201bcaaa HttpModules able to get injection. UmbracoModule + rest (if implemented) gets dependencies injected through ContainerUmbracoModule. 2018-06-12 23:12:44 +02:00
Shannon 0aa930d1c9 manifest dashboard code 2018-02-23 11:00:03 +10:00
2728 changed files with 69675 additions and 92069 deletions
+5 -1
View File
@@ -33,4 +33,8 @@ dotnet_naming_style.prefix_underscore.required_prefix = _
[*.cs]
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
csharp_style_var_elsewhere = true:suggestion
csharp_prefer_braces = false : none
[*.{js,less}]
trim_trailing_whitespace = false
+4 -6
View File
@@ -1,4 +1,4 @@
_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/docs/CONTRIBUTING.md) to go to the v8 branch_
_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/.github/V8_GETTING_STARTED.md) to go to the v8 branch_
# Contributing to Umbraco CMS
👍🎉 First off, thanks for taking the time to contribute! 🎉👍
@@ -16,9 +16,9 @@ This document gives you a quick overview on how to get started, we will link to
## Guidelines for contributions we welcome
Not all changes are wanted so on occassion we might close a PR without merging it. We will give you feedback why we can't accept your changes and we'll be nice about it, thanking you for spending your valueable time.
Not all changes are wanted, so on occassion we might close a PR without merging it. We will give you feedback why we can't accept your changes and we'll be nice about it, thanking you for spending your valuable time.
We have [documented what we consider small and large changes](CONTRIBUTION_GUIDELINES.md), make sure to talk to us before making large changes.
We have [documented what we consider small and large changes](CONTRIBUTION_GUIDELINES.md). Make sure to talk to us before making large changes.
Remember, if an issue is in the `Up for grabs` list or you've asked for some feedback before you sent us a PR, your PR will not be closed as unwanted.
@@ -36,7 +36,7 @@ Great question! The short version goes like this:
* **Build** - build your fork of Umbraco locally as described in [building Umbraco from source code](BUILD.md)
* **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)
* **Commit** - done? Yay! 🎉 It is recommended to create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-U4-12345`. This means it's a temporary branch for the particular issue you're working on, in this case `U4-12345`
* **Commit** - done? Yay! 🎉 It is recommended to 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 `12345`
* **Push** - great, now you can push the changes up to your fork on GitHub
* **Create pull request** - exciting! You're ready to show us your changes (or not quite ready, you just need some feedback to progress). GitHub has 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.
@@ -72,7 +72,6 @@ The pull request team consists of a member of Umbraco HQ, [Sebastiaan](https://g
- [Anders Bjerner](https://github.com/abjerner)
- [Dave Woestenborghs](https://github.com/dawoe)
- [Emma Burstow](https://github.com/emmaburstow)
- [Kyle Weems](https://github.com/cssquirrel)
- [Poornima Nayar](https://github.com/poornimanayar)
These wonderful volunteers will provide you with a first reply to your PR, review and test out your changes and might ask more questions. After that they'll let Umbraco HQ know if everything seems okay.
@@ -83,7 +82,6 @@ You can get in touch with [the PR team](#the-pr-team) in multiple ways, we love
- 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
- Unsure where to start? Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"](https://our.umbraco.com/forum/contributing-to-umbraco-cms/) forum, the team monitors that one closely
- We're also [active in the Gitter chatroom](https://gitter.im/umbraco/Umbraco-CMS)
## Code of Conduct
+11 -6
View File
@@ -19,13 +19,13 @@ When contributing code to Umbraco there's plenty of things you'll want to know,
* [What branch should I target for my contributions?](#what-branch-should-i-target-for-my-contributions)
* [Building Umbraco from source code](#building-umbraco-from-source-code)
* [Keeping your Umbraco fork in sync with the main repository](#keeping-your-umbraco-fork-in-sync-with-the-main-repository)
## How Can I Contribute?
### Reporting Bugs
This section guides you through submitting a bug report for Umbraco CMS. Following these guidelines helps maintainers and the community understand your report 📝, reproduce the behavior 💻 💻, and find related reports 🔎.
Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you don't need to create one. When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](http://issues.umbraco.org/issues#newissue=61-30118), the information it asks for helps us resolve issues faster.
Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you don't need to create one. When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](https://github.com/umbraco/Umbraco-CMS/issues/new/choose), the information it asks for helps us resolve issues faster.
> **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
@@ -52,7 +52,7 @@ Provide more context by answering these questions:
Include details about your configuration and environment:
* **Which version of Umbraco are you using?**
* **Which version of Umbraco are you using?**
* **What is the environment you're using Umbraco in?** Is this a problem on your local machine or on a server. Tell us about your configuration: Windows version, IIS/IISExpress, database type, etc.
* **Which packages do you have installed?**
@@ -80,7 +80,7 @@ The most successful pull requests usually look a like this:
* Unit tests, while optional are awesome, thank you!
* New code is commented with documentation from which [the reference documentation](https://our.umbraco.com/documentation/Reference/) is generated
Again, these are guidelines, not strict requirements.
Again, these are guidelines, not strict requirements.
## Making changes after the PR was opened
@@ -90,7 +90,7 @@ If you make the corrections we ask for in the same branch and push them to your
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.
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.
## What should I know before I get started?
@@ -104,7 +104,6 @@ There's two big areas that you should know about:
You may need to run the following commands to set up gulp properly:
```
npm cache clean
npm install -g bower
npm install -g gulp
npm install -g gulp-cli
npm install
@@ -125,6 +124,12 @@ We like to use [Gitflow as much as possible](https://jeffkreeftmeijer.com/git-fl
### Building Umbraco from source code
In order to build the Umbraco source code locally, first make sure you have the following installed.
* Visual Studio 2017 v15.3+
* Node v10+ (Installed via `build.bat` script. If you already have it installed, make sure you're running at least v10)
* npm v6.4.1+ (Installed via `build.bat` script. If you already have it installed, make sure you're running at least v6.4.1)
The easiest way to get started is to run `build.bat` which will build both the backoffice (also known as "Belle") and the Umbraco core. You can then easily start debugging from Visual Studio, or if you need to debug Belle you can run `gulp dev` in `src\Umbraco.Web.UI.Client`. See [this page](BUILD.md) for more details.
Alternatively, you can open `src\umbraco.sln` in Visual Studio 2017 (version 15.3 or higher, [the community edition is free](https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=Community&rel=15) for you to use to contribute to Open Source projects). In Visual Studio, find the Task Runner Explorer (in the View menu under Other Windows) and run the build task under the gulpfile.
+2 -2
View File
@@ -13,7 +13,7 @@ Were usually able to handle small PRs pretty quickly. A community volunteer w
Umbraco HQ will regularly mark newly created issues on the issue tracker with the `Up for grabs` tag. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. These issues are usually small enough to fit in the "Small PRs" category and we encourage anyone to pick them up and help out.
If you do start working on something, make sure 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.
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.
## 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 (NuGets packages.config, NPMs packages.json, etc.).
@@ -30,4 +30,4 @@ If a larger pull request is encouraged by Umbraco HQ, the process will be simila
If it doesnt 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 to fix bugs.
Eventually, a package could "graduate" to be included in the CMS.
Eventually, a package could "graduate" to be included in the CMS.
+4 -3
View File
@@ -1,11 +1,12 @@
### Prerequisites
- [ ] I have [created an issue](https://github.com/umbraco/Umbraco-CMS/issues) for the proposed changes in this PR, the link is:
- [ ] I have added steps to test this contribution in the description below
If there's an existing issue for this PR then this fixes: <!-- link to the issue here! -->
### Description
<!-- A description of the changes proposed in the pull-request -->
<!-- Make sure to link to the related issue number so we can easily find it in the issue tracker -->
<!-- A description of the changes proposed in the pull-request and how to test these changes -->
<!-- Thanks for contributing to Umbraco CMS! -->
+12 -11
View File
@@ -1,4 +1,5 @@
_You are browsing the Umbraco v8 branch. Umbraco 8 is currently under development._
[![pullreminders](https://pullreminders.com/badge.svg)](https://pullreminders.com?ref=badge)
_Looking for Umbraco version 7? [Click here](https://github.com/umbraco/Umbraco-CMS) to go to the v7 branch._
@@ -6,7 +7,7 @@ _Ready to try out Version 8? [See the quick start guide](V8_GETTING_STARTED.md).
When is Umbraco 8 coming?
=========================
When it's ready. We're done with the major parts of the architecture work and are focusing on three seperate tracks to prepare Umbraco 8 for release:
When it's ready. We're done with the major parts of the architecture work and are focusing on three separate tracks to prepare Umbraco 8 for release:
1) Editor Track (_currently in progress_). Without editors, there's no market for Umbraco. So we want to make sure that Umbraco 8 is full of love for editors.
2) Partner Track. Without anyone implementing Umbraco, there's nothing for editors to update. So we want to make sure that Umbraco 8 is a joy to implement
3) Contributor Track. Without our fabulous ecosystem of both individual Umbracians and 3rd party ISVs, Umbraco wouldn't be as rich a platform as it is today. We want to make sure that it's easy, straight forward and as backwards-compatible as possible to create packages for Umbraco
@@ -15,7 +16,7 @@ Once a track is done, we start releasing previews where we ask people to test th
Umbraco CMS
===========
The friendliest, most flexible and fastest growing ASP.NET CMS used by more than 443,000 websites worldwide: [https://umbraco.com](https://umbraco.com)
The friendliest, most flexible and fastest growing ASP.NET CMS, and used by more than 443,000 websites worldwide: [https://umbraco.com](https://umbraco.com)
[![ScreenShot](img/vimeo.png)](https://vimeo.com/172382998/)
@@ -28,34 +29,34 @@ Umbraco is a free open source Content Management System built on the ASP.NET pla
## Umbraco - The Friendly CMS
For the first time on the Microsoft platform, there is a free user and developer friendly CMS that makes it quick and easy to create websites - or a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, out of the box.
For the first time on the Microsoft platform, there is a free user- and developer-friendly CMS that makes it quick and easy to create websites - and a breeze to build complex web applications. Umbraco has award-winning integration capabilities and supports ASP.NET MVC or Web Forms, including User and Custom Controls, right out of the box.
Umbraco is not only loved by developers, but is a content editors dream. Enjoy intuitive editing tools, media management, responsive views and approval workflows to send your content live.
Umbraco is not only loved by developers, but is a content editor's dream. Enjoy intuitive editing tools, media management, responsive views, and approval workflows to send your content live.
Used by more than 443,000 active websites including Carlsberg, Segway, Amazon and Heinz and **The Official ASP.NET and IIS.NET website from Microsoft** ([https://asp.net](https://asp.net) / [https://iis.net](https://iis.net)), you can be sure that the technology is proven, stable and scales. Backed by the team at Umbraco HQ, and supported by a dedicated community of over 220,000 craftspeople globally, you can trust that Umbraco is a safe choice and is here to stay.
Used by more than 443,000 active websites including Carlsberg, Segway, Amazon and Heinz and **The Official ASP.NET and IIS.NET website from Microsoft** ([https://asp.net](https://asp.net) / [https://iis.net](https://iis.net)), you can be sure that the technology is proven, stable and scalable. Backed by the team at Umbraco HQ, and supported by a dedicated community of over 220,000 craftspeople globally, you can trust that Umbraco is a safe choice and is here to stay.
To view more examples, please visit [https://umbraco.com/case-studies-testimonials/](https://umbraco.com/case-studies-testimonials/)
## Why Open Source?
As an Open Source platform, Umbraco is more than just a CMS. We are transparent with our roadmap for future versions, our incremental sprint planning notes are publicly accessible and community contributions and packages are available for all to use.
As an Open Source platform, Umbraco is more than just a CMS. We are transparent with our roadmap for future versions, our incremental sprint planning notes are publicly accessible, and community contributions and packages are available for all to use.
## Trying out Umbraco CMS
[Umbraco Cloud](https://umbraco.com/cloud) is the easiest and fastest way to use Umbraco yet with full support for all your custom .NET code and intergrations. You're up and running in less than a minute and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14 day trial, no credit card needed.
[Umbraco Cloud](https://umbraco.com/cloud) is the easiest and fastest way to use Umbraco yet, with full support for all your custom .NET code and integrations. You're up and running in less than a minute, and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14-day trial, no credit card needed.
If you want to DIY you can [download Umbraco](https://our.umbraco.com/download) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host yourself and handling deployments and upgrades is all down to you.
If you want to DIY, you can [download Umbraco](https://our.umbraco.com/download) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host it yourself, and handling deployments and upgrades will be all up to you.
## Community
Our friendly community is available 24/7 at the community hub we call ["Our Umbraco"](https://our.umbraco.com). Our Umbraco feature forums for questions and answers, documentation, downloadable plugins for Umbraco and a rich collection of community resources.
Our friendly community is available 24/7 at the community hub we call ["Our Umbraco"](https://our.umbraco.com). Our Umbraco features forums for questions and answers, documentation, downloadable plugins for Umbraco, and a rich collection of community resources.
## Contribute to Umbraco
Umbraco is contribution focused and community driven. If you want to contribute back to Umbraco please check out our [guide to contributing](CONTRIBUTING.md).
Umbraco is contribution-focused and community-driven. If you want to contribute back to Umbraco, please check out our [guide to contributing](CONTRIBUTING.md).
## Found a bug?
Another way you can contribute to Umbraco is by providing issue reports. For information on how to submit an issue report refer to our [online guide for reporting issues](CONTRIBUTING_DETAILED.md#reporting-bugs).
You can comment and report issues on the [github issue tracker](https://github.com/umbraco/Umbraco-CMS/issues).
Since [September 2018](https://umbraco.com/blog/a-second-take-on-umbraco-issue-tracker-hello-github-issues/) the old issue tracker is in read only mode, but can still be found at [http://issues.umbraco.org](http://issues.umbraco.org).
Since [September 2018](https://umbraco.com/blog/a-second-take-on-umbraco-issue-tracker-hello-github-issues/), the old issue tracker is in read-only mode, but can still be found at [http://issues.umbraco.org](http://issues.umbraco.org).
+2 -2
View File
@@ -11,7 +11,7 @@
* Open the `/src/umbraco.sln` Visual Studio solution
* Start the solution (easiest way is to use `ctrl + F5`)
* When the solution is first built this may take some time since it will restore all nuget, npm and bower packages, build the .net solution and also build the angular solution
* When the solution is first built this may take some time since it will restore all nuget and npm packages, build the .net solution and also build the angular solution
* When the website starts you'll see the Umbraco installer and just follow the prompts
* You're all set!
@@ -33,5 +33,5 @@ We recommend running the site with the Visual Studio since you'll be able to rem
We are keeping track of [known issues and limitations here](http://issues.umbraco.org/issue/U4-11279). These line items will eventually be turned into actual tasks to be worked on. Feel free to help us keep this list updated if you find issues and even help fix some of these items. If there is a particular item you'd like to help fix please mention this on the task and we'll create a sub task for the item to continue discussion there.
There's [a list of tasks for v8 that haven't been completed](https://issues.umbraco.org/issues?q=&project=U4&tagValue=&release=8.0.0&issueType=&resolvedState=open&search=search). If you are interested in helping out with any of these please mention this on the task. This list will be constantly updated as we begin to document and design some of the other tasks that still need to get done.
There's [a list of tasks for v8 that haven't been completed](https://github.com/umbraco/Umbraco-CMS/labels/release%2F8.0.0). If you are interested in helping out with any of these please mention this on the task. This list will be constantly updated as we begin to document and design some of the other tasks that still need to get done.
+3 -1
View File
@@ -13,6 +13,7 @@
*.suo
*.vs10x
*.ndproj
*.ignorer.*
# common directories
.DS_Store
@@ -107,6 +108,7 @@ src/Umbraco.Web.UI.Client/[Bb]uild/[Bb]elle/
src/Umbraco.Web.UI/[Uu]ser[Cc]ontrols/
src/Umbraco.Web.UI.Client/src/[Ll]ess/*.css
src/Umbraco.Web.UI.Client/vwd.webinfo
src/Umbraco.Web.UI/App_Plugins/*
src/*.psess
@@ -155,4 +157,4 @@ build/temp/
# eof
# eof
+20 -20
View File
@@ -3,57 +3,57 @@
[string]$Directory
)
$workingDirectory = $Directory
CD $workingDirectory
CD "$($workingDirectory)"
# Clone repo
$fullGitUrl = "https://$env:GIT_URL/$env:GIT_REPOSITORYNAME.git"
git clone $fullGitUrl 2>&1 | % { $_.ToString() }
$fullGitUrl = "https://$($env:GIT_URL)/$($env:GIT_REPOSITORYNAME).git"
git clone $($fullGitUrl) $($env:GIT_REPOSITORYNAME) 2>&1 | % { $_.ToString() }
# Remove everything so that unzipping the release later will update everything
# Don't remove the readme file nor the git directory
Write-Host "Cleaning up git directory before adding new version"
Remove-Item -Recurse $workingDirectory\$env:GIT_REPOSITORYNAME\* -Exclude README.md,.git
Remove-Item -Recurse "$($workingDirectory)\$($env:GIT_REPOSITORYNAME)\*" -Exclude README.md,.git
# Find release zip
$zipsDir = "$workingDirectory\$env:BUILD_DEFINITIONNAME\zips"
$zipsDir = "$($workingDirectory)\$($env:BUILD_DEFINITIONNAME)\zips"
$pattern = "UmbracoCms.([0-9]{1,2}.[0-9]{1,3}.[0-9]{1,3}).zip"
Write-Host "Searching for Umbraco release files in $workingDirectory\$zipsDir for a file with pattern $pattern"
$file = (Get-ChildItem $zipsDir | Where-Object { $_.Name -match "$pattern" })
Write-Host "Searching for Umbraco release files in $($zipsDir) for a file with pattern $($pattern)"
$file = (Get-ChildItem "$($zipsDir)" | Where-Object { $_.Name -match "$($pattern)" })
if($file)
{
# Get release name
$version = [regex]::Match($file.Name, $pattern).captures.groups[1].value
$releaseName = "Umbraco $version"
Write-Host "Found $releaseName"
$version = [regex]::Match($($file.Name), $($pattern)).captures.groups[1].value
$releaseName = "Umbraco $($version)"
Write-Host "Found $($releaseName)"
# Unzip into repository to update release
Add-Type -AssemblyName System.IO.Compression.FileSystem
Write-Host "Unzipping $($file.FullName) to $workingDirectory\$env:GIT_REPOSITORYNAME"
[System.IO.Compression.ZipFile]::ExtractToDirectory("$($file.FullName)", "$workingDirectory\$env:GIT_REPOSITORYNAME")
Write-Host "Unzipping $($file.FullName) to $($workingDirectory)\$($env:GIT_REPOSITORYNAME)"
[System.IO.Compression.ZipFile]::ExtractToDirectory("$($file.FullName)", "$($workingDirectory)\$($env:GIT_REPOSITORYNAME)")
# Telling git who we are
git config --global user.email "coffee@umbraco.com" 2>&1 | % { $_.ToString() }
git config --global user.name "Umbraco HQ" 2>&1 | % { $_.ToString() }
# Commit
CD $env:GIT_REPOSITORYNAME
Write-Host "Committing Umbraco $version Release from Build Output"
CD "$($workingDirectory)\$($env:GIT_REPOSITORYNAME)"
Write-Host "Committing Umbraco $($version) Release from Build Output"
git add . 2>&1 | % { $_.ToString() }
git commit -m " Release $releaseName from Build Output" 2>&1 | % { $_.ToString() }
git commit -m " Release $($releaseName) from Build Output" 2>&1 | % { $_.ToString() }
# Tag the release
git tag -a "v$version" -m "v$version"
git tag -a "v$($version)" -m "v$($version)"
# Push release to master
$fullGitAuthUrl = "https://$($env:GIT_USERNAME):$GitHubPersonalAccessToken@$env:GIT_URL/$env:GIT_REPOSITORYNAME.git"
git push $fullGitAuthUrl 2>&1 | % { $_.ToString() }
$fullGitAuthUrl = "https://$($env:GIT_USERNAME):$($GitHubPersonalAccessToken)@$($env:GIT_URL)/$($env:GIT_REPOSITORYNAME).git"
git push $($fullGitAuthUrl) 2>&1 | % { $_.ToString() }
#Push tag to master
git push $fullGitAuthUrl --tags 2>&1 | % { $_.ToString() }
git push $($fullGitAuthUrl) --tags 2>&1 | % { $_.ToString() }
}
else
{
Write-Error "Umbraco release file not found, searched in $workingDirectory\$zipsDir for a file with pattern $pattern - cancelling"
Write-Error "Umbraco release file not found, searched in $($workingDirectory)\$($zipsDir) for a file with pattern $($pattern) - canceling"
}
+30 -26
View File
@@ -8,38 +8,42 @@
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<iconUrl>https://umbraco.com/dist/nuget/logo-small.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the core assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<!--
note: dependencies are specified as [x.y.z,x.999999) eg [2.1.0,2.999999) and NOT [2.1.0,3.0.0) because
the latter would pick anything below 3.0.0 and that includes prereleases such as 3.0.0-alpha, and we do
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="AutoMapper" version="[7.0.1,7.999999)" />
<dependency id="LightInject" version="[5.1.2,5.999999)" />
<dependency id="LightInject.Annotation" version="[1.1.0,1.999999)" />
<dependency id="LightInject.Web" version="[2.0.0,2.999999)" />
<dependency id="Microsoft.AspNet.Identity.Core" version="[2.2.2,2.999999)" />
<dependency id="Microsoft.AspNet.WebApi.Client" version="[5.2.6,5.999999)" />
<dependency id="Microsoft.Owin" version="[4.0.0,4.999999)" />
<dependency id="MiniProfiler" version="[3.2.0.157,3.999999)" />
<dependency id="MySql.Data" version="[6.10.7,6.999999)" />
<dependency id="Newtonsoft.Json" version="[11.0.2,11.999999)" />
<dependency id="Semver" version="[2.0.4,2.999999)" />
<dependency id="Serilog" version="[2.7.1,2.999999)" />
<dependency id="Serilog.Enrichers.Process" version="[2.0.1,2.999999)" />
<dependency id="Serilog.Enrichers.Thread" version="[3.0.0,3.999999)" />
<dependency id="Serilog.Filters.Expressions" version="[2.0.0,2.999999)" />
<dependency id="Serilog.Formatting.Compact" version="[1.0.0,1.999999)" />
<dependency id="Serilog.Settings.AppSettings" version="[2.1.2,2.999999)" />
<dependency id="Serilog.Sinks.File" version="[4.0.0,4.999999)" />
<dependency id="Umbraco.SqlServerCE" version="[4.0.0.1,4.999999)" />
<dependency id="NPoco" version="[3.9.4,3.999999)" />
<group targetFramework="net472">
<!--
note: dependencies are specified as [x.y.z,x.999999) eg [2.1.0,2.999999) and NOT [2.1.0,3.0.0) because
the latter would pick anything below 3.0.0 and that includes prereleases such as 3.0.0-alpha, and we do
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="AutoMapper" version="[8.0.0,8.999999)" />
<dependency id="LightInject" version="[5.4.0,5.999999)" />
<dependency id="LightInject.Annotation" version="[1.1.0,1.999999)" />
<dependency id="LightInject.Web" version="[2.0.0,2.999999)" />
<dependency id="Microsoft.AspNet.Identity.Core" version="[2.2.2,2.999999)" />
<dependency id="Microsoft.AspNet.WebApi.Client" version="[5.2.7,5.999999)" />
<dependency id="Microsoft.Owin" version="[4.0.1,4.999999)" />
<dependency id="MiniProfiler" version="[4.0.138,4.999999)" />
<dependency id="Newtonsoft.Json" version="[12.0.1,12.999999)" />
<dependency id="Semver" version="[2.0.4,2.999999)" />
<dependency id="Serilog" version="[2.8.0,2.999999)" />
<dependency id="Serilog.Enrichers.Process" version="[2.0.1,2.999999)" />
<dependency id="Serilog.Enrichers.Thread" version="[3.0.0,3.999999)" />
<dependency id="Serilog.Filters.Expressions" version="[2.0.0,2.999999)" />
<dependency id="Serilog.Formatting.Compact" version="[1.0.0,1.999999)" />
<dependency id="Serilog.Formatting.Compact.Reader" version="[1.0.3,1.999999)" />
<dependency id="Serilog.Settings.AppSettings" version="[2.2.2,2.999999)" />
<dependency id="Serilog.Sinks.File" version="[4.0.0,4.999999)" />
<dependency id="Umbraco.SqlServerCE" version="[4.0.0.1,4.999999)" />
<dependency id="NPoco" version="[3.9.4,3.999999)" />
</group>
</dependencies>
</metadata>
<files>
+30 -26
View File
@@ -8,38 +8,42 @@
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<iconUrl>https://umbraco.com/dist/nuget/logo-small.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the web assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<!--
note: dependencies are specified as [x.y.z,x.999999) eg [2.1.0,2.999999) and NOT [2.1.0,3.0.0) because
the latter would pick anything below 3.0.0 and that includes prereleases such as 3.0.0-alpha, and we do
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="AutoMapper" version="[7.0.1,7.999999)" />
<dependency id="ClientDependency" version="[1.9.7,1.999999)" />
<dependency id="ClientDependency-Mvc5" version="[1.8.0,1.999999)" />
<dependency id="CSharpTest.Net.Collections" version="[14.906.1403.1082,14.999999)" />
<dependency id="Examine" version="[1.0.0-beta025,1.999999)" />
<dependency id="Lucene.Net.Contrib" version="[3.0.3,3.999999)" />
<dependency id="HtmlAgilityPack" version="[1.8.9,1.999999)" />
<dependency id="ImageProcessor" version="[2.6.2.25,2.999999)" />
<dependency id="LightInject.Mvc" version="[2.0.0,2.999999)" />
<dependency id="LightInject.WebApi" version="[2.0.0,2.999999)" />
<dependency id="Markdown" version="[2.2.1,2.999999)" />
<dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.2,2.999999)" />
<dependency id="Microsoft.AspNet.Mvc" version="[5.2.6,5.999999)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.3,2.999999)" />
<dependency id="Microsoft.AspNet.WebApi" version="[5.2.6,5.999999)" />
<dependency id="Microsoft.Owin.Host.SystemWeb" version="[4.0.0,4.999999)" />
<dependency id="Microsoft.Owin.Security.Cookies" version="[4.0.0,4.999999)" />
<dependency id="Microsoft.Owin.Security.OAuth" version="[4.0.0,4.999999)" />
<dependency id="System.Threading.Tasks.Dataflow" version="[4.8.0,4.999999)" />
<group targetFramework="net472">
<!--
note: dependencies are specified as [x.y.z,x.999999) eg [2.1.0,2.999999) and NOT [2.1.0,3.0.0) because
the latter would pick anything below 3.0.0 and that includes prereleases such as 3.0.0-alpha, and we do
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="ClientDependency" version="[1.9.7,1.999999)" />
<dependency id="ClientDependency-Mvc5" version="[1.8.0,1.999999)" />
<dependency id="CSharpTest.Net.Collections" version="[14.906.1403.1082,14.999999)" />
<dependency id="Examine" version="[1.0.0-beta078,1.999999)" />
<dependency id="HtmlAgilityPack" version="[1.8.14,1.999999)" />
<dependency id="ImageProcessor" version="[2.6.2.25,2.999999)" />
<dependency id="LightInject.Mvc" version="[2.0.0,2.999999)" />
<dependency id="LightInject.WebApi" version="[2.0.0,2.999999)" />
<dependency id="Markdown" version="[2.2.1,2.999999)" />
<dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.2,2.999999)" />
<dependency id="Microsoft.AspNet.Mvc" version="[5.2.7,5.999999)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.4.0,2.999999)" />
<dependency id="Microsoft.AspNet.WebApi" version="[5.2.7,5.999999)" />
<dependency id="Microsoft.Owin.Host.SystemWeb" version="[4.0.1,4.999999)" />
<dependency id="Microsoft.Owin.Security.Cookies" version="[4.0.1,4.999999)" />
<dependency id="Microsoft.Owin.Security.OAuth" version="[4.0.1,4.999999)" />
<dependency id="System.Threading.Tasks.Dataflow" version="[4.9.0,4.999999)" />
</group>
</dependencies>
</metadata>
<files>
+21 -18
View File
@@ -8,32 +8,38 @@
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<iconUrl>https://umbraco.com/dist/nuget/logo-small.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Installs Umbraco Cms in your Visual Studio ASP.NET project</description>
<summary>Installs Umbraco Cms in your Visual Studio ASP.NET project</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<dependency id="UmbracoCms.Web" version="[$version$]" />
<!--
note: dependencies are specified as [x.y.z,x.999999) eg [2.1.0,2.999999) and NOT [2.1.0,3.0.0) because
the latter would pick anything below 3.0.0 and that includes prereleases such as 3.0.0-alpha, and we do
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.3, 2.999999)" />
<dependency id="Umbraco.ModelsBuilder.Ui" version="[8.0.0-alpha.24]" />
<dependency id="ImageProcessor.Web" version="[4.9.3.25,4.999999)" />
<dependency id="ImageProcessor.Web.Config" version="[2.4.1.19,2.999999)" />
<dependency id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="[2.0.0,2.999999)" />
<dependency id="Microsoft.Net.Compilers" version="[2.9.0,2.999999)" />
<group targetFramework="net472">
<dependency id="UmbracoCms.Web" version="[$version$]" />
<!--
note: dependencies are specified as [x.y.z,x.999999) eg [2.1.0,2.999999) and NOT [2.1.0,3.0.0) because
the latter would pick anything below 3.0.0 and that includes prereleases such as 3.0.0-alpha, and we do
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.4.0, 2.999999)" />
<dependency id="Umbraco.ModelsBuilder.Ui" version="[8.0.0-alpha.37]" />
<dependency id="ImageProcessor.Web" version="[4.9.3.25,4.999999)" />
<dependency id="ImageProcessor.Web.Config" version="[2.4.1.19,2.999999)" />
<dependency id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="[2.0.1,2.999999)" />
<dependency id="Microsoft.Net.Compilers" version="[2.10.0,2.999999)" />
</group>
</dependencies>
</metadata>
<files>
<!-- files -->
<file src="$BuildTmp$\Configs\**" target="Content\Config" exclude="$BuildTmp$\Configs\Web.config.transform" />
<file src="$BuildTmp$\WebApp\Views\**" target="Content\Views" exclude="$BuildTmp$\WebApp\Views\Web.config" />
<file src="$BuildTmp$\WebApp\default.aspx" target="Content\default.aspx" />
<file src="$BuildTmp$\WebApp\Global.asax" target="Content\Global.asax" />
<file src="$BuildTmp$\WebApp\config\BackOfficeTours\**" target="Content\Config\BackOfficeTours" />
<file src="$BuildTmp$\WebApp\Media\Web.config" target="Content\Media\Web.config" />
@@ -52,12 +58,9 @@
<!-- config transforms -->
<!-- beware! config transforms not supported by PackageReference -->
<file src="tools\Web.config.install.xdt" target="Content\Web.config.install.xdt" />
<file src="tools\applications.config.install.xdt" target="Content\config\applications.config.install.xdt" />
<file src="tools\ClientDependency.config.install.xdt" target="Content\config\ClientDependency.config.install.xdt" />
<file src="tools\Dashboard.config.install.xdt" target="Content\config\Dashboard.config.install.xdt" />
<file src="tools\trees.config.install.xdt" target="Content\config\trees.config.install.xdt" />
<file src="tools\umbracoSettings.config.install.xdt" target="Content\config\umbracoSettings.config.install.xdt" />
<file src="tools\Views.Web.config.install.xdt" target="Views\Web.config.install.xdt" /> <!-- FIXME Content\ !! and then... transform?! -->
<file src="tools\Views.Web.config.install.xdt" target="Views\Web.config.install.xdt" /> <!-- FIXME: Content\ !! and then... transform?! -->
<!-- UmbracoCms props and targets -->
<file src="build\**" target="build" />
@@ -1,95 +0,0 @@
<?xml version="1.0"?>
<dashBoard xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<section alias="StartupSettingsDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<tab caption="Get Started" xdt:Locator="Match(caption)" xdt:Transform="Remove" />
<tab caption="Welcome" xdt:Locator="Match(caption)" xdt:Transform="InsertIfMissing">
<control showOnce="true" addPanel="true" panelCaption="" xdt:Transform="InsertIfMissing">
views/dashboard/settings/settingsdashboardintro.html
</control>
</tab>
</section>
<section alias="StartupFormsDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<areas>
<area>forms</area>
</areas>
<tab caption="Install Umbraco Forms">
<control showOnce="true" addPanel="true" panelCaption="">
views/dashboard/forms/formsdashboardintro.html
</control>
</tab>
</section>
<section alias="StartupDeveloperDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<areas xdt:Transform="InsertIfMissing">
<area xdt:Transform="InsertIfMissing">developer</area>
</areas>
</section>
<section alias="StartupDeveloperDashboardSection">
<tab caption="Get Started" xdt:Locator="Match(caption)" xdt:Transform="Replace">
<control showOnce="true" addPanel="true" panelCaption="">
views/dashboard/developer/developerdashboardvideos.html
</control>
</tab>
<tab caption="Examine Management" xdt:Locator="Match(caption)" xdt:Transform="Remove" />
</section>
<section alias="StartupDeveloperDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<tab caption="Examine Management" xdt:Locator="Match(caption)" xdt:Transform="InsertIfMissing">
<control>
views/dashboard/developer/examinemanagement.html
</control>
</tab>
</section>
<section alias="StartupMediaDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<tab caption="Get Started" xdt:Locator="Match(caption)" xdt:Transform="Remove" />
<tab caption="Content" xdt:Locator="Match(caption)" xdt:Transform="InsertIfMissing" />
<tab caption="Content" xdt:Locator="Match(caption)" xdt:Transform="Replace">
<control showOnce="false" addPanel="false" panelCaption="">
views/dashboard/media/mediafolderbrowser.html
</control>
</tab>
</section>
<section alias="StartupMemberDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<tab caption="Get Started" xdt:Locator="Match(caption)" xdt:Transform="Remove" />
<tab caption="Get Started" xdt:Transform="Insert">
<control showOnce="true" addPanel="true" panelCaption="">
views/dashboard/members/membersdashboardvideos.html
</control>
</tab>
</section>
<section alias="uGoLiveDashboardSection" xdt:Locator="Match(alias)" xdt:Transform="Remove" />
<section alias="ExamineManagement" xdt:Locator="Match(alias)" xdt:Transform="Remove" />
<section alias="StartupDashboardSection">
<tab caption="Change Password" xdt:Locator="Match(caption)" xdt:Transform="Remove" />
<tab caption="Last Edits" xdt:Locator="Match(caption)" xdt:Transform="Remove" />
</section>
<section alias="RedirectUrlManagement" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<areas>
<area>content</area>
</areas>
<tab caption="Redirect URL Management">
<control>
views/dashboard/developer/redirecturls.html
</control>
</tab>
</section>
<section alias="UmbracoHealthCheck" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing">
<areas>
<area>developer</area>
</areas>
<tab caption="Health Check">
<control>
views/dashboard/developer/healthcheck.html
</control>
</tab>
</section>
</dashBoard>
+4 -23
View File
@@ -2,17 +2,11 @@
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<configSections xdt:Transform="InsertIfMissing" />
<configSections>
<section name="FileSystemProviders" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<section name="ExamineLuceneIndexSets" type="Umbraco.Examine.Config.IndexSets, Umbraco.Examine" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="SetAttributes(type,requirePermission)" />
<sectionGroup name="applicationSettings" xdt:Locator="Match(name)">
<section name="umbraco.presentation.Properties.Settings" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</sectionGroup>
<sectionGroup name="applicationSettings" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<sectionGroup name="system.web.webPages.razor" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<sectionGroup name="umbracoConfiguration" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing">
<section name="settings" type="Umbraco.Core.Configuration.UmbracoSettings.UmbracoSettingsSection, Umbraco.Core" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
<section name="FileSystemProviders" type="Umbraco.Core.Configuration.FileSystemProvidersSection, Umbraco.Core" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
<section name="dashBoard" type="Umbraco.Core.Configuration.Dashboard.DashboardSection, Umbraco.Core" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
<section name="dashBoard" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<section name="HealthChecks" type="Umbraco.Core.Configuration.HealthChecks.HealthChecksSection, Umbraco.Core" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</sectionGroup>
</configSections>
@@ -22,26 +16,18 @@
<add key="owin:appStartup" value="UmbracoDefaultOwinStartup" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
<add key="Umbraco.ModelsBuilder.Enable" value="false" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
<add key="Umbraco.ModelsBuilder.ModelsMode" value="Nothing" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
<add key="umbracoDefaultUILanguage" value="en-US" xdt:Locator="Match(key)" xdt:Transform="SetAttributes(value)" />
</appSettings>
<umbracoConfiguration xdt:Transform="InsertIfMissing">
<settings configSource="config\umbracoSettings.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
<FileSystemProviders configSource="config\FileSystemProviders.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
<dashBoard configSource="config\Dashboard.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
<dashBoard configSource="config\Dashboard.config" xdt:Locator="Match(configSource)" xdt:Transform="Remove" />
<HealthChecks configSource="config\HealthChecks.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
</umbracoConfiguration>
<FileSystemProviders xdt:Transform="Remove" />
<system.data xdt:Transform="InsertIfMissing">
<DbProviderFactories xdt:Transform="InsertIfMissing">
<remove invariant="System.Data.SqlServerCe.4.0" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<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" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(invariant,description,type)" />
<remove invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="Remove" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(type)" />
</DbProviderFactories>
</system.data>
<clientDependency xdt:Transform="RemoveAttributes(version)" />
@@ -49,14 +35,9 @@
<system.web xdt:Transform="InsertIfMissing" />
<system.web>
<siteMap xdt:Transform="Remove" />
<siteMap xdt:Transform="InsertIfMissing">
<providers xdt:Transform="InsertIfMissing">
<remove name="MySqlSiteMapProvider" xdt:Transform="InsertIfMissing" />
</providers>
</siteMap>
<httpRuntime xdt:Transform="InsertIfMissing" />
<httpRuntime maxRequestLength="51200" fcnMode="Single" xdt:Transform="SetAttributes(fcnMode,maxRequestLength)" />
<httpRuntime targetFramework="4.5" xdt:Locator="Condition(count(@targetFramework) != 1)" xdt:Transform="SetAttributes(targetFramework)" />
<httpRuntime targetFramework="4.7.2" xdt:Locator="Condition(count(@targetFramework) != 1)" xdt:Transform="SetAttributes(targetFramework)" />
<membership defaultProvider="DefaultMembershipProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove" />
<roleManager defaultProvider="DefaultRoleProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>
-1
View File
@@ -73,7 +73,6 @@ if ($project) {
if(Test-Path $umbracoBinFolder\Microsoft.Web.Helpers.dll) { Remove-Item $umbracoBinFolder\Microsoft.Web.Helpers.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Web.Mvc.FixedDisplayModes.dll) { Remove-Item $umbracoBinFolder\Microsoft.Web.Mvc.FixedDisplayModes.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\MiniProfiler.dll) { Remove-Item $umbracoBinFolder\MiniProfiler.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\MySql.Data.dll) { Remove-Item $umbracoBinFolder\MySql.Data.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Newtonsoft.Json.dll) { Remove-Item $umbracoBinFolder\Newtonsoft.Json.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Owin.dll) { Remove-Item $umbracoBinFolder\Owin.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Semver.dll) { Remove-Item $umbracoBinFolder\Semver.dll -Force -Confirm:$false }
+1 -30
View File
@@ -54,7 +54,7 @@ if ($project) {
[xml]$config = Get-Content $destinationWebConfig
$config.configuration.appSettings.ChildNodes | ForEach-Object {
if($_.key -eq "umbracoConfigurationStatus")
if($_.key -eq "Umbraco.Core.ConfigurationStatus")
{
# The web.config has an umbraco-specific appSetting in it
# don't overwrite it and let config transforms do their thing
@@ -77,10 +77,6 @@ if ($project) {
$splashesDestination = Join-Path $projectPath "Config\splashes\"
New-Item $splashesDestination -Type directory
Copy-Item $splashesSource $splashesDestination -Force
$umbracoUIXMLSource = Join-Path $installPath "UmbracoFiles\Umbraco\Config\Create\UI.xml"
$umbracoUIXMLDestination = Join-Path $projectPath "Umbraco\Config\Create\UI.xml"
Copy-Item $umbracoUIXMLSource $umbracoUIXMLDestination -Force
} else {
# This part only runs for upgrades
@@ -102,31 +98,6 @@ if ($project) {
{
# Not a big problem if this fails, let it go
}
Try
{
$uiXmlConfigPath = Join-Path $umbracoFolder -ChildPath "Config" | Join-Path -ChildPath "create" | Join-Path -ChildPath "UI.xml"
$uiXmlFile = Join-Path $umbracoFolder -ChildPath "Config" | Join-Path -ChildPath "create" | Join-Path -ChildPath "UI.xml"
$uiXml = New-Object System.Xml.XmlDocument
$uiXml.PreserveWhitespace = $true
$uiXml.Load($uiXmlFile)
$createExists = $uiXml.SelectNodes("//nodeType[@alias='macros']/tasks/create")
if($createExists.Count -eq 0)
{
$macrosTasksNode = $uiXml.SelectNodes("//nodeType[@alias='macros']/tasks")
#Creating: <create assembly="umbraco" type="macroTasks" />
$createNode = $uiXml.CreateElement("create")
$createNode.SetAttribute("assembly", "umbraco")
$createNode.SetAttribute("type", "macroTasks")
$macrosTasksNode.AppendChild($createNode)
$uiXml.Save($uiXmlFile)
}
}
Catch { }
}
$installFolder = Join-Path $projectPath "Install"
@@ -1,20 +0,0 @@
<?xml version="1.0"?>
<log4net xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appender name="AsynchronousLog4NetAppender" xdt:Transform="Remove" xdt:Locator="Match(name)" />
<appender name="AsynchronousLog4NetAppender" type="Umbraco.Core.Logging.ParallelForwardingAppender,Umbraco.Core" xdt:Transform="Insert" >
<appender-ref ref="rollingFile" />
</appender>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender" xdt:Transform="InsertIfMissing">
<file value="App_Data\Logs\UmbracoTraceLog.txt" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value=" %date [P%property{processId}/D%property{appDomainId}/T%thread] %-5level %logger - %message%newline" />
</layout>
<encoding value="utf-8" />
</appender>
</log4net>
@@ -1,143 +0,0 @@
<?xml version="1.0"?>
<trees xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--Content-->
<add alias="content" application="content"
xdt:Locator="Match(application,alias)"
xdt:Transform="RemoveAttributes(silent)" />
<add initialize="false" sortOrder="0" alias="contentRecycleBin" application="content" title="Recycle Bin" iconClosed="icon-folder" iconOpen="icon-folder" type="umbraco.cms.presentation.Trees.ContentRecycleBin, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add initialize="true" sortOrder="0" alias="content" application="content" title="Content" iconClosed="icon-folder" iconOpen="icon-folder" type="Umbraco.Web.Trees.ContentTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<!--Media-->
<add initialize="true" sortOrder="0" alias="media" application="media" title="Media" iconClosed="icon-folder" iconOpen="icon-folder" type="Umbraco.Web.Trees.MediaTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add initialize="false" sortOrder="0" alias="mediaRecycleBin" application="media" title="Recycle Bin" iconClosed="icon-folder" iconOpen="icon-folder" type="umbraco.cms.presentation.Trees.MediaRecycleBin, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<!--Settings-->
<add application="settings" alias="nodeTypes"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<add initialize="true" sortOrder="0" alias="documentTypes" application="settings" title="Document Types" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.ContentTypeTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<add application="settings" alias="stylesheets" title="Stylesheets" type="umbraco.loadStylesheets, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="3"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="settings" alias="stylesheetProperty" title="Stylesheet Property" type="umbraco.loadStylesheetProperty, Umbraco.Web" iconClosed="" iconOpen="" initialize="false" sortOrder="0"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="settings" alias="templates" title="Templates" type="Umbraco.Web.Trees.TemplatesTreeController, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder-open" sortOrder="1"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="settings" alias="partialViews" type="Umbraco.Web.Trees.PartialViewsTree, Umbraco.Web"
xdt:Locator="Match(application,alias,type)"
xdt:Transform="Remove()" />
<add application="settings" alias="partialViews" title="Partial Views" silent="false" initialize="true" iconClosed="icon-folder" iconOpen="icon-folder" type="Umbraco.Web.Trees.PartialViewsTreeController, Umbraco.Web" sortOrder="2"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<add application="settings" alias="scripts" title="Scripts" type="Umbraco.Web.Trees.ScriptTreeController, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="settings" alias="dictionary" title="Dictionary" type="Umbraco.Web.Trees.DictionaryTreeController, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="8"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add alias="dictionary" application="settings"
xdt:Locator="Match(application,alias)"
xdt:Transform="RemoveAttributes(action)" />
<add application="settings" alias="languages" title="Languages" type="Umbraco.Web.Trees.LanguageTreeController, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder-open" sortOrder="5"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="settings" initialize="true" alias="mediaTypes" title="Media Types" type="Umbraco.Web.Trees.MediaTypeTreeController, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder-open" sortOrder="7"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<!--Developer-->
<add alias="packager" application="developer"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<add alias="packagerPackages" application="developer"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<add initialize="true" sortOrder="0" alias="packager" application="developer" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.PackagesTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<!-- Before 7.4 this tree had the alias 'dataType', without the 's' on the end, this is here to rename it -->
<add sortOrder="1" alias="dataTypes" application="developer" type="Umbraco.Web.Trees.DataTypeTreeController, Umbraco.Web"
xdt:Locator="Match(application,type)"
xdt:Transform="SetAttributes(alias,sortOrder)" />
<!-- Yes, set the sortOrder again, like above because.. sometimes apparently we already have a dataTypes node and we can't remove more than one.. if they're equal though (same alias,application and sortOrder) it doesn't throw an error -->
<add sortOrder="1" alias="dataTypes" application="developer"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes(sortOrder)" />
<add initialize="true" sortOrder="2" alias="macros" application="developer" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MacroTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="developer" alias="relationTypes" title="Relation Types" type="umbraco.loadRelationTypes, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="developer" alias="partialViewMacros" type="Umbraco.Web.Trees.PartialViewMacrosTree, Umbraco.Web"
xdt:Locator="Match(application,alias,type)"
xdt:Transform="Remove()" />
<add application="developer" alias="partialViewMacros" type="Umbraco.Web.Trees.PartialViewMacrosTreeController, Umbraco.Web" silent="false" initialize="true" sortOrder="6" title="Partial View Macro Files" iconClosed="icon-folder" iconOpen="icon-folder"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<add application="developer" alias="python"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<!--Users-->
<add initialize="true" sortOrder="0" alias="users" application="users" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.UserTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="users" alias="userTypes"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<add application="users" alias="userPermissions"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<!--Members-->
<add initialize="true" sortOrder="0" alias="member" application="member" title="Members" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.MemberTreeController, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="member" alias="memberGroup"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<add application="member" sortOrder="2" alias="memberGroups" title="Member Groups" type="umbraco.loadMemberGroups, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<add application="member" alias="memberType"
xdt:Locator="Match(application,alias)"
xdt:Transform="Remove" />
<add application="member" sortOrder="1" alias="memberTypes" initialize="true" title="Member Types" type="Umbraco.Web.Trees.MemberTypeTreeController, Umbraco.Web" iconClosed="icon-folder" iconOpen="icon-folder-open"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<!--Translation-->
<add silent="false" initialize="true" sortOrder="1" alias="openTasks" application="translation" title="Tasks assigned to you" iconClosed="icon-folder" iconOpen="icon-folder" type="umbraco.loadOpenTasks, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add alias="openTasks" application="translation"
xdt:Locator="Match(application,alias)"
xdt:Transform="RemoveAttributes(action)" />
<add silent="false" initialize="true" sortOrder="2" alias="yourTasks" application="translation" title="Tasks created by you" iconClosed="icon-folder" iconOpen="icon-folder" type="umbraco.loadYourTasks, Umbraco.Web"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add alias="yourTasks" application="translation"
xdt:Locator="Match(application,alias)"
xdt:Transform="RemoveAttributes(action)" />
</trees>
+44 -46
View File
@@ -43,14 +43,6 @@
$release = "" + $semver.Major + "." + $semver.Minor + "." + $semver.Patch
Write-Host "Update UmbracoVersion.cs"
$this.ReplaceFileText("$($this.SolutionRoot)\src\Umbraco.Core\Configuration\UmbracoVersion.cs", `
"(\d+)\.(\d+)\.(\d+)(.(\d+))?", `
"$release")
$this.ReplaceFileText("$($this.SolutionRoot)\src\Umbraco.Core\Configuration\UmbracoVersion.cs", `
"CurrentComment => `"(.+)`"", `
"CurrentComment => `"$($semver.PreRelease)`"")
Write-Host "Update IIS Express port in csproj"
$updater = New-Object "Umbraco.Build.ExpressPortUpdater"
$csproj = "$($this.SolutionRoot)\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj"
@@ -69,7 +61,7 @@
$global:node_nodepath = $this.ClearEnvVar("NODEPATH")
$global:node_npmcache = $this.ClearEnvVar("NPM_CONFIG_CACHE")
$global:node_npmprefix = $this.ClearEnvVar("NPM_CONFIG_PREFIX")
# https://github.com/gruntjs/grunt-contrib-connect/issues/235
$this.SetEnvVar("NODE_NO_HTTP2", "1")
})
@@ -81,7 +73,7 @@
$this.SetEnvVar("NODEPATH", $node_nodepath)
$this.SetEnvVar("NPM_CONFIG_CACHE", $node_npmcache)
$this.SetEnvVar("NPM_CONFIG_PREFIX", $node_npmprefix)
$ignore = $this.ClearEnvVar("NODE_NO_HTTP2")
})
@@ -100,44 +92,40 @@
# so we have to take care of it else they'll bubble and kill the build
if ($error.Count -gt 0) { return }
Push-Location "$($this.SolutionRoot)\src\Umbraco.Web.UI.Client"
Write-Output "" > $log
try {
Push-Location "$($this.SolutionRoot)\src\Umbraco.Web.UI.Client"
Write-Output "" > $log
Write-Output "### node version is:" > $log
&node -v >> $log 2>&1
if (-not $?) { throw "Failed to report node version." }
Write-Output "### node version is:" > $log
node -v >> $log 2>&1
if (-not $?) { throw "Failed to report node version." }
Write-Output "### npm version is:" >> $log 2>&1
&npm -v >> $log 2>&1
if (-not $?) { throw "Failed to report npm version." }
Write-Output "### npm version is:" >> $log 2>&1
npm -v >> $log 2>&1
if (-not $?) { throw "Failed to report npm version." }
Write-Output "### clean npm cache" >> $log 2>&1
&npm cache clean --force >> $log 2>&1
$error.Clear() # that one can fail 'cos security bug - ignore
Write-Output "### clean npm cache" >> $log 2>&1
npm cache clean --force >> $log 2>&1
$error.Clear() # that one can fail 'cos security bug - ignore
Write-Output "### npm install" >> $log 2>&1
&npm install >> $log 2>&1
Write-Output ">> $? $($error.Count)" >> $log 2>&1
Write-Output "### npm install" >> $log 2>&1
npm install >> $log 2>&1
Write-Output ">> $? $($error.Count)" >> $log 2>&1
# Don't really care about the messages from npm install making us think there are errors
$error.Clear()
Write-Output "### install gulp" >> $log 2>&1
&npm install -g gulp >> $log 2>&1
$error.Clear() # that one fails 'cos deprecated stuff - ignore
Write-Output "### gulp build for version $($this.Version.Release)" >> $log 2>&1
npx gulp build --buildversion=$this.Version.Release >> $log 2>&1
if (-not $?) { throw "Failed to build" } # that one is expected to work
} finally {
Pop-Location
Write-Output "### install gulp-cli" >> $log 2>&1
&npm install -g gulp-cli --quiet >> $log 2>&1
$error.Clear() # that one fails 'cos some files not being removed - ignore
# FIXME: should we filter the log to find errors?
#get-content .\build.tmp\belle.log | %{ if ($_ -match "build") { write $_}}
Write-Output "### gulp build for version $($this.Version.Release)" >> $log 2>&1
&gulp build --buildversion=$this.Version.Release >> $log 2>&1
if (-not $?) { throw "Failed to build" } # that one is expected to work
Pop-Location
# fixme - should we filter the log to find errors?
#get-content .\build.tmp\belle.log | %{ if ($_ -match "build") { write $_}}
# restore
$this.RestoreNode()
# restore
$this.RestoreNode()
}
# setting node_modules folder to hidden
# used to prevent VS13 from crashing on it while loading the websites project
@@ -189,7 +177,7 @@
{
Write-Host "Prepare Tests"
# fixme - idea is to avoid rebuilding everything for tests
# FIXME: - idea is to avoid rebuilding everything for tests
# but because of our weird assembly versioning (with .* stuff)
# everything gets rebuilt all the time...
#Copy-Files "$tmp\bin" "." "$tmp\tests"
@@ -342,9 +330,6 @@
$ubuild.DefineMethod("PrepareBuild",
{
Write-Host "Clear folders and files"
$this.RemoveDirectory("$($this.SolutionRoot)\src\Umbraco.Web.UI.Client\bower_components")
$this.TempStoreFile("$($this.SolutionRoot)\src\Umbraco.Web.UI\web.config")
Write-Host "Create clean web.config"
$this.CopyFile("$($this.SolutionRoot)\src\Umbraco.Web.UI\web.Template.config", "$($this.SolutionRoot)\src\Umbraco.Web.UI\web.config")
@@ -434,7 +419,7 @@
Write-Host "Prepare Azure Gallery"
$this.CopyFile("$($this.SolutionRoot)\build\Azure\azuregalleryrelease.ps1", $this.BuildOutput)
})
$ubuild.DefineMethod("Build",
{
$error.Clear()
@@ -464,9 +449,22 @@
if ($this.OnError()) { return }
$this.PrepareAzureGallery()
if ($this.OnError()) { return }
$this.PostPackageHook()
if ($this.OnError()) { return }
Write-Host "Done"
})
$ubuild.DefineMethod("PostPackageHook",
{
# run hook
if ($this.HasMethod("PostPackage"))
{
Write-Host "Run PostPackage hook"
$this.PostPackage();
if (-not $?) { throw "Failed to run hook." }
}
})
# ################################################################
# RUN
# ################################################################
@@ -7,7 +7,7 @@
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Copyright © 2016 Umbraco<br>Generated by <strong>DocFX</strong></span>
<span>Copyright © 2016-present Umbraco<br>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
+2 -2
View File
@@ -2,7 +2,7 @@
using System.Resources;
[assembly: AssemblyCompany("Umbraco")]
[assembly: AssemblyCopyright("Copyright © Umbraco 2018")]
[assembly: AssemblyCopyright("Copyright © Umbraco 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -19,4 +19,4 @@ using System.Resources;
// these are FYI and changed automatically
[assembly: AssemblyFileVersion("8.0.0")]
[assembly: AssemblyInformationalVersion("8.0.0-alpha.52")]
[assembly: AssemblyInformationalVersion("8.0.0-alpha.58")]
+1 -1
View File
@@ -8,7 +8,7 @@ namespace Umbraco.Core
public static class Attempt
{
// note:
// cannot rely on overloads only to differenciate between with/without status
// cannot rely on overloads only to differentiate between with/without status
// in some cases it will always be ambiguous, so be explicit w/ 'WithStatus' methods
/// <summary>
+1 -1
View File
@@ -121,7 +121,7 @@ namespace Umbraco.Core
}
/// <summary>
/// Implicity operator to check if the attempt was successful without having to access the 'success' property
/// Implicitly operator to check if the attempt was successful without having to access the 'success' property
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
+1 -1
View File
@@ -130,7 +130,7 @@ namespace Umbraco.Core
}
/// <summary>
/// Implicity operator to check if the attempt was successful without having to access the 'success' property
/// Implicitly operator to check if the attempt was successful without having to access the 'success' property
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
-39
View File
@@ -1,39 +0,0 @@
namespace Umbraco.Core
{
public static class ByteArrayExtensions
{
private static readonly char[] BytesToHexStringLookup = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static string ToHexString(this byte[] bytes)
{
int i = 0, p = 0, bytesLength = bytes.Length;
var chars = new char[bytesLength * 2];
while (i < bytesLength)
{
var b = bytes[i++];
chars[p++] = BytesToHexStringLookup[b / 0x10];
chars[p++] = BytesToHexStringLookup[b % 0x10];
}
return new string(chars, 0, chars.Length);
}
public static string ToHexString(this byte[] bytes, char separator, int blockSize, int blockCount)
{
int p = 0, bytesLength = bytes.Length, count = 0, size = 0;
var chars = new char[bytesLength * 2 + blockCount];
for (var i = 0; i < bytesLength; i++)
{
var b = bytes[i++];
chars[p++] = BytesToHexStringLookup[b / 0x10];
chars[p++] = BytesToHexStringLookup[b % 0x10];
if (count == blockCount) continue;
if (++size < blockSize) continue;
chars[p++] = '/';
size = 0;
count++;
}
return new string(chars, 0, chars.Length);
}
}
}
@@ -8,9 +8,9 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Extensions for strongly typed access
/// </summary>
public static class CacheProviderExtensions
public static class AppCacheExtensions
{
public static T GetCacheItem<T>(this IRuntimeCacheProvider provider,
public static T GetCacheItem<T>(this IAppPolicyCache provider,
string cacheKey,
Func<T> getCacheItem,
TimeSpan? timeout,
@@ -19,11 +19,11 @@ namespace Umbraco.Core.Cache
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null)
{
var result = provider.GetCacheItem(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
var result = provider.Get(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
return result == null ? default(T) : result.TryConvertTo<T>().Result;
}
public static void InsertCacheItem<T>(this IRuntimeCacheProvider provider,
public static void InsertCacheItem<T>(this IAppPolicyCache provider,
string cacheKey,
Func<T> getCacheItem,
TimeSpan? timeout = null,
@@ -32,24 +32,24 @@ namespace Umbraco.Core.Cache
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null)
{
provider.InsertCacheItem(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
provider.Insert(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
}
public static IEnumerable<T> GetCacheItemsByKeySearch<T>(this ICacheProvider provider, string keyStartsWith)
public static IEnumerable<T> GetCacheItemsByKeySearch<T>(this IAppCache provider, string keyStartsWith)
{
var result = provider.GetCacheItemsByKeySearch(keyStartsWith);
var result = provider.SearchByKey(keyStartsWith);
return result.Select(x => x.TryConvertTo<T>().Result);
}
public static IEnumerable<T> GetCacheItemsByKeyExpression<T>(this ICacheProvider provider, string regexString)
public static IEnumerable<T> GetCacheItemsByKeyExpression<T>(this IAppCache provider, string regexString)
{
var result = provider.GetCacheItemsByKeyExpression(regexString);
var result = provider.SearchByRegex(regexString);
return result.Select(x => x.TryConvertTo<T>().Result);
}
public static T GetCacheItem<T>(this ICacheProvider provider, string cacheKey)
public static T GetCacheItem<T>(this IAppCache provider, string cacheKey)
{
var result = provider.GetCacheItem(cacheKey);
var result = provider.Get(cacheKey);
if (result == null)
{
return default(T);
@@ -57,9 +57,9 @@ namespace Umbraco.Core.Cache
return result.TryConvertTo<T>().Result;
}
public static T GetCacheItem<T>(this ICacheProvider provider, string cacheKey, Func<T> getCacheItem)
public static T GetCacheItem<T>(this IAppCache provider, string cacheKey, Func<T> getCacheItem)
{
var result = provider.GetCacheItem(cacheKey, () => getCacheItem());
var result = provider.Get(cacheKey, () => getCacheItem());
if (result == null)
{
return default(T);
+86
View File
@@ -0,0 +1,86 @@
using System;
using System.Web;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Represents the application caches.
/// </summary>
public class AppCaches
{
/// <summary>
/// Initializes a new instance of the <see cref="AppCaches"/> for use in a web application.
/// </summary>
public AppCaches()
: this(HttpRuntime.Cache)
{ }
/// <summary>
/// Initializes a new instance of the <see cref="AppCaches"/> for use in a web application.
/// </summary>
public AppCaches(System.Web.Caching.Cache cache)
: this(
new WebCachingAppCache(cache),
new HttpRequestAppCache(),
new IsolatedCaches(t => new ObjectCacheAppCache()))
{ }
/// <summary>
/// Initializes a new instance of the <see cref="AppCaches"/> with cache providers.
/// </summary>
public AppCaches(
IAppPolicyCache runtimeCache,
IAppCache requestCache,
IsolatedCaches isolatedCaches)
{
RuntimeCache = runtimeCache ?? throw new ArgumentNullException(nameof(runtimeCache));
RequestCache = requestCache ?? throw new ArgumentNullException(nameof(requestCache));
IsolatedCaches = isolatedCaches ?? throw new ArgumentNullException(nameof(isolatedCaches));
}
/// <summary>
/// Gets the special disabled instance.
/// </summary>
/// <remarks>
/// <para>When used by repositories, all cache policies apply, but the underlying caches do not cache anything.</para>
/// <para>Used by tests.</para>
/// </remarks>
public static AppCaches Disabled { get; } = new AppCaches(NoAppCache.Instance, NoAppCache.Instance, new IsolatedCaches(_ => NoAppCache.Instance));
/// <summary>
/// Gets the special no-cache instance.
/// </summary>
/// <remarks>
/// <para>When used by repositories, all cache policies are bypassed.</para>
/// <para>Used by repositories that do no cache.</para>
/// </remarks>
public static AppCaches NoCache { get; } = new AppCaches(NoAppCache.Instance, NoAppCache.Instance, new IsolatedCaches(_ => NoAppCache.Instance));
/// <summary>
/// Gets the per-request cache.
/// </summary>
/// <remarks>
/// <para>The per-request caches works on top of the current HttpContext items.</para>
/// <para>Outside a web environment, the behavior of that cache is unspecified.</para>
/// </remarks>
public IAppCache RequestCache { get; }
/// <summary>
/// Gets the runtime cache.
/// </summary>
/// <remarks>
/// <para>The runtime cache is the main application cache.</para>
/// </remarks>
public IAppPolicyCache RuntimeCache { get; }
/// <summary>
/// Gets the isolated caches.
/// </summary>
/// <remarks>
/// <para>Isolated caches are used by e.g. repositories, to ensure that each cached entity
/// type has its own cache, so that lookups are fast and the repository does not need to
/// search through all keys on a global scale.</para>
/// </remarks>
public IsolatedCaches IsolatedCaches { get; }
}
}
@@ -0,0 +1,74 @@
using System;
using System.Collections.Concurrent;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Provides a base class for implementing a dictionary of <see cref="IAppPolicyCache"/>.
/// </summary>
/// <typeparam name="TKey">The type of the dictionary key.</typeparam>
public abstract class AppPolicedCacheDictionary<TKey>
{
private readonly ConcurrentDictionary<TKey, IAppPolicyCache> _caches = new ConcurrentDictionary<TKey, IAppPolicyCache>();
/// <summary>
/// Initializes a new instance of the <see cref="AppPolicedCacheDictionary{TKey}"/> class.
/// </summary>
/// <param name="cacheFactory"></param>
protected AppPolicedCacheDictionary(Func<TKey, IAppPolicyCache> cacheFactory)
{
CacheFactory = cacheFactory;
}
/// <summary>
/// Gets the internal cache factory, for tests only!
/// </summary>
internal readonly Func<TKey, IAppPolicyCache> CacheFactory;
/// <summary>
/// Gets or creates a cache.
/// </summary>
public IAppPolicyCache GetOrCreate(TKey key)
=> _caches.GetOrAdd(key, k => CacheFactory(k));
/// <summary>
/// Tries to get a cache.
/// </summary>
public Attempt<IAppPolicyCache> Get(TKey key)
=> _caches.TryGetValue(key, out var cache) ? Attempt.Succeed(cache) : Attempt.Fail<IAppPolicyCache>();
/// <summary>
/// Removes a cache.
/// </summary>
public void Remove(TKey key)
{
_caches.TryRemove(key, out _);
}
/// <summary>
/// Removes all caches.
/// </summary>
public void RemoveAll()
{
_caches.Clear();
}
/// <summary>
/// Clears a cache.
/// </summary>
public void ClearCache(TKey key)
{
if (_caches.TryGetValue(key, out var cache))
cache.Clear();
}
/// <summary>
/// Clears all caches.
/// </summary>
public void ClearAllCaches()
{
foreach (var cache in _caches.Values)
cache.Clear();
}
}
}
-99
View File
@@ -1,99 +0,0 @@
using System;
using System.Web;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Class that is exposed by the ApplicationContext for application wide caching purposes
/// </summary>
public class CacheHelper
{
public static CacheHelper NoCache { get; } = new CacheHelper(NullCacheProvider.Instance, NullCacheProvider.Instance, NullCacheProvider.Instance, new IsolatedRuntimeCache(_ => NullCacheProvider.Instance));
/// <summary>
/// Creates a cache helper with disabled caches
/// </summary>
/// <returns></returns>
/// <remarks>
/// Good for unit testing
/// </remarks>
public static CacheHelper CreateDisabledCacheHelper()
{
// do *not* return NoCache
// NoCache is a special instance that is detected by RepositoryBase and disables all cache policies
// CreateDisabledCacheHelper is used in tests to use no cache, *but* keep all cache policies
return new CacheHelper(NullCacheProvider.Instance, NullCacheProvider.Instance, NullCacheProvider.Instance, new IsolatedRuntimeCache(_ => NullCacheProvider.Instance));
}
/// <summary>
/// Initializes a new instance for use in the web
/// </summary>
public CacheHelper()
: this(
new HttpRuntimeCacheProvider(HttpRuntime.Cache),
new StaticCacheProvider(),
new HttpRequestCacheProvider(),
new IsolatedRuntimeCache(t => new ObjectCacheRuntimeCacheProvider()))
{
}
/// <summary>
/// Initializes a new instance for use in the web
/// </summary>
/// <param name="cache"></param>
public CacheHelper(System.Web.Caching.Cache cache)
: this(
new HttpRuntimeCacheProvider(cache),
new StaticCacheProvider(),
new HttpRequestCacheProvider(),
new IsolatedRuntimeCache(t => new ObjectCacheRuntimeCacheProvider()))
{
}
/// <summary>
/// Initializes a new instance based on the provided providers
/// </summary>
/// <param name="httpCacheProvider"></param>
/// <param name="staticCacheProvider"></param>
/// <param name="requestCacheProvider"></param>
/// <param name="isolatedCacheManager"></param>
public CacheHelper(
IRuntimeCacheProvider httpCacheProvider,
ICacheProvider staticCacheProvider,
ICacheProvider requestCacheProvider,
IsolatedRuntimeCache isolatedCacheManager)
{
if (httpCacheProvider == null) throw new ArgumentNullException("httpCacheProvider");
if (staticCacheProvider == null) throw new ArgumentNullException("staticCacheProvider");
if (requestCacheProvider == null) throw new ArgumentNullException("requestCacheProvider");
if (isolatedCacheManager == null) throw new ArgumentNullException("isolatedCacheManager");
RuntimeCache = httpCacheProvider;
StaticCache = staticCacheProvider;
RequestCache = requestCacheProvider;
IsolatedRuntimeCache = isolatedCacheManager;
}
/// <summary>
/// Returns the current Request cache
/// </summary>
public ICacheProvider RequestCache { get; internal set; }
/// <summary>
/// Returns the current Runtime cache
/// </summary>
public ICacheProvider StaticCache { get; internal set; }
/// <summary>
/// Returns the current Runtime cache
/// </summary>
public IRuntimeCacheProvider RuntimeCache { get; internal set; }
/// <summary>
/// Returns the current Isolated Runtime cache manager
/// </summary>
public IsolatedRuntimeCache IsolatedRuntimeCache { get; internal set; }
}
}
+2 -2
View File
@@ -5,10 +5,10 @@
/// </summary>
public static class CacheKeys
{
public const string ApplicationTreeCacheKey = "ApplicationTreeCache"; // used by ApplicationTreeService
public const string ApplicationsCacheKey = "ApplicationCache"; // used by SectionService
public const string TemplateFrontEndCacheKey = "template"; // fixme usage?
// TODO: this one can probably be removed
public const string TemplateFrontEndCacheKey = "template";
public const string MacroContentCacheKey = "macroContent_"; // used in MacroRenderers
}
+5 -5
View File
@@ -16,10 +16,10 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Initializes a new instance of the <see cref="CacheRefresherBase{TInstanceType}"/>.
/// </summary>
/// <param name="cacheHelper">A cache helper.</param>
protected CacheRefresherBase(CacheHelper cacheHelper)
/// <param name="appCaches">A cache helper.</param>
protected CacheRefresherBase(AppCaches appCaches)
{
CacheHelper = cacheHelper;
AppCaches = appCaches;
}
/// <summary>
@@ -93,7 +93,7 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Gets the cache helper.
/// </summary>
protected CacheHelper CacheHelper { get; }
protected AppCaches AppCaches { get; }
/// <summary>
/// Clears the cache for all repository entities of a specified type.
@@ -102,7 +102,7 @@ namespace Umbraco.Core.Cache
protected void ClearAllIsolatedCacheByEntityType<TEntity>()
where TEntity : class, IEntity
{
CacheHelper.IsolatedRuntimeCache.ClearCache<TEntity>();
AppCaches.IsolatedCaches.ClearCache<TEntity>();
}
/// <summary>
@@ -1,15 +1,9 @@
using System.Collections.Generic;
using LightInject;
using Umbraco.Core.Composing;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
public class CacheRefresherCollectionBuilder : LazyCollectionBuilderBase<CacheRefresherCollectionBuilder, CacheRefresherCollection, ICacheRefresher>
{
public CacheRefresherCollectionBuilder(IServiceContainer container)
: base(container)
{ }
protected override CacheRefresherCollectionBuilder This => this;
}
}
+157
View File
@@ -0,0 +1,157 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Implements <see cref="IAppPolicyCache"/> by wrapping an inner other <see cref="IAppPolicyCache"/>
/// instance, and ensuring that all inserts and returns are deep cloned copies of the cache item,
/// when the item is deep-cloneable.
/// </summary>
internal class DeepCloneAppCache : IAppPolicyCache
{
/// <summary>
/// Initializes a new instance of the <see cref="DeepCloneAppCache"/> class.
/// </summary>
public DeepCloneAppCache(IAppPolicyCache innerCache)
{
var type = typeof (DeepCloneAppCache);
if (innerCache.GetType() == type)
throw new InvalidOperationException($"A {type} cannot wrap another instance of itself.");
InnerCache = innerCache;
}
/// <summary>
/// Gets the inner cache.
/// </summary>
public IAppPolicyCache InnerCache { get; }
/// <inheritdoc />
public object Get(string key)
{
var item = InnerCache.Get(key);
return CheckCloneableAndTracksChanges(item);
}
/// <inheritdoc />
public object Get(string key, Func<object> factory)
{
var cached = InnerCache.Get(key, () =>
{
var result = FastDictionaryAppCacheBase.GetSafeLazy(factory);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
// do not store null values (backward compat), clone / reset to go into the cache
return value == null ? null : CheckCloneableAndTracksChanges(value);
});
return CheckCloneableAndTracksChanges(cached);
}
/// <inheritdoc />
public IEnumerable<object> SearchByKey(string keyStartsWith)
{
return InnerCache.SearchByKey(keyStartsWith)
.Select(CheckCloneableAndTracksChanges);
}
/// <inheritdoc />
public IEnumerable<object> SearchByRegex(string regex)
{
return InnerCache.SearchByRegex(regex)
.Select(CheckCloneableAndTracksChanges);
}
/// <inheritdoc />
public object Get(string key, Func<object> factory, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
var cached = InnerCache.Get(key, () =>
{
var result = FastDictionaryAppCacheBase.GetSafeLazy(factory);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
// do not store null values (backward compat), clone / reset to go into the cache
return value == null ? null : CheckCloneableAndTracksChanges(value);
// clone / reset to go into the cache
}, timeout, isSliding, priority, removedCallback, dependentFiles);
// clone / reset to go into the cache
return CheckCloneableAndTracksChanges(cached);
}
/// <inheritdoc />
public void Insert(string key, Func<object> factory, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
InnerCache.Insert(key, () =>
{
var result = FastDictionaryAppCacheBase.GetSafeLazy(factory);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
// do not store null values (backward compat), clone / reset to go into the cache
return value == null ? null : CheckCloneableAndTracksChanges(value);
}, timeout, isSliding, priority, removedCallback, dependentFiles);
}
/// <inheritdoc />
public void Clear()
{
InnerCache.Clear();
}
/// <inheritdoc />
public void Clear(string key)
{
InnerCache.Clear(key);
}
/// <inheritdoc />
public void ClearOfType(string typeName)
{
InnerCache.ClearOfType(typeName);
}
/// <inheritdoc />
public void ClearOfType<T>()
{
InnerCache.ClearOfType<T>();
}
/// <inheritdoc />
public void ClearOfType<T>(Func<string, T, bool> predicate)
{
InnerCache.ClearOfType<T>(predicate);
}
/// <inheritdoc />
public void ClearByKey(string keyStartsWith)
{
InnerCache.ClearByKey(keyStartsWith);
}
/// <inheritdoc />
public void ClearByRegex(string regex)
{
InnerCache.ClearByRegex(regex);
}
private static object CheckCloneableAndTracksChanges(object input)
{
if (input is IDeepCloneable cloneable)
{
input = cloneable.DeepClone();
}
// reset dirty initial properties
if (input is IRememberBeingDirty tracksChanges)
{
tracksChanges.ResetDirtyProperties(false);
input = tracksChanges;
}
return input;
}
}
}
@@ -1,155 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Entities;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Interface describing this cache provider as a wrapper for another
/// </summary>
internal interface IRuntimeCacheProviderWrapper
{
IRuntimeCacheProvider InnerProvider { get; }
}
/// <summary>
/// A wrapper for any IRuntimeCacheProvider that ensures that all inserts and returns
/// are a deep cloned copy of the item when the item is IDeepCloneable and that tracks changes are
/// reset if the object is TracksChangesEntityBase
/// </summary>
internal class DeepCloneRuntimeCacheProvider : IRuntimeCacheProvider, IRuntimeCacheProviderWrapper
{
public IRuntimeCacheProvider InnerProvider { get; }
public DeepCloneRuntimeCacheProvider(IRuntimeCacheProvider innerProvider)
{
var type = typeof (DeepCloneRuntimeCacheProvider);
if (innerProvider.GetType() == type)
throw new InvalidOperationException($"A {type} cannot wrap another instance of {type}.");
InnerProvider = innerProvider;
}
#region Clear - doesn't require any changes
public void ClearAllCache()
{
InnerProvider.ClearAllCache();
}
public void ClearCacheItem(string key)
{
InnerProvider.ClearCacheItem(key);
}
public void ClearCacheObjectTypes(string typeName)
{
InnerProvider.ClearCacheObjectTypes(typeName);
}
public void ClearCacheObjectTypes<T>()
{
InnerProvider.ClearCacheObjectTypes<T>();
}
public void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
{
InnerProvider.ClearCacheObjectTypes<T>(predicate);
}
public void ClearCacheByKeySearch(string keyStartsWith)
{
InnerProvider.ClearCacheByKeySearch(keyStartsWith);
}
public void ClearCacheByKeyExpression(string regexString)
{
InnerProvider.ClearCacheByKeyExpression(regexString);
}
#endregion
public IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
{
return InnerProvider.GetCacheItemsByKeySearch(keyStartsWith)
.Select(CheckCloneableAndTracksChanges);
}
public IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
{
return InnerProvider.GetCacheItemsByKeyExpression(regexString)
.Select(CheckCloneableAndTracksChanges);
}
public object GetCacheItem(string cacheKey)
{
var item = InnerProvider.GetCacheItem(cacheKey);
return CheckCloneableAndTracksChanges(item);
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem)
{
var cached = InnerProvider.GetCacheItem(cacheKey, () =>
{
var result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
if (value == null) return null; // do not store null values (backward compat)
return CheckCloneableAndTracksChanges(value);
});
return CheckCloneableAndTracksChanges(cached);
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
var cached = InnerProvider.GetCacheItem(cacheKey, () =>
{
var result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
if (value == null) return null; // do not store null values (backward compat)
// clone / reset to go into the cache
return CheckCloneableAndTracksChanges(value);
}, timeout, isSliding, priority, removedCallback, dependentFiles);
// clone / reset to go into the cache
return CheckCloneableAndTracksChanges(cached);
}
public void InsertCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
InnerProvider.InsertCacheItem(cacheKey, () =>
{
var result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
if (value == null) return null; // do not store null values (backward compat)
// clone / reset to go into the cache
return CheckCloneableAndTracksChanges(value);
}, timeout, isSliding, priority, removedCallback, dependentFiles);
}
private static object CheckCloneableAndTracksChanges(object input)
{
var cloneable = input as IDeepCloneable;
if (cloneable != null)
{
input = cloneable.DeepClone();
}
// reset dirty initial properties (U4-1946)
var tracksChanges = input as IRememberBeingDirty;
if (tracksChanges != null)
{
tracksChanges.ResetDirtyProperties(false);
input = tracksChanges;
}
return input;
}
}
}
@@ -23,7 +23,7 @@ namespace Umbraco.Core.Cache
private static readonly TEntity[] EmptyEntities = new TEntity[0]; // const
private readonly RepositoryCachePolicyOptions _options;
public DefaultRepositoryCachePolicy(IRuntimeCacheProvider cache, IScopeAccessor scopeAccessor, RepositoryCachePolicyOptions options)
public DefaultRepositoryCachePolicy(IAppPolicyCache cache, IScopeAccessor scopeAccessor, RepositoryCachePolicyOptions options)
: base(cache, scopeAccessor)
{
_options = options ?? throw new ArgumentNullException(nameof(options));
@@ -42,7 +42,7 @@ namespace Umbraco.Core.Cache
protected virtual void InsertEntity(string cacheKey, TEntity entity)
{
Cache.InsertCacheItem(cacheKey, () => entity, TimeSpan.FromMinutes(5), true);
Cache.Insert(cacheKey, () => entity, TimeSpan.FromMinutes(5), true);
}
protected virtual void InsertEntities(TId[] ids, TEntity[] entities)
@@ -52,7 +52,7 @@ namespace Umbraco.Core.Cache
// getting all of them, and finding nothing.
// if we can cache a zero count, cache an empty array,
// for as long as the cache is not cleared (no expiration)
Cache.InsertCacheItem(GetEntityTypeCacheKey(), () => EmptyEntities);
Cache.Insert(GetEntityTypeCacheKey(), () => EmptyEntities);
}
else
{
@@ -60,7 +60,7 @@ namespace Umbraco.Core.Cache
foreach (var entity in entities)
{
var capture = entity;
Cache.InsertCacheItem(GetEntityCacheKey(entity.Id), () => capture, TimeSpan.FromMinutes(5), true);
Cache.Insert(GetEntityCacheKey(entity.Id), () => capture, TimeSpan.FromMinutes(5), true);
}
}
}
@@ -77,21 +77,21 @@ namespace Umbraco.Core.Cache
// just to be safe, we cannot cache an item without an identity
if (entity.HasIdentity)
{
Cache.InsertCacheItem(GetEntityCacheKey(entity.Id), () => entity, TimeSpan.FromMinutes(5), true);
Cache.Insert(GetEntityCacheKey(entity.Id), () => entity, TimeSpan.FromMinutes(5), true);
}
// if there's a GetAllCacheAllowZeroCount cache, ensure it is cleared
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
}
catch
{
// if an exception is thrown we need to remove the entry from cache,
// this is ONLY a work around because of the way
// that we cache entities: http://issues.umbraco.org/issue/U4-4259
Cache.ClearCacheItem(GetEntityCacheKey(entity.Id));
Cache.Clear(GetEntityCacheKey(entity.Id));
// if there's a GetAllCacheAllowZeroCount cache, ensure it is cleared
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
throw;
}
@@ -109,21 +109,21 @@ namespace Umbraco.Core.Cache
// just to be safe, we cannot cache an item without an identity
if (entity.HasIdentity)
{
Cache.InsertCacheItem(GetEntityCacheKey(entity.Id), () => entity, TimeSpan.FromMinutes(5), true);
Cache.Insert(GetEntityCacheKey(entity.Id), () => entity, TimeSpan.FromMinutes(5), true);
}
// if there's a GetAllCacheAllowZeroCount cache, ensure it is cleared
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
}
catch
{
// if an exception is thrown we need to remove the entry from cache,
// this is ONLY a work around because of the way
// that we cache entities: http://issues.umbraco.org/issue/U4-4259
Cache.ClearCacheItem(GetEntityCacheKey(entity.Id));
Cache.Clear(GetEntityCacheKey(entity.Id));
// if there's a GetAllCacheAllowZeroCount cache, ensure it is cleared
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
throw;
}
@@ -142,9 +142,9 @@ namespace Umbraco.Core.Cache
{
// whatever happens, clear the cache
var cacheKey = GetEntityCacheKey(entity.Id);
Cache.ClearCacheItem(cacheKey);
Cache.Clear(cacheKey);
// if there's a GetAllCacheAllowZeroCount cache, ensure it is cleared
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
}
}
@@ -238,7 +238,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void ClearAll()
{
Cache.ClearCacheByKeySearch(GetEntityTypeCacheKey());
Cache.ClearByKey(GetEntityTypeCacheKey());
}
}
}
@@ -0,0 +1,96 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Implements <see cref="IAppCache"/> on top of a concurrent dictionary.
/// </summary>
public class DictionaryAppCache : IAppCache
{
/// <summary>
/// Gets the internal items dictionary, for tests only!
/// </summary>
internal readonly ConcurrentDictionary<string, object> Items = new ConcurrentDictionary<string, object>();
/// <inheritdoc />
public virtual object Get(string key)
{
return Items.TryGetValue(key, out var value) ? value : null;
}
/// <inheritdoc />
public virtual object Get(string key, Func<object> factory)
{
return Items.GetOrAdd(key, _ => factory());
}
/// <inheritdoc />
public virtual IEnumerable<object> SearchByKey(string keyStartsWith)
{
var items = new List<object>();
foreach (var (key, value) in Items)
if (key.InvariantStartsWith(keyStartsWith))
items.Add(value);
return items;
}
/// <inheritdoc />
public IEnumerable<object> SearchByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
var items = new List<object>();
foreach (var (key, value) in Items)
if (compiled.IsMatch(key))
items.Add(value);
return items;
}
/// <inheritdoc />
public virtual void Clear()
{
Items.Clear();
}
/// <inheritdoc />
public virtual void Clear(string key)
{
Items.TryRemove(key, out _);
}
/// <inheritdoc />
public virtual void ClearOfType(string typeName)
{
Items.RemoveAll(kvp => kvp.Value != null && kvp.Value.GetType().ToString().InvariantEquals(typeName));
}
/// <inheritdoc />
public virtual void ClearOfType<T>()
{
var typeOfT = typeof(T);
Items.RemoveAll(kvp => kvp.Value != null && kvp.Value.GetType() == typeOfT);
}
/// <inheritdoc />
public virtual void ClearOfType<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
Items.RemoveAll(kvp => kvp.Value != null && kvp.Value.GetType() == typeOfT && predicate(kvp.Key, (T)kvp.Value));
}
/// <inheritdoc />
public virtual void ClearByKey(string keyStartsWith)
{
Items.RemoveAll(kvp => kvp.Key.InvariantStartsWith(keyStartsWith));
}
/// <inheritdoc />
public virtual void ClearByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
Items.RemoveAll(kvp => compiled.IsMatch(kvp.Key));
}
}
}
@@ -7,79 +7,130 @@ using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
internal class DictionaryCacheProvider : ICacheProvider
/// <summary>
/// Implements a fast <see cref="IAppCache"/> on top of a concurrent dictionary.
/// </summary>
internal class FastDictionaryAppCache : IAppCache
{
private readonly ConcurrentDictionary<string, Lazy<object>> _items
= new ConcurrentDictionary<string, Lazy<object>>();
/// <summary>
/// Gets the internal items dictionary, for tests only!
/// </summary>
internal readonly ConcurrentDictionary<string, Lazy<object>> Items = new ConcurrentDictionary<string, Lazy<object>>();
// for tests
internal ConcurrentDictionary<string, Lazy<object>> Items => _items;
public void ClearAllCache()
/// <inheritdoc />
public object Get(string cacheKey)
{
_items.Clear();
Items.TryGetValue(cacheKey, out var result); // else null
return result == null ? null : FastDictionaryAppCacheBase.GetSafeLazyValue(result); // return exceptions as null
}
public void ClearCacheItem(string key)
/// <inheritdoc />
public object Get(string cacheKey, Func<object> getCacheItem)
{
_items.TryRemove(key, out _);
var result = Items.GetOrAdd(cacheKey, k => FastDictionaryAppCacheBase.GetSafeLazy(getCacheItem));
var value = result.Value; // will not throw (safe lazy)
if (!(value is FastDictionaryAppCacheBase.ExceptionHolder eh))
return value;
// and... it's in the cache anyway - so contrary to other cache providers,
// which would trick with GetSafeLazyValue, we need to remove by ourselves,
// in order NOT to cache exceptions
Items.TryRemove(cacheKey, out result);
eh.Exception.Throw(); // throw once!
return null; // never reached
}
public void ClearCacheObjectTypes(string typeName)
/// <inheritdoc />
public IEnumerable<object> SearchByKey(string keyStartsWith)
{
return Items
.Where(kvp => kvp.Key.InvariantStartsWith(keyStartsWith))
.Select(kvp => FastDictionaryAppCacheBase.GetSafeLazyValue(kvp.Value))
.Where(x => x != null);
}
/// <inheritdoc />
public IEnumerable<object> SearchByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
return Items
.Where(kvp => compiled.IsMatch(kvp.Key))
.Select(kvp => FastDictionaryAppCacheBase.GetSafeLazyValue(kvp.Value))
.Where(x => x != null);
}
/// <inheritdoc />
public void Clear()
{
Items.Clear();
}
/// <inheritdoc />
public void Clear(string key)
{
Items.TryRemove(key, out _);
}
/// <inheritdoc />
public void ClearOfType(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
var isInterface = type.IsInterface;
foreach (var kvp in _items
foreach (var kvp in Items
.Where(x =>
{
// entry.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = DictionaryCacheProviderBase.GetSafeLazyValue(x.Value, true);
var value = FastDictionaryAppCacheBase.GetSafeLazyValue(x.Value, true);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return value == null || (isInterface ? (type.IsInstanceOfType(value)) : (value.GetType() == type));
}))
_items.TryRemove(kvp.Key, out _);
Items.TryRemove(kvp.Key, out _);
}
public void ClearCacheObjectTypes<T>()
/// <inheritdoc />
public void ClearOfType<T>()
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
foreach (var kvp in _items
foreach (var kvp in Items
.Where(x =>
{
// entry.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// compare on exact type, don't use "is"
// get non-created as NonCreatedValue & exceptions as null
var value = DictionaryCacheProviderBase.GetSafeLazyValue(x.Value, true);
var value = FastDictionaryAppCacheBase.GetSafeLazyValue(x.Value, true);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return value == null || (isInterface ? (value is T) : (value.GetType() == typeOfT));
}))
_items.TryRemove(kvp.Key, out _);
Items.TryRemove(kvp.Key, out _);
}
public void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
/// <inheritdoc />
public void ClearOfType<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
foreach (var kvp in _items
foreach (var kvp in Items
.Where(x =>
{
// entry.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// compare on exact type, don't use "is"
// get non-created as NonCreatedValue & exceptions as null
var value = DictionaryCacheProviderBase.GetSafeLazyValue(x.Value, true);
var value = FastDictionaryAppCacheBase.GetSafeLazyValue(x.Value, true);
if (value == null) return true;
// if T is an interface remove anything that implements that interface
@@ -88,60 +139,24 @@ namespace Umbraco.Core.Cache
// run predicate on the 'public key' part only, ie without prefix
&& predicate(x.Key, (T)value);
}))
_items.TryRemove(kvp.Key, out _);
Items.TryRemove(kvp.Key, out _);
}
public void ClearCacheByKeySearch(string keyStartsWith)
/// <inheritdoc />
public void ClearByKey(string keyStartsWith)
{
foreach (var ikvp in _items
foreach (var ikvp in Items
.Where(kvp => kvp.Key.InvariantStartsWith(keyStartsWith)))
_items.TryRemove(ikvp.Key, out _);
Items.TryRemove(ikvp.Key, out _);
}
public void ClearCacheByKeyExpression(string regexString)
/// <inheritdoc />
public void ClearByRegex(string regex)
{
foreach (var ikvp in _items
.Where(kvp => Regex.IsMatch(kvp.Key, regexString)))
_items.TryRemove(ikvp.Key, out _);
}
public IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
{
return _items
.Where(kvp => kvp.Key.InvariantStartsWith(keyStartsWith))
.Select(kvp => DictionaryCacheProviderBase.GetSafeLazyValue(kvp.Value))
.Where(x => x != null);
}
public IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
{
return _items
.Where(kvp => Regex.IsMatch(kvp.Key, regexString))
.Select(kvp => DictionaryCacheProviderBase.GetSafeLazyValue(kvp.Value))
.Where(x => x != null);
}
public object GetCacheItem(string cacheKey)
{
_items.TryGetValue(cacheKey, out var result); // else null
return result == null ? null : DictionaryCacheProviderBase.GetSafeLazyValue(result); // return exceptions as null
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem)
{
var result = _items.GetOrAdd(cacheKey, k => DictionaryCacheProviderBase.GetSafeLazy(getCacheItem));
var value = result.Value; // will not throw (safe lazy)
if (!(value is DictionaryCacheProviderBase.ExceptionHolder eh))
return value;
// and... it's in the cache anyway - so contrary to other cache providers,
// which would trick with GetSafeLazyValue, we need to remove by ourselves,
// in order NOT to cache exceptions
_items.TryRemove(cacheKey, out result);
eh.Exception.Throw(); // throw once!
return null; // never reached
var compiled = new Regex(regex, RegexOptions.Compiled);
foreach (var ikvp in Items
.Where(kvp => compiled.IsMatch(kvp.Key)))
Items.TryRemove(ikvp.Key, out _);
}
}
}
@@ -8,7 +8,10 @@ using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
internal abstract class DictionaryCacheProviderBase : ICacheProvider
/// <summary>
/// Provides a base class to fast, dictionary-based <see cref="IAppCache"/> implementations.
/// </summary>
internal abstract class FastDictionaryAppCacheBase : IAppCache
{
// prefix cache keys so we know which one are ours
protected const string CacheItemPrefix = "umbrtmche";
@@ -16,82 +19,75 @@ namespace Umbraco.Core.Cache
// an object that represent a value that has not been created yet
protected internal static readonly object ValueNotCreated = new object();
// manupulate the underlying cache entries
// these *must* be called from within the appropriate locks
// and use the full prefixed cache keys
protected abstract IEnumerable<DictionaryEntry> GetDictionaryEntries();
protected abstract void RemoveEntry(string key);
protected abstract object GetEntry(string key);
#region IAppCache
// read-write lock the underlying cache
//protected abstract IDisposable ReadLock { get; }
//protected abstract IDisposable WriteLock { get; }
protected abstract void EnterReadLock();
protected abstract void ExitReadLock();
protected abstract void EnterWriteLock();
protected abstract void ExitWriteLock();
protected string GetCacheKey(string key)
/// <inheritdoc />
public virtual object Get(string key)
{
return string.Format("{0}-{1}", CacheItemPrefix, key);
}
protected internal static Lazy<object> GetSafeLazy(Func<object> getCacheItem)
{
// try to generate the value and if it fails,
// wrap in an ExceptionHolder - would be much simpler
// to just use lazy.IsValueFaulted alas that field is
// internal
return new Lazy<object>(() =>
{
try
{
return getCacheItem();
}
catch (Exception e)
{
return new ExceptionHolder(ExceptionDispatchInfo.Capture(e));
}
});
}
protected internal static object GetSafeLazyValue(Lazy<object> lazy, bool onlyIfValueIsCreated = false)
{
// if onlyIfValueIsCreated, do not trigger value creation
// must return something, though, to differenciate from null values
if (onlyIfValueIsCreated && lazy.IsValueCreated == false) return ValueNotCreated;
// if execution has thrown then lazy.IsValueCreated is false
// and lazy.IsValueFaulted is true (but internal) so we use our
// own exception holder (see Lazy<T> source code) to return null
if (lazy.Value is ExceptionHolder) return null;
// we have a value and execution has not thrown so returning
// here does not throw - unless we're re-entering, take care of it
key = GetCacheKey(key);
Lazy<object> result;
try
{
return lazy.Value;
EnterReadLock();
result = GetEntry(key) as Lazy<object>; // null if key not found
}
catch (InvalidOperationException e)
finally
{
throw new InvalidOperationException("The method that computes a value for the cache has tried to read that value from the cache.", e);
ExitReadLock();
}
return result == null ? null : GetSafeLazyValue(result); // return exceptions as null
}
internal class ExceptionHolder
/// <inheritdoc />
public abstract object Get(string key, Func<object> factory);
/// <inheritdoc />
public virtual IEnumerable<object> SearchByKey(string keyStartsWith)
{
public ExceptionHolder(ExceptionDispatchInfo e)
var plen = CacheItemPrefix.Length + 1;
IEnumerable<DictionaryEntry> entries;
try
{
Exception = e;
EnterReadLock();
entries = GetDictionaryEntries()
.Where(x => ((string)x.Key).Substring(plen).InvariantStartsWith(keyStartsWith))
.ToArray(); // evaluate while locked
}
finally
{
ExitReadLock();
}
public ExceptionDispatchInfo Exception { get; }
return entries
.Select(x => GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null); // backward compat, don't store null values in the cache
}
#region Clear
/// <inheritdoc />
public virtual IEnumerable<object> SearchByRegex(string regex)
{
const string prefix = CacheItemPrefix + "-";
var compiled = new Regex(regex, RegexOptions.Compiled);
var plen = prefix.Length;
IEnumerable<DictionaryEntry> entries;
try
{
EnterReadLock();
entries = GetDictionaryEntries()
.Where(x => compiled.IsMatch(((string)x.Key).Substring(plen)))
.ToArray(); // evaluate while locked
}
finally
{
ExitReadLock();
}
return entries
.Select(x => GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null); // backward compatible, don't store null values in the cache
}
public virtual void ClearAllCache()
/// <inheritdoc />
public virtual void Clear()
{
try
{
@@ -106,7 +102,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheItem(string key)
/// <inheritdoc />
public virtual void Clear(string key)
{
var cacheKey = GetCacheKey(key);
try
@@ -120,7 +117,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheObjectTypes(string typeName)
/// <inheritdoc />
public virtual void ClearOfType(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
@@ -149,7 +147,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheObjectTypes<T>()
/// <inheritdoc />
public virtual void ClearOfType<T>()
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
@@ -178,7 +177,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
/// <inheritdoc />
public virtual void ClearOfType<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
@@ -210,7 +210,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheByKeySearch(string keyStartsWith)
/// <inheritdoc />
public virtual void ClearByKey(string keyStartsWith)
{
var plen = CacheItemPrefix.Length + 1;
try
@@ -227,14 +228,16 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheByKeyExpression(string regexString)
/// <inheritdoc />
public virtual void ClearByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
var plen = CacheItemPrefix.Length + 1;
try
{
EnterWriteLock();
foreach (var entry in GetDictionaryEntries()
.Where(x => Regex.IsMatch(((string)x.Key).Substring(plen), regexString))
.Where(x => compiled.IsMatch(((string)x.Key).Substring(plen)))
.ToArray())
RemoveEntry((string) entry.Key);
}
@@ -246,67 +249,80 @@ namespace Umbraco.Core.Cache
#endregion
#region Get
#region Dictionary
public virtual IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
// manipulate the underlying cache entries
// these *must* be called from within the appropriate locks
// and use the full prefixed cache keys
protected abstract IEnumerable<DictionaryEntry> GetDictionaryEntries();
protected abstract void RemoveEntry(string key);
protected abstract object GetEntry(string key);
// read-write lock the underlying cache
//protected abstract IDisposable ReadLock { get; }
//protected abstract IDisposable WriteLock { get; }
protected abstract void EnterReadLock();
protected abstract void ExitReadLock();
protected abstract void EnterWriteLock();
protected abstract void ExitWriteLock();
protected string GetCacheKey(string key)
{
var plen = CacheItemPrefix.Length + 1;
IEnumerable<DictionaryEntry> entries;
try
{
EnterReadLock();
entries = GetDictionaryEntries()
.Where(x => ((string)x.Key).Substring(plen).InvariantStartsWith(keyStartsWith))
.ToArray(); // evaluate while locked
}
finally
{
ExitReadLock();
}
return entries
.Select(x => GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null); // backward compat, don't store null values in the cache
return $"{CacheItemPrefix}-{key}";
}
public virtual IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
protected internal static Lazy<object> GetSafeLazy(Func<object> getCacheItem)
{
const string prefix = CacheItemPrefix + "-";
var plen = prefix.Length;
IEnumerable<DictionaryEntry> entries;
try
// try to generate the value and if it fails,
// wrap in an ExceptionHolder - would be much simpler
// to just use lazy.IsValueFaulted alas that field is
// internal
return new Lazy<object>(() =>
{
EnterReadLock();
entries = GetDictionaryEntries()
.Where(x => Regex.IsMatch(((string)x.Key).Substring(plen), regexString))
.ToArray(); // evaluate while locked
}
finally
{
ExitReadLock();
}
return entries
.Select(x => GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null); // backward compat, don't store null values in the cache
try
{
return getCacheItem();
}
catch (Exception e)
{
return new ExceptionHolder(ExceptionDispatchInfo.Capture(e));
}
});
}
public virtual object GetCacheItem(string cacheKey)
protected internal static object GetSafeLazyValue(Lazy<object> lazy, bool onlyIfValueIsCreated = false)
{
cacheKey = GetCacheKey(cacheKey);
Lazy<object> result;
// if onlyIfValueIsCreated, do not trigger value creation
// must return something, though, to differentiate from null values
if (onlyIfValueIsCreated && lazy.IsValueCreated == false) return ValueNotCreated;
// if execution has thrown then lazy.IsValueCreated is false
// and lazy.IsValueFaulted is true (but internal) so we use our
// own exception holder (see Lazy<T> source code) to return null
if (lazy.Value is ExceptionHolder) return null;
// we have a value and execution has not thrown so returning
// here does not throw - unless we're re-entering, take care of it
try
{
EnterReadLock();
result = GetEntry(cacheKey) as Lazy<object>; // null if key not found
return lazy.Value;
}
finally
catch (InvalidOperationException e)
{
ExitReadLock();
throw new InvalidOperationException("The method that computes a value for the cache has tried to read that value from the cache.", e);
}
return result == null ? null : GetSafeLazyValue(result); // return exceptions as null
}
public abstract object GetCacheItem(string cacheKey, Func<object> getCacheItem);
internal class ExceptionHolder
{
public ExceptionHolder(ExceptionDispatchInfo e)
{
Exception = e;
}
public ExceptionDispatchInfo Exception { get; }
}
#endregion
}
@@ -24,7 +24,7 @@ namespace Umbraco.Core.Cache
private readonly Func<TEntity, TId> _entityGetId;
private readonly bool _expires;
public FullDataSetRepositoryCachePolicy(IRuntimeCacheProvider cache, IScopeAccessor scopeAccessor, Func<TEntity, TId> entityGetId, bool expires)
public FullDataSetRepositoryCachePolicy(IAppPolicyCache cache, IScopeAccessor scopeAccessor, Func<TEntity, TId> entityGetId, bool expires)
: base(cache, scopeAccessor)
{
_entityGetId = entityGetId;
@@ -55,11 +55,11 @@ namespace Umbraco.Core.Cache
if (_expires)
{
Cache.InsertCacheItem(key, () => new DeepCloneableList<TEntity>(entities), TimeSpan.FromMinutes(5), true);
Cache.Insert(key, () => new DeepCloneableList<TEntity>(entities), TimeSpan.FromMinutes(5), true);
}
else
{
Cache.InsertCacheItem(key, () => new DeepCloneableList<TEntity>(entities));
Cache.Insert(key, () => new DeepCloneableList<TEntity>(entities));
}
}
@@ -171,7 +171,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void ClearAll()
{
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
}
}
}
@@ -7,54 +7,83 @@ using System.Web;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A cache provider that caches items in the HttpContext.Items
/// Implements a fast <see cref="IAppCache"/> on top of HttpContext.Items.
/// </summary>
/// <remarks>
/// If the Items collection is null, then this provider has no effect
/// <para>If no current HttpContext items can be found (no current HttpContext,
/// or no Items...) then this cache acts as a pass-through and does not cache
/// anything.</para>
/// </remarks>
internal class HttpRequestCacheProvider : DictionaryCacheProviderBase
internal class HttpRequestAppCache : FastDictionaryAppCacheBase
{
// context provider
// the idea is that there is only one, application-wide HttpRequestCacheProvider instance,
// that is initialized with a method that returns the "current" context.
// NOTE
// but then it is initialized with () => new HttpContextWrapper(HttpContent.Current)
// which is higly inefficient because it creates a new wrapper each time we refer to _context()
// so replace it with _context1 and _context2 below + a way to get context.Items.
//private readonly Func<HttpContextBase> _context;
// NOTE
// and then in almost 100% cases _context2 will be () => HttpContext.Current
// so why not bring that logic in here and fallback on to HttpContext.Current when
// _context1 is null?
//private readonly HttpContextBase _context1;
//private readonly Func<HttpContext> _context2;
private readonly HttpContextBase _context;
private IDictionary ContextItems
{
//get { return _context1 != null ? _context1.Items : _context2().Items; }
get { return _context != null ? _context.Items : HttpContext.Current.Items; }
}
private bool HasContextItems
{
get { return (_context != null && _context.Items != null) || HttpContext.Current != null; }
}
// for unit tests
public HttpRequestCacheProvider(HttpContextBase context)
/// <summary>
/// Initializes a new instance of the <see cref="HttpRequestAppCache"/> class with a context, for unit tests!
/// </summary>
public HttpRequestAppCache(HttpContextBase context)
{
_context = context;
}
// main constructor
// will use HttpContext.Current
public HttpRequestCacheProvider(/*Func<HttpContext> context*/)
/// <summary>
/// Initializes a new instance of the <see cref="HttpRequestAppCache"/> class.
/// </summary>
/// <remarks>
/// <para>Will use HttpContext.Current.</para>
/// TODO: https://github.com/umbraco/Umbraco-CMS/issues/4239 - use IHttpContextAccessor NOT HttpContext.Current
/// </remarks>
public HttpRequestAppCache()
{ }
private IDictionary ContextItems => _context?.Items ?? HttpContext.Current?.Items;
private bool HasContextItems => _context?.Items != null || HttpContext.Current != null;
/// <inheritdoc />
public override object Get(string key, Func<object> factory)
{
//_context2 = context;
//no place to cache so just return the callback result
if (HasContextItems == false) return factory();
key = GetCacheKey(key);
Lazy<object> result;
try
{
EnterWriteLock();
result = ContextItems[key] as Lazy<object>; // null if key not found
// cannot create value within the lock, so if result.IsValueCreated is false, just
// do nothing here - means that if creation throws, a race condition could cause
// more than one thread to reach the return statement below and throw - accepted.
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = GetSafeLazy(factory);
ContextItems[key] = result;
}
}
finally
{
ExitWriteLock();
}
// using GetSafeLazy and GetSafeLazyValue ensures that we don't cache
// exceptions (but try again and again) and silently eat them - however at
// some point we have to report them - so need to re-throw here
// this does not throw anymore
//return result.Value;
var value = result.Value; // will not throw (safe lazy)
if (value is ExceptionHolder eh) eh.Exception.Throw(); // throw once!
return value;
}
#region Entries
protected override IEnumerable<DictionaryEntry> GetDictionaryEntries()
{
const string prefix = CacheItemPrefix + "-";
@@ -62,7 +91,7 @@ namespace Umbraco.Core.Cache
if (HasContextItems == false) return Enumerable.Empty<DictionaryEntry>();
return ContextItems.Cast<DictionaryEntry>()
.Where(x => x.Key is string && ((string)x.Key).StartsWith(prefix));
.Where(x => x.Key is string s && s.StartsWith(prefix));
}
protected override void RemoveEntry(string key)
@@ -77,6 +106,8 @@ namespace Umbraco.Core.Cache
return HasContextItems ? ContextItems[key] : null;
}
#endregion
#region Lock
private bool _entered;
@@ -103,59 +134,5 @@ namespace Umbraco.Core.Cache
}
#endregion
#region Get
public override object GetCacheItem(string cacheKey, Func<object> getCacheItem)
{
//no place to cache so just return the callback result
if (HasContextItems == false) return getCacheItem();
cacheKey = GetCacheKey(cacheKey);
Lazy<object> result;
try
{
EnterWriteLock();
result = ContextItems[cacheKey] as Lazy<object>; // null if key not found
// cannot create value within the lock, so if result.IsValueCreated is false, just
// do nothing here - means that if creation throws, a race condition could cause
// more than one thread to reach the return statement below and throw - accepted.
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = GetSafeLazy(getCacheItem);
ContextItems[cacheKey] = result;
}
}
finally
{
ExitWriteLock();
}
// using GetSafeLazy and GetSafeLazyValue ensures that we don't cache
// exceptions (but try again and again) and silently eat them - however at
// some point we have to report them - so need to re-throw here
// this does not throw anymore
//return result.Value;
var value = result.Value; // will not throw (safe lazy)
if (value is ExceptionHolder eh) eh.Exception.Throw(); // throw once!
return value;
}
#endregion
#region Insert
#endregion
private class NoopLocker : DisposableObjectSlim
{
protected override void DisposeResources()
{ }
}
}
}
+94
View File
@@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Defines an application cache.
/// </summary>
public interface IAppCache
{
/// <summary>
/// Gets an item identified by its key.
/// </summary>
/// <param name="key">The key of the item.</param>
/// <returns>The item, or null if the item was not found.</returns>
object Get(string key);
/// <summary>
/// Gets or creates an item identified by its key.
/// </summary>
/// <param name="key">The key of the item.</param>
/// <param name="factory">A factory function that can create the item.</param>
/// <returns>The item.</returns>
object Get(string key, Func<object> factory);
/// <summary>
/// Gets items with a key starting with the specified value.
/// </summary>
/// <param name="keyStartsWith">The StartsWith value to use in the search.</param>
/// <returns>Items matching the search.</returns>
IEnumerable<object> SearchByKey(string keyStartsWith);
/// <summary>
/// Gets items with a key matching a regular expression.
/// </summary>
/// <param name="regex">The regular expression.</param>
/// <returns>Items matching the search.</returns>
IEnumerable<object> SearchByRegex(string regex);
/// <summary>
/// Removes all items from the cache.
/// </summary>
void Clear();
/// <summary>
/// Removes an item identified by its key from the cache.
/// </summary>
/// <param name="key">The key of the item.</param>
void Clear(string key);
/// <summary>
/// Removes items of a specified type from the cache.
/// </summary>
/// <param name="typeName">The name of the type to remove.</param>
/// <remarks>
/// <para>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</para>
/// <para>Performs a case-sensitive search.</para>
/// </remarks>
void ClearOfType(string typeName);
/// <summary>
/// Removes items of a specified type from the cache.
/// </summary>
/// <typeparam name="T">The type of the items to remove.</typeparam>
/// <remarks>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</remarks>
void ClearOfType<T>();
/// <summary>
/// Removes items of a specified type from the cache.
/// </summary>
/// <typeparam name="T">The type of the items to remove.</typeparam>
/// <param name="predicate">The predicate to satisfy.</param>
/// <remarks>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</remarks>
void ClearOfType<T>(Func<string, T, bool> predicate);
/// <summary>
/// Clears items with a key starting with the specified value.
/// </summary>
/// <param name="keyStartsWith">The StartsWith value to use in the search.</param>
void ClearByKey(string keyStartsWith);
/// <summary>
/// Clears items with a key matching a regular expression.
/// </summary>
/// <param name="regex">The regular expression.</param>
void ClearByRegex(string regex);
}
}
+52
View File
@@ -0,0 +1,52 @@
using System;
using System.Web.Caching;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Defines an application cache that support cache policies.
/// </summary>
/// <remarks>A cache policy can be used to cache with timeouts,
/// or depending on files, and with a remove callback, etc.</remarks>
public interface IAppPolicyCache : IAppCache
{
/// <summary>
/// Gets an item identified by its key.
/// </summary>
/// <param name="key">The key of the item.</param>
/// <param name="factory">A factory function that can create the item.</param>
/// <param name="timeout">An optional cache timeout.</param>
/// <param name="isSliding">An optional value indicating whether the cache timeout is sliding (default is false).</param>
/// <param name="priority">An optional cache priority (default is Normal).</param>
/// <param name="removedCallback">An optional callback to handle removals.</param>
/// <param name="dependentFiles">Files the cache entry depends on.</param>
/// <returns>The item.</returns>
object Get(
string key,
Func<object> factory,
TimeSpan? timeout,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null);
/// <summary>
/// Inserts an item.
/// </summary>
/// <param name="key">The key of the item.</param>
/// <param name="factory">A factory function that can create the item.</param>
/// <param name="timeout">An optional cache timeout.</param>
/// <param name="isSliding">An optional value indicating whether the cache timeout is sliding (default is false).</param>
/// <param name="priority">An optional cache priority (default is Normal).</param>
/// <param name="removedCallback">An optional callback to handle removals.</param>
/// <param name="dependentFiles">Files the cache entry depends on.</param>
void Insert(
string key,
Func<object> factory,
TimeSpan? timeout = null,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null);
}
}
-68
View File
@@ -1,68 +0,0 @@
using System;
using System.Collections.Generic;
namespace Umbraco.Core.Cache
{
/// <summary>
/// An interface for implementing a basic cache provider
/// </summary>
public interface ICacheProvider
{
/// <summary>
/// Removes all items from the cache.
/// </summary>
void ClearAllCache();
/// <summary>
/// Removes an item from the cache, identified by its key.
/// </summary>
/// <param name="key">The key of the item.</param>
void ClearCacheItem(string key);
/// <summary>
/// Removes items from the cache, of a specified type.
/// </summary>
/// <param name="typeName">The name of the type to remove.</param>
/// <remarks>
/// <para>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</para>
/// <para>Performs a case-sensitive search.</para>
/// </remarks>
void ClearCacheObjectTypes(string typeName);
/// <summary>
/// Removes items from the cache, of a specified type.
/// </summary>
/// <typeparam name="T">The type of the items to remove.</typeparam>
/// <remarks>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</remarks>
void ClearCacheObjectTypes<T>();
/// <summary>
/// Removes items from the cache, of a specified type, satisfying a predicate.
/// </summary>
/// <typeparam name="T">The type of the items to remove.</typeparam>
/// <param name="predicate">The predicate to satisfy.</param>
/// <remarks>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</remarks>
void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate);
void ClearCacheByKeySearch(string keyStartsWith);
void ClearCacheByKeyExpression(string regexString);
IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith);
IEnumerable<object> GetCacheItemsByKeyExpression(string regexString);
/// <summary>
/// Returns an item with a given key
/// </summary>
/// <param name="cacheKey"></param>
/// <returns></returns>
object GetCacheItem(string cacheKey);
object GetCacheItem(string cacheKey, Func<object> getCacheItem);
}
}
+1 -1
View File
@@ -4,7 +4,7 @@ using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
/// <summary>
/// The IcacheRefresher Interface is used for loadbalancing.
/// The IcacheRefresher Interface is used for load balancing.
///
/// </summary>
public interface ICacheRefresher : IDiscoverable
@@ -48,7 +48,7 @@ namespace Umbraco.Core.Cache
/// Updates an entity.
/// </summary>
/// <param name="entity">The entity.</param>
/// <param name="persistUpdated">The reopsitory PersistUpdatedItem method.</param>
/// <param name="persistUpdated">The repository PersistUpdatedItem method.</param>
/// <remarks>Updates the entity in the repository, and updates the cache accordingly.</remarks>
void Update(TEntity entity, Action<TEntity> persistUpdated);
@@ -1,35 +0,0 @@
using System;
using System.Runtime.Caching;
using System.Text;
using System.Web.Caching;
using CacheItemPriority = System.Web.Caching.CacheItemPriority;
namespace Umbraco.Core.Cache
{
/// <summary>
/// An abstract class for implementing a runtime cache provider
/// </summary>
/// <remarks>
/// </remarks>
public interface IRuntimeCacheProvider : ICacheProvider
{
object GetCacheItem(
string cacheKey,
Func<object> getCacheItem,
TimeSpan? timeout,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null);
void InsertCacheItem(
string cacheKey,
Func<object> getCacheItem,
TimeSpan? timeout = null,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null);
}
}
+41
View File
@@ -0,0 +1,41 @@
using System;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Represents a dictionary of <see cref="IAppPolicyCache"/> for types.
/// </summary>
/// <remarks>
/// <para>Isolated caches are used by e.g. repositories, to ensure that each cached entity
/// type has its own cache, so that lookups are fast and the repository does not need to
/// search through all keys on a global scale.</para>
/// </remarks>
public class IsolatedCaches : AppPolicedCacheDictionary<Type>
{
/// <summary>
/// Initializes a new instance of the <see cref="IsolatedCaches"/> class.
/// </summary>
/// <param name="cacheFactory"></param>
public IsolatedCaches(Func<Type, IAppPolicyCache> cacheFactory)
: base(cacheFactory)
{ }
/// <summary>
/// Gets a cache.
/// </summary>
public IAppPolicyCache GetOrCreate<T>()
=> GetOrCreate(typeof(T));
/// <summary>
/// Tries to get a cache.
/// </summary>
public Attempt<IAppPolicyCache> Get<T>()
=> Get(typeof(T));
/// <summary>
/// Clears a cache.
/// </summary>
public void ClearCache<T>()
=> ClearCache(typeof(T));
}
}
@@ -1,91 +0,0 @@
using System;
using System.Collections.Concurrent;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Used to get/create/manipulate isolated runtime cache
/// </summary>
/// <remarks>
/// This is useful for repository level caches to ensure that cache lookups by key are fast so
/// that the repository doesn't need to search through all keys on a global scale.
/// </remarks>
public class IsolatedRuntimeCache
{
internal Func<Type, IRuntimeCacheProvider> CacheFactory { get; set; }
/// <summary>
/// Constructor that allows specifying a factory for the type of runtime isolated cache to create
/// </summary>
/// <param name="cacheFactory"></param>
public IsolatedRuntimeCache(Func<Type, IRuntimeCacheProvider> cacheFactory)
{
CacheFactory = cacheFactory;
}
private readonly ConcurrentDictionary<Type, IRuntimeCacheProvider> _isolatedCache = new ConcurrentDictionary<Type, IRuntimeCacheProvider>();
/// <summary>
/// Returns an isolated runtime cache for a given type
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public IRuntimeCacheProvider GetOrCreateCache<T>()
{
return _isolatedCache.GetOrAdd(typeof(T), type => CacheFactory(type));
}
/// <summary>
/// Returns an isolated runtime cache for a given type
/// </summary>
/// <returns></returns>
public IRuntimeCacheProvider GetOrCreateCache(Type type)
{
return _isolatedCache.GetOrAdd(type, t => CacheFactory(t));
}
/// <summary>
/// Tries to get a cache by the type specified
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public Attempt<IRuntimeCacheProvider> GetCache<T>()
{
IRuntimeCacheProvider cache;
if (_isolatedCache.TryGetValue(typeof(T), out cache))
{
return Attempt.Succeed(cache);
}
return Attempt<IRuntimeCacheProvider>.Fail();
}
/// <summary>
/// Clears all values inside this isolated runtime cache
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public void ClearCache<T>()
{
IRuntimeCacheProvider cache;
if (_isolatedCache.TryGetValue(typeof(T), out cache))
{
cache.ClearAllCache();
}
}
/// <summary>
/// Clears all of the isolated caches
/// </summary>
public void ClearAllCaches()
{
foreach (var key in _isolatedCache.Keys)
{
IRuntimeCacheProvider cache;
if (_isolatedCache.TryRemove(key, out cache))
{
cache.ClearAllCache();
}
}
}
}
}
@@ -13,8 +13,8 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Initializes a new instance of the <see cref="JsonCacheRefresherBase{TInstanceType}"/>.
/// </summary>
/// <param name="cacheHelper">A cache helper.</param>
protected JsonCacheRefresherBase(CacheHelper cacheHelper) : base(cacheHelper)
/// <param name="appCaches">A cache helper.</param>
protected JsonCacheRefresherBase(AppCaches appCaches) : base(appCaches)
{ }
/// <summary>
+82
View File
@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Implements <see cref="IAppPolicyCache"/> and do not cache.
/// </summary>
public class NoAppCache : IAppPolicyCache
{
private NoAppCache() { }
/// <summary>
/// Gets the singleton instance.
/// </summary>
public static NoAppCache Instance { get; } = new NoAppCache();
/// <inheritdoc />
public virtual object Get(string cacheKey)
{
return null;
}
/// <inheritdoc />
public virtual object Get(string cacheKey, Func<object> factory)
{
return factory();
}
/// <inheritdoc />
public virtual IEnumerable<object> SearchByKey(string keyStartsWith)
{
return Enumerable.Empty<object>();
}
/// <inheritdoc />
public IEnumerable<object> SearchByRegex(string regex)
{
return Enumerable.Empty<object>();
}
/// <inheritdoc />
public object Get(string key, Func<object> factory, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
return factory();
}
/// <inheritdoc />
public void Insert(string key, Func<object> factory, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{ }
/// <inheritdoc />
public virtual void Clear()
{ }
/// <inheritdoc />
public virtual void Clear(string key)
{ }
/// <inheritdoc />
public virtual void ClearOfType(string typeName)
{ }
/// <inheritdoc />
public virtual void ClearOfType<T>()
{ }
/// <inheritdoc />
public virtual void ClearOfType<T>(Func<string, T, bool> predicate)
{ }
/// <inheritdoc />
public virtual void ClearByKey(string keyStartsWith)
{ }
/// <inheritdoc />
public virtual void ClearByRegex(string regex)
{ }
}
}
@@ -13,7 +13,7 @@ namespace Umbraco.Core.Cache
public static NoCacheRepositoryCachePolicy<TEntity, TId> Instance { get; } = new NoCacheRepositoryCachePolicy<TEntity, TId>();
public IRepositoryCachePolicy<TEntity, TId> Scoped(IRuntimeCacheProvider runtimeCache, IScope scope)
public IRepositoryCachePolicy<TEntity, TId> Scoped(IAppPolicyCache runtimeCache, IScope scope)
{
throw new NotImplementedException();
}
@@ -1,66 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Represents a cache provider that does not cache anything.
/// </summary>
public class NullCacheProvider : IRuntimeCacheProvider
{
private NullCacheProvider() { }
public static NullCacheProvider Instance { get; } = new NullCacheProvider();
public virtual void ClearAllCache()
{ }
public virtual void ClearCacheItem(string key)
{ }
public virtual void ClearCacheObjectTypes(string typeName)
{ }
public virtual void ClearCacheObjectTypes<T>()
{ }
public virtual void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
{ }
public virtual void ClearCacheByKeySearch(string keyStartsWith)
{ }
public virtual void ClearCacheByKeyExpression(string regexString)
{ }
public virtual IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
{
return Enumerable.Empty<object>();
}
public IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
{
return Enumerable.Empty<object>();
}
public virtual object GetCacheItem(string cacheKey)
{
return default(object);
}
public virtual object GetCacheItem(string cacheKey, Func<object> getCacheItem)
{
return getCacheItem();
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
return getCacheItem();
}
public void InsertCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{ }
}
}
@@ -11,31 +11,142 @@ using CacheItemPriority = System.Web.Caching.CacheItemPriority;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Represents a cache provider that caches item in a <see cref="MemoryCache"/>.
/// A cache provider that wraps the logic of a System.Runtime.Caching.ObjectCache
/// Implements <see cref="IAppPolicyCache"/> on top of a <see cref="ObjectCache"/>.
/// </summary>
/// <remarks>The <see cref="MemoryCache"/> is created with name "in-memory". That name is
/// used to retrieve configuration options. It does not identify the memory cache, i.e.
/// each instance of this class has its own, independent, memory cache.</remarks>
public class ObjectCacheRuntimeCacheProvider : IRuntimeCacheProvider
public class ObjectCacheAppCache : IAppPolicyCache
{
private readonly ReaderWriterLockSlim _locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
internal ObjectCache MemoryCache;
/// <summary>
/// Used for debugging
/// Initializes a new instance of the <see cref="ObjectCacheAppCache"/>.
/// </summary>
internal Guid InstanceId { get; private set; }
public ObjectCacheRuntimeCacheProvider()
public ObjectCacheAppCache()
{
// the MemoryCache is created with name "in-memory". That name is
// used to retrieve configuration options. It does not identify the memory cache, i.e.
// each instance of this class has its own, independent, memory cache.
MemoryCache = new MemoryCache("in-memory");
InstanceId = Guid.NewGuid();
}
#region Clear
/// <summary>
/// Gets the internal memory cache, for tests only!
/// </summary>
internal ObjectCache MemoryCache { get; private set; }
public virtual void ClearAllCache()
/// <inheritdoc />
public object Get(string key)
{
Lazy<object> result;
try
{
_locker.EnterReadLock();
result = MemoryCache.Get(key) as Lazy<object>; // null if key not found
}
finally
{
if (_locker.IsReadLockHeld)
_locker.ExitReadLock();
}
return result == null ? null : FastDictionaryAppCacheBase.GetSafeLazyValue(result); // return exceptions as null
}
/// <inheritdoc />
public object Get(string key, Func<object> factory)
{
return Get(key, factory, null);
}
/// <inheritdoc />
public IEnumerable<object> SearchByKey(string keyStartsWith)
{
KeyValuePair<string, object>[] entries;
try
{
_locker.EnterReadLock();
entries = MemoryCache
.Where(x => x.Key.InvariantStartsWith(keyStartsWith))
.ToArray(); // evaluate while locked
}
finally
{
if (_locker.IsReadLockHeld)
_locker.ExitReadLock();
}
return entries
.Select(x => FastDictionaryAppCacheBase.GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null) // backward compat, don't store null values in the cache
.ToList();
}
/// <inheritdoc />
public IEnumerable<object> SearchByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
KeyValuePair<string, object>[] entries;
try
{
_locker.EnterReadLock();
entries = MemoryCache
.Where(x => compiled.IsMatch(x.Key))
.ToArray(); // evaluate while locked
}
finally
{
if (_locker.IsReadLockHeld)
_locker.ExitReadLock();
}
return entries
.Select(x => FastDictionaryAppCacheBase.GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null) // backward compat, don't store null values in the cache
.ToList();
}
/// <inheritdoc />
public object Get(string key, Func<object> factory, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
// see notes in HttpRuntimeAppCache
Lazy<object> result;
using (var lck = new UpgradeableReadLock(_locker))
{
result = MemoryCache.Get(key) as Lazy<object>;
if (result == null || FastDictionaryAppCacheBase.GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = FastDictionaryAppCacheBase.GetSafeLazy(factory);
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
lck.UpgradeToWriteLock();
//NOTE: This does an add or update
MemoryCache.Set(key, result, policy);
}
}
//return result.Value;
var value = result.Value; // will not throw (safe lazy)
if (value is FastDictionaryAppCacheBase.ExceptionHolder eh) eh.Exception.Throw(); // throw once!
return value;
}
/// <inheritdoc />
public void Insert(string key, Func<object> factory, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
var result = FastDictionaryAppCacheBase.GetSafeLazy(factory);
var value = result.Value; // force evaluation now
if (value == null) return; // do not store null values (backward compat)
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
//NOTE: This does an add or update
MemoryCache.Set(key, result, policy);
}
/// <inheritdoc />
public virtual void Clear()
{
try
{
@@ -50,7 +161,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheItem(string key)
/// <inheritdoc />
public virtual void Clear(string key)
{
try
{
@@ -65,7 +177,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheObjectTypes(string typeName)
/// <inheritdoc />
public virtual void ClearOfType(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
@@ -79,7 +192,7 @@ namespace Umbraco.Core.Cache
// x.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
var value = FastDictionaryAppCacheBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
@@ -96,12 +209,13 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheObjectTypes<T>()
/// <inheritdoc />
public virtual void ClearOfType<T>()
{
try
{
_locker.EnterWriteLock();
var typeOfT = typeof (T);
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
foreach (var key in MemoryCache
.Where(x =>
@@ -109,7 +223,7 @@ namespace Umbraco.Core.Cache
// x.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
var value = FastDictionaryAppCacheBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
@@ -127,7 +241,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
/// <inheritdoc />
public virtual void ClearOfType<T>(Func<string, T, bool> predicate)
{
try
{
@@ -140,7 +255,7 @@ namespace Umbraco.Core.Cache
// x.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
var value = FastDictionaryAppCacheBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
if (value == null) return true;
// if T is an interface remove anything that implements that interface
@@ -159,7 +274,8 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheByKeySearch(string keyStartsWith)
/// <inheritdoc />
public virtual void ClearByKey(string keyStartsWith)
{
try
{
@@ -177,13 +293,16 @@ namespace Umbraco.Core.Cache
}
}
public virtual void ClearCacheByKeyExpression(string regexString)
/// <inheritdoc />
public virtual void ClearByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
try
{
_locker.EnterWriteLock();
foreach (var key in MemoryCache
.Where(x => Regex.IsMatch(x.Key, regexString))
.Where(x => compiled.IsMatch(x.Key))
.Select(x => x.Key)
.ToArray()) // ToArray required to remove
MemoryCache.Remove(key);
@@ -195,120 +314,6 @@ namespace Umbraco.Core.Cache
}
}
#endregion
#region Get
public IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
{
KeyValuePair<string, object>[] entries;
try
{
_locker.EnterReadLock();
entries = MemoryCache
.Where(x => x.Key.InvariantStartsWith(keyStartsWith))
.ToArray(); // evaluate while locked
}
finally
{
if (_locker.IsReadLockHeld)
_locker.ExitReadLock();
}
return entries
.Select(x => DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null) // backward compat, don't store null values in the cache
.ToList();
}
public IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
{
KeyValuePair<string, object>[] entries;
try
{
_locker.EnterReadLock();
entries = MemoryCache
.Where(x => Regex.IsMatch(x.Key, regexString))
.ToArray(); // evaluate while locked
}
finally
{
if (_locker.IsReadLockHeld)
_locker.ExitReadLock();
}
return entries
.Select(x => DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null) // backward compat, don't store null values in the cache
.ToList();
}
public object GetCacheItem(string cacheKey)
{
Lazy<object> result;
try
{
_locker.EnterReadLock();
result = MemoryCache.Get(cacheKey) as Lazy<object>; // null if key not found
}
finally
{
if (_locker.IsReadLockHeld)
_locker.ExitReadLock();
}
return result == null ? null : DictionaryCacheProviderBase.GetSafeLazyValue(result); // return exceptions as null
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem)
{
return GetCacheItem(cacheKey, getCacheItem, null);
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
// see notes in HttpRuntimeCacheProvider
Lazy<object> result;
using (var lck = new UpgradeableReadLock(_locker))
{
result = MemoryCache.Get(cacheKey) as Lazy<object>;
if (result == null || DictionaryCacheProviderBase.GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
lck.UpgradeToWriteLock();
//NOTE: This does an add or update
MemoryCache.Set(cacheKey, result, policy);
}
}
//return result.Value;
var value = result.Value; // will not throw (safe lazy)
if (value is DictionaryCacheProviderBase.ExceptionHolder eh) eh.Exception.Throw(); // throw once!
return value;
}
#endregion
#region Insert
public void InsertCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
var result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var value = result.Value; // force evaluation now
if (value == null) return; // do not store null values (backward compat)
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
//NOTE: This does an add or update
MemoryCache.Set(cacheKey, result, policy);
}
#endregion
private static CacheItemPolicy GetPolicy(TimeSpan? timeout = null, bool isSliding = false, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
var absolute = isSliding ? ObjectCache.InfiniteAbsoluteExpiration : (timeout == null ? ObjectCache.InfiniteAbsoluteExpiration : DateTime.Now.Add(timeout.Value));
@@ -15,8 +15,8 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Initializes a new instance of the <see cref="PayloadCacheRefresherBase{TInstanceType, TPayload}"/>.
/// </summary>
/// <param name="cacheHelper">A cache helper.</param>
protected PayloadCacheRefresherBase(CacheHelper cacheHelper) : base(cacheHelper)
/// <param name="appCaches">A cache helper.</param>
protected PayloadCacheRefresherBase(AppCaches appCaches) : base(appCaches)
{ }
#region Json
@@ -13,16 +13,16 @@ namespace Umbraco.Core.Cache
internal abstract class RepositoryCachePolicyBase<TEntity, TId> : IRepositoryCachePolicy<TEntity, TId>
where TEntity : class, IEntity
{
private readonly IRuntimeCacheProvider _globalCache;
private readonly IAppPolicyCache _globalCache;
private readonly IScopeAccessor _scopeAccessor;
protected RepositoryCachePolicyBase(IRuntimeCacheProvider globalCache, IScopeAccessor scopeAccessor)
protected RepositoryCachePolicyBase(IAppPolicyCache globalCache, IScopeAccessor scopeAccessor)
{
_globalCache = globalCache ?? throw new ArgumentNullException(nameof(globalCache));
_scopeAccessor = scopeAccessor ?? throw new ArgumentNullException(nameof(scopeAccessor));
}
protected IRuntimeCacheProvider Cache
protected IAppPolicyCache Cache
{
get
{
@@ -32,9 +32,9 @@ namespace Umbraco.Core.Cache
case RepositoryCacheMode.Default:
return _globalCache;
case RepositoryCacheMode.Scoped:
return ambientScope.IsolatedRuntimeCache.GetOrCreateCache<TEntity>();
return ambientScope.IsolatedCaches.GetOrCreate<TEntity>();
case RepositoryCacheMode.None:
return NullCacheProvider.Instance;
return NoAppCache.Instance;
default:
throw new NotSupportedException($"Repository cache mode {ambientScope.RepositoryCacheMode} is not supported.");
}
@@ -16,7 +16,7 @@ namespace Umbraco.Core.Cache
internal class SingleItemsOnlyRepositoryCachePolicy<TEntity, TId> : DefaultRepositoryCachePolicy<TEntity, TId>
where TEntity : class, IEntity
{
public SingleItemsOnlyRepositoryCachePolicy(IRuntimeCacheProvider cache, IScopeAccessor scopeAccessor, RepositoryCachePolicyOptions options)
public SingleItemsOnlyRepositoryCachePolicy(IAppPolicyCache cache, IScopeAccessor scopeAccessor, RepositoryCachePolicyOptions options)
: base(cache, scopeAccessor, options)
{ }
@@ -1,79 +0,0 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Represents a cache provider that statically caches item in a concurrent dictionary.
/// </summary>
public class StaticCacheProvider : ICacheProvider
{
internal readonly ConcurrentDictionary<string, object> StaticCache = new ConcurrentDictionary<string, object>();
public virtual void ClearAllCache()
{
StaticCache.Clear();
}
public virtual void ClearCacheItem(string key)
{
object val;
StaticCache.TryRemove(key, out val);
}
public virtual void ClearCacheObjectTypes(string typeName)
{
StaticCache.RemoveAll(kvp => kvp.Value != null && kvp.Value.GetType().ToString().InvariantEquals(typeName));
}
public virtual void ClearCacheObjectTypes<T>()
{
var typeOfT = typeof(T);
StaticCache.RemoveAll(kvp => kvp.Value != null && kvp.Value.GetType() == typeOfT);
}
public virtual void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
StaticCache.RemoveAll(kvp => kvp.Value != null && kvp.Value.GetType() == typeOfT && predicate(kvp.Key, (T)kvp.Value));
}
public virtual void ClearCacheByKeySearch(string keyStartsWith)
{
StaticCache.RemoveAll(kvp => kvp.Key.InvariantStartsWith(keyStartsWith));
}
public virtual void ClearCacheByKeyExpression(string regexString)
{
StaticCache.RemoveAll(kvp => Regex.IsMatch(kvp.Key, regexString));
}
public virtual IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
{
return (from KeyValuePair<string, object> c in StaticCache
where c.Key.InvariantStartsWith(keyStartsWith)
select c.Value).ToList();
}
public IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
{
return (from KeyValuePair<string, object> c in StaticCache
where Regex.IsMatch(c.Key, regexString)
select c.Value).ToList();
}
public virtual object GetCacheItem(string cacheKey)
{
var result = StaticCache[cacheKey];
return result;
}
public virtual object GetCacheItem(string cacheKey, Func<object> getCacheItem)
{
return StaticCache.GetOrAdd(cacheKey, key => getCacheItem());
}
}
}
@@ -14,9 +14,9 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Initializes a new instance of the <see cref="TypedCacheRefresherBase{TInstanceType, TEntityType}"/>.
/// </summary>
/// <param name="cacheHelper">A cache helper.</param>
protected TypedCacheRefresherBase(CacheHelper cacheHelper)
: base(cacheHelper)
/// <param name="appCaches">A cache helper.</param>
protected TypedCacheRefresherBase(AppCaches appCaches)
: base(appCaches)
{ }
#region Refresher
@@ -4,14 +4,14 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web.Caching;
using CacheItemPriority = System.Web.Caching.CacheItemPriority;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A CacheProvider that wraps the logic of the HttpRuntime.Cache
/// Implements <see cref="IAppPolicyCache"/> on top of a <see cref="System.Web.Caching.Cache"/>.
/// </summary>
internal class HttpRuntimeCacheProvider : DictionaryCacheProviderBase, IRuntimeCacheProvider
/// <remarks>The underlying cache is expected to be HttpRuntime.Cache.</remarks>
internal class WebCachingAppCache : FastDictionaryAppCacheBase, IAppPolicyCache
{
// locker object that supports upgradeable read locking
// does not need to support recursion if we implement the cache correctly and ensure
@@ -21,16 +21,43 @@ namespace Umbraco.Core.Cache
private readonly System.Web.Caching.Cache _cache;
/// <summary>
/// Used for debugging
/// Initializes a new instance of the <see cref="WebCachingAppCache"/> class.
/// </summary>
internal Guid InstanceId { get; private set; }
public HttpRuntimeCacheProvider(System.Web.Caching.Cache cache)
public WebCachingAppCache(System.Web.Caching.Cache cache)
{
_cache = cache;
InstanceId = Guid.NewGuid();
}
/// <inheritdoc />
public override object Get(string key, Func<object> factory)
{
return Get(key, factory, null, dependentFiles: null);
}
/// <inheritdoc />
public object Get(string key, Func<object> factory, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
CacheDependency dependency = null;
if (dependentFiles != null && dependentFiles.Any())
{
dependency = new CacheDependency(dependentFiles);
}
return Get(key, factory, timeout, isSliding, priority, removedCallback, dependency);
}
/// <inheritdoc />
public void Insert(string key, Func<object> factory, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
CacheDependency dependency = null;
if (dependentFiles != null && dependentFiles.Any())
{
dependency = new CacheDependency(dependentFiles);
}
Insert(key, factory, timeout, isSliding, priority, removedCallback, dependency);
}
#region Dictionary
protected override IEnumerable<DictionaryEntry> GetDictionaryEntries()
{
const string prefix = CacheItemPrefix + "-";
@@ -48,6 +75,8 @@ namespace Umbraco.Core.Cache
return _cache.Get(key);
}
#endregion
#region Lock
protected override void EnterReadLock()
@@ -74,33 +103,9 @@ namespace Umbraco.Core.Cache
#endregion
#region Get
/// <summary>
/// Gets (and adds if necessary) an item from the cache with all of the default parameters
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="getCacheItem"></param>
/// <returns></returns>
public override object GetCacheItem(string cacheKey, Func<object> getCacheItem)
private object Get(string key, Func<object> factory, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, CacheDependency dependency = null)
{
return GetCacheItem(cacheKey, getCacheItem, null, dependentFiles: null);
}
/// <summary>
/// This overload is here for legacy purposes
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="getCacheItem"></param>
/// <param name="timeout"></param>
/// <param name="isSliding"></param>
/// <param name="priority"></param>
/// <param name="removedCallback"></param>
/// <param name="dependency"></param>
/// <returns></returns>
internal object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, CacheDependency dependency = null)
{
cacheKey = GetCacheKey(cacheKey);
key = GetCacheKey(key);
// NOTE - because we don't know what getCacheItem does, how long it will take and whether it will hang,
// getCacheItem should run OUTSIDE of the global application lock else we run into lock contention and
@@ -133,7 +138,7 @@ namespace Umbraco.Core.Cache
try
{
_locker.EnterReadLock();
result = _cache.Get(cacheKey) as Lazy<object>; // null if key not found
result = _cache.Get(key) as Lazy<object>; // null if key not found
}
finally
{
@@ -145,7 +150,7 @@ namespace Umbraco.Core.Cache
using (var lck = new UpgradeableReadLock(_locker))
{
result = _cache.Get(cacheKey) as Lazy<object>; // null if key not found
result = _cache.Get(key) as Lazy<object>; // null if key not found
// cannot create value within the lock, so if result.IsValueCreated is false, just
// do nothing here - means that if creation throws, a race condition could cause
@@ -153,13 +158,13 @@ namespace Umbraco.Core.Cache
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = GetSafeLazy(getCacheItem);
result = GetSafeLazy(factory);
var absolute = isSliding ? System.Web.Caching.Cache.NoAbsoluteExpiration : (timeout == null ? System.Web.Caching.Cache.NoAbsoluteExpiration : DateTime.Now.Add(timeout.Value));
var sliding = isSliding == false ? System.Web.Caching.Cache.NoSlidingExpiration : (timeout ?? System.Web.Caching.Cache.NoSlidingExpiration);
lck.UpgradeToWriteLock();
//NOTE: 'Insert' on System.Web.Caching.Cache actually does an add or update!
_cache.Insert(cacheKey, result, dependency, absolute, sliding, priority, removedCallback);
_cache.Insert(key, result, dependency, absolute, sliding, priority, removedCallback);
}
}
@@ -175,31 +180,7 @@ namespace Umbraco.Core.Cache
return value;
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
CacheDependency dependency = null;
if (dependentFiles != null && dependentFiles.Any())
{
dependency = new CacheDependency(dependentFiles);
}
return GetCacheItem(cacheKey, getCacheItem, timeout, isSliding, priority, removedCallback, dependency);
}
#endregion
#region Insert
/// <summary>
/// This overload is here for legacy purposes
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="getCacheItem"></param>
/// <param name="timeout"></param>
/// <param name="isSliding"></param>
/// <param name="priority"></param>
/// <param name="removedCallback"></param>
/// <param name="dependency"></param>
internal void InsertCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, CacheDependency dependency = null)
private void Insert(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, CacheDependency dependency = null)
{
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
@@ -225,17 +206,5 @@ namespace Umbraco.Core.Cache
_locker.ExitWriteLock();
}
}
public void InsertCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
CacheDependency dependency = null;
if (dependentFiles != null && dependentFiles.Any())
{
dependency = new CacheDependency(dependentFiles);
}
InsertCacheItem(cacheKey, getCacheItem, timeout, isSliding, priority, removedCallback, dependency);
}
#endregion
}
}
@@ -1,35 +0,0 @@
using System;
using Umbraco.Core.Exceptions;
namespace Umbraco.Core.CodeAnnotations
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
internal class ActionMetadataAttribute : Attribute
{
public string Category { get; }
public string Name { get; }
/// <summary>
/// Constructor used to assign a Category, since no name is assigned it will try to be translated from the language files based on the action's alias
/// </summary>
/// <param name="category"></param>
public ActionMetadataAttribute(string category)
{
if (string.IsNullOrWhiteSpace(category)) throw new ArgumentNullOrEmptyException(nameof(category));
Category = category;
}
/// <summary>
/// Constructor used to assign an explicit name and category
/// </summary>
/// <param name="category"></param>
/// <param name="name"></param>
public ActionMetadataAttribute(string category, string name)
{
if (string.IsNullOrWhiteSpace(category)) throw new ArgumentNullOrEmptyException(nameof(category));
if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullOrEmptyException(nameof(name));
Category = category;
Name = name;
}
}
}
@@ -70,10 +70,7 @@ namespace Umbraco.Core.Collections
/// The number of elements contained in the <see cref="T:System.Collections.ICollection"/>.
/// </returns>
/// <filterpriority>2</filterpriority>
public int Count
{
get { return GetThreadSafeClone().Count; }
}
public int Count => GetThreadSafeClone().Count;
/// <summary>
/// Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
@@ -81,10 +78,7 @@ namespace Umbraco.Core.Collections
/// <returns>
/// true if the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only; otherwise, false.
/// </returns>
public bool IsReadOnly
{
get { return false; }
}
public bool IsReadOnly => false;
/// <summary>
/// Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
@@ -125,6 +125,18 @@ namespace Umbraco.Core.Collections
}
public void ReplaceAll(IEnumerable<TValue> values)
{
if (values == null) throw new ArgumentNullException(nameof(values));
Clear();
foreach (var value in values)
{
Add(value);
}
}
public bool Remove(TKey key)
{
if (!Indecies.ContainsKey(key)) return false;
@@ -12,11 +12,36 @@ using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Components
{
public sealed class AuditEventsComponent : UmbracoComponentBase, IUmbracoCoreComponent
public sealed class AuditEventsComponent : IComponent
{
private IAuditService _auditService;
private IUserService _userService;
private IEntityService _entityService;
private readonly IAuditService _auditService;
private readonly IUserService _userService;
private readonly IEntityService _entityService;
public AuditEventsComponent(IAuditService auditService, IUserService userService, IEntityService entityService)
{
_auditService = auditService;
_userService = userService;
_entityService = entityService;
}
public void Initialize()
{
UserService.SavedUserGroup += OnSavedUserGroupWithUsers;
UserService.SavedUser += OnSavedUser;
UserService.DeletedUser += OnDeletedUser;
UserService.UserGroupPermissionsAssigned += UserGroupPermissionAssigned;
MemberService.Saved += OnSavedMember;
MemberService.Deleted += OnDeletedMember;
MemberService.AssignedRoles += OnAssignedRoles;
MemberService.RemovedRoles += OnRemovedRoles;
MemberService.Exported += OnMemberExported;
}
public void Terminate()
{ }
private IUser CurrentPerformingUser
{
@@ -46,25 +71,6 @@ namespace Umbraco.Core.Components
}
}
public void Initialize(IAuditService auditService, IUserService userService, IEntityService entityService)
{
_auditService = auditService;
_userService = userService;
_entityService = entityService;
UserService.SavedUserGroup += OnSavedUserGroupWithUsers;
UserService.SavedUser += OnSavedUser;
UserService.DeletedUser += OnDeletedUser;
UserService.UserGroupPermissionsAssigned += UserGroupPermissionAssigned;
MemberService.Saved += OnSavedMember;
MemberService.Deleted += OnDeletedMember;
MemberService.AssignedRoles += OnAssignedRoles;
MemberService.RemovedRoles += OnRemovedRoles;
MemberService.Exported += OnMemberExported;
}
private string FormatEmail(IMember member)
{
return member == null ? string.Empty : member.Email.IsNullOrWhiteSpace() ? "" : $"<{member.Email}>";
@@ -0,0 +1,5 @@
namespace Umbraco.Core.Components
{
public sealed class AuditEventsComposer : ComponentComposer<AuditEventsComponent>, ICoreComposer
{ }
}
-368
View File
@@ -1,368 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using LightInject;
using Umbraco.Core.Collections;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Logging;
using Umbraco.Core.Scoping;
namespace Umbraco.Core.Components
{
// note: this class is NOT thread-safe in any ways
internal class BootLoader
{
private readonly IServiceContainer _container;
private readonly ProfilingLogger _proflog;
private readonly ILogger _logger;
private IUmbracoComponent[] _components;
private bool _booted;
private const int LogThresholdMilliseconds = 100;
/// <summary>
/// Initializes a new instance of the <see cref="BootLoader"/> class.
/// </summary>
/// <param name="container">The application container.</param>
public BootLoader(IServiceContainer container)
{
_container = container ?? throw new ArgumentNullException(nameof(container));
_proflog = container.GetInstance<ProfilingLogger>();
_logger = container.GetInstance<ILogger>();
}
private class EnableInfo
{
public bool Enabled;
public int Weight = -1;
}
public void Boot(IEnumerable<Type> componentTypes, RuntimeLevel level)
{
if (_booted) throw new InvalidOperationException("Can not boot, has already booted.");
var orderedComponentTypes = PrepareComponentTypes(componentTypes, level);
InstanciateComponents(orderedComponentTypes);
ComposeComponents(level);
using (var scope = _container.GetInstance<IScopeProvider>().CreateScope())
{
InitializeComponents();
scope.Complete();
}
// rejoice!
_booted = true;
}
private IEnumerable<Type> PrepareComponentTypes(IEnumerable<Type> componentTypes, RuntimeLevel level)
{
using (_proflog.DebugDuration<BootLoader>("Preparing component types.", "Prepared component types."))
{
return PrepareComponentTypes2(componentTypes, level);
}
}
private IEnumerable<Type> PrepareComponentTypes2(IEnumerable<Type> componentTypes, RuntimeLevel level)
{
// create a list, remove those that cannot be enabled due to runtime level
var componentTypeList = componentTypes
.Where(x =>
{
// use the min level specified by the attribute if any
// otherwise, user components have Run min level, anything else is Unknown (always run)
var attr = x.GetCustomAttribute<RuntimeLevelAttribute>();
var minLevel = attr?.MinLevel ?? (x.Implements<IUmbracoUserComponent>() ? RuntimeLevel.Run : RuntimeLevel.Unknown);
return level >= minLevel;
})
.ToList();
// cannot remove that one - ever
if (componentTypeList.Contains(typeof(UmbracoCoreComponent)) == false)
componentTypeList.Add(typeof(UmbracoCoreComponent));
// enable or disable components
EnableDisableComponents(componentTypeList);
// sort the components according to their dependencies
var requirements = new Dictionary<Type, List<Type>>();
foreach (var type in componentTypeList) requirements[type] = null;
foreach (var type in componentTypeList)
{
GatherRequirementsFromRequireAttribute(type, componentTypeList, requirements);
GatherRequirementsFromRequiredAttribute(type, componentTypeList, requirements);
}
// only for debugging, this is verbose
//_logger.Debug<BootLoader>(GetComponentsReport(requirements));
// sort components
var graph = new TopoGraph<Type, KeyValuePair<Type, List<Type>>>(kvp => kvp.Key, kvp => kvp.Value);
graph.AddItems(requirements);
List<Type> sortedComponentTypes;
try
{
sortedComponentTypes = graph.GetSortedItems().Select(x => x.Key).ToList();
}
catch (Exception e)
{
// in case of an error, force-dump everything to log
_logger.Info<BootLoader>("Component Report:\r\n{ComponentReport}", GetComponentsReport(requirements));
_logger.Error<BootLoader>(e, "Failed to sort compontents.");
throw;
}
// bit verbose but should help for troubleshooting
var text = "Ordered Components: " + Environment.NewLine + string.Join(Environment.NewLine, sortedComponentTypes) + Environment.NewLine;
Console.WriteLine(text);
_logger.Debug<BootLoader>("Ordered Components: {SortedComponentTypes}", sortedComponentTypes);
return sortedComponentTypes;
}
private static string GetComponentsReport(Dictionary<Type, List<Type>> requirements)
{
var text = new StringBuilder();
text.AppendLine("Components & Dependencies:");
text.AppendLine();
foreach (var kvp in requirements)
{
var type = kvp.Key;
text.AppendLine(type.FullName);
foreach (var attribute in type.GetCustomAttributes<RequireComponentAttribute>())
text.AppendLine(" -> " + attribute.RequiredType + (attribute.Weak.HasValue
? (attribute.Weak.Value ? " (weak)" : (" (strong" + (requirements.ContainsKey(attribute.RequiredType) ? ", missing" : "") + ")"))
: ""));
foreach (var attribute in type.GetCustomAttributes<RequiredComponentAttribute>())
text.AppendLine(" -< " + attribute.RequiringType);
foreach (var i in type.GetInterfaces())
{
text.AppendLine(" : " + i.FullName);
foreach (var attribute in i.GetCustomAttributes<RequireComponentAttribute>())
text.AppendLine(" -> " + attribute.RequiredType + (attribute.Weak.HasValue
? (attribute.Weak.Value ? " (weak)" : (" (strong" + (requirements.ContainsKey(attribute.RequiredType) ? ", missing" : "") + ")"))
: ""));
foreach (var attribute in i.GetCustomAttributes<RequiredComponentAttribute>())
text.AppendLine(" -< " + attribute.RequiringType);
}
if (kvp.Value != null)
foreach (var t in kvp.Value)
text.AppendLine(" = " + t);
text.AppendLine();
}
text.AppendLine("/");
text.AppendLine();
return text.ToString();
}
private static void EnableDisableComponents(ICollection<Type> types)
{
var enabled = new Dictionary<Type, EnableInfo>();
// process the enable/disable attributes
// these two attributes are *not* inherited and apply to *classes* only (not interfaces).
// remote declarations (when a component enables/disables *another* component)
// have priority over local declarations (when a component disables itself) so that
// ppl can enable components that, by default, are disabled.
// what happens in case of conflicting remote declarations is unspecified. more
// precisely, the last declaration to be processed wins, but the order of the
// declarations depends on the type finder and is unspecified.
foreach (var componentType in types)
{
foreach (var attr in componentType.GetCustomAttributes<EnableComponentAttribute>())
{
var type = attr.EnabledType ?? componentType;
if (enabled.TryGetValue(type, out var enableInfo) == false) enableInfo = enabled[type] = new EnableInfo();
var weight = type == componentType ? 1 : 2;
if (enableInfo.Weight > weight) continue;
enableInfo.Enabled = true;
enableInfo.Weight = weight;
}
foreach (var attr in componentType.GetCustomAttributes<DisableComponentAttribute>())
{
var type = attr.DisabledType ?? componentType;
if (type == typeof(UmbracoCoreComponent)) throw new InvalidOperationException("Cannot disable UmbracoCoreComponent.");
if (enabled.TryGetValue(type, out var enableInfo) == false) enableInfo = enabled[type] = new EnableInfo();
var weight = type == componentType ? 1 : 2;
if (enableInfo.Weight > weight) continue;
enableInfo.Enabled = false;
enableInfo.Weight = weight;
}
}
// remove components that end up being disabled
foreach (var kvp in enabled.Where(x => x.Value.Enabled == false))
types.Remove(kvp.Key);
}
private static void GatherRequirementsFromRequireAttribute(Type type, ICollection<Type> types, IDictionary<Type, List<Type>> requirements)
{
// get 'require' attributes
// these attributes are *not* inherited because we want to "custom-inherit" for interfaces only
var requireAttributes = type
.GetInterfaces().SelectMany(x => x.GetCustomAttributes<RequireComponentAttribute>()) // those marking interfaces
.Concat(type.GetCustomAttributes<RequireComponentAttribute>()); // those marking the component
// what happens in case of conflicting attributes (different strong/weak for same type) is not specified.
foreach (var attr in requireAttributes)
{
if (attr.RequiredType == type) continue; // ignore self-requirements (+ exclude in implems, below)
// requiring an interface = require any enabled component implementing that interface
// unless strong, and then require at least one enabled component implementing that interface
if (attr.RequiredType.IsInterface)
{
var implems = types.Where(x => x != type && attr.RequiredType.IsAssignableFrom(x)).ToList();
if (implems.Count > 0)
{
if (requirements[type] == null) requirements[type] = new List<Type>();
requirements[type].AddRange(implems);
}
else if (attr.Weak == false) // if explicitely set to !weak, is strong, else is weak
throw new Exception($"Broken component dependency: {type.FullName} -> {attr.RequiredType.FullName}.");
}
// requiring a class = require that the component is enabled
// unless weak, and then requires it if it is enabled
else
{
if (types.Contains(attr.RequiredType))
{
if (requirements[type] == null) requirements[type] = new List<Type>();
requirements[type].Add(attr.RequiredType);
}
else if (attr.Weak != true) // if not explicitely set to weak, is strong
throw new Exception($"Broken component dependency: {type.FullName} -> {attr.RequiredType.FullName}.");
}
}
}
private static void GatherRequirementsFromRequiredAttribute(Type type, ICollection<Type> types, IDictionary<Type, List<Type>> requirements)
{
// get 'required' attributes
// fixme explain
var requiredAttributes = type
.GetInterfaces().SelectMany(x => x.GetCustomAttributes<RequiredComponentAttribute>())
.Concat(type.GetCustomAttributes<RequiredComponentAttribute>());
foreach (var attr in requiredAttributes)
{
if (attr.RequiringType == type) continue; // ignore self-requirements (+ exclude in implems, below)
if (attr.RequiringType.IsInterface)
{
var implems = types.Where(x => x != type && attr.RequiringType.IsAssignableFrom(x)).ToList();
foreach (var implem in implems)
{
if (requirements[implem] == null) requirements[implem] = new List<Type>();
requirements[implem].Add(type);
}
}
else
{
if (types.Contains(attr.RequiringType))
{
if (requirements[attr.RequiringType] == null) requirements[attr.RequiringType] = new List<Type>();
requirements[attr.RequiringType].Add(type);
}
}
}
}
private void InstanciateComponents(IEnumerable<Type> types)
{
using (_proflog.DebugDuration<BootLoader>("Instanciating components.", "Instanciated components."))
{
_components = types.Select(x => (IUmbracoComponent) Activator.CreateInstance(x)).ToArray();
}
}
private void ComposeComponents(RuntimeLevel level)
{
using (_proflog.DebugDuration<BootLoader>($"Composing components. (log when >{LogThresholdMilliseconds}ms)", "Composed components."))
{
var composition = new Composition(_container, level);
foreach (var component in _components)
{
var componentType = component.GetType();
using (_proflog.DebugDuration<BootLoader>($"Composing {componentType.FullName}.", $"Composed {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
component.Compose(composition);
}
}
}
}
private void InitializeComponents()
{
// use a container scope to ensure that PerScope instances are disposed
// components that require instances that should not survive should register them with PerScope lifetime
using (_proflog.DebugDuration<BootLoader>($"Initializing components. (log when >{LogThresholdMilliseconds}ms)", "Initialized components."))
using (_container.BeginScope())
{
foreach (var component in _components)
{
var componentType = component.GetType();
var initializers = componentType.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(x => x.Name == "Initialize" && x.IsGenericMethod == false);
using (_proflog.DebugDuration<BootLoader>($"Initializing {componentType.FullName}.", $"Initialised {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
foreach (var initializer in initializers)
{
var parameters = initializer.GetParameters()
.Select(x => GetParameter(componentType, x.ParameterType))
.ToArray();
initializer.Invoke(component, parameters);
}
}
}
}
}
private object GetParameter(Type componentType, Type parameterType)
{
object param;
try
{
param = _container.TryGetInstance(parameterType);
}
catch (Exception e)
{
throw new BootFailedException($"Could not get parameter of type {parameterType.FullName} for component {componentType.FullName}.", e);
}
if (param == null) throw new BootFailedException($"Could not get parameter of type {parameterType.FullName} for component {componentType.FullName}.");
return param;
}
public void Terminate()
{
if (_booted == false)
{
_proflog.Logger.Warn<BootLoader>("Cannot terminate, has not booted.");
return;
}
using (_proflog.DebugDuration<BootLoader>($"Terminating. (log components when >{LogThresholdMilliseconds}ms)", "Terminated."))
{
for (var i = _components.Length - 1; i >= 0; i--) // terminate components in reverse order
{
var component = _components[i];
var componentType = component.GetType();
using (_proflog.DebugDuration<BootLoader>($"Terminating {componentType.FullName}.", $"Terminated {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
component.Terminate();
}
}
}
}
}
}
@@ -0,0 +1,54 @@
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents the collection of <see cref="IComponent"/> implementations.
/// </summary>
public class ComponentCollection : BuilderCollectionBase<IComponent>
{
private const int LogThresholdMilliseconds = 100;
private readonly IProfilingLogger _logger;
public ComponentCollection(IEnumerable<IComponent> items, IProfilingLogger logger)
: base(items)
{
_logger = logger;
}
public void Initialize()
{
using (_logger.DebugDuration<ComponentCollection>($"Initializing. (log components when >{LogThresholdMilliseconds}ms)", "Initialized."))
{
foreach (var component in this.Reverse()) // terminate components in reverse order
{
var componentType = component.GetType();
using (_logger.DebugDuration<ComponentCollection>($"Initializing {componentType.FullName}.", $"Initialized {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
component.Initialize();
}
}
}
}
public void Terminate()
{
using (_logger.DebugDuration<ComponentCollection>($"Terminating. (log components when >{LogThresholdMilliseconds}ms)", "Terminated."))
{
foreach (var component in this.Reverse()) // terminate components in reverse order
{
var componentType = component.GetType();
using (_logger.DebugDuration<ComponentCollection>($"Terminating {componentType.FullName}.", $"Terminated {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
component.Terminate();
component.DisposeIfDisposable();
}
}
}
}
}
}
@@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
{
/// <summary>
/// Builds a <see cref="ComponentCollection"/>.
/// </summary>
public class ComponentCollectionBuilder : OrderedCollectionBuilderBase<ComponentCollectionBuilder, ComponentCollection, IComponent>
{
private const int LogThresholdMilliseconds = 100;
private IProfilingLogger _logger;
public ComponentCollectionBuilder()
{ }
protected override ComponentCollectionBuilder This => this;
protected override IEnumerable<IComponent> CreateItems(IFactory factory)
{
_logger = factory.GetInstance<IProfilingLogger>();
using (_logger.DebugDuration<ComponentCollectionBuilder>($"Creating components. (log when >{LogThresholdMilliseconds}ms)", "Created."))
{
return base.CreateItems(factory);
}
}
protected override IComponent CreateItem(IFactory factory, Type itemType)
{
using (_logger.DebugDuration<Composers>($"Creating {itemType.FullName}.", $"Created {itemType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
return base.CreateItem(factory, itemType);
}
}
}
}
@@ -0,0 +1,20 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Provides a base class for composers which compose a component.
/// </summary>
/// <typeparam name="TComponent">The type of the component</typeparam>
public abstract class ComponentComposer<TComponent> : IComposer
where TComponent : IComponent
{
/// <inheritdoc />
public virtual void Compose(Composition composition)
{
composition.Components().Append<TComponent>();
}
// note: thanks to this class, a component that does not compose anything can be
// registered with one line:
// public class MyComponentComposer : ComponentComposer<MyComponent> { }
}
}
@@ -0,0 +1,59 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a composer requires another composer.
/// </summary>
/// <remarks>
/// <para>This attribute is *not* inherited. This means that a composer class inheriting from
/// another composer class does *not* inherit its requirements. However, the runtime checks
/// the *interfaces* of every composer for their requirements, so requirements declared on
/// interfaces are inherited by every composer class implementing the interface.</para>
/// <para>When targeting a class, indicates a dependency on the composer which must be enabled,
/// unless the requirement has explicitly been declared as weak (and then, only if the composer
/// is enabled).</para>
/// <para>When targeting an interface, indicates a dependency on enabled composers implementing
/// the interface. It could be no composer at all, unless the requirement has explicitly been
/// declared as strong (and at least one composer must be enabled).</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
public sealed class ComposeAfterAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="ComposeAfterAttribute"/> class.
/// </summary>
/// <param name="requiredType">The type of the required composer.</param>
public ComposeAfterAttribute(Type requiredType)
{
if (typeof(IComposer).IsAssignableFrom(requiredType) == false)
throw new ArgumentException($"Type {requiredType.FullName} is invalid here because it does not implement {typeof(IComposer).FullName}.");
RequiredType = requiredType;
}
/// <summary>
/// Initializes a new instance of the <see cref="ComposeAfterAttribute"/> class.
/// </summary>
/// <param name="requiredType">The type of the required composer.</param>
/// <param name="weak">A value indicating whether the requirement is weak.</param>
public ComposeAfterAttribute(Type requiredType, bool weak)
: this(requiredType)
{
Weak = weak;
}
/// <summary>
/// Gets the required type.
/// </summary>
public Type RequiredType { get; }
/// <summary>
/// Gets a value indicating whether the requirement is weak.
/// </summary>
/// <remarks>Returns <c>true</c> if the requirement is weak (requires the other composer if it
/// is enabled), <c>false</c> if the requirement is strong (requires the other composer to be
/// enabled), and <c>null</c> if unspecified, in which case it is strong for classes and weak for
/// interfaces.</remarks>
public bool? Weak { get; }
}
}
@@ -0,0 +1,40 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a component is required by another composer.
/// </summary>
/// <remarks>
/// <para>This attribute is *not* inherited. This means that a composer class inheriting from
/// another composer class does *not* inherit its requirements. However, the runtime checks
/// the *interfaces* of every composer for their requirements, so requirements declared on
/// interfaces are inherited by every composer class implementing the interface.</para>
/// <para>When targeting a class, indicates a dependency on the composer which must be enabled,
/// unless the requirement has explicitly been declared as weak (and then, only if the composer
/// is enabled).</para>
/// <para>When targeting an interface, indicates a dependency on enabled composers implementing
/// the interface. It could be no composer at all, unless the requirement has explicitly been
/// declared as strong (and at least one composer must be enabled).</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
public sealed class ComposeBeforeAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="ComposeBeforeAttribute"/> class.
/// </summary>
/// <param name="requiringType">The type of the required composer.</param>
public ComposeBeforeAttribute(Type requiringType)
{
if (typeof(IComposer).IsAssignableFrom(requiringType) == false)
throw new ArgumentException($"Type {requiringType.FullName} is invalid here because it does not implement {typeof(IComposer).FullName}.");
RequiringType = requiringType;
}
/// <summary>
/// Gets the required type.
/// </summary>
public Type RequiringType { get; }
}
}
+315
View File
@@ -0,0 +1,315 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using Umbraco.Core.Collections;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
{
// note: this class is NOT thread-safe in any ways
/// <summary>
/// Handles the composers.
/// </summary>
public class Composers
{
private readonly Composition _composition;
private readonly IProfilingLogger _logger;
private readonly IEnumerable<Type> _composerTypes;
private const int LogThresholdMilliseconds = 100;
/// <summary>
/// Initializes a new instance of the <see cref="Composers"/> class.
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="composerTypes">The composer types.</param>
/// <param name="logger">A profiling logger.</param>
public Composers(Composition composition, IEnumerable<Type> composerTypes, IProfilingLogger logger)
{
_composition = composition ?? throw new ArgumentNullException(nameof(composition));
_composerTypes = composerTypes ?? throw new ArgumentNullException(nameof(composerTypes));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
private class EnableInfo
{
public bool Enabled;
public int Weight = -1;
}
/// <summary>
/// Instantiates and composes the composers.
/// </summary>
public void Compose()
{
// make sure it is there
_composition.WithCollectionBuilder<ComponentCollectionBuilder>();
IEnumerable<Type> orderedComposerTypes;
using (_logger.DebugDuration<Composers>("Preparing composer types.", "Prepared composer types."))
{
orderedComposerTypes = PrepareComposerTypes();
}
var composers = InstantiateComposers(orderedComposerTypes);
using (_logger.DebugDuration<Composers>($"Composing composers. (log when >{LogThresholdMilliseconds}ms)", "Composed composers."))
{
foreach (var composer in composers)
{
var componentType = composer.GetType();
using (_logger.DebugDuration<Composers>($"Composing {componentType.FullName}.", $"Composed {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
composer.Compose(_composition);
}
}
}
}
private IEnumerable<Type> PrepareComposerTypes()
{
// create a list, remove those that cannot be enabled due to runtime level
var composerTypeList = _composerTypes
.Where(x =>
{
// use the min/max levels specified by the attribute if any
// otherwise, min: user composers are Run, anything else is Unknown (always run)
// max: everything is Run (always run)
var attr = x.GetCustomAttribute<RuntimeLevelAttribute>();
var minLevel = attr?.MinLevel ?? (x.Implements<IUserComposer>() ? RuntimeLevel.Run : RuntimeLevel.Unknown);
var maxLevel = attr?.MaxLevel ?? RuntimeLevel.Run;
return _composition.RuntimeState.Level >= minLevel && _composition.RuntimeState.Level <= maxLevel;
})
.ToList();
// enable or disable composers
EnableDisableComposers(composerTypeList);
// sort the composers according to their dependencies
var requirements = new Dictionary<Type, List<Type>>();
foreach (var type in composerTypeList) requirements[type] = null;
foreach (var type in composerTypeList)
{
GatherRequirementsFromRequireAttribute(type, composerTypeList, requirements);
GatherRequirementsFromRequiredByAttribute(type, composerTypeList, requirements);
}
// only for debugging, this is verbose
//_logger.Debug<Composers>(GetComposersReport(requirements));
// sort composers
var graph = new TopoGraph<Type, KeyValuePair<Type, List<Type>>>(kvp => kvp.Key, kvp => kvp.Value);
graph.AddItems(requirements);
List<Type> sortedComposerTypes;
try
{
sortedComposerTypes = graph.GetSortedItems().Select(x => x.Key).ToList();
}
catch (Exception e)
{
// in case of an error, force-dump everything to log
_logger.Info<Composers>("Composer Report:\r\n{ComposerReport}", GetComposersReport(requirements));
_logger.Error<Composers>(e, "Failed to sort composers.");
throw;
}
// bit verbose but should help for troubleshooting
//var text = "Ordered Composers: " + Environment.NewLine + string.Join(Environment.NewLine, sortedComposerTypes) + Environment.NewLine;
_logger.Debug<Composers>("Ordered Composers: {SortedComposerTypes}", sortedComposerTypes);
return sortedComposerTypes;
}
private static string GetComposersReport(Dictionary<Type, List<Type>> requirements)
{
var text = new StringBuilder();
text.AppendLine("Composers & Dependencies:");
text.AppendLine();
foreach (var kvp in requirements)
{
var type = kvp.Key;
text.AppendLine(type.FullName);
foreach (var attribute in type.GetCustomAttributes<ComposeAfterAttribute>())
text.AppendLine(" -> " + attribute.RequiredType + (attribute.Weak.HasValue
? (attribute.Weak.Value ? " (weak)" : (" (strong" + (requirements.ContainsKey(attribute.RequiredType) ? ", missing" : "") + ")"))
: ""));
foreach (var attribute in type.GetCustomAttributes<ComposeBeforeAttribute>())
text.AppendLine(" -< " + attribute.RequiringType);
foreach (var i in type.GetInterfaces())
{
text.AppendLine(" : " + i.FullName);
foreach (var attribute in i.GetCustomAttributes<ComposeAfterAttribute>())
text.AppendLine(" -> " + attribute.RequiredType + (attribute.Weak.HasValue
? (attribute.Weak.Value ? " (weak)" : (" (strong" + (requirements.ContainsKey(attribute.RequiredType) ? ", missing" : "") + ")"))
: ""));
foreach (var attribute in i.GetCustomAttributes<ComposeBeforeAttribute>())
text.AppendLine(" -< " + attribute.RequiringType);
}
if (kvp.Value != null)
foreach (var t in kvp.Value)
text.AppendLine(" = " + t);
text.AppendLine();
}
text.AppendLine("/");
text.AppendLine();
return text.ToString();
}
private static void EnableDisableComposers(ICollection<Type> types)
{
var enabled = new Dictionary<Type, EnableInfo>();
// process the enable/disable attributes
// these two attributes are *not* inherited and apply to *classes* only (not interfaces).
// remote declarations (when a composer enables/disables *another* composer)
// have priority over local declarations (when a composer disables itself) so that
// ppl can enable composers that, by default, are disabled.
// what happens in case of conflicting remote declarations is unspecified. more
// precisely, the last declaration to be processed wins, but the order of the
// declarations depends on the type finder and is unspecified.
void UpdateEnableInfo(Type composerType, int weight2, Dictionary<Type, EnableInfo> enabled2, bool value)
{
if (enabled.TryGetValue(composerType, out var enableInfo) == false) enableInfo = enabled2[composerType] = new EnableInfo();
if (enableInfo.Weight > weight2) return;
enableInfo.Enabled = value;
enableInfo.Weight = weight2;
}
var assemblies = types.Select(x => x.Assembly).Distinct();
foreach (var assembly in assemblies)
{
foreach (var attr in assembly.GetCustomAttributes<EnableComposerAttribute>())
{
var type = attr.EnabledType;
UpdateEnableInfo(type, 2, enabled, true);
}
foreach (var attr in assembly.GetCustomAttributes<DisableComposerAttribute>())
{
var type = attr.DisabledType;
UpdateEnableInfo(type, 2, enabled, false);
}
}
foreach (var composerType in types)
{
foreach (var attr in composerType.GetCustomAttributes<EnableAttribute>())
{
var type = attr.EnabledType ?? composerType;
var weight = type == composerType ? 1 : 3;
UpdateEnableInfo(type, weight, enabled, true);
}
foreach (var attr in composerType.GetCustomAttributes<DisableAttribute>())
{
var type = attr.DisabledType ?? composerType;
var weight = type == composerType ? 1 : 3;
UpdateEnableInfo(type, weight, enabled, false);
}
}
// remove composers that end up being disabled
foreach (var kvp in enabled.Where(x => x.Value.Enabled == false))
types.Remove(kvp.Key);
}
private static void GatherRequirementsFromRequireAttribute(Type type, ICollection<Type> types, IDictionary<Type, List<Type>> requirements)
{
// get 'require' attributes
// these attributes are *not* inherited because we want to "custom-inherit" for interfaces only
var requireAttributes = type
.GetInterfaces().SelectMany(x => x.GetCustomAttributes<ComposeAfterAttribute>()) // those marking interfaces
.Concat(type.GetCustomAttributes<ComposeAfterAttribute>()); // those marking the composer
// what happens in case of conflicting attributes (different strong/weak for same type) is not specified.
foreach (var attr in requireAttributes)
{
if (attr.RequiredType == type) continue; // ignore self-requirements (+ exclude in implems, below)
// requiring an interface = require any enabled composer implementing that interface
// unless strong, and then require at least one enabled composer implementing that interface
if (attr.RequiredType.IsInterface)
{
var implems = types.Where(x => x != type && attr.RequiredType.IsAssignableFrom(x)).ToList();
if (implems.Count > 0)
{
if (requirements[type] == null) requirements[type] = new List<Type>();
requirements[type].AddRange(implems);
}
else if (attr.Weak == false) // if explicitly set to !weak, is strong, else is weak
throw new Exception($"Broken composer dependency: {type.FullName} -> {attr.RequiredType.FullName}.");
}
// requiring a class = require that the composer is enabled
// unless weak, and then requires it if it is enabled
else
{
if (types.Contains(attr.RequiredType))
{
if (requirements[type] == null) requirements[type] = new List<Type>();
requirements[type].Add(attr.RequiredType);
}
else if (attr.Weak != true) // if not explicitly set to weak, is strong
throw new Exception($"Broken composer dependency: {type.FullName} -> {attr.RequiredType.FullName}.");
}
}
}
private static void GatherRequirementsFromRequiredByAttribute(Type type, ICollection<Type> types, IDictionary<Type, List<Type>> requirements)
{
// get 'required' attributes
// these attributes are *not* inherited because we want to "custom-inherit" for interfaces only
var requiredAttributes = type
.GetInterfaces().SelectMany(x => x.GetCustomAttributes<ComposeBeforeAttribute>()) // those marking interfaces
.Concat(type.GetCustomAttributes<ComposeBeforeAttribute>()); // those marking the composer
foreach (var attr in requiredAttributes)
{
if (attr.RequiringType == type) continue; // ignore self-requirements (+ exclude in implems, below)
// required by an interface = by any enabled composer implementing this that interface
if (attr.RequiringType.IsInterface)
{
var implems = types.Where(x => x != type && attr.RequiringType.IsAssignableFrom(x)).ToList();
foreach (var implem in implems)
{
if (requirements[implem] == null) requirements[implem] = new List<Type>();
requirements[implem].Add(type);
}
}
// required by a class
else
{
if (types.Contains(attr.RequiringType))
{
if (requirements[attr.RequiringType] == null) requirements[attr.RequiringType] = new List<Type>();
requirements[attr.RequiringType].Add(type);
}
}
}
}
private IEnumerable<IComposer> InstantiateComposers(IEnumerable<Type> types)
{
IComposer InstantiateComposer(Type type)
{
var ctor = type.GetConstructor(Array.Empty<Type>());
if (ctor == null)
throw new InvalidOperationException($"Composer {type.FullName} does not have a parameter-less constructor.");
return (IComposer) ctor.Invoke(Array.Empty<object>());
}
using (_logger.DebugDuration<Composers>("Instantiating composers.", "Instantiated composers."))
{
return types.Select(InstantiateComposer).ToArray();
}
}
}
}
+221 -12
View File
@@ -1,4 +1,8 @@
using LightInject;
using System;
using System.Collections.Generic;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
{
@@ -10,28 +14,233 @@ namespace Umbraco.Core.Components
/// avoid accessing the container. This is because everything needs to be properly registered and with
/// the proper lifecycle. These methods will take care of it. Directly registering into the container
/// may cause issues.</remarks>
public class Composition
public class Composition : IRegister
{
private readonly Dictionary<Type, ICollectionBuilder> _builders = new Dictionary<Type, ICollectionBuilder>();
private readonly Dictionary<string, Action<IRegister>> _uniques = new Dictionary<string, Action<IRegister>>();
private readonly IRegister _register;
/// <summary>
/// Initializes a new instance of the <see cref="Composition"/> class.
/// </summary>
/// <param name="container">A container.</param>
/// <param name="level">The runtime level.</param>
public Composition(IServiceContainer container, RuntimeLevel level)
/// <param name="register">A register.</param>
/// <param name="typeLoader">A type loader.</param>
/// <param name="logger">A logger.</param>
/// <param name="runtimeState">The runtime state.</param>
/// <param name="configs">Optional configs.</param>
public Composition(IRegister register, TypeLoader typeLoader, IProfilingLogger logger, IRuntimeState runtimeState, Configs configs = null)
{
Container = container;
RuntimeLevel = level;
_register = register;
TypeLoader = typeLoader;
Logger = logger;
RuntimeState = runtimeState;
if (configs == null)
{
configs = new Configs();
configs.AddCoreConfigs();
}
Configs = configs;
}
#region Services
/// <summary>
/// Gets the logger.
/// </summary>
public IProfilingLogger Logger { get; }
/// <summary>
/// Gets the type loader.
/// </summary>
public TypeLoader TypeLoader { get; }
/// <summary>
/// Gets the runtime state.
/// </summary>
public IRuntimeState RuntimeState { get; }
/// <summary>
/// Gets the configurations.
/// </summary>
public Configs Configs { get; }
#endregion
#region IRegister
/// <inheritdoc />
public object Concrete => _register.Concrete;
/// <inheritdoc />
public void Register(Type serviceType, Lifetime lifetime = Lifetime.Transient)
=> _register.Register(serviceType, lifetime);
/// <inheritdoc />
public void Register(Type serviceType, Type implementingType, Lifetime lifetime = Lifetime.Transient)
=> _register.Register(serviceType, implementingType, lifetime);
/// <inheritdoc />
public void Register<TService>(Func<IFactory, TService> factory, Lifetime lifetime = Lifetime.Transient)
where TService : class
=> _register.Register(factory, lifetime);
/// <inheritdoc />
public void Register(Type serviceType, object instance)
=> _register.Register(serviceType, instance);
/// <inheritdoc />
public void RegisterFor<TService, TTarget>(Lifetime lifetime = Lifetime.Transient)
where TService : class
=> _register.RegisterFor<TService, TTarget>(lifetime);
/// <inheritdoc />
public void RegisterFor<TService, TTarget>(Type implementingType, Lifetime lifetime = Lifetime.Transient)
where TService : class
=> _register.RegisterFor<TService, TTarget>(implementingType, lifetime);
/// <inheritdoc />
public void RegisterFor<TService, TTarget>(Func<IFactory, TService> factory, Lifetime lifetime = Lifetime.Transient)
where TService : class
=> _register.RegisterFor<TService, TTarget>(factory, lifetime);
/// <inheritdoc />
public void RegisterFor<TService, TTarget>(TService instance)
where TService : class
=> _register.RegisterFor<TService, TTarget>(instance);
/// <inheritdoc />
public void RegisterAuto(Type serviceBaseType)
=> _register.RegisterAuto(serviceBaseType);
/// <inheritdoc />
public void ConfigureForWeb()
=> _register.ConfigureForWeb();
/// <inheritdoc />
public IFactory CreateFactory()
{
foreach (var onCreating in OnCreatingFactory.Values)
onCreating();
foreach (var unique in _uniques.Values)
unique(_register);
_uniques.Clear(); // no point keep them around
foreach (var builder in _builders.Values)
builder.RegisterWith(_register);
_builders.Clear(); // no point keep them around
Configs.RegisterWith(_register);
return _register.CreateFactory();
}
/// <summary>
/// Gets the container.
/// Gets a dictionary of action to execute when creating the factory.
/// </summary>
/// <remarks>Use with care!</remarks>
public IServiceContainer Container { get; }
public Dictionary<string, Action> OnCreatingFactory { get; } = new Dictionary<string, Action>();
#endregion
#region Unique
private string GetUniqueName<TService>()
=> GetUniqueName(typeof(TService));
private string GetUniqueName(Type serviceType)
=> serviceType.FullName;
private string GetUniqueName<TService, TTarget>()
=> GetUniqueName(typeof(TService), typeof(TTarget));
private string GetUniqueName(Type serviceType, Type targetType)
=> serviceType.FullName + "::" + targetType.FullName;
/// <summary>
/// Gets the runtime level.
/// Registers a unique service as its own implementation.
/// </summary>
public RuntimeLevel RuntimeLevel { get; }
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUnique(Type serviceType)
=> _uniques[GetUniqueName(serviceType)] = register => register.Register(serviceType, Lifetime.Singleton);
/// <summary>
/// Registers a unique service with an implementation type.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUnique(Type serviceType, Type implementingType)
=> _uniques[GetUniqueName(serviceType)] = register => register.Register(serviceType, implementingType, Lifetime.Singleton);
/// <summary>
/// Registers a unique service with an implementation factory.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUnique<TService>(Func<IFactory, TService> factory)
where TService : class
=> _uniques[GetUniqueName<TService>()] = register => register.Register<TService>(factory, Lifetime.Singleton);
/// <summary>
/// Registers a unique service with an implementing instance.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUnique(Type serviceType, object instance)
=> _uniques[GetUniqueName(serviceType)] = register => register.Register(serviceType, instance);
/// <summary>
/// Registers a unique service for a target, as its own implementation.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUniqueFor<TService, TTarget>()
where TService : class
=> _uniques[GetUniqueName<TService, TTarget>()] = register => register.RegisterFor<TService, TTarget>(Lifetime.Singleton);
/// <summary>
/// Registers a unique service for a target, with an implementing type.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUniqueFor<TService, TTarget>(Type implementingType)
where TService : class
=> _uniques[GetUniqueName<TService, TTarget>()] = register => register.RegisterFor<TService, TTarget>(implementingType, Lifetime.Singleton);
/// <summary>
/// Registers a unique service for a target, with an implementation factory.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUniqueFor<TService, TTarget>(Func<IFactory, TService> factory)
where TService : class
=> _uniques[GetUniqueName<TService, TTarget>()] = register => register.RegisterFor<TService, TTarget>(factory, Lifetime.Singleton);
/// <summary>
/// Registers a unique service for a target, with an implementing instance.
/// </summary>
/// <remarks>Unique services have one single implementation, and a Singleton lifetime.</remarks>
public void RegisterUniqueFor<TService, TTarget>(TService instance)
where TService : class
=> _uniques[GetUniqueName<TService, TTarget>()] = register => register.RegisterFor<TService, TTarget>(instance);
#endregion
#region Collection Builders
/// <summary>
/// Gets a collection builder (and registers the collection).
/// </summary>
/// <typeparam name="TBuilder">The type of the collection builder.</typeparam>
/// <returns>The collection builder.</returns>
public TBuilder WithCollectionBuilder<TBuilder>()
where TBuilder: ICollectionBuilder, new()
{
var typeOfBuilder = typeof(TBuilder);
if (_builders.TryGetValue(typeOfBuilder, out var o))
return (TBuilder) o;
var builder = new TBuilder();
_builders[typeOfBuilder] = builder;
return builder;
}
#endregion
}
}
@@ -1,16 +1,16 @@
using System;
using System.Runtime.CompilerServices;
using LightInject;
using Umbraco.Core.Cache;
using Umbraco.Core.Dictionary;
using Umbraco.Core.Composing;
using Umbraco.Core.IO;
using Umbraco.Core.Migrations;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.Persistence.Mappers;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Strings;
using Umbraco.Core.Sync;
using Umbraco.Core._Legacy.PackageActions;
using Umbraco.Core.Logging.Viewer;
using Umbraco.Core.PackageActions;
namespace Umbraco.Core.Components
{
@@ -19,6 +19,46 @@ namespace Umbraco.Core.Components
/// </summary>
public static class CompositionExtensions
{
#region FileSystems
/// <summary>
/// Registers a filesystem.
/// </summary>
/// <typeparam name="TFileSystem">The type of the filesystem.</typeparam>
/// <typeparam name="TImplementing">The implementing type.</typeparam>
/// <param name="composition">The composition.</param>
/// <returns>The register.</returns>
public static void RegisterFileSystem<TFileSystem, TImplementing>(this Composition composition)
where TImplementing : FileSystemWrapper, TFileSystem
where TFileSystem : class
{
composition.RegisterUnique<TFileSystem>(factory =>
{
var fileSystems = factory.GetInstance<FileSystems>();
var supporting = factory.GetInstance<SupportingFileSystems>();
return fileSystems.GetFileSystem<TImplementing>(supporting.For<TFileSystem>());
});
}
/// <summary>
/// Registers a filesystem.
/// </summary>
/// <typeparam name="TFileSystem">The type of the filesystem.</typeparam>
/// <param name="composition">The composition.</param>
/// <returns>The register.</returns>
public static void RegisterFileSystem<TFileSystem>(this Composition composition)
where TFileSystem : FileSystemWrapper
{
composition.RegisterUnique(factory =>
{
var fileSystems = factory.GetInstance<FileSystems>();
var supporting = factory.GetInstance<SupportingFileSystems>();
return fileSystems.GetFileSystem<TFileSystem>(supporting.For<TFileSystem>());
});
}
#endregion
#region Collection Builders
/// <summary>
@@ -26,60 +66,66 @@ namespace Umbraco.Core.Components
/// </summary>
/// <param name="composition">The composition.</param>
public static CacheRefresherCollectionBuilder CacheRefreshers(this Composition composition)
=> composition.Container.GetInstance<CacheRefresherCollectionBuilder>();
=> composition.WithCollectionBuilder<CacheRefresherCollectionBuilder>();
/// <summary>
/// Gets the mappers collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
public static MapperCollectionBuilder Mappers(this Composition composition)
=> composition.Container.GetInstance<MapperCollectionBuilder>();
=> composition.WithCollectionBuilder<MapperCollectionBuilder>();
/// <summary>
/// Gets the package actions collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
internal static PackageActionCollectionBuilder PackageActions(this Composition composition)
=> composition.Container.GetInstance<PackageActionCollectionBuilder>();
=> composition.WithCollectionBuilder<PackageActionCollectionBuilder>();
/// <summary>
/// Gets the data editor collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
public static DataEditorCollectionBuilder DataEditors(this Composition composition)
=> composition.Container.GetInstance<DataEditorCollectionBuilder>();
=> composition.WithCollectionBuilder<DataEditorCollectionBuilder>();
/// <summary>
/// Gets the property value converters collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
public static PropertyValueConverterCollectionBuilder PropertyValueConverters(this Composition composition)
=> composition.Container.GetInstance<PropertyValueConverterCollectionBuilder>();
=> composition.WithCollectionBuilder<PropertyValueConverterCollectionBuilder>();
/// <summary>
/// Gets the url segment providers collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
public static UrlSegmentProviderCollectionBuilder UrlSegmentProviders(this Composition composition)
=> composition.Container.GetInstance<UrlSegmentProviderCollectionBuilder>();
=> composition.WithCollectionBuilder<UrlSegmentProviderCollectionBuilder>();
/// <summary>
/// Gets the validators collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
internal static ManifestValueValidatorCollectionBuilder Validators(this Composition composition)
=> composition.Container.GetInstance<ManifestValueValidatorCollectionBuilder>();
=> composition.WithCollectionBuilder<ManifestValueValidatorCollectionBuilder>();
/// <summary>
/// Gets the post-migrations collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
internal static PostMigrationCollectionBuilder PostMigrations(this Composition composition)
=> composition.Container.GetInstance<PostMigrationCollectionBuilder>();
=> composition.WithCollectionBuilder<PostMigrationCollectionBuilder>();
/// <summary>
/// Gets the components collection builder.
/// </summary>
public static ComponentCollectionBuilder Components(this Composition composition)
=> composition.WithCollectionBuilder<ComponentCollectionBuilder>();
#endregion
#region Singleton
#region Uniques
/// <summary>
/// Sets the culture dictionary factory.
@@ -89,7 +135,7 @@ namespace Umbraco.Core.Components
public static void SetCultureDictionaryFactory<T>(this Composition composition)
where T : ICultureDictionaryFactory
{
composition.Container.RegisterSingleton<ICultureDictionaryFactory, T>();
composition.RegisterUnique<ICultureDictionaryFactory, T>();
}
/// <summary>
@@ -97,9 +143,9 @@ namespace Umbraco.Core.Components
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="factory">A function creating a culture dictionary factory.</param>
public static void SetCultureDictionaryFactory(this Composition composition, Func<IServiceFactory, ICultureDictionaryFactory> factory)
public static void SetCultureDictionaryFactory(this Composition composition, Func<IFactory, ICultureDictionaryFactory> factory)
{
composition.Container.RegisterSingleton(factory);
composition.RegisterUnique(factory);
}
/// <summary>
@@ -109,7 +155,7 @@ namespace Umbraco.Core.Components
/// <param name="factory">A factory.</param>
public static void SetCultureDictionaryFactory(this Composition composition, ICultureDictionaryFactory factory)
{
composition.Container.RegisterSingleton(_ => factory);
composition.RegisterUnique(_ => factory);
}
/// <summary>
@@ -120,7 +166,7 @@ namespace Umbraco.Core.Components
public static void SetPublishedContentModelFactory<T>(this Composition composition)
where T : IPublishedModelFactory
{
composition.Container.RegisterSingleton<IPublishedModelFactory, T>();
composition.RegisterUnique<IPublishedModelFactory, T>();
}
/// <summary>
@@ -128,9 +174,9 @@ namespace Umbraco.Core.Components
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="factory">A function creating a published content model factory.</param>
public static void SetPublishedContentModelFactory(this Composition composition, Func<IServiceFactory, IPublishedModelFactory> factory)
public static void SetPublishedContentModelFactory(this Composition composition, Func<IFactory, IPublishedModelFactory> factory)
{
composition.Container.RegisterSingleton(factory);
composition.RegisterUnique(factory);
}
/// <summary>
@@ -140,7 +186,7 @@ namespace Umbraco.Core.Components
/// <param name="factory">A published content model factory.</param>
public static void SetPublishedContentModelFactory(this Composition composition, IPublishedModelFactory factory)
{
composition.Container.RegisterSingleton(_ => factory);
composition.RegisterUnique(_ => factory);
}
/// <summary>
@@ -151,17 +197,17 @@ namespace Umbraco.Core.Components
public static void SetServerRegistrar<T>(this Composition composition)
where T : IServerRegistrar
{
composition.Container.RegisterSingleton<IServerRegistrar, T>();
composition.RegisterUnique<IServerRegistrar, T>();
}
/// <summary>
/// Sets the server registrar.
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="factory">A function creating a server registar.</param>
public static void SetServerRegistrar(this Composition composition, Func<IServiceFactory, IServerRegistrar> factory)
/// <param name="factory">A function creating a server registrar.</param>
public static void SetServerRegistrar(this Composition composition, Func<IFactory, IServerRegistrar> factory)
{
composition.Container.RegisterSingleton(factory);
composition.RegisterUnique(factory);
}
/// <summary>
@@ -171,7 +217,7 @@ namespace Umbraco.Core.Components
/// <param name="registrar">A server registrar.</param>
public static void SetServerRegistrar(this Composition composition, IServerRegistrar registrar)
{
composition.Container.RegisterSingleton(_ => registrar);
composition.RegisterUnique(_ => registrar);
}
/// <summary>
@@ -182,7 +228,7 @@ namespace Umbraco.Core.Components
public static void SetServerMessenger<T>(this Composition composition)
where T : IServerMessenger
{
composition.Container.RegisterSingleton<IServerMessenger, T>();
composition.RegisterUnique<IServerMessenger, T>();
}
/// <summary>
@@ -190,9 +236,9 @@ namespace Umbraco.Core.Components
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="factory">A function creating a server messenger.</param>
public static void SetServerMessenger(this Composition composition, Func<IServiceFactory, IServerMessenger> factory)
public static void SetServerMessenger(this Composition composition, Func<IFactory, IServerMessenger> factory)
{
composition.Container.RegisterSingleton(factory);
composition.RegisterUnique(factory);
}
/// <summary>
@@ -202,7 +248,7 @@ namespace Umbraco.Core.Components
/// <param name="registrar">A server messenger.</param>
public static void SetServerMessenger(this Composition composition, IServerMessenger registrar)
{
composition.Container.RegisterSingleton(_ => registrar);
composition.RegisterUnique(_ => registrar);
}
/// <summary>
@@ -213,7 +259,7 @@ namespace Umbraco.Core.Components
public static void SetShortStringHelper<T>(this Composition composition)
where T : IShortStringHelper
{
composition.Container.RegisterSingleton<IShortStringHelper, T>();
composition.RegisterUnique<IShortStringHelper, T>();
}
/// <summary>
@@ -221,9 +267,9 @@ namespace Umbraco.Core.Components
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="factory">A function creating a short string helper.</param>
public static void SetShortStringHelper(this Composition composition, Func<IServiceFactory, IShortStringHelper> factory)
public static void SetShortStringHelper(this Composition composition, Func<IFactory, IShortStringHelper> factory)
{
composition.Container.RegisterSingleton(factory);
composition.RegisterUnique(factory);
}
/// <summary>
@@ -233,7 +279,54 @@ namespace Umbraco.Core.Components
/// <param name="helper">A short string helper.</param>
public static void SetShortStringHelper(this Composition composition, IShortStringHelper helper)
{
composition.Container.RegisterSingleton(_ => helper);
composition.RegisterUnique(_ => helper);
}
/// <summary>
/// Sets the underlying media filesystem.
/// </summary>
/// <param name="composition">A composition.</param>
/// <param name="filesystemFactory">A filesystem factory.</param>
public static void SetMediaFileSystem(this Composition composition, Func<IFactory, IFileSystem> filesystemFactory)
=> composition.RegisterUniqueFor<IFileSystem, IMediaFileSystem>(filesystemFactory);
/// <summary>
/// Sets the underlying media filesystem.
/// </summary>
/// <param name="composition">A composition.</param>
/// <param name="filesystemFactory">A filesystem factory.</param>
public static void SetMediaFileSystem(this Composition composition, Func<IFileSystem> filesystemFactory)
=> composition.RegisterUniqueFor<IFileSystem, IMediaFileSystem>(_ => filesystemFactory());
/// <summary>
/// Sets the log viewer.
/// </summary>
/// <typeparam name="T">The type of the log viewer.</typeparam>
/// <param name="composition">The composition.</param>
public static void SetLogViewer<T>(this Composition composition)
where T : ILogViewer
{
composition.RegisterUnique<ILogViewer, T>();
}
/// <summary>
/// Sets the log viewer.
/// </summary>
/// <param name="composition">The composition.</param>
/// <param name="factory">A function creating a log viewer.</param>
public static void SetLogViewer(this Composition composition, Func<IFactory, ILogViewer> factory)
{
composition.RegisterUnique(factory);
}
/// <summary>
/// Sets the log viewer.
/// </summary>
/// <param name="composition">A composition.</param>
/// <param name="helper">A log viewer.</param>
public static void SetLogViewer(this Composition composition, ILogViewer viewer)
{
composition.RegisterUnique(_ => viewer);
}
#endregion
@@ -0,0 +1,37 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a composer should be disabled.
/// </summary>
/// <remarks>
/// <para>If a type is specified, disables the composer of that type, else disables the composer marked with the attribute.</para>
/// <para>This attribute is *not* inherited.</para>
/// <para>This attribute applies to classes only, it is not possible to enable/disable interfaces.</para>
/// <para>Assembly-level <see cref="DisableComposerAttribute"/> has greater priority than <see cref="DisableAttribute"/>
/// attribute when it is marking the composer itself, but lower priority that when it is referencing another composer.</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class DisableAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="DisableAttribute"/> class.
/// </summary>
public DisableAttribute()
{ }
/// <summary>
/// Initializes a new instance of the <see cref="DisableAttribute"/> class.
/// </summary>
public DisableAttribute(Type disabledType)
{
DisabledType = disabledType;
}
/// <summary>
/// Gets the disabled type, or null if it is the composer marked with the attribute.
/// </summary>
public Type DisabledType { get; }
}
}
@@ -1,38 +0,0 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a component should be disabled.
/// </summary>
/// <remarks>
/// <para>If a type is specified, disables the component of that type, else disables the component marked with the attribute.</para>
/// <para>This attribute is *not* inherited.</para>
/// <para>This attribute applies to classes only, it is not possible to enable/disable interfaces.</para>
/// <para>If a component ends up being both enabled and disabled: attributes marking the component itself have lower priority
/// than attributes on *other* components, eg if a component declares itself as disabled it is possible to enable it from
/// another component. Anything else is unspecified.</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class DisableComponentAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="DisableComponentAttribute"/> class.
/// </summary>
public DisableComponentAttribute()
{ }
/// <summary>
/// Initializes a new instance of the <see cref="DisableComponentAttribute"/> class.
/// </summary>
public DisableComponentAttribute(Type disabledType)
{
DisabledType = disabledType;
}
/// <summary>
/// Gets the disabled type, or null if it is the component marked with the attribute.
/// </summary>
public Type DisabledType { get; }
}
}
@@ -0,0 +1,28 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a composer should be disabled.
/// </summary>
/// <remarks>
/// <para>Assembly-level <see cref="DisableComposerAttribute"/> has greater priority than <see cref="DisableAttribute"/>
/// attribute when it is marking the composer itself, but lower priority that when it is referencing another composer.</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
public class DisableComposerAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="DisableComposerAttribute"/> class.
/// </summary>
public DisableComposerAttribute(Type disabledType)
{
DisabledType = disabledType;
}
/// <summary>
/// Gets the disabled type, or null if it is the composer marked with the attribute.
/// </summary>
public Type DisabledType { get; }
}
}
@@ -0,0 +1,37 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a composer should be enabled.
/// </summary>
/// <remarks>
/// <para>If a type is specified, enables the composer of that type, else enables the composer marked with the attribute.</para>
/// <para>This attribute is *not* inherited.</para>
/// <para>This attribute applies to classes only, it is not possible to enable/disable interfaces.</para>
/// <para>Assembly-level <see cref="DisableComposerAttribute"/> has greater priority than <see cref="DisableAttribute"/>
/// attribute when it is marking the composer itself, but lower priority that when it is referencing another composer.</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class EnableAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="EnableAttribute"/> class.
/// </summary>
public EnableAttribute()
{ }
/// <summary>
/// Initializes a new instance of the <see cref="EnableAttribute"/> class.
/// </summary>
public EnableAttribute(Type enabledType)
{
EnabledType = enabledType;
}
/// <summary>
/// Gets the enabled type, or null if it is the composer marked with the attribute.
/// </summary>
public Type EnabledType { get; }
}
}
@@ -1,38 +0,0 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a component should be enabled.
/// </summary>
/// <remarks>
/// <para>If a type is specified, enables the component of that type, else enables the component marked with the attribute.</para>
/// <para>This attribute is *not* inherited.</para>
/// <para>This attribute applies to classes only, it is not possible to enable/disable interfaces.</para>
/// <para>If a component ends up being both enabled and disabled: attributes marking the component itself have lower priority
/// than attributes on *other* components, eg if a component declares itself as disabled it is possible to enable it from
/// another component. Anything else is unspecified.</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class EnableComponentAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="EnableComponentAttribute"/> class.
/// </summary>
public EnableComponentAttribute()
{ }
/// <summary>
/// Initializes a new instance of the <see cref="EnableComponentAttribute"/> class.
/// </summary>
public EnableComponentAttribute(Type enabledType)
{
EnabledType = enabledType;
}
/// <summary>
/// Gets the enabled type, or null if it is the component marked with the attribute.
/// </summary>
public Type EnabledType { get; }
}
}
@@ -0,0 +1,31 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a composer should be enabled.
/// </summary>
/// <remarks>
/// <para>If a type is specified, enables the composer of that type, else enables the composer marked with the attribute.</para>
/// <para>This attribute is *not* inherited.</para>
/// <para>This attribute applies to classes only, it is not possible to enable/disable interfaces.</para>
/// <para>Assembly-level <see cref="DisableComposerAttribute"/> has greater priority than <see cref="DisableAttribute"/>
/// attribute when it is marking the composer itself, but lower priority that when it is referencing another composer.</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
public class EnableComposerAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="EnableComposerAttribute"/> class.
/// </summary>
public EnableComposerAttribute(Type enabledType)
{
EnabledType = enabledType;
}
/// <summary>
/// Gets the enabled type, or null if it is the composer marked with the attribute.
/// </summary>
public Type EnabledType { get; }
}
}
+25
View File
@@ -0,0 +1,25 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a component.
/// </summary>
/// <remarks>
/// <para>Components are created by DI and therefore must have a public constructor.</para>
/// <para>All components are terminated in reverse order when Umbraco terminates, and
/// disposable components are disposed.</para>
/// <para>The Dispose method may be invoked more than once, and components
/// should ensure they support this.</para>
/// </remarks>
public interface IComponent
{
/// <summary>
/// Initializes the component.
/// </summary>
void Initialize();
/// <summary>
/// Terminates the component.
/// </summary>
void Terminate();
}
}
+16
View File
@@ -0,0 +1,16 @@
using Umbraco.Core.Composing;
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a composer.
/// </summary>
public interface IComposer : IDiscoverable
{
/// <summary>
/// Compose.
/// </summary>
/// <param name="composition"></param>
void Compose(Composition composition);
}
}
@@ -0,0 +1,13 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a core <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>All core composers are required by (compose before) all user composers,
/// and require (compose after) all runtime composers.</para>
/// </remarks>
[ComposeAfter(typeof(IRuntimeComposer))]
public interface ICoreComposer : IComposer
{ }
}
@@ -1,5 +0,0 @@
namespace Umbraco.Core.Components
{
public interface IRuntimeComponent : IUmbracoComponent
{ }
}
@@ -0,0 +1,11 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a runtime <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>All runtime composers are required by (compose before) all core composers</para>
/// </remarks>
public interface IRuntimeComposer : IComposer
{ }
}
@@ -1,21 +0,0 @@
using Umbraco.Core.Composing;
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents an Umbraco component.
/// </summary>
public interface IUmbracoComponent : IDiscoverable
{
/// <summary>
/// Composes the component.
/// </summary>
/// <param name="composition">The composition.</param>
void Compose(Composition composition);
/// <summary>
/// Terminates the component.
/// </summary>
void Terminate();
}
}
@@ -1,6 +0,0 @@
namespace Umbraco.Core.Components
{
[RequireComponent(typeof(IRuntimeComponent))]
public interface IUmbracoCoreComponent : IUmbracoComponent
{ }
}
@@ -1,6 +0,0 @@
namespace Umbraco.Core.Components
{
[RequireComponent(typeof(UmbracoCoreComponent))]
public interface IUmbracoUserComponent : IUmbracoComponent
{ }
}
@@ -0,0 +1,12 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a user <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>All user composers require (compose after) all core composers.</para>
/// </remarks>
[ComposeAfter(typeof(ICoreComposer))]
public interface IUserComposer : IComposer
{ }
}
@@ -5,16 +5,24 @@ using Umbraco.Core.Manifest;
namespace Umbraco.Core.Components
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public class ManifestWatcherComponent : UmbracoComponentBase, IUmbracoCoreComponent
public sealed class ManifestWatcherComponent : IComponent
{
private readonly IRuntimeState _runtimeState;
private readonly ILogger _logger;
// if configured and in debug mode, a ManifestWatcher watches App_Plugins folders for
// package.manifest chances and restarts the application on any change
private ManifestWatcher _mw;
public void Initialize(IRuntimeState runtime, ILogger logger)
public ManifestWatcherComponent(IRuntimeState runtimeState, ILogger logger)
{
if (runtime.Debug == false) return;
_runtimeState = runtimeState;
_logger = logger;
}
public void Initialize()
{
if (_runtimeState.Debug == false) return;
//if (ApplicationContext.Current.IsConfigured == false || GlobalSettings.DebugMode == false)
// return;
@@ -22,13 +30,15 @@ namespace Umbraco.Core.Components
var appPlugins = IOHelper.MapPath("~/App_Plugins/");
if (Directory.Exists(appPlugins) == false) return;
_mw = new ManifestWatcher(logger);
_mw = new ManifestWatcher(_logger);
_mw.Start(Directory.GetDirectories(appPlugins));
}
public override void Terminate()
public void Terminate()
{
_mw?.Dispose();
if (_mw == null) return;
_mw.Dispose();
_mw = null;
}
}
@@ -0,0 +1,6 @@
namespace Umbraco.Core.Components
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public class ManifestWatcherComposer : ComponentComposer<ManifestWatcherComponent>, ICoreComposer
{ }
}
@@ -5,15 +5,17 @@ using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Components
{
//TODO: This should just exist in the content service/repo!
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class RelateOnCopyComponent : UmbracoComponentBase, IUmbracoCoreComponent
// TODO: This should just exist in the content service/repo!
public sealed class RelateOnCopyComponent : IComponent
{
public void Initialize()
{
ContentService.Copied += ContentServiceCopied;
}
public void Terminate()
{ }
private static void ContentServiceCopied(IContentService sender, Events.CopyEventArgs<IContent> e)
{
if (e.RelateToOriginal == false) return;
@@ -0,0 +1,6 @@
namespace Umbraco.Core.Components
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class RelateOnCopyComposer : ComponentComposer<RelateOnCopyComponent>, ICoreComposer
{ }
}
@@ -7,8 +7,7 @@ using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Components
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class RelateOnTrashComponent : UmbracoComponentBase, IUmbracoCoreComponent
public sealed class RelateOnTrashComponent : IComponent
{
public void Initialize()
{
@@ -18,6 +17,9 @@ namespace Umbraco.Core.Components
MediaService.Trashed += MediaService_Trashed;
}
public void Terminate()
{ }
private static void ContentService_Moved(IContentService sender, MoveEventArgs<IContent> e)
{
foreach (var item in e.MoveInfoCollection.Where(x => x.OriginalPath.Contains(Constants.System.RecycleBinContent.ToInvariantString())))
@@ -0,0 +1,6 @@
namespace Umbraco.Core.Components
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class RelateOnTrashComposer : ComponentComposer<RelateOnTrashComponent>, ICoreComposer
{ }
}
@@ -1,59 +0,0 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a component requires another component.
/// </summary>
/// <remarks>
/// <para>This attribute is *not* inherited. This means that a component class inheriting from
/// another component class does *not* inherit its requirements. However, the bootloader checks
/// the *interfaces* of every component for their requirements, so requirements declared on
/// interfaces are inherited by every component class implementing the interface.</para>
/// <para>When targetting a class, indicates a dependency on the component which must be enabled,
/// unless the requirement has explicitely been declared as weak (and then, only if the component
/// is enabled).</para>
/// <para>When targetting an interface, indicates a dependency on enabled components implementing
/// the interface. It could be no component at all, unless the requirement has explicitely been
/// declared as strong (and at least one component must be enabled).</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
public class RequireComponentAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="RequireComponentAttribute"/> class.
/// </summary>
/// <param name="requiredType">The type of the required component.</param>
public RequireComponentAttribute(Type requiredType)
{
if (typeof(IUmbracoComponent).IsAssignableFrom(requiredType) == false)
throw new ArgumentException($"Type {requiredType.FullName} is invalid here because it does not implement {typeof(IUmbracoComponent).FullName}.");
RequiredType = requiredType;
}
/// <summary>
/// Initializes a new instance of the <see cref="RequireComponentAttribute"/> class.
/// </summary>
/// <param name="requiredType">The type of the required component.</param>
/// <param name="weak">A value indicating whether the requirement is weak.</param>
public RequireComponentAttribute(Type requiredType, bool weak)
: this(requiredType)
{
Weak = weak;
}
/// <summary>
/// Gets the required type.
/// </summary>
public Type RequiredType { get; }
/// <summary>
/// Gets a value indicating whether the requirement is weak.
/// </summary>
/// <remarks>Returns <c>true</c> if the requirement is weak (requires the other component if it
/// is enabled), <c>false</c> if the requirement is strong (requires the other component to be
/// enabled), and <c>null</c> if unspecified, in which case it is strong for classes and weak for
/// interfaces.</remarks>
public bool? Weak { get; }
}
}
@@ -1,41 +0,0 @@
using System;
namespace Umbraco.Core.Components
{
/// <summary>
/// Indicates that a component is required by another component.
/// </summary>
/// <remarks>
/// fixme
/// <para>This attribute is *not* inherited. This means that a component class inheriting from
/// another component class does *not* inherit its requirements. However, the bootloader checks
/// the *interfaces* of every component for their requirements, so requirements declared on
/// interfaces are inherited by every component class implementing the interface.</para>
/// <para>When targetting a class, indicates a dependency on the component which must be enabled,
/// unless the requirement has explicitely been declared as weak (and then, only if the component
/// is enabled).</para>
/// <para>When targetting an interface, indicates a dependency on enabled components implementing
/// the interface. It could be no component at all, unless the requirement has explicitely been
/// declared as strong (and at least one component must be enabled).</para>
/// </remarks>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
public class RequiredComponentAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="RequiredComponentAttribute"/> class.
/// </summary>
/// <param name="requiringType">The type of the required component.</param>
public RequiredComponentAttribute(Type requiringType)
{
if (typeof(IUmbracoComponent).IsAssignableFrom(requiringType) == false)
throw new ArgumentException($"Type {requiringType.FullName} is invalid here because it does not implement {typeof(IUmbracoComponent).FullName}.");
RequiringType = requiringType;
}
/// <summary>
/// Gets the required type.
/// </summary>
public Type RequiringType { get; }
}
}
@@ -1,13 +1,22 @@
using System;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Components
{
/// <summary>
/// Marks a composer to indicate a minimum and/or maximum runtime level for which the composer would compose.
/// </summary>
[AttributeUsage(AttributeTargets.Class /*, AllowMultiple = false, Inherited = true*/)]
public class RuntimeLevelAttribute : Attribute
{
//public RuntimeLevelAttribute()
//{ }
/// <summary>
/// Gets or sets the minimum runtime level for which the composer would compose.
/// </summary>
public RuntimeLevel MinLevel { get; set; } = RuntimeLevel.Install;
public RuntimeLevel MinLevel { get; set; } = RuntimeLevel.Boot;
/// <summary>
/// Gets or sets the maximum runtime level for which the composer would compose.
/// </summary>
public RuntimeLevel MaxLevel { get; set; } = RuntimeLevel.Run;
}
}
@@ -1,16 +0,0 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Provides a base class for <see cref="IUmbracoComponent"/> implementations.
/// </summary>
public abstract class UmbracoComponentBase : IUmbracoComponent
{
/// <inheritdoc/>
public virtual void Compose(Composition composition)
{ }
/// <inheritdoc/>
public virtual void Terminate()
{ }
}
}
@@ -1,9 +0,0 @@
namespace Umbraco.Core.Components
{
// the UmbracoCoreComponent requires all IUmbracoCoreComponent
// all user-level components should require the UmbracoCoreComponent
[RequireComponent(typeof(IUmbracoCoreComponent))]
public class UmbracoCoreComponent : UmbracoComponentBase
{ }
}
@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using LightInject;
namespace Umbraco.Core.Composing
{
@@ -14,69 +12,34 @@ namespace Umbraco.Core.Composing
/// <typeparam name="TItem">The type of the items.</typeparam>
public abstract class CollectionBuilderBase<TBuilder, TCollection, TItem> : ICollectionBuilder<TCollection, TItem>
where TBuilder: CollectionBuilderBase<TBuilder, TCollection, TItem>
where TCollection : IBuilderCollection<TItem>
where TCollection : class, IBuilderCollection<TItem>
{
private readonly List<Type> _types = new List<Type>();
private readonly object _locker = new object();
private Func<IEnumerable<TItem>, TCollection> _collectionCtor;
private ServiceRegistration[] _registrations;
/// <summary>
/// Initializes a new instance of the <see cref="CollectionBuilderBase{TBuilder, TCollection,TItem}"/>
/// class with a service container.
/// </summary>
/// <param name="container">A service container.</param>
protected CollectionBuilderBase(IServiceContainer container)
{
Container = container;
// ReSharper disable once DoNotCallOverridableMethodsInConstructor
Initialize();
}
/// <summary>
/// Gets the service container.
/// </summary>
protected IServiceContainer Container { get; }
private Type[] _registeredTypes;
/// <summary>
/// Gets the internal list of types as an IEnumerable (immutable).
/// </summary>
public IEnumerable<Type> GetTypes() => _types;
/// <summary>
/// Initializes a new instance of the builder.
/// </summary>
/// <remarks>This is called by the constructor and, by default, registers the
/// collection automatically.</remarks>
protected virtual void Initialize()
/// <inheritdoc />
public virtual void RegisterWith(IRegister register)
{
// compile the auto-collection constructor
var argType = typeof(IEnumerable<TItem>);
var ctorArgTypes = new[] { argType };
var constructor = typeof(TCollection).GetConstructor(ctorArgTypes);
if (constructor != null)
{
var exprArg = Expression.Parameter(argType, "items");
var exprNew = Expression.New(constructor, exprArg);
var expr = Expression.Lambda<Func<IEnumerable<TItem>, TCollection>>(exprNew, exprArg);
_collectionCtor = expr.Compile();
}
// else _collectionCtor remains null, assuming CreateCollection has been overriden
// we just don't want to support re-registering collections here
var registration = Container.GetAvailableService<TCollection>();
if (registration != null)
throw new InvalidOperationException("Collection builders cannot be registered once the collection itself has been registered.");
if (_registeredTypes != null)
throw new InvalidOperationException("This builder has already been registered.");
// register the collection
Container.Register(_ => CreateCollection(), CollectionLifetime);
register.Register(CreateCollection, CollectionLifetime);
// register the types
RegisterTypes(register);
}
/// <summary>
/// Gets the collection lifetime.
/// </summary>
/// <remarks>Return null for transient collections.</remarks>
protected virtual ILifetime CollectionLifetime => new PerContainerLifetime();
protected virtual Lifetime CollectionLifetime => Lifetime.Singleton;
/// <summary>
/// Configures the internal list of types.
@@ -87,8 +50,8 @@ namespace Umbraco.Core.Composing
{
lock (_locker)
{
if (_registrations != null)
throw new InvalidOperationException("Cannot configure a collection builder after its types have been resolved.");
if (_registeredTypes != null)
throw new InvalidOperationException("Cannot configure a collection builder after it has been registered.");
action(_types);
}
}
@@ -104,55 +67,54 @@ namespace Umbraco.Core.Composing
return types;
}
private void RegisterTypes()
private void RegisterTypes(IRegister register)
{
lock (_locker)
{
if (_registrations != null) return;
if (_registeredTypes != null) return;
var types = GetRegisteringTypes(_types).ToArray();
// ensure they are safe
foreach (var type in types)
EnsureType(type, "register");
var prefix = GetType().FullName + "_";
var i = 0;
// register them
foreach (var type in types)
{
var name = $"{prefix}{i++:00000}";
Container.Register(typeof(TItem), type, name);
}
register.Register(type);
_registrations = Container.AvailableServices
.Where(x => x.ServiceName.StartsWith(prefix))
.OrderBy(x => x.ServiceName)
.ToArray();
_registeredTypes = types;
}
}
/// <summary>
/// Creates the collection items.
/// </summary>
/// <param name="args">The arguments.</param>
/// <returns>The collection items.</returns>
protected virtual IEnumerable<TItem> CreateItems(params object[] args)
protected virtual IEnumerable<TItem> CreateItems(IFactory factory)
{
RegisterTypes(); // will do it only once
if (_registeredTypes == null)
throw new InvalidOperationException("Cannot create items before the collection builder has been registered.");
var type = typeof (TItem);
return _registrations
.Select(x => (TItem) Container.GetInstanceOrThrow(type, x.ServiceName, x.ImplementingType, args))
return _registeredTypes // respect order
.Select(x => CreateItem(factory, x))
.ToArray(); // safe
}
/// <summary>
/// Creates a collection item.
/// </summary>
protected virtual TItem CreateItem(IFactory factory, Type itemType)
=> (TItem) factory.GetInstance(itemType);
/// <summary>
/// Creates a collection.
/// </summary>
/// <returns>A collection.</returns>
/// <remarks>Creates a new collection each time it is invoked.</remarks>
public virtual TCollection CreateCollection()
public virtual TCollection CreateCollection(IFactory factory)
{
if (_collectionCtor == null) throw new InvalidOperationException("Collection auto-creation is not possible.");
return _collectionCtor(CreateItems());
return factory.CreateInstance<TCollection>(CreateItems(factory));
}
protected Type EnsureType(Type type, string action)

Some files were not shown because too many files have changed in this diff Show More