Compare commits

...

2036 Commits

Author SHA1 Message Date
Niels Lyngsø 992cc48f56 added missing $location reference 2019-02-18 15:49:43 +01:00
Niels Lyngsø 897d6f2dde List & Grid should only open items as infinity editing if entityType is Content. 2019-02-18 15:38:39 +01:00
Shannon 90cbd69373 Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-19 01:21:40 +11:00
Shannon 16629c78d2 Merge branch 'kjac-v8-fix-use-client-culture' into temp8 2019-02-19 01:20:03 +11:00
Shannon 04487557d7 Merge branch 'v8-fix-use-client-culture' of https://github.com/kjac/Umbraco-CMS into kjac-v8-fix-use-client-culture 2019-02-19 01:05:11 +11:00
Sebastiaan Janssen 5955ede1dc Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/colorpicker/colorpicker.controller.js
2019-02-18 14:58:49 +01:00
Stephan 5a11b1bcac Upgrade ModelsBuilder 2019-02-18 14:43:15 +01:00
Shannon e1c22ef02c bumped to examine 1.0.0 2019-02-19 00:17:23 +11:00
Kenn Jacobsen 1c554a8770 Add generic section icon in section picker + clean up legacy section icon stuff 2019-02-18 13:35:08 +01:00
Bjarke Berg 4cc68912ce Merge pull request #4630 from umbraco/temp8-sections
Move sections to their own namespace
2019-02-18 12:20:45 +01:00
Bjarke Berg e2baf50364 Removing boostrap2 stuff 2019-02-18 12:02:03 +01:00
Bjarke Berg dbb82cb3f8 Fixed views 2019-02-18 11:32:09 +01:00
Stephan 11506e5548 Merge branch 'temp8' into temp8-sections 2019-02-18 11:24:41 +01:00
Stephan 7185089f1d Move sections to their own namespace 2019-02-18 11:22:25 +01:00
Bjarke Berg 050616f446 nullref fixes 2019-02-18 10:58:06 +01:00
Bjarke Berg 08d4747824 nullref fix 2019-02-18 10:55:13 +01:00
Bjarke Berg ecfc8d819f #4379 - Merged Umbraco.Date into Umbraco.Datetime property editor (#4608) 2019-02-18 09:54:01 +01:00
Stephan 30b5dd4d04 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-18 09:49:05 +01:00
Bjarke Berg 6b8fc66858 Merge pull request #4605 from umbraco/temp8-injection-ihttpcontextaccessor-instead-of-controller
Injecting `IUmbracoContextAccessor` instead `UmbracoContext` in constructors
2019-02-18 09:48:37 +01:00
Stephan d7ce71f6a7 Merge branch 'temp8-fixes-rendering-content-without-template' into temp8 2019-02-18 09:48:34 +01:00
Stephan c2bf3d0d53 Merge branch 'temp8' into temp8-fixes-rendering-content-without-template 2019-02-18 09:47:45 +01:00
Stephan ed6167fb0a Document Serilog per-source level 2019-02-18 09:46:43 +01:00
Bjarke Berg aef83b86d4 Merge branch 'temp8' into temp8-injection-ihttpcontextaccessor-instead-of-controller
# Conflicts:
#	src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs
#	src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs
2019-02-18 09:10:47 +01:00
Shannon 8ea6e2b855 If a content item has no template (i.e. route hijack), it will fail to render 2019-02-18 19:07:51 +11:00
Bjarke Berg 8c9d115986 Merge pull request #4626 from umbraco/temp8-remove-Created-service-events
v8 - removal of "Created" events that shouldn't exist
2019-02-18 08:58:57 +01:00
Shannon 79c67e9c1b Fixes logging message 2019-02-18 18:06:54 +11:00
Shannon aa90e61a97 Forgot to remove the ContentService, MediaService and MemberService Created events - these should have been removed a very long time ago! 2019-02-18 16:38:55 +11:00
Shannon 59f51767b5 Forgot to remove the ContentService, MediaService and MemberService Created events - these should have been removed a very long time ago! 2019-02-18 16:38:37 +11:00
Shannon f079f3d66b Fixes a null ref if a url provider returns null 2019-02-18 16:29:57 +11:00
Shannon Deminick 2958b42b31 Merge pull request #4600 from aaronpowell/temp8-3935-clientdependency
Improved fix for non-web Umbraco hosts
2019-02-18 16:13:28 +11:00
Shannon 876336d9fd Fixes more of #4478 2019-02-18 15:02:38 +11:00
Stephan d8a9bfc22c Bugfix variation context in background tasks 2019-02-16 17:25:24 +01:00
Stephan 7641e7a521 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-15 22:45:46 +01:00
Stephan 834a30b5c7 Fix tests 2019-02-15 22:45:30 +01:00
Stephan 6a5f8c0ab8 Fix #4578 2019-02-15 19:32:13 +01:00
Stephan 4ab6ab1a1f Merge branch 'temp8-umbhelper-vs-umbcontext-cleanup' into temp8 2019-02-15 14:20:39 +01:00
Stephan 94a44a2609 Cleanup 2019-02-15 14:20:31 +01:00
Bjarke Berg 8e29dbd494 #4569 - Rename TinyMCE property editor alias (From TinyMCEv3)
#379 - Rename Label property editor alias (From NoEdit)
2019-02-15 13:52:02 +01:00
Robert a0896f168c Merge pull request #4562 from umbraco/temp8-ui-listview-as-infinity-editing-v2
Temp8 ui listview as infinity editing v2
2019-02-15 11:45:58 +01:00
Robert 0555f0868b Merge remote-tracking branch 'origin/temp8' into temp8-ui-listview-as-infinity-editing-v2 2019-02-15 11:24:26 +01:00
Bjarke Berg 5dc3cf45ec Merge remote-tracking branch 'origin/temp8' into temp8-injection-ihttpcontextaccessor-instead-of-controller 2019-02-15 11:13:18 +01:00
Bjarke Berg 8631136444 Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-15 11:05:41 +01:00
Bjarke Berg 7f764a4557 Bugfix for checkboxlist 2019-02-15 11:03:38 +01:00
Robert e29b47069c Show save and publish in infinite mode 2019-02-15 10:54:00 +01:00
Bjarke Berg 73e0e3547c Merge remote-tracking branch 'origin/temp8' into temp8-injection-ihttpcontextaccessor-instead-of-controller 2019-02-15 10:53:23 +01:00
Stephan 6f0ba2236f Fix IGlobalSettings.LocalTempPath in tests 2019-02-15 10:52:30 +01:00
Stephan a46d40e9ef Fix UmbracoContext issue (with a TODO) 2019-02-15 10:52:30 +01:00
Bjarke Berg 2adec8ee74 Merge pull request #4599 from umbraco/temp8-fix-umbeditornavigation-4478
v8 Fixes umbeditornavigation.directive
2019-02-15 10:35:28 +01:00
Robert 68662e271d Merge remote-tracking branch 'origin/temp8' into temp8-ui-listview-as-infinity-editing-v2
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/components/content/edit.html
2019-02-15 10:28:04 +01:00
Stephan cdae0adf52 Merge branch 'temp8' into temp8-umbhelper-vs-umbcontext-cleanup 2019-02-15 10:17:14 +01:00
Bjarke Berg f0dd69d95c Yet another change from injecting UmbracoContext to IUmbracoContextAccessor 2019-02-15 10:10:20 +01:00
Bjarke Berg 90c1fa4a10 Merge remote-tracking branch 'origin/temp8' into temp8-injection-ihttpcontextaccessor-instead-of-controller 2019-02-15 09:59:17 +01:00
Bjarke Berg eab1e46a4b Bugfix in view after UmbracoContext refactoring 2019-02-15 09:58:54 +01:00
Bjarke Berg a29f7b764f Merge remote-tracking branch 'origin/temp8' into temp8-injection-ihttpcontextaccessor-instead-of-controller
# Conflicts:
#	src/Umbraco.Tests/Web/Mvc/RenderIndexActionSelectorAttributeTests.cs
#	src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs
#	src/Umbraco.Web/Editors/Filters/UserGroupAuthorizationAttribute.cs
#	src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs
#	src/Umbraco.Web/Mvc/RedirectToUmbracoPageResult.cs
2019-02-15 09:48:55 +01:00
Stephan 47ee3bf3e4 Move things around 2019-02-15 09:47:35 +01:00
Stephan 64154da4e4 Get LocalTempPath in GlobalSettings 2019-02-15 09:45:51 +01:00
Bjarke Berg 4879e7164e Merge pull request #4413 from kjac/v8-fix-invariant-variant-redirect-tracking
V8: Redirect tracking for invariant content under variant content
2019-02-15 09:10:39 +01:00
Bjarke Berg ed0769f74b Fix for invariant previews 2019-02-15 08:51:03 +01:00
Aaron Powell 0aae5c1df1 Lifting up where the hosted test is 2019-02-15 16:41:50 +11:00
Shannon 3223f23ce4 Dont throw if a property editor isn't found, this prevents the user from doing anything (i.e. if a DLL is removed for some reason like package uninstall), instead default to label so that the admin can actually make changes. 2019-02-15 14:41:20 +11:00
Shannon 9292254aa8 Fixes umbeditornavigation.directive which doesn't listen for any changes to the navigation collection which means it can't dynamically resize or show/hide the items 2019-02-15 14:20:42 +11:00
Shannon 52548316aa adds IPublishedMembersCache to the container and updates MembershipHelper to be request based 2019-02-15 13:36:46 +11:00
Shannon 45f7e71787 Merge remote-tracking branch 'origin/temp8' into temp8-umbhelper-vs-umbcontext-cleanup 2019-02-15 13:09:26 +11:00
Shannon Deminick a87ca8fa1e Merge pull request #4577 from umbraco/temp8-contexts
Refactor UmbracoContext
2019-02-15 12:55:29 +11:00
Shannon 6f7e1cac3e Merge branch 'temp8' into temp8-contexts 2019-02-15 12:55:17 +11:00
Shannon Deminick 997b96e9d4 Merge pull request #4557 from umbraco/temp8-no-restart
Use ChangesMonitor to prevent unwanted restarts during install/upgrade
2019-02-15 12:32:48 +11:00
Shannon afbfc0034d Fixes tests 2019-02-15 12:19:42 +11:00
Shannon 02e3a8f19c Removes all inter-dependencies between UmbracoContext, UmbracoHelper and MembershipHelper and moves Html methods to HtmlHelper extensions. This simplifies UmbracoHelper and MembershipHelper to not require huge dependencies and splits the logic in a nicer fashion instead of wrapping everything 2019-02-15 11:43:56 +11:00
Shannon 6a49f1f99d no need for a Current. usage here 2019-02-15 11:27:33 +11:00
Shannon 4fb0414db3 Removes DisposableObject and uses DisposableObjectSlim where necessary, renames Nul to Null 2019-02-15 10:42:02 +11:00
Bjarne Fyrstenborg 9a5d6afaef Update navigation icons in package section 2019-02-14 21:02:31 +01:00
Bjarne Fyrstenborg 90e3b4273a v8: Adjust Umbraco Forms dashboard (#4589) 2019-02-14 21:01:06 +01:00
Kenn Jacobsen 4662b2e5d4 Fix missing crops on images 2019-02-14 20:55:02 +01:00
Sebastiaan Janssen 3704bfcfe8 Update to latest ImageProcessor 2019-02-14 20:45:34 +01:00
Kenn Jacobsen 013fa2e454 Don't let the image cropper reuse crop states between crops 2019-02-14 20:31:12 +01:00
Kenn Jacobsen 8fe8a0dfa3 Make the image crop slider move at 66 hertz 2019-02-14 20:31:03 +01:00
Kenn Jacobsen 4249f3d1ec Fix the initial zoom offset for new crops in the image cropper 2019-02-14 20:29:43 +01:00
Daniël Knippers 759940b48f Fixes typo defualt -> default 2019-02-14 18:22:04 +01:00
Kenn Jacobsen 5cf0a3adb0 Add the missing right hand side margin for name fields 2019-02-14 18:19:12 +01:00
Kenn Jacobsen 19f884e196 Make sure to show the "No allowed types" for applicable media items 2019-02-14 18:17:35 +01:00
Kenn Jacobsen c1de832c4b Fix: Allowed types for creation don't update 2019-02-14 18:17:00 +01:00
Sebastiaan Janssen 5a482a49bf Merge branch 'dev-v7' into temp8
# Conflicts:
#	src/Umbraco.Web/PropertyEditors/MultiUrlPickerPropertyEditor.cs
2019-02-14 18:14:46 +01:00
Rasmus John Pedersen 46b5c18cc5 V8: Multi Url Picker fixes (#4528)
*  Fix not being able to save link with only an anchor

* Don't allow Multi Url Picker as a Macro Parameter Editor

* Fix anchor/querystring not being saved
2019-02-14 18:12:55 +01:00
Kenn Jacobsen f4a0546dba V8: Add user state and filter localization (#4510) 2019-02-14 18:07:09 +01:00
Kenn Jacobsen 04525b014e Styling for the item edit link in the media picker 2019-02-14 18:04:32 +01:00
Jan Skovgaard 8079b64684 v8: Remove uneeded vendor prefixes (#4502) 2019-02-14 18:03:30 +01:00
Jan Skovgaard 53e6528e6d v8: Remove IE7 CSS hacks (#4500) 2019-02-14 17:55:42 +01:00
Kenn Jacobsen 8a676947bc Don't show the content navigation dropdown if there is only one group of properties 2019-02-14 17:53:32 +01:00
Jan Skovgaard 177a84273f V8: Simplify font setup (#4475) 2019-02-14 17:35:06 +01:00
Kenn Jacobsen 02281a0ee2 Add "back to list" button on edit user 2019-02-14 17:21:35 +01:00
Bjarne Fyrstenborg 9cf4b7b063 v8: Fix closing infinite editors through Escape key (#4462) 2019-02-14 17:19:42 +01:00
Bjarne Fyrstenborg f130fcc390 v8: inifiteediting hide return to list (#4463) 2019-02-14 17:19:02 +01:00
Kenn Jacobsen 9205d2f514 Don't show all children of a selected node as selected 2019-02-14 17:07:54 +01:00
Bjarne Fyrstenborg d76d9b8bcf v8: Fix dictionary items overview (#4456) 2019-02-14 17:04:11 +01:00
Bjarne Fyrstenborg 20e12644e5 v8: Fix saving infinite spinner (#4453) 2019-02-14 16:48:39 +01:00
Bjarne Fyrstenborg 2f377dbefa v8: Update examine management dashboard (#4447) 2019-02-14 16:40:58 +01:00
Bjarne Fyrstenborg fef604d551 v8: Update NuCache dashboard (#4435) 2019-02-14 16:36:44 +01:00
Bjarne Fyrstenborg 822d6cb4c0 v8: Add no relations message (#4431) 2019-02-14 16:33:09 +01:00
Bjarne Fyrstenborg 0d507612cc v8: Fix package options view (#4424) 2019-02-14 16:30:46 +01:00
Bjarne Fyrstenborg 0d36151e53 v8: Macro partial view picker (#4412) 2019-02-14 16:15:00 +01:00
Bjarne Fyrstenborg 280a6d79b4 v8: Add package contributors (#4385) 2019-02-14 16:00:58 +01:00
Robert 2f68853802 Removed console.log 2019-02-14 15:48:39 +01:00
Kenn Jacobsen a8f4cf73d8 V8: Use "Email" instead of "Username" on the login screen (#4383)
* Use "Email" instead of "Username" on the login screen when using email as username in config

* Fix placeholder too
2019-02-14 15:48:20 +01:00
Warren Buckley a7afb2784c Update main UmbracoCms NuSpec for ModelsBuilder update - SK uses the main UmbracoCMS nuget pkg in the example site & wont boot/upgrade without this updated nuspec 2019-02-14 14:28:23 +00:00
Bjarne Fyrstenborg 0a486de6a2 v8: Redirects confirm overlay (#4378) 2019-02-14 15:10:28 +01:00
Stephan 6943be9726 Upgrade ModelsBuilder 2019-02-14 14:23:48 +01:00
Kenn Jacobsen d4a76f1bea V8: Align dialogs in the Settings section (#4344)
* Show the cancel button on macro delete confirm

* Hide "Do something else" when creating folders

* Remove "Do something else" on create relation type
2019-02-14 14:21:21 +01:00
Robert 8cf73e4ecd Merge pull request #4570 from umbraco/temp8-js-test-fixing
v8 - fixing js unit tests + build + CI
2019-02-14 14:18:03 +01:00
Bjarke Berg c4ab4688c7 Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-14 13:50:39 +01:00
Bjarke Berg 92dd1b0f8f Use the url from the object 2019-02-14 13:48:57 +01:00
Stephan 19ac18d13a Really import missing files 2019-02-14 13:48:47 +01:00
Warren Buckley 609786e0c3 Merge pull request #4573 from umbraco/temp8-reorg-composing
Reorganize composition code
2019-02-14 12:44:03 +00:00
Stephan 382a3aba81 Merge branch 'temp8' into temp8-reorg-composing 2019-02-14 13:38:41 +01:00
Warren Buckley de189e506f Merge pull request #4568 from umbraco/temp8-4408-ability-to-add-trees-dynamically
Adds the ability to add tree definitions dynamically on startup
2019-02-14 12:20:06 +00:00
Warren Buckley 29ca926c50 Merge pull request #4574 from umbraco/temp8-4426-fix-for-js-console-error-in-rollback
Added track by $index for `Repeatable Textstrings`
2019-02-14 12:16:58 +00:00
Kenn Jacobsen 684bacb937 V8: Handle element types in the content editor (#4193)
* Don't allow preview for element types

* Don't show the "save and publish" button group for element types + apply primary button state to the "save" button

* Hide templates and URLs for element types

* Fix null error

* Use same notation for negation
2019-02-14 13:13:19 +01:00
Warren Buckley a643f6d1f0 Merge pull request #4551 from umbraco/temp8-ui-umb-tree-grey-out-icon-when-not-published-or-allowed
grey out icons in umb-tree when not published or allowed
2019-02-14 11:54:01 +00:00
Stephan aef9cb807d Import missing files 2019-02-14 12:51:46 +01:00
Stephan fa9dae93b9 Merge branch 'temp8' into temp8-no-restart 2019-02-14 12:47:12 +01:00
Kenn Jacobsen 7b03bc20cc Support localization of template and content type names in the content mapper 2019-02-14 12:46:27 +01:00
Bjarke Berg 1770a0abec Inject IUmbracoContextAccessor instead of UmbracoContext 2019-02-14 12:40:45 +01:00
Kenn Jacobsen 494bdfef1e Allow invariant languages to be resolved by specific cultures 2019-02-14 12:37:03 +01:00
Kenn Jacobsen 0ac196bec6 Add some missing localization for content info 2019-02-14 12:29:06 +01:00
Stephan d933724e39 Cleanup, document 2019-02-14 12:26:50 +01:00
Stephan 186e8fc58b Introduce IUmbracoContextFactory 2019-02-14 12:11:06 +01:00
Claus 30386cc96e adding some translations. 2019-02-14 11:32:23 +01:00
Claus 1bed04f384 Merge branch 'nathanwoulfe-temp8-4548' into temp8 2019-02-14 10:52:41 +01:00
Stephan e5142e4915 Make IPublishedSnapshot IDisposable 2019-02-14 10:50:08 +01:00
Claus 866fdadbe2 Merge branch 'temp8-4548' of https://github.com/nathanwoulfe/Umbraco-CMS into nathanwoulfe-temp8-4548 2019-02-14 10:49:48 +01:00
Claus 7edd338dd0 Merge branch 'kjac-v8-fix-localize-content-apps' into temp8 2019-02-14 10:44:32 +01:00
Stephan abceda7750 Kill UmbracoContext.Current 2019-02-14 10:39:49 +01:00
Stephan 969c2aa184 Bugfix component collection 2019-02-14 10:39:27 +01:00
Claus a37512ffb4 Merge branch 'v8-fix-localize-content-apps' of https://github.com/kjac/Umbraco-CMS into kjac-v8-fix-localize-content-apps 2019-02-14 10:35:52 +01:00
Kenn Jacobsen 7045eb196c Use InvariantContains instead of Contains when looking for culture in the querystring 2019-02-14 10:14:56 +01:00
Kenn Jacobsen 825d8421ed Don't use a hardcoded /umbraco path 2019-02-14 10:12:59 +01:00
Claus 466642af26 Merge pull request #4565 from kjac/v8-fix-remove-console-log
V8: Remove leftover console.log from #4469
2019-02-14 09:39:56 +01:00
Bjarke Berg 71f128d796 #4426 - Added track by $index for Repeatable Textstrings 2019-02-14 09:39:42 +01:00
Kenn Jacobsen 2927ff0af7 Merge branch 'temp8' into v8-fix-use-client-culture 2019-02-14 09:36:54 +01:00
Claus e098b9c184 removing using statements. 2019-02-14 09:28:15 +01:00
Stephan 7660e9fb25 Reorganize composition code 2019-02-14 09:15:47 +01:00
Stephan fe9b964ffe Cleanup IPublishedCache.GetByContentType 2019-02-14 08:54:00 +01:00
Stephan 01b82ee4e8 Bugfix HttpRequestAppCache locking 2019-02-14 08:48:20 +01:00
Bjarke Berg 026094c1b9 Merge pull request #4558 from umbraco/temp8-implement-GetByContentType-nucache
v8 - the GetByContentType methods for the content cache were not implemented
2019-02-14 08:36:24 +01:00
Shannon 2c34979ee8 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-14 18:25:07 +11:00
Shannon 65ce753925 Fixes issue with loading in the correct view for package options 2019-02-14 18:24:52 +11:00
Stephan 94cb6cb668 Bugfix NuCache #4547 2019-02-14 08:05:50 +01:00
Shannon d1624fab2d Merge branch 'temp8' into temp8-implement-GetByContentType-nucache 2019-02-14 16:51:07 +11:00
Shannon 64df1d040f Fixes how tests are run, fixes up the content picker, removes unecessary tests 2019-02-14 15:09:28 +11:00
Shannon Deminick 7e9d8e5de8 Merge pull request #4534 from aaronpowell/temp8-3935-clientdependency
Removing ClientDependency setup for non-web runtimes
2019-02-14 14:04:27 +11:00
Aaron Powell c50daf87a5 Moving to using IOHelper.IsHosted 2019-02-14 13:44:24 +11:00
Shannon 5e38cadacc publishes js test results to xml so that Azure DevOps can read the results, re-enables js test building, fixes an issue with one of the tests 2019-02-14 12:30:36 +11:00
Shannon f814a80ab7 Fixes the ContentSaveValidationAttribute since it was capturing a request based object in it's ctor when it's a singleton, moves the OnlyLocalRequestsAttribute to the correct namespace, WebSecurity shouldn't be IDisposable 2019-02-14 11:37:27 +11:00
Shannon 6644fc790a dont null check tree title 2019-02-14 11:15:43 +11:00
Shannon fd5a2f355b Also exposes the SearchableTreeCollectionBuilder since that's required to be able to replace the ISearchableTree implementations 2019-02-14 11:08:39 +11:00
Shannon f385e1d01d fixes #4408 2019-02-14 11:01:34 +11:00
Shannon Deminick 9a264a120b Merge pull request #4552 from umbraco/temp8-ui-datepicker-style
UI datepicker style updated
2019-02-14 10:28:08 +11:00
Shannon 286730c65e Merge remote-tracking branch 'origin/temp8' into temp8-ui-datepicker-style 2019-02-14 10:25:14 +11:00
Shannon Deminick 6d372fa609 Merge pull request #4556 from umbraco/temp8-4308-styling-of-doc-type-editor
Dimmed overlay on property preview + removed background from "add pro…
2019-02-14 10:23:03 +11:00
Shannon 672f57de5e Merge branch 'temp8' into temp8-4308-styling-of-doc-type-editor 2019-02-14 10:19:57 +11:00
Shannon Deminick e0fa99ee56 Merge pull request #4561 from umbraco/temp8-4451-default-ordering-of-tinymce-toolbar
Changed the default ordering of toolbar in tinymce
2019-02-14 09:55:12 +11:00
Shannon c62ce2ab4b Merge remote-tracking branch 'origin/temp8' into temp8-implement-GetByContentType-nucache 2019-02-14 09:52:09 +11:00
Kenn Jacobsen 30434eacea Remove leftover console.log from #4469 2019-02-13 18:47:29 +01:00
Robert b3a0cd4dd6 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-13 17:24:21 +01:00
Robert 3e0f3bc782 Fixing some tests up by adding the missing _dataTypeService.Setup. 2019-02-13 17:24:02 +01:00
Kenn Jacobsen 9003314d56 Make sure the sticky sub header do not clash with the actions menu (#4503) 2019-02-13 16:43:13 +01:00
Niels Lyngsø 2001487c1e Dont show back button in infinity mode 2019-02-13 16:16:41 +01:00
Stephan d7c8112a7a Merge branch 'temp8' into temp8-no-restart 2019-02-13 16:12:48 +01:00
Warren Buckley df41813ce2 Update the help drawer/sidebar to work with custom dashboards section targeting user-help. Starterkit is the only thing that seems to use this 2019-02-13 15:12:25 +00:00
Bjarke Berg 2b0cfdb143 #4451 - Changed the default ordering of toolbar in tinymce, to be the same as the ordering in config 2019-02-13 15:33:48 +01:00
Niels Lyngsø 95f154cc59 open item in list view as infinity editors 2019-02-13 14:58:48 +01:00
Warren Buckley 375fc62414 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-13 13:45:26 +00:00
Warren Buckley 0a7a42383d Fixed up build output of nupkg & package ZIP containing the Release config files for serilog 2019-02-13 13:44:26 +00:00
Bjarke Berg fa1c360000 Merge pull request #4553 from umbraco/temp8-post-migrations
Refactor post-migrations
2019-02-13 14:23:39 +01:00
Shannon 3ffeb751b9 Implements GetByContentType in nucache 2019-02-14 00:17:33 +11:00
Shannon Deminick 412c9ffa6e Merge pull request #4484 from umbraco/temp8-sk-installer
V8 Installer Steps for starter kit re-enabled
2019-02-13 23:56:21 +11:00
Shannon b5da6c876b makes sure the package file is removed after install 2019-02-13 23:55:05 +11:00
Robert c318bc55dc Merge pull request #4554 from umbraco/temp8-4542-bugfix-for-edit-property-type
Get the editor from the new dataType instead of the old propertyEditor
2019-02-13 13:50:55 +01:00
Warren Buckley 7aebfce579 Update gitignore to exclude serilog config files 2019-02-13 12:43:26 +00:00
Stephan a9c2ec76f7 Merge remote-tracking branch 'origin/temp8' into temp8-post-migrations 2019-02-13 13:32:09 +01:00
Stephan 0c475aa174 Merge branch 'temp8-post-migrations' of https://github.com/umbraco/Umbraco-CMS into temp8-post-migrations 2019-02-13 13:31:19 +01:00
Stephan d16bcdc841 Bugfix NuCache reload during upgrades 2019-02-13 13:30:13 +01:00
Stephan f2472c321d Use ChangesMonitor to prevent unwanted restarts during install/upgrade 2019-02-13 13:29:27 +01:00
Warren Buckley 3415332504 Remove serilog config files from repo the build in Web.UI CSProj will create them from the Release versions like ClientDependancy does 2019-02-13 12:28:01 +00:00
Warren Buckley 0a4502af60 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-13 12:03:56 +00:00
Warren Buckley 0176e2f2e0 Adds in some .Release.config files for Serilog config files - so the build script in the CSProj will reset the config files back 2019-02-13 12:03:46 +00:00
Robert ac44823ebb Merge pull request #4540 from umbraco/temp8-4440-get-children-for-single-culture-when-only-one-culture-exists
Fix for vary by culture when only one culture exists
2019-02-13 12:35:56 +01:00
Stephan 4443465e74 Merge branch 'temp8' into temp8-post-migrations 2019-02-13 12:04:15 +01:00
Stephan b5a90bf26a Fix SqlServer detection 2019-02-13 12:02:53 +01:00
Bjarke Berg 3e9113f1ef Clean up 2019-02-13 11:39:09 +01:00
Niels Lyngsø ff8f9083ec Dimmed overlay on property preview + removed background from "add property group" + adjust sizes for umb-panel-header and added hovers. 2019-02-13 11:37:09 +01:00
Robert 5d5e411219 Merge pull request #4539 from umbraco/temp8-default-logging
V8 - Default logging set to JSON
2019-02-13 11:23:04 +01:00
Bjarke Berg d0c4e44e9e Rebuild cache after migration 2019-02-13 11:02:07 +01:00
Bjarke Berg 1b6fd92087 #4542 - Get the editor from the new dataType instead of the old propertyEditory 2019-02-13 10:49:32 +01:00
Stephan 3c9770c6b6 Refactor post-migrations 2019-02-13 10:14:01 +01:00
Stephan 169e93ed81 Refactor post-migrations 2019-02-13 09:53:17 +01:00
Claus 4a17702849 Merge pull request #4389 from kjac/v8-fix-repeatable-string-styling
V8: Repeatable string hover + move handle styling
2019-02-13 09:39:24 +01:00
Warren Buckley c6da0f3b96 Merge pull request #4543 from umbraco/temp8-ui-clear-distinguish-property-groups
Temp8 ui clear distinguish property groups
2019-02-13 08:30:33 +00:00
Niels Lyngsø cc50a7a3ba grey out icons in umb-tree when not published or allowed 2019-02-13 09:27:24 +01:00
Bjarke Berg e19cd5f49f Merge pull request #4459 from kjac/v8-fix-rte-code-editor-width
V8: Don't open the RTE code editor in "small" sized overlay
2019-02-13 08:12:57 +01:00
Kenn Jacobsen 730a2f7768 Localize content app names 2019-02-13 08:11:01 +01:00
Nathan Woulfe 3c2b2e2963 fix height of editor sub-nav to prevent vertical overflow of borders 2019-02-13 17:10:43 +10:00
Bjarke Berg 7b36e89bd3 Merge pull request #4457 from kjac/v8-fix-remove-obsolete-translations
V8: Remove weird and unused translations
2019-02-13 07:35:45 +01:00
Nathan Woulfe 7aac3dc1bf notifications are full-width on all screen sizes 2019-02-13 16:33:02 +10:00
Shannon 775ea0de3c Merge branch 'temp8' into temp8-sk-installer 2019-02-13 17:15:30 +11:00
Nathan Woulfe 1f7092e2a8 Merge pull request #2 from umbraco/temp8
Temp8
2019-02-13 15:56:36 +10:00
Shannon ee4c751423 fix typo 2019-02-13 15:30:39 +11:00
Niels Lyngsø f016d04c1f V8 UI - umb-sticky-bar corrected width and height set by JS. 2019-02-12 16:52:52 +01:00
Warren Buckley 44929e5512 Remove InstallPackageFiles function as it was installing the package XML & NOT the files 2019-02-12 15:46:57 +00:00
Warren Buckley d7d37e3d63 Revert "Need to install the physical files from the package that was missing in this installer flow"
This reverts commit 00082a87fa.
2019-02-12 15:28:58 +00:00
Warren Buckley 00082a87fa Need to install the physical files from the package that was missing in this installer flow 2019-02-12 14:22:26 +00:00
Warren Buckley 47aec9768c Set the packagepath when saving the SK file - as need to know the location when we fetch it in next install step 2019-02-12 14:11:47 +00:00
Bjarke Berg 1def9014cd Reload templates when creating a doc type with template 2019-02-12 15:11:07 +01:00
Niels Lyngsø 385a86b3b3 V8: UI datepicker style update 2019-02-12 14:52:21 +01:00
Niels Lyngsø 7d589eb607 V8: datepicker style matching the light interface of v8 2019-02-12 14:39:12 +01:00
Niels Lyngsø 7b5ff7b2eb distinguish property groups from properties 2019-02-12 14:37:12 +01:00
Warren Buckley 22918b40bf Merge branch 'temp8' into temp8-sk-installer 2019-02-12 13:35:01 +00:00
Warren Buckley 06a8569570 Merge pull request #4535 from umbraco/temp8-4490-tours
Updated the tours to match v8
2019-02-12 13:32:09 +00:00
Stephan e6b77cf307 Merge origin/temp8 into temp8 2019-02-12 13:42:27 +01:00
Stephan 88e11396b4 Merge branch 'temp8-drop-xml-tables' into temp8 2019-02-12 13:39:55 +01:00
Warren Buckley 2ca5c1d94a Removed extra lines to make Claus happy :) 2019-02-12 12:28:12 +00:00
Bjarke Berg 0cfe1b8348 Merge pull request #4504 from kjac/v8-fix-media-picker-always-show-folder-names
V8: Always show folder names in the media picker
2019-02-12 12:51:08 +01:00
Claus ca39531f45 Merge pull request #4533 from umbraco/temp8-4477-radiobutton-must-store-text-value
WIP v8 radio buttons and check box list need to store strings, not INT
2019-02-12 12:45:04 +01:00
Bjarke Berg cdef97efba Merge pull request #4514 from umbraco/temp8-4430-grid-settings-to-use-editorservice
#4430 change grid-editor settings to use editorService
2019-02-12 12:39:13 +01:00
Bjarke Berg 786c9ff3cc form horizontal 2019-02-12 12:38:43 +01:00
Bjarke Berg 3820457536 Merge remote-tracking branch 'origin/temp8' into temp8-4430-grid-settings-to-use-editorservice 2019-02-12 12:30:41 +01:00
Robert 7cd600e58a Merge pull request #4532 from umbraco/temp8-remove-list-view-settings-3199
removes/renames list view settings that don't make sense for v8
2019-02-12 12:27:09 +01:00
Warren Buckley f7c37fecdc Merge pull request #4520 from umbraco/temp8-4476-selection-colors-for-users
V8: corrected selection colors for users, fixes #4476
2019-02-12 11:16:47 +00:00
Bjarke Berg 1677442fad #4440 - If we only have one culture, we sets that's culture when requesting children. Fixes issue where a document type is varing by culture, but we don't show the mculture picker. 2019-02-12 11:58:38 +01:00
Niels Lyngsø ddc88af809 Merge branch 'temp8-4476-selection-colors-for-users' of https://github.com/umbraco/Umbraco-CMS into temp8-4476-selection-colors-for-users 2019-02-12 11:58:19 +01:00
Warren Buckley 4a1c36c8d0 Update src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js 2019-02-12 10:57:47 +00:00
Niels Lyngsø 20dc1b5c10 Corrected colors for buttons + disable select-image button in media-picker if nothing is selected 2019-02-12 11:57:43 +01:00
Warren Buckley 810d8fa87a Update src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js 2019-02-12 10:57:39 +00:00
Stephan 11f4e2429a Merge branch 'temp8' into temp8-drop-xml-tables 2019-02-12 11:43:06 +01:00
Bjarke Berg 7b84c755b3 #4477 - Fixed tests 2019-02-12 11:20:10 +01:00
Bjarke Berg bb27a3f42e #4477 - Migration of radio button, checkbox and dropdown to align underlying data structures 2019-02-12 10:36:36 +01:00
Warren Buckley 6593b704d5 Moves the JSON & TXT logging out of the C# setup of the Serilog logger pipeline into the appsetting XML config file - however its not possible to then have both enabled together anymore 2019-02-12 08:59:12 +00:00
Bjarke Berg f4db356511 WIP - Handle migration of Checkbox list data 2019-02-12 08:58:49 +01:00
Bjarke Berg f5d31a4c5a Merge remote-tracking branch 'origin/temp8' into temp8-4477-radiobutton-must-store-text-value 2019-02-12 08:23:38 +01:00
Bjarke Berg fd01f4e7c6 Merge remote-tracking branch 'origin/temp8-4477-radiobutton-must-store-text-value' into temp8-4477-radiobutton-must-store-text-value
# Conflicts:
#	src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Core/Migrations/Upgrade/V_8_0_0/RadioButtonAndCheckboxPropertyEditorsMigration.cs
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.controller.js
2019-02-12 08:17:38 +01:00
Bjarke Berg 724eca7575 #4490 - Fixed the TextArea configuration, to match the text in the tour 2019-02-12 08:10:18 +01:00
Bjarke Berg 3f314fe5be #4490 Updated the tour to match v8 2019-02-12 08:09:42 +01:00
Bjarke Berg 7f7afef976 Merge pull request #4522 from umbraco/temp8-Forms-section-reintrodution
Reintroduced the forms section
2019-02-12 07:36:11 +01:00
Shannon c4eb76faad Updates the checkbox html editor to store the string values, not int ids, renames the underlying confg editor and updates comments, updates the migration and we'll need to migrate the checkbox data too. 2019-02-12 15:02:27 +11:00
Shannon ed2743d570 Merge branch 'temp8' into temp8-4477-radiobutton-must-store-text-value
# Conflicts:
#	src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs
2019-02-12 14:59:59 +11:00
Aaron Powell 88a2878cf2 Removing ClientDependency setup for non-web runtimes 2019-02-12 14:48:49 +11:00
Shannon 118e31d647 removes/renames list view settings that don't make sense for v8 2019-02-12 14:03:22 +11:00
Shannon 54aa1924c0 ok, properly fixes dirty tracking on the tags editor 2019-02-12 13:55:50 +11:00
Shannon c00f805ea2 Fixes dirty tracking on tags editor when it's csv format 2019-02-12 13:36:32 +11:00
Shannon 1a1222905b reverts the formsInstaller alias, fixes the ApplicationTreeController to allow full screen sections without trees, removes the forms tree controller 2019-02-12 12:22:36 +11:00
Shannon 77d70c7e7f Fixes test 2019-02-12 11:43:34 +11:00
Shannon 3d729eb2c3 updates umb plan 2019-02-12 10:54:18 +11:00
Shannon 978f59ffe8 Removes the xml cache tables - we don't use them apart from in unit tests 2019-02-12 10:53:30 +11:00
Shannon Deminick f71fe3f78d Merge pull request #4511 from umbraco/temp8-4466-bugfix-for-creating-macros-from-partial-views
Sets the MacroType when created from Partial View Macro Files
2019-02-12 10:17:49 +11:00
Robert 21d1b7c599 Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-11 22:13:30 +01:00
Robert b5bd138bf7 Taking composite PropertyType's into consideration when creating content from xml (PackageInstallation) 2019-02-11 22:13:04 +01:00
Shannon 59f437ebf8 update to latest examine 2019-02-12 02:03:21 +11:00
Shannon d8574248fc Merge branch 'temp8' of https://github.com/umbraco/Umbraco-CMS into temp8 2019-02-12 01:58:56 +11:00
Shannon 0d963d3c4d Fixing package installation for content templates 2019-02-12 01:58:42 +11:00
Bjarke Berg 5fb4e40c3b Merge remote-tracking branch 'origin/temp8-Forms-section-reintrodution' into temp8-Forms-section-reintrodution 2019-02-11 15:32:46 +01:00
Bjarke Berg 60ca85fe25 Introduced the forms section in the sections menu. 2019-02-11 15:32:24 +01:00
Bjarke Berg 944c8d59d7 Need to clone the object before removing $-prefixed variables. Otherwise we are modifying the same data as the views are using 2019-02-11 15:30:11 +01:00
Niels Lyngsø e4a492dc57 Disable button dont hide them + dont select current user 2019-02-11 14:30:01 +01:00
Stephan 154b59c84b Fix redirect tracking 2019-02-11 14:11:13 +01:00
Niels Lyngsø a77b0fc51f Merge remote-tracking branch 'origin/temp8' into temp8-4476-selection-colors-for-users 2019-02-11 13:46:25 +01:00
Kenn Jacobsen 64f41541fe Fix the tree item state annotations (#4497) 2019-02-11 13:33:52 +01:00
Bjarne Fyrstenborg a6fc9f4ede v8: Fix users layout switcher (#4458)
* Localize edit link, remove duplicate class attributes and only make remove link red

* Revert "Localize edit link, remove duplicate class attributes and only make remove link red"

This reverts commit 63cc250c0f929b1f7e6f9f05fae2fd302682d418.

* Use built-in $id function for tracky by since users doesn't have name property

* Set active layout to card layout

* Update onLayoutSelect

* Format document
2019-02-11 13:27:50 +01:00
Niels Lyngsø 5342e65f7c V8: update selection colors for users section 2019-02-11 12:46:23 +01:00
Stephan 0bdd1131bb Add missing file 2019-02-11 11:57:36 +01:00
Bjarke Berg 18c8911164 Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-11 11:55:09 +01:00
Bjarke Berg e08a7c3ea8 Need to clone the object before removing $-prefixed variables. Otherwise we are modifying the same data as the views are using 2019-02-11 11:54:51 +01:00
Stephan a892ae1567 Add missing index on UserLogin table (prevents deadlocks) 2019-02-11 11:36:13 +01:00
Bjarke Berg 14f878b690 #4477 - Align Dropdown, checkbox list and radio button list 2019-02-11 10:36:54 +01:00
Niels Lyngsø 153b665d0a #4430 change grid-editor settings to use editorService 2019-02-11 09:39:54 +01:00
Bjarke Berg e62de9561b #4466 - Sets the MacroType when created from Partial View Macro Files snippets 2019-02-11 07:54:39 +01:00
Shannon e35436225f Fixes JS with the content picker 2019-02-11 15:47:13 +11:00
Shannon dd54b0324c fixes up some comments 2019-02-11 14:13:44 +11:00
Kenn Jacobsen 6fdada69eb Always show folder names in the media picker 2019-02-10 18:55:16 +01:00
Stephan 99887cb362 Bugfix IdkMap 2019-02-10 11:25:46 +01:00
Kenn Jacobsen c75ac83c98 Show missing translations as "(name)", not "((name))" 2019-02-09 18:42:55 +01:00
Kenn Jacobsen 0c860e999b Reimplement after merge 2019-02-09 18:26:03 +01:00
Kenn Jacobsen 3587a774f3 Merge with temp8 2019-02-09 18:03:53 +01:00
Kenn Jacobsen 462a6168b3 Don't show the language selector in content pickers (use the current client culture) 2019-02-09 17:56:13 +01:00
Kenn Jacobsen cb33442e7c Tidy up a bit 2019-02-09 17:50:29 +01:00
Kenn Jacobsen 0dd5ba61ab Clean up unused culture attribute 2019-02-09 17:48:45 +01:00
Kenn Jacobsen 89a701c865 Initial PoC 2019-02-09 15:41:30 +01:00
Bjarke Berg 4f53cfc855 #4477 - Added fixme for cache rebuild 2019-02-08 14:18:24 +01:00
Stephan b177607d47 Suspend JS tests - can we build? 2019-02-08 14:14:30 +01:00
Warren Buckley f549522573 Merge pull request #4469 from umbraco/temp8-ui-umb-editor-navigation-content-apps-dropdown
#4359 + #4360 umb editor navigation content apps anchor-dropdown
2019-02-08 13:04:40 +00:00
Warren Buckley 521fc227ba TYPO - Update src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js 2019-02-08 13:04:30 +00:00
Niels Lyngsø 612a63b6bb fix if scrollTween not defined issue 2019-02-08 13:30:20 +01:00
Niels Lyngsø 1860a175d1 remove eventlisteners on destroy 2019-02-08 13:06:56 +01:00
Stephan b5c803b5ed Cleanup TreeEntityPath 2019-02-08 12:42:46 +01:00
Warren Buckley 393b8f08c8 Adds the plumbing back for when the new V8 compat SK is on our.umb 2019-02-08 11:09:09 +00:00
Stephan 8f39cd605a Fix MacroMapperProfile 2019-02-08 11:47:42 +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
Bjarke Berg 354c45e0e2 #4477 - also refresh cache after migration 2019-02-08 10:32:21 +01:00
Stephan 67e90ca21b Cleanup configuration editors 2019-02-08 09:56:24 +01:00
Bjarke Berg 065cc69f51 #4477 - Changed the saved value from the radio button list to the text value. + Migration of old values 2019-02-08 09:45:36 +01:00
Niels Lyngsø 14db9da57c removed proposal comment 2019-02-08 09:45:33 +01:00
Niels Lyngsø e5a27a2108 removed misleading documentation 2019-02-08 09:39:01 +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
Niels Lyngsø 5c8fad330e motion added for umb-editor-navigation-item anchor-dropdown 2019-02-07 15:10:31 +01: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
Niels Lyngsø 0b19eab5a9 umb-group-panel for umbtabbedcontent 2019-02-07 13:59:20 +01:00
Claus 7c3b5d1086 Merge remote-tracking branch 'origin/temp8-update-deps' into temp8 2019-02-07 13:40:17 +01:00
Niels Lyngsø 42803ff006 V8: umb-editor-navigation anchor-dropdown refined, remembers last active anchor, 2019-02-07 13:26:23 +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
Niels Lyngsø fb070928f7 V8: umb-editor-navigation-anchor-dropdown first version 2019-02-07 08:57:20 +01: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
Kenn Jacobsen 68f34d5643 Don't open the RTE code editor in "small" sized overlay 2019-02-06 22:09:22 +01:00
Kenn Jacobsen 8d305b2c6a Remove weird and unused translations 2019-02-06 19:45:07 +01: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
Niels Lyngsø c813aafb38 Merge remote-tracking branch 'origin/temp8' into temp8-ui-refactoring-of-umb-editor-navigation 2019-02-06 11:26:52 +01:00
Niels Lyngsø 64d2940c3b refactoring of umb-editor-navigation 2019-02-06 11:26:39 +01: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
Niels Lyngsø 2f0d8b75df Merge remote-tracking branch 'origin/temp8' into temp8-ui-refactoring-of-umb-editor-navigation 2019-02-06 08:24:19 +01: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 b9d554908d Track redirects for invariant content under variant content 2019-02-04 21:03:45 +01: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
Niels Lyngsø bd4b4620d4 First part of refactoring umb-editor-navigation 2019-02-04 13:34:26 +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 5566afbabb Add move cursor to umb-multiple-textbox move handle 2019-02-03 22:08:40 +01:00
Kenn Jacobsen c045d4774a Add the correct hover style to umb-multiple-textbox 2019-02-03 22:08:20 +01: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
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
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
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
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
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
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 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
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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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 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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
Claus 003d54cacd cleanup usings 2019-01-07 12:59:38 +01:00
Bjarne Fyrstenborg d231db8ef2 Add disabled state to toggle (#3967) 2019-01-07 12:41:07 +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
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
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
Stephan 97272e6220 Bugfix 2019-01-04 09:55:09 +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 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
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
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
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 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 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
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
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 b087b862e8 Make Nested Content support variant doctypes 2018-12-19 15:36:37 +01:00
Thomas Morris 7b804e27ad Removes umbraco.aspx 2018-12-19 15:30:07 +01:00
Kenn Jacobsen b81f2512cb Fix the disappearing preview/save/publish buttons in listviews (#3906) 2018-12-19 15:01:18 +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
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 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
Jack Lawry a11b442cfd Update text 2018-12-10 08:31:07 +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
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 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
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
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
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
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 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
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
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
Shannon f8d203abff Updates latest examine + api updates + fixes tests, gets different validation working (valid, failed, filtered) 2018-12-03 22:10:56 +11: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
Mads Rasmussen 32ed237729 package-lock 2018-12-03 09:48:59 +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
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
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
Kenn Jacobsen 8e423d9c75 Sort the dictionary items alphabetically 2018-11-27 22:43:19 +01:00
Kenn Jacobsen 34416d9c0a Change role toggles to checkboxes and restyle the page pickers 2018-11-27 22:11:18 +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
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
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
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
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
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 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 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
James Coxhead 738b42964d Added save action 2018-11-20 23:15:16 +00:00
Mads Rasmussen d754aa94c0 Merge branch 'temp8' into temp8-remove-bootstrap-datepicker 2018-11-20 13:18:46 +01:00
Mads Rasmussen b685c04c51 Merge branch 'temp8' into temp8-remove-bootstrap-datepicker 2018-11-20 11:52:02 +01: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
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
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
Dave Woestenborghs 818e9f8b4c 3417 - don't use legacy action for create method 2018-11-15 15:28:35 +01:00
Stefano Chiodino 470585b50d Fix some more tests that were counting on defaulting to 0 2018-11-15 08:01:54 +00: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
Warren Buckley 23c4f88ce7 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-14 10:09:49 +00: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
Warren Buckley 8f6af7b41e Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-13 15:08:17 +00:00
Stephan aa621f687e Refactor/fix registering controllers 2018-11-13 10:07:30 +01:00
James Jackson-South a8fc62cf42 Optimize Guid.Combine and HexString generation. 2018-11-12 16:22:33 +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
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 78b7bb6a22 Recreate benchmark project and update deps Fix #3561 2018-11-08 15:33:14 +00:00
Stefano Chiodino ccd6711a8a cleanup 2018-11-08 14:30:01 +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
Warren Buckley 1d5ae45b06 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-08 09:58:56 +00:00
Dave Woestenborghs 271e01262f #3434 set correct labels 2018-11-07 10:53:23 +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
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
Warren Buckley a5e9ce515f Merge branch 'temp8' into temp8-logviewer 2018-11-06 11:46:46 +00:00
Warren Buckley 21be52c60a Merge branch 'temp8' into temp8-logviewer 2018-11-06 08:43:39 +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
Warren Buckley 7a23fdc1ea Update logic for pre-flight check 2018-11-02 11:09:59 +00: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
Warren Buckley ef30c1f005 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-11-01 09:16:04 +00:00
Warren Buckley 39bb4f3a1e Merge branch 'temp8' into temp8-logviewer 2018-10-31 14:33:40 +00: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 56f1637631 Merge remote-tracking branch 'origin/temp8' into temp8-logviewer 2018-10-30 15:59:33 +00: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
Warren Buckley 45e892a4b1 Now that developer section is no more - update the routes to use 'settings' 2018-10-29 14:41:14 +00: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
James Coxhead 06d19f2735 Load relation type edit view 2018-10-28 19:04:00 +00: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
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
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
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
Kenn Jacobsen 634c2072ca Add optional alert color 2018-10-24 15:49:35 +02:00
Kenn Jacobsen 25718dbe5a Add content app badges 2018-10-24 12:05:25 +02:00
Lars-Erik Aabech 026f10f38a Register instance by name 2018-10-23 21:31:20 +02:00
Stephan d71c879374 Merge branch temp8 into temp8-di2690 2018-10-23 18:01:52 +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
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
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
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
7203 changed files with 410377 additions and 667841 deletions
+24 -1
View File
@@ -8,10 +8,33 @@ root = true
# Use 4 spaces as indentation
[*]
insert_final_newline = true
end_of_line = crlf
indent_style = space
indent_size = 4
# Trim trailing whitespace, limited support.
# https://github.com/editorconfig/editorconfig/wiki/Property-research:-Trim-trailing-spaces
trim_trailing_whitespace = true
csharp_prefer_braces = false : none
[*.{cs,vb}]
dotnet_style_predefined_type_for_locals_parameters_members = true:error
dotnet_naming_rule.private_members_with_underscore.symbols = private_fields
dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = suggestion
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
# https://github.com/MicrosoftDocs/visualstudio-docs/blob/master/docs/ide/editorconfig-code-style-settings-reference.md
[*.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_prefer_braces = false : none
[*.{js,less}]
trim_trailing_whitespace = false
+20 -42
View File
@@ -6,19 +6,13 @@ Umbraco Cms Build
To build Umbraco, fire PowerShell and move to Umbraco's repository root (the directory that contains `src`, `build`, `README.md`...). There, trigger the build with the following command:
build\build.ps1
build/build.ps1
By default, this builds the current version. It is possible to specify a different version as a parameter to the build script:
build\build.ps1 7.6.44
Valid version strings are defined in the `Set-UmbracoVersion` documentation below.
## PowerShell Quirks
There is a good chance that running `build.ps1` ends up in error, with messages such as
>The file ...\build\build.ps1 is not digitally signed. You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies.
>The file ...\build.ps1 is not digitally signed. You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies.
PowerShell has *Execution Policies* that may prevent the script from running. You can check the current policies with:
@@ -42,7 +36,7 @@ Alternatively, you can do it at machine level, from within an elevated PowerShel
And *then* the script should run. It *might* however still complain about executing scripts, with messages such as:
>Security warning - Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run ...\build\build.ps1?
>Security warning - Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run ...\build.ps1?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"):
This is usually caused by the scripts being *blocked*. And that usually happens when the source code has been downloaded as a Zip file. When Windows downloads Zip files, they are marked as *blocked* (technically, they have a Zone.Identifier alternate data stream, with a value of "3" to indicate that they were downloaded from the Internet). And when such a Zip file is un-zipped, each and every single file is also marked as blocked.
@@ -51,30 +45,20 @@ The best solution is to unblock the Zip file before un-zipping: right-click the
PS> Get-ChildItem -Recurse *.* | Unblock-File
## Notes
## Git Quirks
Git might have issues dealing with long file paths during build. You may want/need to enable `core.longpaths` support (see [this page](https://github.com/msysgit/msysgit/wiki/Git-cannot-create-a-file-or-directory-with-a-long-path) for details).
# Build
# Build Infrastructure
The Umbraco Build solution relies on a PowerShell module. The module needs to be imported into PowerShell. From within Umbraco's repository root:
The Umbraco Build infrastructure relies on a PowerShell object. The object can be retrieved with:
build\build.ps1 -ModuleOnly
$ubuild = build/build.ps1 -get
Or the abbreviated form:
build\build.ps1 -mo
Once the module has been imported, a set of commands are added to PowerShell.
## Get-UmbracoBuildEnv
Gets the Umbraco build environment ie NuGet, Semver, Visual Studio, etc. Downloads things that can be downloaded such as NuGet. Examples:
$uenv = Get-UmbracoBuildEnv
Write-Host $uenv.SolutionRoot
&$uenv.NuGet help
The object exposes various properties and methods that can be used to fine-grain build Umbraco. Some, but not all, of them are detailed below.
## Properties
The object exposes the following properties:
* `SolutionRoot`: the absolute path to the solution root
@@ -92,11 +76,11 @@ The Visual Studio object is `null` when Visual Studio has not been detected (eg
* `Minor`: Visual Studio minor version
* `MsBUild`: the absolute path to the MsBuild executable
## Get-UmbracoVersion
## GetUmbracoVersion
Gets an object representing the current Umbraco version. Example:
$v = Get-UmbracoVersion
$v = $ubuild.GetUmbracoVersion()
Write-Host $v.Semver
The object exposes the following properties:
@@ -106,28 +90,24 @@ The object exposes the following properties:
* `Comment`: the pre release part of the version (eg `alpha02`)
* `Build`: the build number part of the version (eg `1234`)
## Set-UmbracoVersion
## SetUmbracoVersion
Modifies Umbraco files with the new version.
>This entirely replaces the legacy `UmbracoVersion.txt` file.
>This entirely replaces the legacy `UmbracoVersion.txt` file. Do *not* edit version infos in files.
The version must be a valid semver version. It can include a *pre release* part (eg `alpha02`) and/or a *build number* (eg `1234`). Examples:
Set-UmbracoVersion 7.6.33
Set-UmbracoVersion 7.6.33-alpha02
Set-UmbracoVersion 7.6.33+1234
Set-UmbracoVersion 7.6.33-beta05+5678
$ubuild.SetUmbracoVersion("7.6.33")
$ubuild.SetUmbracoVersion("7.6.33-alpha.2")
$ubuild.SetUmbracoVersion("7.6.33+1234")
$ubuild.SetUmbracoVersion("7.6.33-beta.5+5678")
Note that `Set-UmbracoVersion` enforces a slightly more restrictive naming scheme than what semver would tolerate. The pre release part can only be composed of a-z and 0-9, therefore `alpha033` is considered valid but not `alpha.033` nor `alpha033-preview` nor `RC2` (would need to be lowercased `rc2`).
>It is considered best to add trailing zeroes to pre releases, else NuGet gets the order of versions wrong. So if you plan to have more than 10, but no more that 100 alpha versions, number the versions `alpha00`, `alpha01`, etc.
## Build-Umbraco
## Build
Builds Umbraco. Temporary files are generated in `build.tmp` while the actual artifacts (zip files, NuGet packages...) are produced in `build.out`. Example:
Build-Umbraco
$ubuild.Build()
Some log files, such as MsBuild logs, are produced in `build.tmp` too. The `build` directory should remain clean during a build.
@@ -181,6 +161,4 @@ We should increment versions as soon as a version is released. Ie, as soon as `7
NuGet / NuSpec consistency checks are performed in tests. We should move it so it is done as part of the PowerShell script even before we try to compile and run the tests.
There are still a few commands in `build` (to build docs, install Git or cleanup the install) that will need to be migrated to PowerShell.
/eof
+34
View File
@@ -0,0 +1,34 @@
Umbraco Cms Clear
--
----
Once the solution has been used to run a site, one may want to "reset" the solution in order to run a fresh new site again.
## Fast
At the very minimum, you want
git clean -Xdf src/Umbraco.Web.UI/App_Data
rm src/Umbraco.Web.UI/web.config
Then, a simple 'Rebuild All' in Visual Studio will recreate a fresh `web.config` but should be quite fast (since it does not really need to rebuild anything).
The `clean` Git command force (`-f`) removes (`-X`, note the capital X) all files and directories (`-d`) that are ignored by Git.
This will leave medias and views around, but in most cases, it will be enough.
## More
To perform a more complete clear, you will want to also delete the content of the media, views, masterpages, scripts... directories.
## Full
The following command will force remove all untracked files and directories, be they ignored by Git or not. Combined with `git reset` it can recreate a pristine working directory.
git clean -xdf .
## Docs
See
* git [clean](<https://git-scm.com/docs/git-clean>)
* git [reset](<https://git-scm.com/docs/git-reset>)
-1
View File
@@ -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
+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.
+14 -3
View File
@@ -1,7 +1,18 @@
[![Build status](https://ci.appveyor.com/api/projects/status/6by6harxtxt0ocdx/branch/dev-v7?svg=true)](https://ci.appveyor.com/project/Umbraco/umbraco-cms-b2cri/branch/dev-v7)
_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 8? [Click here](https://github.com/umbraco/Umbraco-CMS/tree/temp8) to go to the v8 branch_
_Looking for Umbraco version 7? [Click here](https://github.com/umbraco/Umbraco-CMS) to go to the v7 branch._
_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 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
Once a track is done, we start releasing previews where we ask people to test the features we believe are ready. While the testing is going on and we gather feedback, we move on to the next track. This doesn't mean that there hasn't already been work done in the area, but that a track focuses on finalizing, polishing and preparing the features for release.
Umbraco CMS
===========
@@ -45,7 +56,7 @@ Umbraco is contribution-focused and community-driven. If you want to contribute
## 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](https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/.github/CONTRIBUTING.md).
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).
+37
View File
@@ -0,0 +1,37 @@
## A quick start guide for getting up and runnning with Umbraco v8
### What you need:
* [Visual Studio 2017 Community (Free)](https://www.visualstudio.com/vs/community/), or Professional, Enterprise, etc... _(**Minimum of Version 15.7** or higher, this is important, you WILL get issues with lesser versions)_
* .NET Framework 4.7.2 installed, get it here: https://www.microsoft.com/net/download/thank-you/net472?survey=false
* .NET Framework 4.7.2 developer pack, get it here: https://www.microsoft.com/net/download/thank-you/net472-developer-pack _(be sure this is the ENU file which will be named `NDP472-DevPack-ENU.exe`)_
* Clone the Umbraco repository using the `temp8` branch. If your git client doesn't support specifying the branch as you clone then use the command `git clone --single-branch -b temp8 <your fork url>`. _(If you clone the repo using the default v7 branch and then checkout the `temp8` branch you **might** get problems)_
### Start the solution
* 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 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!
### Want to run from a zip instead?
If you just want to try out a few things, you can run the site from a zip file which you can download from here https://github.com/umbraco/Umbraco-CMS/releases/tag/temp8-cg18.
We recommend running the site with the Visual Studio since you'll be able to remain up to date with the latest source code changes.
### Making code changes
* _[The process for making code changes in v8 is the same as v7](https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/.github/CONTRIBUTING.md)_
* Any .NET changes you make you just need to compile
* Any Angular/JS changes you make you will need to make sure you are running the Gulp build. Easiest way to do this is from within Visual Studio in the `Task Runner Explorer`. You can find this window by pressing `ctrl + q` and typing in `Task Runner Explorer`. In this window you'll see all Gulp tasks, double click on the `dev` task, this will compile the angular solution and start a file watcher, then any html/js changes you make are automatically built.
* When making js changes, you should have the chrome developer tools open to ensure that cache is disabled
* If you are only making C# changes and are not touching the UI code at all, you can significantly speed up the VS build by adding an empty file specifically called `~/src/preserve.belle`. The UI (Belle) build will then be skipped during a Rebuild.
### What to work on?
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://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.
+163 -145
View File
@@ -1,145 +1,163 @@
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
.DS_Store
._.DS_Store
[Bb]in
[Db]ebug*/
obj/
[Rr]elease*/
_ReSharper*/
_NCrunch_*/
*.ncrunchsolution
*.ncrunchsolution.user
*.ncrunchproject
*.crunchsolution.cache
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
*.suo
[sS]ource
[sS]andbox
umbraco.config
*.vs10x
App_Data/TEMP/*
[Uu]mbraco/[Pp]resentation/[Uu]mbraco/[Pp]lugins/*
[Uu]mbraco/[Pp]resentation/[Uu]ser[Cc]ontrols/*
[Uu]mbraco/[Pp]resentation/[Ss]cripts/*
[Uu]mbraco/[Pp]resentation/[Ff]onts/*
[Uu]mbraco/[Pp]resentation/[Cc]ss/*
src/Umbraco.Web.UI/[Cc]ss/*
src/Umbraco.Web.UI/App_Code/*
src/Umbraco.Web.UI/App_Data/*
src/Umbraco.Tests/App_Data/*
src/Umbraco.Web.UI/[Mm]edia/*
src/Umbraco.Web.UI/[Mm]aster[Pp]ages/*
src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/*
!src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/[Ww]eb.[Cc]onfig
src/Umbraco.Web.UI/[Xx]slt/*
src/Umbraco.Web.UI/[Ii]mages/*
src/Umbraco.Web.UI/[Ss]cripts/*
src/Umbraco.Web.UI/Web.*.config.transformed
umbraco/presentation/umbraco/plugins/uComponents/uComponentsInstaller.ascx
umbraco/presentation/packages/uComponents/MultiNodePicker/CustomTreeService.asmx
*.ncrunchsolution
src/Umbraco.Tests/config/applications.config
src/Umbraco.Tests/config/trees.config
src/Umbraco.Web.UI/web.config
src/Umbraco.Web.UI/Config/ClientDependency.config
*.orig
src/Umbraco.Tests/config/404handlers.config
src/Umbraco.Web.UI/[Vv]iews/*.cshtml
src/Umbraco.Web.UI/[Vv]iews/*.vbhtml
src/Umbraco.Tests/[Cc]onfig/umbracoSettings.config
src/Umbraco.Web.UI/[Vv]iews/*
src/packages/
src/packages/repositories.config
src/Umbraco.Web.UI/[Ww]eb.config
*.transformed
node_modules
lib-bower
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/umbraco.*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/main.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.panel.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.palettes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.front.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/tuning.config.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.css
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI.Client/[Bb]uild/*
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
tools/NDepend/
src/Umbraco.Web.UI/App_Plugins/*
src/*.psess
src/*.vspx
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js.*
NDependOut/*
*.ndproj
QueryResult.htm
*.ndproj
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Cc]onfig/appSettings.config
src/Umbraco.Web.UI/[Cc]onfig/connectionStrings.config
src/Umbraco.Web.UI/umbraco/plugins/*
src/Umbraco.Web.UI/umbraco/js/init.js
build/ApiDocs/*
build/ApiDocs/Output/*
src/Umbraco.Web.UI.Client/bower_components/*
/src/Umbraco.Web.UI/Umbraco/preview
/src/Umbraco.Web.UI/Umbraco/preview.old
#Ignore Rule for output of generated documentation files from Grunt docserve
src/Umbraco.Web.UI.Client/docs/api
src/*.boltdata/
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.loader.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.palettes.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.panel.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.config.js
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.front.js
src/umbraco.sln.ide/*
src/.vs/
src/Umbraco.Web.UI/umbraco/js/install.loader.js
src/Umbraco.Tests/media
tools/docfx/*
apidocs/_site/*
apidocs/api/*
build/docs.zip
build/ui-docs.zip
build/csharp-docs.zip
.vs/
src/packages/
src/PrecompiledWeb/*
build.out/
build.tmp/
build/Modules/*/temp/
/src/.idea/*
#
# Umbraco Cms Git Ignore
#
# common files
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
*.orig
*.suo
*.vs10x
*.ndproj
*.ignorer.*
# common directories
.DS_Store
._.DS_Store
.vs/
/local/
# build directories
[Bb]in/
[Db]ebug*/
[Rr]elease*/
obj/
# tools
_ReSharper*/
_NCrunch_*/
*.ncrunchsolution
*.ncrunchsolution.user
*.ncrunchproject
*.crunchsolution.cache
tools/NDepend/
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
[sS]ource
[sS]andbox
umbraco.config
App_Data/TEMP/*
[Uu]mbraco/[Pp]resentation/[Uu]mbraco/[Pp]lugins/*
[Uu]mbraco/[Pp]resentation/[Uu]ser[Cc]ontrols/*
[Uu]mbraco/[Pp]resentation/[Ss]cripts/*
[Uu]mbraco/[Pp]resentation/[Ff]onts/*
[Uu]mbraco/[Pp]resentation/[Cc]ss/*
src/Umbraco.Web.UI/[Cc]ss/*
src/Umbraco.Web.UI/App_Code/*
src/Umbraco.Web.UI/App_Data/*
src/Umbraco.Tests/App_Data/*
src/Umbraco.Web.UI/[Mm]edia/*
src/Umbraco.Web.UI/[Mm]aster[Pp]ages/*
src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/*
!src/Umbraco.Web.UI/[Mm]acro[Ss]cripts/[Ww]eb.[Cc]onfig
src/Umbraco.Web.UI/[Xx]slt/*
src/Umbraco.Web.UI/[Ii]mages/*
src/Umbraco.Web.UI/[Ss]cripts/*
src/Umbraco.Web.UI/Web.*.config.transformed
umbraco/presentation/umbraco/plugins/uComponents/uComponentsInstaller.ascx
umbraco/presentation/packages/uComponents/MultiNodePicker/CustomTreeService.asmx
src/Umbraco.Tests/config/applications.config
src/Umbraco.Tests/config/trees.config
src/Umbraco.Web.UI/web.config
src/Umbraco.Web.UI/[Cc]onfig/ClientDependency.config
src/Umbraco.Web.UI/[Cc]onfig/serilog.config
src/Umbraco.Web.UI/[Cc]onfig/serilog.user.config
src/Umbraco.Tests/config/404handlers.config
src/Umbraco.Web.UI/[Vv]iews/*.cshtml
src/Umbraco.Web.UI/[Vv]iews/*.vbhtml
src/Umbraco.Tests/[Cc]onfig/umbracoSettings.config
src/Umbraco.Web.UI/[Vv]iews/*
src/packages/
src/packages/repositories.config
src/Umbraco.Web.UI/[Ww]eb.config
*.transformed
node_modules
lib-bower
src/Umbraco.Web.UI/[Uu]mbraco/[Ll]ib/*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/umbraco.*
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/*.loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/init.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/routes.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/loader.dev.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/main.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/app.js
src/Umbraco.Web.UI/[Uu]mbraco/[Jj]s/canvasdesigner.*.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.js
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.css
src/Umbraco.Web.UI/[Uu]mbraco/[Vv]iews/**/*.html
src/Umbraco.Web.UI/[Uu]mbraco/[Aa]ssets/*
src/Umbraco.Web.UI.Client/[Bb]uild/*
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
src/*.vspx
NDependOut/*
QueryResult.htm
src/Umbraco.Web.UI/[Cc]onfig/appSettings.config
src/Umbraco.Web.UI/[Cc]onfig/connectionStrings.config
src/Umbraco.Web.UI/[Uu]mbraco/plugins/*
build/ApiDocs/*
build/ApiDocs/Output/*
src/Umbraco.Web.UI.Client/bower_components/*
/src/Umbraco.Web.UI/[Uu]mbraco/preview
/src/Umbraco.Web.UI/[Uu]mbraco/preview.old
# ignore rule for clearing out Belle (avoid rebuilding all the time)
preserve.belle
#Ignore Rule for output of generated documentation files from Grunt docserve
src/Umbraco.Web.UI.Client/docs/api
src/*.boltdata/
src/umbraco.sln.ide/*
src/.vs/
src/Umbraco.Web.UI/[Jj]s/*
src/Umbraco.Tests/[Mm]edia
tools/docfx/*
apidocs/_site/*
src/*/project.lock.json
src/.idea/*
apidocs/api/*
build/docs.zip
build/ui-docs.zip
build/csharp-docs.zip
src/packages/
src/PrecompiledWeb/*
# build
build.out/
build.tmp/
build/hooks/
build/temp/
# eof
/src/Umbraco.Web.UI.Client/TESTS-*.xml
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
this is Umbraco's NuGet configuration,
content of this file is merged with the system-wide configuration,
at %APPDATA%\NuGet\NuGet.config
-->
<packageSources>
<add key="UmbracoCoreMyGet" value="https://www.myget.org/F/umbracocore/api/v3/index.json" />
<add key="ExamineAppVeyor" value="https://ci.appveyor.com/nuget/examine-f73l6qv0oqfh/" />
</packageSources>
</configuration>
-62
View File
@@ -1,62 +0,0 @@
version: '{build}'
shallow_clone: true
init:
- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
build_script:
- cmd: >-
SET SLN=%CD%
SET SRC=%SLN%\src
SET PACKAGES=%SRC%\packages
CD build
SET "release="
FOR /F "skip=1 delims=" %%i IN (UmbracoVersion.txt) DO IF NOT DEFINED release SET "release=%%i"
ECHO "Restoring NuGet into %PACKAGES%"
%SRC%\.nuget\NuGet.exe sources Add -Name MyGetUmbracoCore -Source https://www.myget.org/F/umbracocore/api/v2/ >NUL
%SRC%\.nuget\NuGet.exe restore %SRC%\umbraco.sln -Verbosity Quiet -NonInteractive -PackagesDirectory %PACKAGES%
ECHO Building Release %release% build%APPVEYOR_BUILD_NUMBER%
SET PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH%
SET MSBUILD="C:\Program Files (x86)\MSBuild\14.0\Bin\MsBuild.exe"
XCOPY "%SRC%\Umbraco.Tests\unit-test-log4net.CI.config" "%SRC%\Umbraco.Tests\unit-test-log4net.config" /Y
%MSBUILD% "%SLN%/src/Umbraco.Tests/Umbraco.Tests.csproj" /consoleloggerparameters:Summary;ErrorsOnly;WarningsOnly /p:NugetPackagesDirectory=%PACKAGES%
build.bat -integration -release:%release% -comment:build%APPVEYOR_BUILD_NUMBER% -nugetfolder:%PACKAGES%
test:
assemblies: src\Umbraco.Tests\bin\Debug\Umbraco.Tests.dll
artifacts:
- path: build\UmbracoCms.*
name: UmbracoFiles
- path: build\msbuild.log
name: BuildLog
deploy:
- provider: AzureBlob
storage_account_name: umbraconightlies
storage_access_key:
secure: bmEMml2SF7QLHULiePa/a01XOeIa2SxJeXuaZ+1R27b+Vb2nNUQVYiPlUyF2cZAFSHI/zO/LekRsVU1rTescGhJjF7SSjKybymI3p+F/OWpwqiu2WfFee1ofXBFx8QHw
container: umbraco-750
artifact: UmbracoFiles
on:
branch: dev-v7
notifications:
- provider: Slack
auth_token:
secure: v2csJi2V5ghR0rPdODK8GJdOGNCA+XaK84iQ9MdPOClqB+VU+40ybdKp6gPirGSH
channel: '#build-umbraco-core'
on_build_success: false
on_build_failure: true
on_build_status_changed: false
-14
View File
@@ -1,14 +0,0 @@
@ECHO OFF
powershell .\build\build.ps1
IF ERRORLEVEL 1 (
GOTO :error
) ELSE (
GOTO :EOF
)
:error
ECHO.
ECHO Cannot run build\build.ps1.
ECHO If this is due to a SecurityError then please refer to BUILD.md for help!
ECHO.
@@ -1,112 +0,0 @@
#
function Build-UmbracoDocs
{
$uenv = Get-UmbracoBuildEnv
$src = "$($uenv.SolutionRoot)\src"
$out = "$($uenv.SolutionRoot)\build.out"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$buildTemp = "$PSScriptRoot\temp"
$cache = 2
Prepare-Build -keep $uenv
################ Do the UI docs
# get a temp clean node env (will restore)
Sandbox-Node $uenv
Write-Host "Executing gulp docs"
push-location "$($uenv.SolutionRoot)\src\Umbraco.Web.UI.Client"
write "node version is:" > $tmp\belle-docs.log
&node -v >> $tmp\belle-docs.log 2>&1
write "npm version is:" >> $tmp\belle-docs.log 2>&1
&npm -v >> $tmp\belle-docs.log 2>&1
write "executing npm install" >> $tmp\belle-docs.log 2>&1
&npm install >> $tmp\belle-docs.log 2>&1
write "executing bower install" >> $tmp\belle-docs.log 2>&1
&npm install -g bower >> $tmp\belle-docs.log 2>&1
write "installing gulp" >> $tmp\belle-docs.log 2>&1
&npm install -g gulp >> $tmp\belle-docs.log 2>&1
write "installing gulp-cli" >> $tmp\belle-docs.log 2>&1
&npm install -g gulp-cli --quiet >> $tmp\belle-docs.log 2>&1
write "building docs using gulp" >> $tmp\belle-docs.log 2>&1
&gulp docs >> $tmp\belle-docs.log 2>&1
pop-location
Write-Host "Completed gulp docs build"
# fixme - should we filter the log to find errors?
#get-content .\build.tmp\belle-docs.log | %{ if ($_ -match "build") { write $_}}
# change baseUrl
$baseUrl = "https://our.umbraco.com/apidocs/ui/"
$indexPath = "$src/Umbraco.Web.UI.Client/docs/api/index.html"
(Get-Content $indexPath).Replace("origin + location.href.substr(origin.length).replace(rUrl, indexFile)", "'$baseUrl'") `
| Set-Content $indexPath
# restore
Restore-Node
# zip
&$uenv.Zip a -tzip -r "$out\ui-docs.zip" "$src\Umbraco.Web.UI.Client\docs\api\*.*" `
> $null
################ Do the c# docs
Write-Host "Build C# documentation"
# Build the solution in debug mode
# FIXME no only a simple compilation should be enough!
# FIXME we MUST handle msbuild & co error codes!
# FIXME deal with weird things in gitconfig?
#Build-Umbraco -Configuration Debug
Restore-NuGet $uenv
Compile-Umbraco $uenv "Debug" # FIXME different log file!
Restore-WebConfig "$src\Umbraco.Web.UI"
# ensure we have docfx
Get-DocFx $uenv $buildTemp
# clear
$docFxOutput = "$($uenv.SolutionRoot)\apidocs\_site"
if (test-path($docFxOutput))
{
Remove-Directory $docFxOutput
}
# run
$docFxJson = "$($uenv.SolutionRoot)\apidocs\docfx.json"
push-location "$($uenv.SolutionRoot)\build" # silly docfx.json wants this
Write-Host "Run DocFx metadata"
Write-Host "Logging to $tmp\docfx.metadata.log"
&$uenv.DocFx metadata $docFxJson > "$tmp\docfx.metadata.log"
Write-Host "Run DocFx build"
Write-Host "Logging to $tmp\docfx.build.log"
&$uenv.DocFx build $docFxJson > "$tmp\docfx.build.log"
pop-location
# zip
&$uenv.Zip a -tzip -r "$out\csharp-docs.zip" "$docFxOutput\*.*" `
> $null
}
function Get-DocFx($uenv, $buildTemp)
{
$docFx = "$buildTemp\docfx"
if (-not (test-path $docFx))
{
$source = "https://github.com/dotnet/docfx/releases/download/v2.19.2/docfx.zip"
Write-Host "Download DocFx from $source"
Invoke-WebRequest $source -OutFile "$buildTemp\docfx.zip"
&$uenv.Zip x "$buildTemp\docfx.zip" -o"$buildTemp\docfx" -aos > $nul
Remove-File "$buildTemp\docfx.zip"
}
$uenv | add-member -memberType NoteProperty -name DocFx -value "$docFx\docfx.exe"
}
@@ -1,182 +0,0 @@
#
# Get-UmbracoBuildEnv
# Gets the Umbraco build environment
# Downloads tools if necessary
#
function Get-UmbracoBuildEnv
{
# store tools in the module's directory
# and cache them for two days
$path = "$PSScriptRoot\temp"
$src = "$PSScriptRoot\..\..\..\src"
$cache = 2
if (-not (test-path $path))
{
mkdir $path > $null
}
# ensure we have NuGet
$nuget = "$path\nuget.exe"
$source = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
if ((test-path $nuget) -and ((ls $nuget).CreationTime -lt [DateTime]::Now.AddDays(-$cache)))
{
Remove-File $nuget
}
if (-not (test-path $nuget))
{
Write-Host "Download NuGet..."
Invoke-WebRequest $source -OutFile $nuget
}
# ensure we have 7-Zip
$sevenZip = "$path\7za.exe"
if ((test-path $sevenZip) -and ((ls $sevenZip).CreationTime -lt [DateTime]::Now.AddDays(-$cache)))
{
Remove-File $sevenZip
}
if (-not (test-path $sevenZip))
{
Write-Host "Download 7-Zip..."
&$nuget install 7-Zip.CommandLine -configFile "$src\NuGet.config" -OutputDirectory $path -Verbosity quiet
$dir = ls "$path\7-Zip.CommandLine.*" | sort -property Name -descending | select -first 1
$file = ls -path "$dir" -name 7za.exe -recurse
$file = ls -path "$dir" -name 7za.exe -recurse | select -first 1 #A select is because there is tools\7za.exe & tools\x64\7za.exe
mv "$dir\$file" $sevenZip
Remove-Directory $dir
}
# ensure we have vswhere
$vswhere = "$path\vswhere.exe"
if ((test-path $vswhere) -and ((ls $vswhere).CreationTime -lt [DateTime]::Now.AddDays(-$cache)))
{
Remove-File $vswhere
}
if (-not (test-path $vswhere))
{
Write-Host "Download VsWhere..."
&$nuget install vswhere -configFile "$src\NuGet.config" -OutputDirectory $path -Verbosity quiet
$dir = ls "$path\vswhere.*" | sort -property Name -descending | select -first 1
$file = ls -path "$dir" -name vswhere.exe -recurse
mv "$dir\$file" $vswhere
Remove-Directory $dir
}
# ensure we have semver
$semver = "$path\Semver.dll"
if ((test-path $semver) -and ((ls $semver).CreationTime -lt [DateTime]::Now.AddDays(-$cache)))
{
Remove-File $semver
}
if (-not (test-path $semver))
{
Write-Host "Download Semver..."
&$nuget install semver -configFile "$src\NuGet.config" -OutputDirectory $path -Verbosity quiet
$dir = ls "$path\semver.*" | sort -property Name -descending | select -first 1
$file = "$dir\lib\net452\Semver.dll"
if (-not (test-path $file))
{
Write-Error "Failed to file $file"
return
}
mv "$file" $semver
Remove-Directory $dir
}
try
{
[Reflection.Assembly]::LoadFile($semver) > $null
}
catch
{
Write-Error -Exception $_.Exception -Message "Failed to load $semver"
break
}
# ensure we have node
$node = "$path\node-v8.12.0-win-x86"
$source = "http://nodejs.org/dist/v8.12.0/node-v8.12.0-win-x86.7z "
if (-not (test-path $node))
{
Write-Host "Download Node..."
Invoke-WebRequest $source -OutFile "$path\node-v8.12.0-win-x86.7z"
&$sevenZip x "$path\node-v8.12.0-win-x86.7z" -o"$path" -aos > $nul
Remove-File "$path\node-v8.12.0-win-x86.7z"
}
# note: why? node already brings everything we need!
## ensure we have npm
#$npm = "$path\npm.*"
#$getNpm = $true
#if (test-path $npm)
#{
# $getNpm = $false
# $tmpNpm = ls "$path\npm.*" | sort -property Name -descending | select -first 1
# if ($tmpNpm.CreationTime -lt [DateTime]::Now.AddDays(-$cache))
# {
# $getNpm = $true
# }
# else
# {
# $npm = $tmpNpm.ToString()
# }
#}
#if ($getNpm)
#{
# Write-Host "Download Npm..."
# &$nuget install npm -OutputDirectory $path -Verbosity quiet
# $npm = ls "$path\npm.*" | sort -property Name -descending | select -first 1
# $npm.CreationTime = [DateTime]::Now
# $npm = $npm.ToString()
#}
# find visual studio
# will not work on VSO but VSO does not need it
$vsPath = ""
$vsVer = ""
$msBuild = $null
&$vswhere | foreach {
if ($_.StartsWith("installationPath:")) { $vsPath = $_.SubString("installationPath:".Length).Trim() }
if ($_.StartsWith("installationVersion:")) { $vsVer = $_.SubString("installationVersion:".Length).Trim() }
}
if ($vsPath -ne "")
{
$vsVerParts = $vsVer.Split('.')
$vsMajor = [int]::Parse($vsVerParts[0])
$vsMinor = [int]::Parse($vsVerParts[1])
if ($vsMajor -eq 15) {
$msBuild = "$vsPath\MSBuild\$vsMajor.0\Bin"
}
elseif ($vsMajor -eq 14) {
$msBuild = "c:\Program Files (x86)\MSBuild\$vsMajor\Bin"
}
else
{
$msBuild = $null
}
}
$vs = $null
if ($msBuild)
{
$vs = new-object -typeName PsObject
$vs | add-member -memberType NoteProperty -name Path -value $vsPath
$vs | add-member -memberType NoteProperty -name Major -value $vsMajor
$vs | add-member -memberType NoteProperty -name Minor -value $vsMinor
$vs | add-member -memberType NoteProperty -name MsBuild -value "$msBuild\MsBuild.exe"
}
$solutionRoot = Get-FullPath "$PSScriptRoot\..\..\.."
$uenv = new-object -typeName PsObject
$uenv | add-member -memberType NoteProperty -name SolutionRoot -value $solutionRoot
$uenv | add-member -memberType NoteProperty -name VisualStudio -value $vs
$uenv | add-member -memberType NoteProperty -name NuGet -value $nuget
$uenv | add-member -memberType NoteProperty -name Zip -value $sevenZip
$uenv | add-member -memberType NoteProperty -name VsWhere -value $vswhere
$uenv | add-member -memberType NoteProperty -name Semver -value $semver
$uenv | add-member -memberType NoteProperty -name NodePath -value $node
#$uenv | add-member -memberType NoteProperty -name NpmPath -value $npm
return $uenv
}
@@ -1,26 +0,0 @@
#
# Get-UmbracoVersion
# Gets the Umbraco version
#
function Get-UmbracoVersion
{
$uenv = Get-UmbracoBuildEnv
# parse SolutionInfo and retrieve the version string
$filepath = "$($uenv.SolutionRoot)\src\SolutionInfo.cs"
$text = [System.IO.File]::ReadAllText($filepath)
$match = [System.Text.RegularExpressions.Regex]::Matches($text, "AssemblyInformationalVersion\(`"(.+)?`"\)")
$version = $match.Groups[1]
# semver-parse the version string
$semver = [SemVer.SemVersion]::Parse($version)
$release = "" + $semver.Major + "." + $semver.Minor + "." + $semver.Patch
$versions = new-object -typeName PsObject
$versions | add-member -memberType NoteProperty -name Semver -value $semver
$versions | add-member -memberType NoteProperty -name Release -value $release
$versions | add-member -memberType NoteProperty -name Comment -value $semver.PreRelease
$versions | add-member -memberType NoteProperty -name Build -value $semver.Build
return $versions
}
@@ -1,30 +0,0 @@
# finds msbuild
function Get-VisualStudio($vswhere)
{
$vsPath = ""
$vsVer = ""
&$vswhere | foreach {
if ($_.StartsWith("installationPath:")) { $vsPath = $_.SubString("installationPath:".Length).Trim() }
if ($_.StartsWith("installationVersion:")) { $vsVer = $_.SubString("installationVersion:".Length).Trim() }
}
if ($vsPath -eq "") { return $null }
$vsVerParts = $vsVer.Split('.')
$vsMajor = [int]::Parse($vsVerParts[0])
$vsMinor = [int]::Parse($vsVerParts[1])
if ($vsMajor -eq 15) {
$msBuild = "$vsPath\MSBuild\$vsMajor.$vsMinor\Bin"
}
elseif ($vsMajor -eq 14) {
$msBuild = "c:\Program Files (x86)\MSBuild\$vsMajor\Bin"
}
else { return $null }
$msBuild = "$msBuild\MsBuild.exe"
$vs = new-object -typeName PsObject
$vs | add-member -memberType NoteProperty -name Path -value $vsPath
$vs | add-member -memberType NoteProperty -name Major -value $vsMajor
$vs | add-member -memberType NoteProperty -name Minor -value $vsMinor
$vs | add-member -memberType NoteProperty -name MsBuild -value $msBuild
return $vs
}
@@ -1,30 +0,0 @@
#
# Set-UmbracoContinuousVersion
# Sets the Umbraco version for continuous integration
#
# -Version <version>
# where <version> is a Semver valid version
# eg 1.2.3, 1.2.3-alpha, 1.2.3-alpha+456
#
# -BuildNumber <buildNumber>
# where <buildNumber> is a string coming from the build server
# eg 34, 126, 1
#
function Set-UmbracoContinuousVersion
{
param (
[Parameter(Mandatory=$true)]
[string]
$version,
[Parameter(Mandatory=$true)]
[string]
$buildNumber
)
Write-Host "Version is currently set to $version"
$umbracoVersion = "$($version.Trim())-alpha$($buildNumber)"
Write-Host "Setting Umbraco Version to $umbracoVersion"
Set-UmbracoVersion $umbracoVersion
}
@@ -1,117 +0,0 @@
#
# Set-UmbracoVersion
# Sets the Umbraco version
#
# -Version <version>
# where <version> is a Semver valid version
# eg 1.2.3, 1.2.3-alpha, 1.2.3-alpha+456
#
function Set-UmbracoVersion
{
param (
[Parameter(Mandatory=$true)]
[string]
$version
)
$uenv = Get-UmbracoBuildEnv
try
{
[Reflection.Assembly]::LoadFile($uenv.Semver) > $null
}
catch
{
Write-Error "Failed to load $uenv.Semver"
break
}
# validate input
$ok = [Regex]::Match($version, "^[0-9]+\.[0-9]+\.[0-9]+(\-[a-z0-9]+)?(\+[0-9]+)?$")
if (-not $ok.Success)
{
Write-Error "Invalid version $version"
break
}
# parse input
try
{
$semver = [SemVer.SemVersion]::Parse($version)
}
catch
{
Write-Error "Invalid version $version"
break
}
#
$release = "" + $semver.Major + "." + $semver.Minor + "." + $semver.Patch
# edit files and set the proper versions and dates
Write-Host "Update UmbracoVersion.cs"
Replace-FileText "$($uenv.SolutionRoot)\src\Umbraco.Core\Configuration\UmbracoVersion.cs" `
"(\d+)\.(\d+)\.(\d+)(.(\d+))?" `
"$release"
Replace-FileText "$($uenv.SolutionRoot)\src\Umbraco.Core\Configuration\UmbracoVersion.cs" `
"CurrentComment { get { return `"(.+)`"" `
"CurrentComment { get { return `"$($semver.PreRelease)`""
Write-Host "Update SolutionInfo.cs"
Replace-FileText "$($uenv.SolutionRoot)\src\SolutionInfo.cs" `
"AssemblyFileVersion\(`"(.+)?`"\)" `
"AssemblyFileVersion(`"$release`")"
Replace-FileText "$($uenv.SolutionRoot)\src\SolutionInfo.cs" `
"AssemblyInformationalVersion\(`"(.+)?`"\)" `
"AssemblyInformationalVersion(`"$semver`")"
$year = [System.DateTime]::Now.ToString("yyyy")
Replace-FileText "$($uenv.SolutionRoot)\src\SolutionInfo.cs" `
"AssemblyCopyright\(`"Copyright © Umbraco (\d{4})`"\)" `
"AssemblyCopyright(`"Copyright © Umbraco $year`")"
# edit csproj and set IIS Express port number
# this is a raw copy of ReplaceIISExpressPortNumber.exe
# it probably can be achieved in a much nicer way - l8tr
$source = @"
using System;
using System.IO;
using System.Xml;
using System.Globalization;
namespace Umbraco
{
public static class PortUpdater
{
public static void Update(string path, string release)
{
XmlDocument xmlDocument = new XmlDocument();
string fullPath = Path.GetFullPath(path);
xmlDocument.Load(fullPath);
int result = 1;
int.TryParse(release.Replace(`".`", `"`"), out result);
while (result < 1024)
result *= 10;
XmlNode xmlNode1 = xmlDocument.GetElementsByTagName(`"IISUrl`").Item(0);
if (xmlNode1 != null)
xmlNode1.InnerText = `"http://localhost:`" + (object) result;
XmlNode xmlNode2 = xmlDocument.GetElementsByTagName(`"DevelopmentServerPort`").Item(0);
if (xmlNode2 != null)
xmlNode2.InnerText = result.ToString((IFormatProvider) CultureInfo.InvariantCulture);
xmlDocument.Save(fullPath);
}
}
}
"@
$assem = (
"System.Xml",
"System.IO",
"System.Globalization"
)
Write-Host "Update Umbraco.Web.UI.csproj"
add-type -referencedAssemblies $assem -typeDefinition $source -language CSharp
$csproj = "$($uenv.SolutionRoot)\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj"
[Umbraco.PortUpdater]::Update($csproj, $release)
return $semver
}
@@ -1,615 +0,0 @@
# Umbraco.Build.psm1
#
# $env:PSModulePath = "$pwd\build\Modules\;$env:PSModulePath"
# Import-Module Umbraco.Build -Force -DisableNameChecking
#
# PowerShell Modules:
# https://msdn.microsoft.com/en-us/library/dd878324%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
#
# PowerShell Module Manifest:
# https://msdn.microsoft.com/en-us/library/dd878337%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
#
# See also
# http://www.powershellmagazine.com/2014/08/15/pstip-taking-control-of-verbose-and-debug-output-part-5/
. "$PSScriptRoot\Utilities.ps1"
. "$PSScriptRoot\Get-VisualStudio.ps1"
. "$PSScriptRoot\Get-UmbracoBuildEnv.ps1"
. "$PSScriptRoot\Set-UmbracoVersion.ps1"
. "$PSScriptRoot\Set-UmbracoContinuousVersion.ps1"
. "$PSScriptRoot\Get-UmbracoVersion.ps1"
. "$PSScriptRoot\Verify-NuGet.ps1"
. "$PSScriptRoot\Build-UmbracoDocs.ps1"
#
# Prepares the build
#
function Prepare-Build
{
param (
$uenv, # an Umbraco build environment (see Get-UmbracoBuildEnv)
[Alias("k")]
[switch]
$keep = $false
)
Write-Host ">> Prepare Build"
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
# clear
Write-Host "Clear folders and files"
Remove-Directory "$src\Umbraco.Web.UI.Client\bower_components"
if (-not $keep)
{
Remove-Directory "$tmp"
Remove-Directory "$out"
}
if (-not (Test-Path "$tmp"))
{
mkdir "$tmp" > $null
}
if (-not (Test-Path "$out"))
{
mkdir "$out" > $null
}
# ensure proper web.config
$webUi = "$src\Umbraco.Web.UI"
Store-WebConfig $webUi
Write-Host "Create clean web.config"
Copy-File "$webUi\web.Template.config" "$webUi\web.config"
}
function Clear-EnvVar($var)
{
$value = [Environment]::GetEnvironmentVariable($var)
if (test-path "env:$var") { rm "env:$var" }
return $value
}
function Set-EnvVar($var, $value)
{
if ($value)
{
[Environment]::SetEnvironmentVariable($var, $value)
}
else
{
if (test-path "env:$var") { rm "env:$var" }
}
}
function Sandbox-Node
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
$global:node_path = $env:path
$nodePath = $uenv.NodePath
$gitExe = (get-command git).Source
$gitPath = [System.IO.Path]::GetDirectoryName($gitExe)
$env:path = "$nodePath;$gitPath"
$global:node_nodepath = Clear-EnvVar "NODEPATH"
$global:node_npmcache = Clear-EnvVar "NPM_CONFIG_CACHE"
$global:node_npmprefix = Clear-EnvVar "NPM_CONFIG_PREFIX"
}
function Restore-Node
{
$env:path = $node_path
Set-EnvVar "NODEPATH" $node_nodepath
Set-EnvVar "NPM_CONFIG_CACHE" $node_npmcache
Set-EnvVar "NPM_CONFIG_PREFIX" $node_npmprefix
}
#
# Builds the Belle UI project
#
function Compile-Belle
{
param (
$uenv, # an Umbraco build environment (see Get-UmbracoBuildEnv)
$version # an Umbraco version object (see Get-UmbracoVersion)
)
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$src = "$($uenv.SolutionRoot)\src"
Write-Host ">> Compile Belle"
Write-Host "Logging to $tmp\belle.log"
# get a temp clean node env (will restore)
Sandbox-Node $uenv
push-location "$($uenv.SolutionRoot)\src\Umbraco.Web.UI.Client"
write "node version is:" > $tmp\belle.log
&node -v >> $tmp\belle.log 2>&1
write "npm version is:" >> $tmp\belle.log 2>&1
&npm -v >> $tmp\belle.log 2>&1
write "cleaning npm cache" >> $tmp\belle.log 2>&1
&npm cache clean >> $tmp\belle.log 2>&1
write "installing bower" >> $tmp\belle.log 2>&1
&npm install -g bower >> $tmp\belle.log 2>&1
write "installing gulp" >> $tmp\belle.log 2>&1
&npm install -g gulp >> $tmp\belle.log 2>&1
write "installing gulp-cli" >> $tmp\belle.log 2>&1
&npm install -g gulp-cli --quiet >> $tmp\belle.log 2>&1
write "executing npm install" >> $tmp\belle.log 2>&1
&npm install >> $tmp\belle.log 2>&1
write "executing gulp build for version $version" >> $tmp\belle.log 2>&1
&gulp build --buildversion=$version.Release >> $tmp\belle.log 2>&1
pop-location
# fixme - should we filter the log to find errors?
#get-content .\build.tmp\belle.log | %{ if ($_ -match "build") { write $_}}
# restore
Restore-Node
# setting node_modules folder to hidden
# used to prevent VS13 from crashing on it while loading the websites project
# also makes sure aspnet compiler does not try to handle rogue files and chokes
# in VSO with Microsoft.VisualC.CppCodeProvider -related errors
# use get-item -force 'cos it might be hidden already
write "Set hidden attribute on node_modules"
$dir = get-item -force "$src\Umbraco.Web.UI.Client\node_modules"
$dir.Attributes = $dir.Attributes -bor ([System.IO.FileAttributes]::Hidden)
}
#
# Compiles Umbraco
#
function Compile-Umbraco
{
param (
$uenv, # an Umbraco build environment (see Get-UmbracoBuildEnv)
[string] $buildConfiguration = "Release"
)
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
if ($uenv.VisualStudio -eq $null)
{
Write-Error "Build environment does not provide VisualStudio."
break
}
$toolsVersion = "4.0"
if ($uenv.VisualStudio.Major -eq 15)
{
$toolsVersion = "15.0"
}
Write-Host ">> Compile Umbraco"
Write-Host "Logging to $tmp\msbuild.umbraco.log"
# beware of the weird double \\ at the end of paths
# see http://edgylogic.com/blog/powershell-and-external-commands-done-right/
&$uenv.VisualStudio.MsBuild "$src\Umbraco.Web.UI\Umbraco.Web.UI.csproj" `
/p:WarningLevel=0 `
/p:Configuration=$buildConfiguration `
/p:Platform=AnyCPU `
/p:UseWPP_CopyWebApplication=True `
/p:PipelineDependsOnBuild=False `
/p:OutDir=$tmp\bin\\ `
/p:WebProjectOutputDir=$tmp\WebApp\\ `
/p:Verbosity=minimal `
/t:Clean`;Rebuild `
/tv:$toolsVersion `
/p:UmbracoBuild=True `
> $tmp\msbuild.umbraco.log
# /p:UmbracoBuild tells the csproj that we are building from PS
}
#
# Prepare Tests
#
function Prepare-Tests
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
Write-Host ">> Prepare 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"
# data
Write-Host "Copy data files"
if (-Not (Test-Path -Path "$tmp\tests\Packaging" ) )
{
Write-Host "Create packaging directory"
mkdir "$tmp\tests\Packaging" > $null
}
Copy-Files "$src\Umbraco.Tests\Packaging\Packages" "*" "$tmp\tests\Packaging\Packages"
# required for package install tests
if (-Not (Test-Path -Path "$tmp\tests\bin" ) )
{
Write-Host "Create bin directory"
mkdir "$tmp\tests\bin" > $null
}
}
#
# Compiles Tests
#
function Compile-Tests
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$tmp\tests"
$buildConfiguration = "Release"
if ($uenv.VisualStudio -eq $null)
{
Write-Error "Build environment does not provide VisualStudio."
break
}
$toolsVersion = "4.0"
if ($uenv.VisualStudio.Major -eq 15)
{
$toolsVersion = "15.0"
}
Write-Host ">> Compile Tests"
Write-Host "Logging to $tmp\msbuild.tests.log"
# beware of the weird double \\ at the end of paths
# see http://edgylogic.com/blog/powershell-and-external-commands-done-right/
&$uenv.VisualStudio.MsBuild "$src\Umbraco.Tests\Umbraco.Tests.csproj" `
/p:WarningLevel=0 `
/p:Configuration=$buildConfiguration `
/p:Platform=AnyCPU `
/p:UseWPP_CopyWebApplication=True `
/p:PipelineDependsOnBuild=False `
/p:OutDir=$out\\ `
/p:Verbosity=minimal `
/t:Build `
/tv:$toolsVersion `
/p:UmbracoBuild=True `
/p:NugetPackages=$src\packages `
> $tmp\msbuild.tests.log
# /p:UmbracoBuild tells the csproj that we are building from PS
}
#
# Cleans things up and prepare files after compilation
#
function Prepare-Packages
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
Write-Host ">> Prepare Packages"
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
$buildConfiguration = "Release"
# restore web.config
Restore-WebConfig "$src\Umbraco.Web.UI"
# cleanup build
Write-Host "Clean build"
Remove-File "$tmp\bin\*.dll.config"
Remove-File "$tmp\WebApp\bin\*.dll.config"
# cleanup presentation
Write-Host "Cleanup presentation"
Remove-Directory "$tmp\WebApp\umbraco.presentation"
# create directories
Write-Host "Create directories"
mkdir "$tmp\Configs" > $null
mkdir "$tmp\Configs\Lang" > $null
mkdir "$tmp\WebApp\App_Data" > $null
#mkdir "$tmp\WebApp\Media" > $null
#mkdir "$tmp\WebApp\Views" > $null
# copy various files
Write-Host "Copy xml documentation"
cp -force "$tmp\bin\*.xml" "$tmp\WebApp\bin"
Write-Host "Copy transformed configs and langs"
# note: exclude imageprocessor/*.config as imageprocessor pkg installs them
Copy-Files "$tmp\WebApp\config" "*.config" "$tmp\Configs" `
{ -not $_.RelativeName.StartsWith("imageprocessor") }
Copy-Files "$tmp\WebApp\config" "*.js" "$tmp\Configs"
Copy-Files "$tmp\WebApp\config\lang" "*.xml" "$tmp\Configs\Lang"
Copy-File "$tmp\WebApp\web.config" "$tmp\Configs\web.config.transform"
Write-Host "Copy transformed web.config"
Copy-File "$src\Umbraco.Web.UI\web.$buildConfiguration.Config.transformed" "$tmp\WebApp\web.config"
# offset the modified timestamps on all umbraco dlls, as WebResources
# break if date is in the future, which, due to timezone offsets can happen.
Write-Host "Offset dlls timestamps"
ls -r "$tmp\*.dll" | foreach {
$_.CreationTime = $_.CreationTime.AddHours(-11)
$_.LastWriteTime = $_.LastWriteTime.AddHours(-11)
}
# copy libs
Write-Host "Copy SqlCE libraries"
Copy-Files "$src\packages\SqlServerCE.4.0.0.1" "*.*" "$tmp\bin" `
{ -not $_.Extension.StartsWith(".nu") -and -not $_.RelativeName.StartsWith("lib\") }
Copy-Files "$src\packages\SqlServerCE.4.0.0.1" "*.*" "$tmp\WebApp\bin" `
{ -not $_.Extension.StartsWith(".nu") -and -not $_.RelativeName.StartsWith("lib\") }
# copy Belle
Write-Host "Copy Belle"
Copy-Files "$src\Umbraco.Web.UI\umbraco\assets" "*" "$tmp\WebApp\umbraco\assets"
Copy-Files "$src\Umbraco.Web.UI\umbraco\js" "*" "$tmp\WebApp\umbraco\js"
Copy-Files "$src\Umbraco.Web.UI\umbraco\lib" "*" "$tmp\WebApp\umbraco\lib"
Copy-Files "$src\Umbraco.Web.UI\umbraco\views" "*" "$tmp\WebApp\umbraco\views"
}
#
# Creates the Zip packages
#
function Package-Zip
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
Write-Host ">> Create Zip packages"
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
Write-Host "Zip all binaries"
&$uenv.Zip a -r "$out\UmbracoCms.AllBinaries.$($version.Semver).zip" `
"$tmp\bin\*" `
"-x!dotless.Core.*" `
> $null
Write-Host "Zip cms"
&$uenv.Zip a -r "$out\UmbracoCms.$($version.Semver).zip" `
"$tmp\WebApp\*" `
"-x!dotless.Core.*" "-x!Content_Types.xml" "-x!*.pdb"`
> $null
}
#
# Prepares NuGet
#
function Prepare-NuGet
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
Write-Host ">> Prepare NuGet"
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
# add Web.config transform files to the NuGet package
Write-Host "Add web.config transforms to NuGet package"
mv "$tmp\WebApp\Views\Web.config" "$tmp\WebApp\Views\Web.config.transform"
# fixme - that one does not exist in .bat build either?
#mv "$tmp\WebApp\Xslt\Web.config" "$tmp\WebApp\Xslt\Web.config.transform"
}
#
# Restores NuGet
#
function Restore-NuGet
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
Write-Host ">> Restore NuGet"
Write-Host "Logging to $tmp\nuget.restore.log"
&$uenv.NuGet restore "$src\Umbraco.sln" -configfile "$src\NuGet.config" > "$tmp\nuget.restore.log"
}
#
# Copies the Azure Gallery script to output
#
function Prepare-AzureGallery
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
$psScript = "$($uenv.SolutionRoot)\build\azuregalleryrelease.ps1"
Write-Host ">> Copy azuregalleryrelease.ps1 to output folder"
Copy-Item $psScript $out
}
#
# Creates the NuGet packages
#
function Package-NuGet
{
param (
$uenv, # an Umbraco build environment (see Get-UmbracoBuildEnv)
$version # an Umbraco version object (see Get-UmbracoVersion)
)
$src = "$($uenv.SolutionRoot)\src"
$tmp = "$($uenv.SolutionRoot)\build.tmp"
$out = "$($uenv.SolutionRoot)\build.out"
$nuspecs = "$($uenv.SolutionRoot)\build\NuSpecs"
Write-Host ">> Create NuGet packages"
# see https://docs.microsoft.com/en-us/nuget/schema/nuspec
# note - warnings about SqlCE native libs being outside of 'lib' folder,
# nothing much we can do about it as it's intentional yet there does not
# seem to be a way to disable the warning
&$uenv.NuGet Pack "$nuspecs\UmbracoCms.Core.nuspec" `
-Properties BuildTmp="$tmp" `
-Version $version.Semver.ToString() `
-Symbols -Verbosity quiet -outputDirectory $out
&$uenv.NuGet Pack "$nuspecs\UmbracoCms.nuspec" `
-Properties BuildTmp="$tmp" `
-Version $version.Semver.ToString() `
-Verbosity quiet -outputDirectory $out
}
#
# Builds Umbraco
#
function Build-Umbraco
{
[CmdletBinding()]
param (
[string]
$target = "all",
[string]
$buildConfiguration = "Release"
)
$target = $target.ToLowerInvariant()
Write-Host ">> Build-Umbraco <$target> <$buildConfiguration>"
Write-Host "Get Build Environment"
$uenv = Get-UmbracoBuildEnv
Write-Host "Get Version"
$version = Get-UmbracoVersion
Write-Host "Version $($version.Semver)"
if ($target -eq "pre-build")
{
Prepare-Build $uenv
#Compile-Belle $uenv $version
# set environment variables
$env:UMBRACO_VERSION=$version.Semver.ToString()
$env:UMBRACO_RELEASE=$version.Release
$env:UMBRACO_COMMENT=$version.Comment
$env:UMBRACO_BUILD=$version.Build
# set environment variable for VSO
# https://github.com/Microsoft/vsts-tasks/issues/375
# https://github.com/Microsoft/vsts-tasks/blob/master/docs/authoring/commands.md
Write-Host ("##vso[task.setvariable variable=UMBRACO_VERSION;]$($version.Semver.ToString())")
Write-Host ("##vso[task.setvariable variable=UMBRACO_RELEASE;]$($version.Release)")
Write-Host ("##vso[task.setvariable variable=UMBRACO_COMMENT;]$($version.Comment)")
Write-Host ("##vso[task.setvariable variable=UMBRACO_BUILD;]$($version.Build)")
Write-Host ("##vso[task.setvariable variable=UMBRACO_TMP;]$($uenv.SolutionRoot)\build.tmp")
}
elseif ($target -eq "pre-tests")
{
Prepare-Tests $uenv
}
elseif ($target -eq "compile-tests")
{
Compile-Tests $uenv
}
elseif ($target -eq "compile-umbraco")
{
Compile-Umbraco $uenv $buildConfiguration
}
elseif ($target -eq "pre-packages")
{
Prepare-Packages $uenv
}
elseif ($target -eq "pre-nuget")
{
Prepare-NuGet $uenv
}
elseif ($target -eq "restore-nuget")
{
Restore-NuGet $uenv
}
elseif ($target -eq "pkg-zip")
{
Package-Zip $uenv
}
elseif ($target -eq "compile-belle")
{
Compile-Belle $uenv $version
}
elseif ($target -eq "prepare-azuregallery")
{
Prepare-AzureGallery $uenv
}
elseif ($target -eq "all")
{
Prepare-Build $uenv
Restore-NuGet $uenv
Compile-Belle $uenv $version
Compile-Umbraco $uenv $buildConfiguration
Prepare-Tests $uenv
Compile-Tests $uenv
# not running tests...
Prepare-Packages $uenv
Package-Zip $uenv
Verify-NuGet $uenv
Prepare-NuGet $uenv
Package-NuGet $uenv $version
Prepare-AzureGallery $uenv
}
else
{
Write-Error "Unsupported target `"$target`"."
}
}
#
# export functions
#
Export-ModuleMember -function Get-UmbracoBuildEnv
Export-ModuleMember -function Set-UmbracoVersion
Export-ModuleMember -function Set-UmbracoContinuousVersion
Export-ModuleMember -function Get-UmbracoVersion
Export-ModuleMember -function Build-Umbraco
Export-ModuleMember -function Build-UmbracoDocs
Export-ModuleMember -function Verify-NuGet
#eof
-95
View File
@@ -1,95 +0,0 @@
# returns the full path if $file is relative to $pwd
function Get-FullPath($file)
{
$path = [System.IO.Path]::Combine($pwd, $file)
$path = [System.IO.Path]::GetFullPath($path)
return $path
}
# removes a directory, doesn't complain if it does not exist
function Remove-Directory($dir)
{
remove-item $dir -force -recurse -errorAction SilentlyContinue > $null
}
# removes a file, doesn't complain if it does not exist
function Remove-File($file)
{
remove-item $file -force -errorAction SilentlyContinue > $null
}
# copies a file, creates target dir if needed
function Copy-File($source, $target)
{
$ignore = new-item -itemType file -path $target -force
cp -force $source $target
}
# copies files to a directory
function Copy-Files($source, $select, $target, $filter)
{
$files = ls -r "$source\$select"
$files | foreach {
$relative = $_.FullName.SubString($source.Length+1)
$_ | add-member -memberType NoteProperty -name RelativeName -value $relative
}
if ($filter -ne $null) {
$files = $files | where $filter
}
$files |
foreach {
if ($_.PsIsContainer) {
$ignore = new-item -itemType directory -path "$target\$($_.RelativeName)" -force
}
else {
Copy-File $_.FullName "$target\$($_.RelativeName)"
}
}
}
# regex-replaces content in a file
function Replace-FileText($filename, $source, $replacement)
{
$filepath = Get-FullPath $filename
$text = [System.IO.File]::ReadAllText($filepath)
$text = [System.Text.RegularExpressions.Regex]::Replace($text, $source, $replacement)
$utf8bom = New-Object System.Text.UTF8Encoding $true
[System.IO.File]::WriteAllText($filepath, $text, $utf8bom)
}
# store web.config
function Store-WebConfig($webUi)
{
if (test-path "$webUi\web.config")
{
if (test-path "$webUi\web.config.temp-build")
{
Write-Host "Found existing web.config.temp-build"
$i = 0
while (test-path "$webUi\web.config.temp-build.$i")
{
$i = $i + 1
}
Write-Host "Save existing web.config as web.config.temp-build.$i"
Write-Host "(WARN: the original web.config.temp-build will be restored during post-build)"
mv "$webUi\web.config" "$webUi\web.config.temp-build.$i"
}
else
{
Write-Host "Save existing web.config as web.config.temp-build"
Write-Host "(will be restored during post-build)"
mv "$webUi\web.config" "$webUi\web.config.temp-build"
}
}
}
# restore web.config
function Restore-WebConfig($webUi)
{
if (test-path "$webUi\web.config.temp-build")
{
Write-Host "Restoring existing web.config"
Remove-File "$webUi\web.config"
mv "$webUi\web.config.temp-build" "$webUi\web.config"
}
}
@@ -1,444 +0,0 @@
#
# Verify-NuGet
#
function Format-Dependency
{
param ( $d )
$m = $d.Id + " "
if ($d.MinInclude) { $m = $m + "[" }
else { $m = $m + "(" }
$m = $m + $d.MinVersion
if ($d.MaxVersion -ne $d.MinVersion) { $m = $m + "," + $d.MaxVersion }
if ($d.MaxInclude) { $m = $m + "]" }
else { $m = $m + ")" }
return $m
}
function Write-NuSpec
{
param ( $name, $deps )
Write-Host ""
Write-Host "$name NuSpec dependencies:"
foreach ($d in $deps)
{
$m = Format-Dependency $d
Write-Host " $m"
}
}
function Write-Package
{
param ( $name, $pkgs )
Write-Host ""
Write-Host "$name packages:"
foreach ($p in $pkgs)
{
Write-Host " $($p.Id) $($p.Version)"
}
}
function Verify-NuGet
{
param (
$uenv # an Umbraco build environment (see Get-UmbracoBuildEnv)
)
if ($uenv -eq $null)
{
$uenv = Get-UmbracoBuildEnv
}
$source = @"
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using Semver;
namespace Umbraco.Build
{
public class NuGet
{
public static Dependency[] GetNuSpecDependencies(string filename)
{
NuSpec nuspec;
var serializer = new XmlSerializer(typeof(NuSpec));
using (var reader = new StreamReader(filename))
{
nuspec = (NuSpec) serializer.Deserialize(reader);
}
var nudeps = nuspec.Metadata.Dependencies;
var deps = new List<Dependency>();
foreach (var nudep in nudeps)
{
var dep = new Dependency();
dep.Id = nudep.Id;
var parts = nudep.Version.Split(',');
if (parts.Length == 1)
{
dep.MinInclude = parts[0].StartsWith("[");
dep.MaxInclude = parts[0].EndsWith("]");
SemVersion version;
if (!SemVersion.TryParse(parts[0].Substring(1, parts[0].Length-2).Trim(), out version)) continue;
dep.MinVersion = dep.MaxVersion = version; //parts[0].Substring(1, parts[0].Length-2).Trim();
}
else
{
SemVersion version;
if (!SemVersion.TryParse(parts[0].Substring(1).Trim(), out version)) continue;
dep.MinVersion = version; //parts[0].Substring(1).Trim();
if (!SemVersion.TryParse(parts[1].Substring(0, parts[1].Length-1).Trim(), out version)) continue;
dep.MaxVersion = version; //parts[1].Substring(0, parts[1].Length-1).Trim();
dep.MinInclude = parts[0].StartsWith("[");
dep.MaxInclude = parts[1].EndsWith("]");
}
deps.Add(dep);
}
return deps.ToArray();
}
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(/*this*/ IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> knownKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
public static Package[] GetProjectsPackages(string src, string[] projects)
{
var l = new List<Package>();
foreach (var project in projects)
{
var path = Path.Combine(src, project);
var packageConfig = Path.Combine(path, "packages.config");
if (File.Exists(packageConfig))
ReadPackagesConfig(packageConfig, l);
var csprojs = Directory.GetFiles(path, "*.csproj");
foreach (var csproj in csprojs)
{
ReadCsProj(csproj, l);
}
}
IEnumerable<Package> p = l.OrderBy(x => x.Id);
p = DistinctBy(p, x => x.Id + ":::" + x.Version);
return p.ToArray();
}
public static object[] GetPackageErrors(Package[] pkgs)
{
return pkgs
.GroupBy(x => x.Id)
.Where(x => x.Count() > 1)
.ToArray();
}
public static object[] GetNuSpecErrors(Package[] pkgs, Dependency[] deps)
{
var d = pkgs.ToDictionary(x => x.Id, x => x.Version);
return deps
.Select(x =>
{
SemVersion v;
if (!d.TryGetValue(x.Id, out v)) return null;
var ok = true;
/*
if (x.MinInclude)
{
if (v < x.MinVersion) ok = false;
}
else
{
if (v <= x.MinVersion) ok = false;
}
if (x.MaxInclude)
{
if (v > x.MaxVersion) ok = false;
}
else
{
if (v >= x.MaxVersion) ok = false;
}
*/
if (!x.MinInclude || v != x.MinVersion) ok = false;
return ok ? null : new { Dependency = x, Version = v };
})
.Where(x => x != null)
.ToArray();
}
/*
public static Package[] GetProjectPackages(string path)
{
var l = new List<Package>();
var packageConfig = Path.Combine(path, "packages.config");
if (File.Exists(packageConfig))
ReadPackagesConfig(packageConfig, l);
var csprojs = Directory.GetFiles(path, "*.csproj");
foreach (var csproj in csprojs)
{
ReadCsProj(csproj, l);
}
return l.ToArray();
}
*/
public static string GetDirectoryName(string filename)
{
return Path.GetFileName(Path.GetDirectoryName(filename));
}
public static void ReadPackagesConfig(string filename, List<Package> packages)
{
//Console.WriteLine("read " + filename);
PackagesConfigPackages pkgs;
var serializer = new XmlSerializer(typeof(PackagesConfigPackages));
using (var reader = new StreamReader(filename))
{
pkgs = (PackagesConfigPackages) serializer.Deserialize(reader);
}
foreach (var p in pkgs.Packages)
{
SemVersion version;
if (!SemVersion.TryParse(p.Version, out version)) continue;
packages.Add(new Package { Id = p.Id, Version = version, Project = GetDirectoryName(filename) });
}
}
public static void ReadCsProj(string filename, List<Package> packages)
{
//Console.WriteLine("read " + filename);
// if xmlns then it's not a VS2017 with PackageReference
var text = File.ReadAllLines(filename);
var line = text.FirstOrDefault(x => x.Contains("<Project"));
if (line == null) return;
if (line.Contains("xmlns")) return;
CsProjProject proj;
var serializer = new XmlSerializer(typeof(CsProjProject));
using (var reader = new StreamReader(filename))
{
proj = (CsProjProject) serializer.Deserialize(reader);
}
foreach (var p in proj.ItemGroups.Where(x => x.Packages != null).SelectMany(x => x.Packages))
{
var sversion = p.VersionE ?? p.VersionA;
SemVersion version;
if (!SemVersion.TryParse(sversion, out version)) continue;
packages.Add(new Package { Id = p.Id, Version = version, Project = GetDirectoryName(filename) });
}
}
public class Dependency
{
public string Id { get; set; }
public SemVersion MinVersion { get; set; }
public SemVersion MaxVersion { get; set; }
public bool MinInclude { get; set; }
public bool MaxInclude { get; set; }
}
public class Package
{
public string Id { get; set; }
public SemVersion Version { get; set; }
public string Project { get; set; }
}
[XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd")]
[XmlRoot(Namespace = "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd", IsNullable = false, ElementName = "package")]
public class NuSpec
{
[XmlElement("metadata")]
public NuSpecMetadata Metadata { get; set; }
}
[XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd", TypeName = "metadata")]
public class NuSpecMetadata
{
[XmlArray("dependencies")]
[XmlArrayItem("dependency", IsNullable = false)]
public NuSpecDependency[] Dependencies { get; set; }
}
[XmlType(AnonymousType = true, Namespace = "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd", TypeName = "dependencies")]
public class NuSpecDependency
{
[XmlAttribute(AttributeName = "id")]
public string Id { get; set; }
[XmlAttribute(AttributeName = "version")]
public string Version { get; set; }
}
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false, ElementName = "packages")]
public class PackagesConfigPackages
{
[XmlElement("package")]
public PackagesConfigPackage[] Packages { get; set; }
}
[XmlType(AnonymousType = true, TypeName = "package")]
public class PackagesConfigPackage
{
[XmlAttribute(AttributeName = "id")]
public string Id { get; set; }
[XmlAttribute(AttributeName = "version")]
public string Version { get; set; }
}
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false, ElementName = "Project")]
public class CsProjProject
{
[XmlElement("ItemGroup")]
public CsProjItemGroup[] ItemGroups { get; set; }
}
[XmlType(AnonymousType = true, TypeName = "ItemGroup")]
public class CsProjItemGroup
{
[XmlElement("PackageReference")]
public CsProjPackageReference[] Packages { get; set; }
}
[XmlType(AnonymousType = true, TypeName = "PackageReference")]
public class CsProjPackageReference
{
[XmlAttribute(AttributeName = "Include")]
public string Id { get; set; }
[XmlAttribute(AttributeName = "Version")]
public string VersionA { get; set; }
[XmlElement("Version")]
public string VersionE { get; set;}
}
}
}
"@
Write-Host ">> Verify NuGet consistency"
$assem = (
"System.Xml",
"System.Core", # "System.Collections.Generic"
"System.Linq",
"System.Xml.Serialization",
"System.IO",
"System.Globalization",
$uenv.Semver
)
try
{
# as long as the code hasn't changed it's fine to re-add, but if the code
# has changed this will throw - better warn the dev that we have an issue
add-type -referencedAssemblies $assem -typeDefinition $source -language CSharp
}
catch
{
if ($_.FullyQualifiedErrorId.StartsWith("TYPE_ALREADY_EXISTS,"))
{ Write-Error "Failed to add type, did you change the code?" }
else
{ Write-Error $_ }
}
if (-not $?) { break }
$nuspecs = (
"UmbracoCms",
"UmbracoCms.Core"
)
$projects = (
"Umbraco.Core",
"Umbraco.Web",
"Umbraco.Web.UI",
"UmbracoExamine"#,
#"Umbraco.Tests",
#"Umbraco.Tests.Benchmarks"
)
$src = "$($uenv.SolutionRoot)\src"
$pkgs = [Umbraco.Build.NuGet]::GetProjectsPackages($src, $projects)
if (-not $?) { break }
#Write-Package "All" $pkgs
$errs = [Umbraco.Build.NuGet]::GetPackageErrors($pkgs)
if (-not $?) { break }
if ($errs.Length -gt 0)
{
Write-Host ""
}
foreach ($err in $errs)
{
Write-Host $err.Key
foreach ($e in $err)
{
Write-Host " $($e.Version) required by $($e.Project)"
}
}
if ($errs.Length -gt 0)
{
Write-Error "Found non-consolidated package dependencies"
break
}
$nuerr = $false
$nupath = "$($uenv.SolutionRoot)\build\NuSpecs"
foreach ($nuspec in $nuspecs)
{
$deps = [Umbraco.Build.NuGet]::GetNuSpecDependencies("$nupath\$nuspec.nuspec")
if (-not $?) { break }
#Write-NuSpec $nuspec $deps
$errs = [Umbraco.Build.NuGet]::GetNuSpecErrors($pkgs, $deps)
if (-not $?) { break }
if ($errs.Length -gt 0)
{
Write-Host ""
Write-Host "$nuspec requires:"
$nuerr = $true
}
foreach ($err in $errs)
{
$m = Format-Dependency $err.Dependency
Write-Host " $m but projects require $($err.Version)"
}
}
if ($nuerr)
{
Write-Error "Found inconsistent NuGet dependencies"
break
}
}
+60 -107
View File
@@ -1,107 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<id>UmbracoCms.Core</id>
<version>7.0.0</version>
<title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors>
<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>
<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>
<dependency id="log4net" version="[2.0.8,3.0.0)" />
<dependency id="Log4Net.Async" version="[2.0.4,3.0.0)" />
<dependency id="Microsoft.AspNet.Mvc" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.WebApi" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.Owin.Security.Cookies" version="[3.1.0, 4.0.0)" />
<dependency id="Microsoft.Owin.Security.OAuth" version="[3.1.0, 4.0.0)" />
<dependency id="Microsoft.Owin.Host.SystemWeb" version="[3.1.0, 4.0.0)" />
<dependency id="MiniProfiler" version="[2.1.0, 3.0.0)" />
<dependency id="HtmlAgilityPack" version="[1.4.9.5, 2.0.0)" />
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
<dependency id="MySql.Data" version="[6.9.9, 7.0.0)" />
<dependency id="ClientDependency" version="[1.9.7, 2.0.0)" />
<dependency id="ClientDependency-Mvc5" version="[1.8.0.0, 2.0.0)" />
<dependency id="AutoMapper" version="[3.3.1, 4.0.0)" />
<dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
<dependency id="Examine" version="[0.1.89, 1.0.0)" />
<dependency id="ImageProcessor" version="[2.5.6, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[4.8.7, 5.0.0)" />
<dependency id="semver" version="[1.1.2, 3.0.0)" />
<!-- Markdown can not be updated due to: https://github.com/hey-red/markdownsharp/issues/71#issuecomment-233585487 -->
<dependency id="Markdown" version="[1.14.7, 2.0.0)" />
<dependency id="System.Threading.Tasks.Dataflow" version="[4.7.0, 5.0.0)" />
<dependency id="System.ValueTuple" version="[4.4.0, 5.0.0)" />
</dependencies>
</metadata>
<files>
<file src="$BuildTmp$\WebApp\bin\businesslogic.dll" target="lib\net45\businesslogic.dll" />
<file src="$BuildTmp$\WebApp\bin\businesslogic.xml" target="lib\net45\businesslogic.xml" />
<file src="$BuildTmp$\WebApp\bin\cms.dll" target="lib\net45\cms.dll" />
<file src="$BuildTmp$\WebApp\bin\cms.xml" target="lib\net45\cms.xml" />
<file src="$BuildTmp$\WebApp\bin\controls.dll" target="lib\net45\controls.dll" />
<file src="$BuildTmp$\WebApp\bin\controls.xml" target="lib\net45\controls.xml" />
<file src="$BuildTmp$\WebApp\bin\interfaces.dll" target="lib\net45\interfaces.dll" />
<file src="$BuildTmp$\WebApp\bin\interfaces.xml" target="lib\net45\interfaces.xml" />
<file src="$BuildTmp$\WebApp\bin\log4net.dll" target="lib\net45\log4net.dll" />
<file src="$BuildTmp$\WebApp\bin\Microsoft.ApplicationBlocks.Data.dll" target="lib\net45\Microsoft.ApplicationBlocks.Data.dll" />
<file src="$BuildTmp$\WebApp\bin\SQLCE4Umbraco.dll" target="lib\net45\SQLCE4Umbraco.dll" />
<file src="$BuildTmp$\WebApp\bin\SQLCE4Umbraco.xml" target="lib\net45\SQLCE4Umbraco.xml" />
<file src="$BuildTmp$\WebApp\bin\System.Data.SqlServerCe.dll" target="lib\net45\System.Data.SqlServerCe.dll" />
<file src="$BuildTmp$\WebApp\bin\System.Data.SqlServerCe.Entity.dll" target="lib\net45\System.Data.SqlServerCe.Entity.dll" />
<file src="$BuildTmp$\WebApp\bin\TidyNet.dll" target="lib\net45\TidyNet.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Core.dll" target="lib\net45\Umbraco.Core.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Core.xml" target="lib\net45\Umbraco.Core.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.DataLayer.dll" target="lib\net45\umbraco.DataLayer.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.DataLayer.xml" target="lib\net45\umbraco.DataLayer.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.dll" target="lib\net45\umbraco.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.xml" target="lib\net45\umbraco.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.editorControls.dll" target="lib\net45\umbraco.editorControls.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.editorControls.xml" target="lib\net45\umbraco.editorControls.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.MacroEngines.dll" target="lib\net45\umbraco.MacroEngines.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.MacroEngines.xml" target="lib\net45\umbraco.MacroEngines.xml" />
<file src="$BuildTmp$\WebApp\bin\umbraco.providers.dll" target="lib\net45\umbraco.providers.dll" />
<file src="$BuildTmp$\WebApp\bin\umbraco.providers.xml" target="lib\net45\umbraco.providers.xml" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.dll" target="lib\net45\Umbraco.Web.UI.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.xml" target="lib\net45\Umbraco.Web.UI.xml" />
<file src="$BuildTmp$\WebApp\bin\UmbracoExamine.dll" target="lib\net45\UmbracoExamine.dll" />
<file src="$BuildTmp$\WebApp\bin\UmbracoExamine.xml" target="lib\net45\UmbracoExamine.xml" />
<file src="tools\install.core.ps1" target="tools\install.ps1" />
<!-- Added to be able to produce a symbols package -->
<file src="$BuildTmp$\bin\SQLCE4Umbraco.pdb" target="lib" />
<file src="..\..\src\SQLCE4Umbraco\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\SQLCE4Umbraco" />
<file src="$BuildTmp$\bin\businesslogic.pdb" target="lib" />
<file src="..\..\src\umbraco.businesslogic\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.businesslogic" />
<file src="$BuildTmp$\bin\cms.pdb" target="lib" />
<file src="..\..\src\umbraco.cms\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.cms" />
<file src="$BuildTmp$\bin\controls.pdb" target="lib" />
<file src="..\..\src\umbraco.controls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.controls" />
<file src="$BuildTmp$\bin\interfaces.pdb" target="lib" />
<file src="..\..\src\umbraco.interfaces\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.interfaces" />
<file src="$BuildTmp$\bin\Umbraco.Core.pdb" target="lib" />
<file src="..\..\src\Umbraco.Core\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Core" />
<file src="$BuildTmp$\bin\umbraco.DataLayer.pdb" target="lib" />
<file src="..\..\src\umbraco.datalayer\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.datalayer" />
<file src="$BuildTmp$\bin\umbraco.editorControls.pdb" target="lib" />
<file src="..\..\src\umbraco.editorControls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.editorControls" />
<file src="$BuildTmp$\bin\umbraco.MacroEngines.pdb" target="lib" />
<file src="..\..\src\umbraco.MacroEngines\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.MacroEngines" />
<file src="$BuildTmp$\bin\umbraco.providers.pdb" target="lib" />
<file src="..\..\src\umbraco.providers\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.providers" />
<file src="$BuildTmp$\bin\umbraco.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web" />
<file src="$BuildTmp$\bin\Umbraco.Web.UI.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web.UI\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web.UI" />
<file src="$BuildTmp$\bin\UmbracoExamine.pdb" target="lib" />
<file src="..\..\src\UmbracoExamine\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\UmbracoExamine" />
</files>
</package>
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<id>UmbracoCms.Core</id>
<version>8.0.0</version>
<title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<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>
<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>
<!-- libs -->
<file src="$BuildTmp$\WebApp\bin\Umbraco.Core.dll" target="lib\net472\Umbraco.Core.dll" />
<!-- docs -->
<file src="$BuildTmp$\WebApp\bin\Umbraco.Core.xml" target="lib\Umbraco.Core.xml" />
<!-- symbols -->
<file src="$BuildTmp$\bin\Umbraco.Core.pdb" target="lib" />
<file src="$BuildTmp$\..\src\Umbraco.Core\**\*.cs" exclude="$BuildTmp$\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Core" />
</files>
</package>
+66
View File
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<id>UmbracoCms.Web</id>
<version>8.0.0</version>
<title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<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>
<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,1.999999)" />
<dependency id="HtmlAgilityPack" version="[1.8.14,1.999999)" />
<dependency id="ImageProcessor" version="[2.7.0.100,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>
<!-- libs -->
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.dll" target="lib\net472\Umbraco.Web.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.dll" target="lib\net472\Umbraco.Web.UI.dll" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Examine.dll" target="lib\net472\Umbraco.Examine.dll" />
<!-- docs -->
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.xml" target="lib\Umbraco.Web.xml" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Web.UI.xml" target="lib\Umbraco.Web.UI.xml" />
<file src="$BuildTmp$\WebApp\bin\Umbraco.Examine.xml" target="lib\Umbraco.Examine.xml" />
<!-- symbols -->
<file src="$BuildTmp$\bin\Umbraco.Web.pdb" target="lib" />
<file src="$BuildTmp$\..\src\Umbraco.Web\**\*.cs" exclude="$BuildTmp$\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web" />
<file src="$BuildTmp$\bin\Umbraco.Examine.pdb" target="lib" />
<file src="$BuildTmp$\..\src\Umbraco.Examine\**\*.cs" exclude="$BuildTmp$\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Examine" />
</files>
</package>
+68 -54
View File
@@ -1,54 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<id>UmbracoCms</id>
<version>7.0.0</version>
<title>Umbraco Cms</title>
<authors>Umbraco HQ</authors>
<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>
<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.Core" version="[$version$]" />
<dependency id="Newtonsoft.Json" version="[10.0.2, 11.0.0)" />
<dependency id="Umbraco.ModelsBuilder" version="[3.0.10, 4.0.0)" />
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.2.1, 3.0.0)" />
<dependency id="ImageProcessor.Web.Config" version="[2.3.1, 3.0.0)" />
<dependency id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="[2.0.0, 3.0.0)" />
</dependencies>
</metadata>
<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\Web.config" target="UmbracoFiles\Web.config" />
<file src="$BuildTmp$\WebApp\App_Browsers\**" target="UmbracoFiles\App_Browsers" />
<file src="$BuildTmp$\WebApp\bin\amd64\**" target="UmbracoFiles\bin\amd64" />
<file src="$BuildTmp$\WebApp\bin\x86\**" target="UmbracoFiles\bin\x86" />
<file src="$BuildTmp$\WebApp\config\splashes\**" target="UmbracoFiles\Config\splashes" />
<file src="$BuildTmp$\WebApp\config\BackOfficeTours\**" target="Content\Config\BackOfficeTours" />
<file src="$BuildTmp$\WebApp\umbraco\**" target="UmbracoFiles\umbraco" />
<file src="$BuildTmp$\WebApp\umbraco_client\**" target="UmbracoFiles\umbraco_client" />
<file src="$BuildTmp$\WebApp\Media\Web.config" target="Content\Media\Web.config" />
<file src="tools\install.ps1" target="tools\install.ps1" />
<file src="tools\Readme.txt" target="tools\Readme.txt" />
<file src="tools\ReadmeUpgrade.txt" target="tools\ReadmeUpgrade.txt" />
<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" />
<file src="tools\processing.config.install.xdt" target="Content\Config\imageprocessor\processing.config.install.xdt" />
<file src="tools\cache.config.install.xdt" target="Content\Config\imageprocessor\cache.config.install.xdt" />
<file src="build\**" target="build" />
</files>
</package>
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<id>UmbracoCms</id>
<version>8.0.0</version>
<title>Umbraco Cms</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<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>
<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.38]" />
<dependency id="ImageProcessor.Web" version="[4.10.0.100,4.999999)" />
<dependency id="ImageProcessor.Web.Config" version="[2.5.0.100,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\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" />
<!-- these files are copied by install.ps1 -->
<file src="$BuildTmp$\WebApp\Web.config" target="UmbracoFiles\Web.config" />
<file src="$BuildTmp$\WebApp\umbraco\**" target="UmbracoFiles\umbraco" />
<file src="$BuildTmp$\WebApp\config\splashes\**" target="UmbracoFiles\Config\splashes" />
<!-- tools -->
<!-- beware! install.ps1 not supported by PackageReference -->
<file src="tools\install.ps1" target="tools\install.ps1" />
<file src="tools\Readme.txt" target="tools\Readme.txt" />
<file src="tools\ReadmeUpgrade.txt" target="tools\ReadmeUpgrade.txt" />
<!-- 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\ClientDependency.config.install.xdt" target="Content\config\ClientDependency.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?! -->
<!-- UmbracoCms props and targets -->
<file src="build\**" target="build" />
</files>
</package>
-3
View File
@@ -47,9 +47,6 @@
<CustomFilesToInclude Include=".\umbraco\**\*">
<Dir>umbraco</Dir>
</CustomFilesToInclude>
<CustomFilesToInclude Include=".\umbraco_client\**\*">
<Dir>umbraco_client</Dir>
</CustomFilesToInclude>
<CustomFilesToInclude Include=".\Global.asax">
<Dir>.</Dir>
</CustomFilesToInclude>
@@ -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>
+26 -26
View File
@@ -1,26 +1,26 @@
_ _ __ __ ____ _____ _____ ____
| | | | \/ | _ \| __ \ /\ / ____/ __ \
| | | | \ / | |_) | |__) | / \ | | | | | |
| | | | |\/| | _ <| _ / / /\ \| | | | | |
| |__| | | | | |_) | | \ \ / ____ | |___| |__| |
\____/|_| |_|____/|_| \_/_/ \_\_____\____/
----------------------------------------------------
Don't forget to build!
When upgrading your website using NuGet you should answer "No" to the questions to overwrite the Web.config
file (and config files in the config folder).
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use
Publish this won't affect you.
The following items will now be automatically included when creating a deploy package or publishing to the file
system: umbraco, umbraco_client, config\splashes and global.asax.
Please read the release notes on our.umbraco.com:
https://our.umbraco.com/download/releases
- Umbraco
_ _ __ __ ____ _____ _____ ____
| | | | \/ | _ \| __ \ /\ / ____/ __ \
| | | | \ / | |_) | |__) | / \ | | | | | |
| | | | |\/| | _ <| _ / / /\ \| | | | | |
| |__| | | | | |_) | | \ \ / ____ | |___| |__| |
\____/|_| |_|____/|_| \_/_/ \_\_____\____/
----------------------------------------------------
Don't forget to build!
When upgrading your website using NuGet you should answer "No" to the questions to overwrite the Web.config
file (and config files in the config folder).
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use
Publish this won't affect you.
The following items will now be automatically included when creating a deploy package or publishing to the file
system: umbraco, config\splashes and global.asax.
Please read the release notes on our.umbraco.com:
https://our.umbraco.com/download/releases
- Umbraco
+11 -20
View File
@@ -1,39 +1,30 @@
_ _ __ __ ____ _____ _____ ____
| | | | \/ | _ \| __ \ /\ / ____/ __ \
_ _ __ __ ____ _____ _____ ____
| | | | \/ | _ \| __ \ /\ / ____/ __ \
| | | | \ / | |_) | |__) | / \ | | | | | |
| | | | |\/| | _ <| _ / / /\ \| | | | | |
| |__| | | | | |_) | | \ \ / ____ | |___| |__| |
\____/|_| |_|____/|_| \_/_/ \_\_____\____/
\____/|_| |_|____/|_| \_/_/ \_\_____\____/
----------------------------------------------------
*** IMPORTANT NOTICE FOR UPGRADES FROM VERSIONS BELOW 7.7.0 ***
Be sure to read the version specific upgrade information before proceeding:
https://our.umbraco.com/documentation/Getting-Started/Setup/Upgrading/version-specific#version-7-7-0
Depending on the version you are upgrading from, you may need to make some changes to your web.config
and you will need to be aware of the breaking changes listed there to see if these affect your installation.
Don't forget to build!
We've done our best to transform your configuration files but in case something is not quite right: remember we
backed up your files in App_Data\NuGetBackup so you can find the original files before they were transformed.
We've overwritten all the files in the Umbraco and Umbraco_Client folder, these have been backed up in
App_Data\NuGetBackup. We didn't overwrite the UI.xml file nor did we remove any files or folders that you or
a package might have added. Only the existing files were overwritten. If you customized anything then make
We've overwritten all the files in the Umbraco folder, these have been backed up in
App_Data\NuGetBackup. We didn't overwrite the UI.xml file nor did we remove any files or folders that you or
a package might have added. Only the existing files were overwritten. If you customized anything then make
sure to do a compare and merge with the NuGetBackup folder.
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use
Publish this won't affect you.
The following items will now be automatically included when creating a deploy package or publishing to the file
system: umbraco, umbraco_client, config\splashes and global.asax.
The following items will now be automatically included when creating a deploy package or publishing to the file
system: umbraco, config\splashes and global.asax.
Please read the release notes on our.umbraco.com:
http://our.umbraco.com/contribute/releases
- Umbraco
- Umbraco
+161 -396
View File
@@ -1,420 +1,185 @@
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<configSections xdt:Transform="InsertIfMissing" />
<configSections>
<section name="BaseRestExtensions" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<section name="FileSystemProviders" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<section name="ExamineLuceneIndexSets" type="Examine.LuceneEngine.Config.IndexSets, Examine" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="SetAttributes(type,requirePermission)" />
<configSections xdt:Transform="InsertIfMissing" />
<configSections>
<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="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>
<sectionGroup name="applicationSettings" xdt:Locator="Match(name)">
<section name="umbraco.presentation.Properties.Settings" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</sectionGroup>
<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="BaseRestExtensions" type="Umbraco.Core.Configuration.BaseRest.BaseRestSection, 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="HealthChecks" type="Umbraco.Core.Configuration.HealthChecks.HealthChecksSection, Umbraco.Core" requirePermission="false" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</sectionGroup>
</configSections>
<appSettings xdt:Transform="InsertIfMissing" />
<appSettings>
<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" />
</appSettings>
<appSettings xdt:Transform="InsertIfMissing" />
<appSettings>
<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" />
<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>
<umbracoConfiguration xdt:Transform="InsertIfMissing">
<settings configSource="config\umbracoSettings.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
<BaseRestExtensions configSource="config\BaseRestExtensions.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" />
<HealthChecks configSource="config\HealthChecks.config" xdt:Locator="Match(configSource)" xdt:Transform="InsertIfMissing" />
</umbracoConfiguration>
<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)" />
</DbProviderFactories>
</system.data>
<clientDependency xdt:Transform="RemoveAttributes(version)" />
<FileSystemProviders xdt:Transform="Remove" />
<BaseRestExtensions xdt:Transform="Remove" />
<system.web xdt:Transform="InsertIfMissing" />
<system.web>
<siteMap xdt:Transform="Remove" />
<httpRuntime xdt:Transform="InsertIfMissing" />
<httpRuntime maxRequestLength="51200" fcnMode="Single" xdt:Transform="SetAttributes(fcnMode,maxRequestLength)" />
<httpRuntime targetFramework="4.7.2" xdt:Locator="Condition(count(@targetFramework) != 1)" xdt:Transform="SetAttributes(targetFramework)" />
<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>
<membership defaultProvider="DefaultMembershipProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove" />
<roleManager defaultProvider="DefaultRoleProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>
<profile defaultProvider="DefaultProfileProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>>
<sessionState customProvider="DefaultSessionProvider" xdt:Locator="Match(customProvider)" xdt:Transform="Remove"/>
<compilation xdt:Transform="InsertIfMissing" />
<clientDependency xdt:Transform="RemoveAttributes(version)" />
<xhtmlConformance xdt:Transform="Remove" />
<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)" />
<httpModules xdt:Transform="InsertIfMissing" />
<httpModules>
<add name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name=" UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</httpModules>
<membership defaultProvider="DefaultMembershipProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove" />
<roleManager defaultProvider="DefaultRoleProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>
<profile defaultProvider="DefaultProfileProvider" xdt:Locator="Match(defaultProvider)" xdt:Transform="Remove"/>>
<sessionState customProvider="DefaultSessionProvider" xdt:Locator="Match(customProvider)" xdt:Transform="Remove"/>
<compilation xdt:Transform="InsertIfMissing" />
<compilation>
<assemblies xdt:Transform="InsertIfMissing" />
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<add assembly="System.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Collections.Concurrent, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ComponentModel.Annotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ComponentModel.EventBasedAsync, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Contracts, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Debug, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Tools, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Dynamic.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Globalization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.IO, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq.Expressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Linq.Queryable, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.NetworkInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Net.Requests, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Emit, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Emit.ILGeneration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Emit.Lightweight, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Resources.ResourceManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.InteropServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.InteropServices.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Serialization.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Serialization.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Runtime.Serialization.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Security.Principal, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Duplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.NetTcp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.ServiceModel.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Text.Encoding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Text.Encoding.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Text.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Threading, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Threading.Tasks.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Xml.ReaderWriter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Xml.XDocument, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
<add assembly="System.Xml.XmlSerializer, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" xdt:Locator="Match(assembly)" xdt:Transform="InsertIfMissing" />
</assemblies>
</compilation>
<httpHandlers xdt:Transform="InsertIfMissing" />
<httpHandlers>
<add path="GoogleSpellChecker.ashx" xdt:Locator="Match(path)" xdt:Transform="Remove" />
</httpHandlers>
</system.web>
<compilation>
<assemblies>
<remove assembly="System.Web.Http" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.Http" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Collections" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Collections.Concurrent" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ComponentModel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ComponentModel.Annotations" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ComponentModel.EventBasedAsync" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Contracts" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Debug" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Tools" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Diagnostics.Tracing" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Dynamic.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Globalization" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.IO" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq.Expressions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Linq.Queryable" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.NetworkInformation" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Net.Requests" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ObjectModel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Emit" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Emit.ILGeneration" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Emit.Lightweight" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Reflection.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Resources.ResourceManager" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.InteropServices" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.InteropServices.WindowsRuntime" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Numerics" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Serialization.Json" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Serialization.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Runtime.Serialization.Xml" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Security.Principal" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Duplex" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Http" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.NetTcp" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.ServiceModel.Security" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Text.Encoding" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Text.Encoding.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Text.RegularExpressions" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Threading" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Threading.Tasks" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Threading.Tasks.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Xml.ReaderWriter" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Xml.XDocument" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
<remove assembly="System.Xml.XmlSerializer" xdt:Locator="Match(assembly)" xdt:Transform="Remove" />
</assemblies>
</compilation>
<compilation>
<assemblies>
<remove assembly="System.Web.Http" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.Http" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Collections" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Collections.Concurrent" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ComponentModel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ComponentModel.Annotations" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ComponentModel.EventBasedAsync" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Contracts" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Debug" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Tools" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Diagnostics.Tracing" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Dynamic.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Globalization" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.IO" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq.Expressions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Linq.Queryable" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.NetworkInformation" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Net.Requests" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ObjectModel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Emit" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Emit.ILGeneration" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Emit.Lightweight" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Reflection.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Resources.ResourceManager" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.InteropServices" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.InteropServices.WindowsRuntime" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Numerics" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Serialization.Json" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Serialization.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Runtime.Serialization.Xml" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Security.Principal" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Duplex" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Http" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.NetTcp" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Primitives" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.ServiceModel.Security" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Text.Encoding" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Text.Encoding.Extensions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Text.RegularExpressions" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Threading" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Threading.Tasks" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Threading.Tasks.Parallel" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Xml.ReaderWriter" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Xml.XDocument" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
<remove assembly="System.Xml.XmlSerializer" xdt:Locator="Match(assembly)" xdt:Transform="InsertBefore(/configuration/system.web/compilation/assemblies/add)" />
</assemblies>
</compilation>
<system.webServer xdt:Transform="InsertIfMissing" />
<system.webServer>
<modules xdt:Transform="InsertIfMissing" />
<modules runAllManagedModulesForAllRequests="true" xdt:Transform="SetAttributes(runAllManagedModulesForAllRequests)">
<remove name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<remove name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<remove name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<xhtmlConformance xdt:Transform="Remove" />
<add name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<!-- Note, we're removing the one that starts with a space here, don't correct it -->
<!-- This to fix a quirk we for a lot of releases where we added it with the space by default -->
<add name=" UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</modules>
<httpModules xdt:Transform="InsertIfMissing" />
<httpModules>
<add name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name=" UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</httpModules>
<staticContent xdt:Transform="InsertIfMissing" />
<staticContent>
<remove fileExtension=".svg" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<remove fileExtension=".woff" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".woff" mimeType="application/x-font-woff" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<remove fileExtension=".woff2" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".woff2" mimeType="application/x-font-woff2" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<remove fileExtension=".less" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".less" mimeType="text/css" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
</staticContent>
<httpHandlers xdt:Transform="InsertIfMissing" />
<httpHandlers>
<add path="GoogleSpellChecker.ashx" xdt:Locator="Match(path)" xdt:Transform="Remove" />
</httpHandlers>
</system.web>
<handlers>
<remove name="SpellChecker" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="SpellChecker" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</handlers>
<system.webServer xdt:Transform="InsertIfMissing" />
<system.webServer>
<modules xdt:Transform="InsertIfMissing" />
<modules runAllManagedModulesForAllRequests="true" xdt:Transform="SetAttributes(runAllManagedModulesForAllRequests)">
<remove name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<remove name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<remove name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<remove name="WebDAVModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<!-- Inserts it as the first element. Also see http://stackoverflow.com/a/19041487/5018 -->
<remove name="WebDAVModule" xdt:Locator="Match(name)" xdt:Transform="Insert" />
<security xdt:Transform="InsertIfMissing">
<requestFiltering xdt:Transform="InsertIfMissing">
<requestLimits maxAllowedContentLength="52428800" xdt:Transform="InsertIfMissing" />
</requestFiltering>
</security>
<add name="umbracoRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="viewstateMoverModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="umbracoBaseRequestModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<!-- Note, we're removing the one that starts with a space here, don't correct it -->
<!-- This to fix a quirk we for a lot of releases where we added it with the space by default -->
<add name=" UmbracoModule" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="UmbracoModule" type="Umbraco.Web.UmbracoModule,umbraco" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" />
</modules>
</system.webServer>
<staticContent xdt:Transform="InsertIfMissing" />
<staticContent>
<remove fileExtension=".svg" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<remove fileExtension=".woff" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".woff" mimeType="application/x-font-woff" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<remove fileExtension=".woff2" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".woff2" mimeType="application/x-font-woff2" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<remove fileExtension=".less" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
<mimeMap fileExtension=".less" mimeType="text/css" xdt:Locator="Match(fileExtension)" xdt:Transform="InsertIfMissing" />
</staticContent>
<runtime xdt:Transform="InsertIfMissing" />
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xdt:Transform="InsertIfMissing" />
</runtime>
<handlers>
<remove name="SpellChecker" xdt:Locator="Match(name)" xdt:Transform="Remove" />
<add name="SpellChecker" xdt:Locator="Match(name)" xdt:Transform="Remove" />
</handlers>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='HtmlAgilityPack')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='AutoMapper')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Newtonsoft.Json')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Mvc')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.WebPages.Razor')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.OAuth')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.Cookies')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http.Formatting')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.CodeAnalysis.CSharp')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='log4net')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Data.SqlServerCe')" xdt:Transform="Remove" />
</assemblyBinding>
</runtime>
<security xdt:Transform="InsertIfMissing">
<requestFiltering xdt:Transform="InsertIfMissing">
<requestLimits maxAllowedContentLength="52428800" xdt:Transform="InsertIfMissing" />
</requestFiltering>
</security>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.1.0" newVersion="1.2.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.web.webPages.razor xdt:Transform="Remove" />
<location path="umbraco" xdt:Locator="Match(path)" xdt:Transform="InsertIfMissing" />
<location path="umbraco" xdt:Locator="Match(path)">
<system.webServer xdt:Transform="InsertIfMissing">
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
</system.webServer>
</location>
<runtime xdt:Transform="InsertIfMissing" />
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xdt:Transform="InsertIfMissing" />
</runtime>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='HtmlAgilityPack')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='AutoMapper')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Newtonsoft.Json')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Mvc')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.WebPages.Razor')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.OAuth')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.Cookies')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http.Formatting')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.CodeAnalysis.CSharp')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='log4net')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Data.SqlServerCe')" xdt:Transform="Remove" />
</assemblyBinding>
</runtime>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.9.5" newVersion="1.4.9.5" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.3.1.0" newVersion="3.3.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0"/>
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845DCD8080CC91" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.web.webPages.razor xdt:Transform="Remove" />
<location path="umbraco" xdt:Locator="Match(path)" xdt:Transform="InsertIfMissing" />
<location path="umbraco" xdt:Locator="Match(path)">
<system.webServer xdt:Transform="InsertIfMissing">
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
</system.webServer>
</location>
<location path="App_Plugins" xdt:Locator="Match(path)" xdt:Transform="InsertIfMissing" />
<location path="App_Plugins" xdt:Locator="Match(path)">
<system.webServer xdt:Transform="InsertIfMissing">
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
</system.webServer>
</location>
<location path="App_Plugins" xdt:Locator="Match(path)" xdt:Transform="InsertIfMissing" />
<location path="App_Plugins" xdt:Locator="Match(path)">
<system.webServer xdt:Transform="InsertIfMissing">
<urlCompression doStaticCompression="false" doDynamicCompression="false" dynamicCompressionBeforeCache="false" xdt:Transform="SetAttributes(doStaticCompression,doDynamicCompression,dynamicCompressionBeforeCache)" />
</system.webServer>
</location>
</configuration>
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<applications xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<add alias="content" icon="traycontent" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="media" icon="traymedia" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="settings" icon="traysettings" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="developer" icon="traydeveloper" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="users" icon="trayusers" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="member" icon="traymember" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="forms" name="Forms" icon="icon-umb-contour" sortOrder="6" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing" />
<add alias="translation" icon="traytranslation" sortOrder="7" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon,sortOrder)" />
</applications>
<add alias="content" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="media" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="settings" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="developer" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="users" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="member" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon)" />
<add alias="forms" name="Forms" sortOrder="6" xdt:Locator="Match(alias)" xdt:Transform="InsertIfMissing" />
<add alias="translation" sortOrder="7" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes(icon,sortOrder)" />
</applications>
+3 -15
View File
@@ -33,26 +33,15 @@ if ($project) {
robocopy $umbracoBinFolder $umbracoBinBackupPath /e /LOG:$copyLogsPath\UmbracoBinBackup.log
# Delete files Umbraco ships with
if(Test-Path $umbracoBinFolder\businesslogic.dll) { Remove-Item $umbracoBinFolder\businesslogic.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\cms.dll) { Remove-Item $umbracoBinFolder\cms.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\controls.dll) { Remove-Item $umbracoBinFolder\controls.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\interfaces.dll) { Remove-Item $umbracoBinFolder\interfaces.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\log4net.dll) { Remove-Item $umbracoBinFolder\log4net.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll) { Remove-Item $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\SQLCE4Umbraco.dll) { Remove-Item $umbracoBinFolder\SQLCE4Umbraco.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Data.SqlServerCe.dll) { Remove-Item $umbracoBinFolder\System.Data.SqlServerCe.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Data.SqlServerCe.Entity.dll) { Remove-Item $umbracoBinFolder\System.Data.SqlServerCe.Entity.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\TidyNet.dll) { Remove-Item $umbracoBinFolder\TidyNet.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.dll) { Remove-Item $umbracoBinFolder\umbraco.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Web.dll) { Remove-Item $umbracoBinFolder\Umbraco.Web.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Core.dll) { Remove-Item $umbracoBinFolder\Umbraco.Core.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.DataLayer.dll) { Remove-Item $umbracoBinFolder\umbraco.DataLayer.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.editorControls.dll) { Remove-Item $umbracoBinFolder\umbraco.editorControls.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.MacroEngines.dll) { Remove-Item $umbracoBinFolder\umbraco.MacroEngines.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.ModelsBuilder.dll) { Remove-Item $umbracoBinFolder\Umbraco.ModelsBuilder.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.ModelsBuilder.AspNet.dll) { Remove-Item $umbracoBinFolder\Umbraco.ModelsBuilder.AspNet.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\umbraco.providers.dll) { Remove-Item $umbracoBinFolder\umbraco.providers.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Web.UI.dll) { Remove-Item $umbracoBinFolder\Umbraco.Web.UI.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\UmbracoExamine.dll) { Remove-Item $umbracoBinFolder\UmbracoExamine.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Umbraco.Examine.dll) { Remove-Item $umbracoBinFolder\Umbraco.Examine.dll -Force -Confirm:$false }
# Delete files Umbraco depends upon
$amd64Folder = Join-Path $umbracoBinFolder "amd64"
@@ -84,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 }
@@ -102,4 +90,4 @@ if ($project) {
if(Test-Path $umbracoBinFolder\System.Web.WebPages.Deployment.dll) { Remove-Item $umbracoBinFolder\System.Web.WebPages.Deployment.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.WebPages.Razor.dll) { Remove-Item $umbracoBinFolder\System.Web.WebPages.Razor.dll -Force -Confirm:$false }
}
}
}
+117 -162
View File
@@ -1,162 +1,117 @@
param($installPath, $toolsPath, $package, $project)
Write-Host "installPath:" "${installPath}"
Write-Host "toolsPath:" "${toolsPath}"
Write-Host " "
if ($project) {
$dateTime = Get-Date -Format yyyyMMdd-HHmmss
# Create paths and list them
$projectPath = (Get-Item $project.Properties.Item("FullPath").Value).FullName
Write-Host "projectPath:" "${projectPath}"
$backupPath = Join-Path $projectPath "App_Data\NuGetBackup\$dateTime"
Write-Host "backupPath:" "${backupPath}"
$copyLogsPath = Join-Path $backupPath "CopyLogs"
Write-Host "copyLogsPath:" "${copyLogsPath}"
$webConfigSource = Join-Path $projectPath "Web.config"
Write-Host "webConfigSource:" "${webConfigSource}"
$configFolder = Join-Path $projectPath "Config"
Write-Host "configFolder:" "${configFolder}"
# Create backup folder and logs folder if it doesn't exist yet
New-Item -ItemType Directory -Force -Path $backupPath
New-Item -ItemType Directory -Force -Path $copyLogsPath
# Create a backup of original web.config
Copy-Item $webConfigSource $backupPath -Force
# Backup config files folder
if(Test-Path $configFolder) {
$umbracoBackupPath = Join-Path $backupPath "Config"
New-Item -ItemType Directory -Force -Path $umbracoBackupPath
robocopy $configFolder $umbracoBackupPath /e /LOG:$copyLogsPath\ConfigBackup.log
}
# Copy umbraco and umbraco_files from package to project folder
$umbracoFolder = Join-Path $projectPath "Umbraco"
New-Item -ItemType Directory -Force -Path $umbracoFolder
$umbracoFolderSource = Join-Path $installPath "UmbracoFiles\Umbraco"
$umbracoBackupPath = Join-Path $backupPath "Umbraco"
New-Item -ItemType Directory -Force -Path $umbracoBackupPath
robocopy $umbracoFolder $umbracoBackupPath /e /LOG:$copyLogsPath\UmbracoBackup.log
robocopy $umbracoFolderSource $umbracoFolder /is /it /e /xf UI.xml /LOG:$copyLogsPath\UmbracoCopy.log
$umbracoClientFolder = Join-Path $projectPath "Umbraco_Client"
New-Item -ItemType Directory -Force -Path $umbracoClientFolder
$umbracoClientFolderSource = Join-Path $installPath "UmbracoFiles\Umbraco_Client"
$umbracoClientBackupPath = Join-Path $backupPath "Umbraco_Client"
New-Item -ItemType Directory -Force -Path $umbracoClientBackupPath
robocopy $umbracoClientFolder $umbracoClientBackupPath /e /LOG:$copyLogsPath\UmbracoClientBackup.log
robocopy $umbracoClientFolderSource $umbracoClientFolder /is /it /e /LOG:$copyLogsPath\UmbracoClientCopy.log
$copyWebconfig = $true
$destinationWebConfig = Join-Path $projectPath "Web.config"
if(Test-Path $destinationWebConfig)
{
Try
{
[xml]$config = Get-Content $destinationWebConfig
$config.configuration.appSettings.ChildNodes | ForEach-Object {
if($_.key -eq "umbracoConfigurationStatus")
{
# The web.config has an umbraco-specific appSetting in it
# don't overwrite it and let config transforms do their thing
$copyWebconfig = $false
}
}
}
Catch { }
}
if($copyWebconfig -eq $true)
{
$packageWebConfigSource = Join-Path $installPath "UmbracoFiles\Web.config"
Copy-Item $packageWebConfigSource $destinationWebConfig -Force
# Copy files that don't get automatically copied for Website projects
# We do this here, when copyWebconfig is true because we only want to do it for new installs
# If this is an upgrade then the files should already be there
$splashesSource = Join-Path $installPath "UmbracoFiles\Config\splashes\*.*"
$splashesDestination = Join-Path $projectPath "Config\splashes\"
New-Item $splashesDestination -Type directory
Copy-Item $splashesSource $splashesDestination -Force
$sqlCe64Source = Join-Path $installPath "UmbracoFiles\bin\amd64\*"
$sqlCe64Destination = Join-Path $projectPath "bin\amd64\"
Copy-Item $sqlCe64Source $sqlCe64Destination -Force
$sqlCex86Source = Join-Path $installPath "UmbracoFiles\bin\x86\*"
$sqlCex86Destination = Join-Path $projectPath "bin\x86\"
Copy-Item $sqlCex86source $sqlCex86Destination -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
$upgradeViewSource = Join-Path $umbracoFolderSource "Views\install\*"
$upgradeView = Join-Path $umbracoFolder "Views\install\"
Write-Host "Copying2 ${upgradeViewSource} to ${upgradeView}"
Copy-Item $upgradeViewSource $upgradeView -Force
Try
{
# Disable tours for upgrades, presumably Umbraco experience is already available
$umbracoSettingsConfigPath = Join-Path $configFolder "umbracoSettings.config"
$content = (Get-Content $umbracoSettingsConfigPath).Replace('<tours enable="true">','<tours enable="false">')
# Saves with UTF-8 encoding without BOM which makes sure Umbraco can still read it
# Reference: https://stackoverflow.com/a/32951824/5018
[IO.File]::WriteAllLines($umbracoSettingsConfigPath, $content)
}
Catch
{
# 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"
if(Test-Path $installFolder) {
Remove-Item $installFolder -Force -Recurse -Confirm:$false
}
# Open appropriate readme
if($copyWebconfig -eq $true)
{
$DTE.ItemOperations.OpenFile($toolsPath + '\Readme.txt')
}
else
{
$DTE.ItemOperations.OpenFile($toolsPath + '\ReadmeUpgrade.txt')
}
}
param($installPath, $toolsPath, $package, $project)
Write-Host "installPath:" "${installPath}"
Write-Host "toolsPath:" "${toolsPath}"
Write-Host " "
if ($project) {
$dateTime = Get-Date -Format yyyyMMdd-HHmmss
# Create paths and list them
$projectPath = (Get-Item $project.Properties.Item("FullPath").Value).FullName
Write-Host "projectPath:" "${projectPath}"
$backupPath = Join-Path $projectPath "App_Data\NuGetBackup\$dateTime"
Write-Host "backupPath:" "${backupPath}"
$copyLogsPath = Join-Path $backupPath "CopyLogs"
Write-Host "copyLogsPath:" "${copyLogsPath}"
$webConfigSource = Join-Path $projectPath "Web.config"
Write-Host "webConfigSource:" "${webConfigSource}"
$configFolder = Join-Path $projectPath "Config"
Write-Host "configFolder:" "${configFolder}"
# Create backup folder and logs folder if it doesn't exist yet
New-Item -ItemType Directory -Force -Path $backupPath
New-Item -ItemType Directory -Force -Path $copyLogsPath
# Create a backup of original web.config
Copy-Item $webConfigSource $backupPath -Force
# Backup config files folder
if(Test-Path $configFolder) {
$umbracoBackupPath = Join-Path $backupPath "Config"
New-Item -ItemType Directory -Force -Path $umbracoBackupPath
robocopy $configFolder $umbracoBackupPath /e /LOG:$copyLogsPath\ConfigBackup.log
}
# Copy umbraco and umbraco_files from package to project folder
$umbracoFolder = Join-Path $projectPath "Umbraco"
New-Item -ItemType Directory -Force -Path $umbracoFolder
$umbracoFolderSource = Join-Path $installPath "UmbracoFiles\Umbraco"
$umbracoBackupPath = Join-Path $backupPath "Umbraco"
New-Item -ItemType Directory -Force -Path $umbracoBackupPath
robocopy $umbracoFolder $umbracoBackupPath /e /LOG:$copyLogsPath\UmbracoBackup.log
robocopy $umbracoFolderSource $umbracoFolder /is /it /e /xf UI.xml /LOG:$copyLogsPath\UmbracoCopy.log
$copyWebconfig = $true
$destinationWebConfig = Join-Path $projectPath "Web.config"
if(Test-Path $destinationWebConfig)
{
Try
{
[xml]$config = Get-Content $destinationWebConfig
$config.configuration.appSettings.ChildNodes | ForEach-Object {
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
$copyWebconfig = $false
}
}
}
Catch { }
}
if($copyWebconfig -eq $true)
{
$packageWebConfigSource = Join-Path $installPath "UmbracoFiles\Web.config"
Copy-Item $packageWebConfigSource $destinationWebConfig -Force
# Copy files that don't get automatically copied for Website projects
# We do this here, when copyWebconfig is true because we only want to do it for new installs
# If this is an upgrade then the files should already be there
$splashesSource = Join-Path $installPath "UmbracoFiles\Config\splashes\*.*"
$splashesDestination = Join-Path $projectPath "Config\splashes\"
New-Item $splashesDestination -Type directory
Copy-Item $splashesSource $splashesDestination -Force
} else {
# This part only runs for upgrades
$upgradeViewSource = Join-Path $umbracoFolderSource "Views\install\*"
$upgradeView = Join-Path $umbracoFolder "Views\install\"
Write-Host "Copying2 ${upgradeViewSource} to ${upgradeView}"
Copy-Item $upgradeViewSource $upgradeView -Force
Try
{
# Disable tours for upgrades, presumably Umbraco experience is already available
$umbracoSettingsConfigPath = Join-Path $configFolder "umbracoSettings.config"
$content = (Get-Content $umbracoSettingsConfigPath).Replace('<tours enable="true">','<tours enable="false">')
# Saves with UTF-8 encoding without BOM which makes sure Umbraco can still read it
# Reference: https://stackoverflow.com/a/32951824/5018
[IO.File]::WriteAllLines($umbracoSettingsConfigPath, $content)
}
Catch
{
# Not a big problem if this fails, let it go
}
}
$installFolder = Join-Path $projectPath "Install"
if(Test-Path $installFolder) {
Remove-Item $installFolder -Force -Recurse -Confirm:$false
}
# Open appropriate readme
if($copyWebconfig -eq $true)
{
$DTE.ItemOperations.OpenFile($toolsPath + '\Readme.txt')
}
else
{
$DTE.ItemOperations.OpenFile($toolsPath + '\ReadmeUpgrade.txt')
}
}
@@ -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,146 +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"
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"
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"
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"
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"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<add application="settings" alias="stylesheets" title="Stylesheets" type="umbraco.loadStylesheets, umbraco" 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" 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" 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"
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" sortOrder="2"
xdt:Locator="Match(application,alias)"
xdt:Transform="InsertIfMissing" />
<add application="settings" alias="scripts" title="Scripts" type="Umbraco.Web.Trees.ScriptTreeController, umbraco" 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" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6"
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" 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" 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"
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"
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"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="developer" alias="relationTypes" title="Relation Types" type="umbraco.loadRelationTypes, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add initialize="true" sortOrder="5" alias="xslt" application="developer" iconClosed="icon-folder" iconOpen="icon-folder-open" type="Umbraco.Web.Trees.XsltTreeController, umbraco"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add application="developer" alias="partialViewMacros" type="Umbraco.Web.Trees.PartialViewMacrosTree, umbraco"
xdt:Locator="Match(application,alias,type)"
xdt:Transform="Remove()" />
<add application="developer" alias="partialViewMacros" type="Umbraco.Web.Trees.PartialViewMacrosTreeController, umbraco" 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"
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"
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" 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" 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"
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"
xdt:Locator="Match(application,alias)"
xdt:Transform="SetAttributes()" />
<add alias="yourTasks" application="translation"
xdt:Locator="Match(application,alias)"
xdt:Transform="RemoveAttributes(action)" />
</trees>
+92
View File
@@ -0,0 +1,92 @@
# this script should be dot-sourced into the build.ps1 scripts
# right after the parameters declaration
# ie
# . "$PSScriptRoot\build-bootstrap.ps1"
# THIS FILE IS DISTRIBUTED AS PART OF UMBRACO.BUILD
# DO NOT MODIFY IT - ALWAYS USED THE COMMON VERSION
# ################################################################
# BOOTSTRAP
# ################################################################
# reset errors
$error.Clear()
# ensure we have temp folder for downloads
$scriptRoot = "$PSScriptRoot"
$scriptTemp = "$scriptRoot\temp"
if (-not (test-path $scriptTemp)) { mkdir $scriptTemp > $null }
# get NuGet
$cache = 4
$nuget = "$scriptTemp\nuget.exe"
if (-not $local)
{
$source = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
if ((test-path $nuget) -and ((ls $nuget).CreationTime -lt [DateTime]::Now.AddDays(-$cache)))
{
Remove-Item $nuget -force -errorAction SilentlyContinue > $null
}
if (-not (test-path $nuget))
{
Write-Host "Download NuGet..."
Invoke-WebRequest $source -OutFile $nuget
if (-not $?) { throw "Failed to download NuGet." }
}
}
elseif (-not (test-path $nuget))
{
throw "Failed to locate NuGet.exe."
}
# NuGet notes
# As soon as we use -ConfigFile, NuGet uses that file, and only that file, and does not
# merge configuration from system level. See comments in NuGet.Client solution, class
# NuGet.Configuration.Settings, method LoadDefaultSettings.
# For NuGet to merge configurations, it needs to "find" the file in the current directory,
# or above. Which means we cannot really use -ConfigFile but instead have to have Umbraco's
# NuGet.config file at root, and always run NuGet.exe while at root or in a directory below
# root.
$solutionRoot = "$scriptRoot\.."
$testPwd = [System.IO.Path]::GetFullPath($pwd.Path) + "\"
$testRoot = [System.IO.Path]::GetFullPath($solutionRoot) + "\"
if (-not $testPwd.ToLower().StartsWith($testRoot.ToLower()))
{
throw "Cannot run outside of the solution's root."
}
# get the build system
if (-not $local)
{
$params = "-OutputDirectory", $scriptTemp, "-Verbosity", "quiet", "-PreRelease"
&$nuget install Umbraco.Build @params
if (-not $?) { throw "Failed to download Umbraco.Build." }
}
# ensure we have the build system
$ubuildPath = ls "$scriptTemp\Umbraco.Build.*" | sort -property CreationTime -descending | select -first 1
if (-not $ubuildPath)
{
throw "Failed to locate the build system."
}
# boot the build system
# this creates $global:ubuild
return &"$ubuildPath\ps\Boot.ps1"
# at that point the build.ps1 script must boot the build system
# eg
# $ubuild.Boot($ubuildPath.FullName, [System.IO.Path]::GetFullPath("$scriptRoot\.."),
# @{ Local = $local; With7Zip = $false; WithNode = $false },
# @{ continue = $continue })
# if (-not $?) { throw "Failed to boot the build system." }
#
# and it's good practice to report
# eg
# Write-Host "Umbraco.Whatever Build"
# Write-Host "Umbraco.Build v$($ubuild.BuildVersion)"
# eof
+470 -56
View File
@@ -1,67 +1,481 @@
param (
param (
# get, don't execute
[Parameter(Mandatory=$false)]
[string]
$version,
[Alias("g")]
[switch] $get = $false,
# run local, don't download, assume everything is ready
[Parameter(Mandatory=$false)]
[Alias("mo")]
[switch]
$moduleOnly = $false
)
[Alias("l")]
[Alias("loc")]
[switch] $local = $false,
# the script can run either from the solution root,
# or from the ./build directory - anything else fails
if ([System.IO.Path]::GetFileName($pwd) -eq "build")
{
$mpath = [System.IO.Path]::GetDirectoryName($pwd) + "\build\Modules\"
}
else
{
$mpath = "$pwd\build\Modules\"
}
# keep the build directories, don't clear them
[Parameter(Mandatory=$false)]
[Alias("c")]
[Alias("cont")]
[switch] $continue = $false
)
# look for the module and throw if not found
if (-not [System.IO.Directory]::Exists($mpath + "Umbraco.Build"))
{
Write-Error "Could not locate Umbraco build Powershell module."
break
}
# ################################################################
# BOOTSTRAP
# ################################################################
# add the module path (if not already there)
if (-not $env:PSModulePath.Contains($mpath))
{
$env:PSModulePath = "$mpath;$env:PSModulePath"
}
# create and boot the buildsystem
$ubuild = &"$PSScriptRoot\build-bootstrap.ps1"
if (-not $?) { return }
$ubuild.Boot($PSScriptRoot,
@{ Local = $local; },
@{ Continue = $continue })
if ($ubuild.OnError()) { return }
# force-import (or re-import) the module
Write-Host "Import Umbraco build Powershell module"
Import-Module Umbraco.Build -Force -DisableNameChecking
Write-Host "Umbraco Cms Build"
Write-Host "Umbraco.Build v$($ubuild.BuildVersion)"
# module only?
if ($moduleOnly)
{
if (-not [string]::IsNullOrWhiteSpace($version))
# ################################################################
# TASKS
# ################################################################
$ubuild.DefineMethod("SetMoreUmbracoVersion",
{
Write-Host "(module only: ignoring version parameter)"
}
else
param ( $semver )
$release = "" + $semver.Major + "." + $semver.Minor + "." + $semver.Patch
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"
$updater.Update($csproj, $release)
})
$ubuild.DefineMethod("SandboxNode",
{
Write-Host "(module only)"
$global:node_path = $env:path
$nodePath = $this.BuildEnv.NodePath
$gitExe = (Get-Command git).Source
if (-not $gitExe) { $gitExe = (Get-Command git).Path }
$gitPath = [System.IO.Path]::GetDirectoryName($gitExe)
$env:path = "$nodePath;$gitPath"
$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")
})
$ubuild.DefineMethod("RestoreNode",
{
$env:path = $node_path
$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")
})
$ubuild.DefineMethod("CompileBelle",
{
$src = "$($this.SolutionRoot)\src"
$log = "$($this.BuildTemp)\belle.log"
Write-Host "Compile Belle"
Write-Host "Logging to $log"
# get a temp clean node env (will restore)
$this.SandboxNode()
# stupid PS is going to gather all "warnings" in $error
# so we have to take care of it else they'll bubble and kill the build
if ($error.Count -gt 0) { return }
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 "### 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 "### 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 "### 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
# FIXME: should we filter the log to find errors?
#get-content .\build.tmp\belle.log | %{ if ($_ -match "build") { write $_}}
# restore
$this.RestoreNode()
}
# setting node_modules folder to hidden
# used to prevent VS13 from crashing on it while loading the websites project
# also makes sure aspnet compiler does not try to handle rogue files and chokes
# in VSO with Microsoft.VisualC.CppCodeProvider -related errors
# use get-item -force 'cos it might be hidden already
Write-Host "Set hidden attribute on node_modules"
$dir = Get-Item -force "$src\Umbraco.Web.UI.Client\node_modules"
$dir.Attributes = $dir.Attributes -bor ([System.IO.FileAttributes]::Hidden)
})
$ubuild.DefineMethod("CompileUmbraco",
{
$buildConfiguration = "Release"
$src = "$($this.SolutionRoot)\src"
$log = "$($this.BuildTemp)\msbuild.umbraco.log"
if ($this.BuildEnv.VisualStudio -eq $null)
{
throw "Build environment does not provide VisualStudio."
}
Write-Host "Compile Umbraco"
Write-Host "Logging to $log"
# beware of the weird double \\ at the end of paths
# see http://edgylogic.com/blog/powershell-and-external-commands-done-right/
&$this.BuildEnv.VisualStudio.MsBuild "$src\Umbraco.Web.UI\Umbraco.Web.UI.csproj" `
/p:WarningLevel=0 `
/p:Configuration=$buildConfiguration `
/p:Platform=AnyCPU `
/p:UseWPP_CopyWebApplication=True `
/p:PipelineDependsOnBuild=False `
/p:OutDir="$($this.BuildTemp)\bin\\" `
/p:WebProjectOutputDir="$($this.BuildTemp)\WebApp\\" `
/p:Verbosity=minimal `
/t:Clean`;Rebuild `
/tv:"$($this.BuildEnv.VisualStudio.ToolsVersion)" `
/p:UmbracoBuild=True `
> $log
if (-not $?) { throw "Failed to compile Umbraco.Web.UI." }
# /p:UmbracoBuild tells the csproj that we are building from PS, not VS
})
$ubuild.DefineMethod("PrepareTests",
{
Write-Host "Prepare 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"
# data
Write-Host "Copy data files"
if (-not (Test-Path -Path "$($this.BuildTemp)\tests\Packaging" ))
{
Write-Host "Create packaging directory"
mkdir "$($this.BuildTemp)\tests\Packaging" > $null
}
$this.CopyFiles("$($this.SolutionRoot)\src\Umbraco.Tests\Packaging\Packages", "*", "$($this.BuildTemp)\tests\Packaging\Packages")
# required for package install tests
if (-not (Test-Path -Path "$($this.BuildTemp)\tests\bin" ))
{
Write-Host "Create bin directory"
mkdir "$($this.BuildTemp)\tests\bin" > $null
}
})
$ubuild.DefineMethod("CompileTests",
{
$buildConfiguration = "Release"
$log = "$($this.BuildTemp)\msbuild.tests.log"
if ($this.BuildEnv.VisualStudio -eq $null)
{
throw "Build environment does not provide VisualStudio."
}
Write-Host "Compile Tests"
Write-Host "Logging to $log"
# beware of the weird double \\ at the end of paths
# see http://edgylogic.com/blog/powershell-and-external-commands-done-right/
&$this.BuildEnv.VisualStudio.MsBuild "$($this.SolutionRoot)\src\Umbraco.Tests\Umbraco.Tests.csproj" `
/p:WarningLevel=0 `
/p:Configuration=$buildConfiguration `
/p:Platform=AnyCPU `
/p:UseWPP_CopyWebApplication=True `
/p:PipelineDependsOnBuild=False `
/p:OutDir="$($this.BuildTemp)\tests\\" `
/p:Verbosity=minimal `
/t:Build `
/tv:"$($this.BuildEnv.VisualStudio.ToolsVersion)" `
/p:UmbracoBuild=True `
> $log
if (-not $?) { throw "Failed to compile tests." }
# /p:UmbracoBuild tells the csproj that we are building from PS
})
$ubuild.DefineMethod("PreparePackages",
{
Write-Host "Prepare Packages"
$src = "$($this.SolutionRoot)\src"
$tmp = "$($this.BuildTemp)"
$out = "$($this.BuildOutput)"
$buildConfiguration = "Release"
# restore web.config
$this.TempRestoreFile("$src\Umbraco.Web.UI\web.config")
# cleanup build
Write-Host "Clean build"
$this.RemoveFile("$tmp\bin\*.dll.config")
$this.RemoveFile("$tmp\WebApp\bin\*.dll.config")
# cleanup presentation
Write-Host "Cleanup presentation"
$this.RemoveDirectory("$tmp\WebApp\umbraco.presentation")
# create directories
Write-Host "Create directories"
mkdir "$tmp\Configs" > $null
mkdir "$tmp\Configs\Lang" > $null
mkdir "$tmp\WebApp\App_Data" > $null
#mkdir "$tmp\WebApp\Media" > $null
#mkdir "$tmp\WebApp\Views" > $null
# copy various files
Write-Host "Copy xml documentation"
Copy-Item -force "$tmp\bin\*.xml" "$tmp\WebApp\bin"
Write-Host "Copy transformed configs and langs"
# note: exclude imageprocessor/*.config as imageprocessor pkg installs them
$this.CopyFiles("$tmp\WebApp\config", "*.config", "$tmp\Configs", `
{ -not $_.RelativeName.StartsWith("imageprocessor") })
$this.CopyFiles("$tmp\WebApp\config", "*.js", "$tmp\Configs")
$this.CopyFiles("$tmp\WebApp\config\lang", "*.xml", "$tmp\Configs\Lang")
$this.CopyFile("$tmp\WebApp\web.config", "$tmp\Configs\web.config.transform")
Write-Host "Copy transformed web.config"
$this.CopyFile("$src\Umbraco.Web.UI\web.$buildConfiguration.Config.transformed", "$tmp\WebApp\web.config")
# offset the modified timestamps on all umbraco dlls, as WebResources
# break if date is in the future, which, due to timezone offsets can happen.
Write-Host "Offset dlls timestamps"
Get-ChildItem -r "$tmp\*.dll" | ForEach-Object {
$_.CreationTime = $_.CreationTime.AddHours(-11)
$_.LastWriteTime = $_.LastWriteTime.AddHours(-11)
}
# copy libs
Write-Host "Copy SqlCE libraries"
$nugetPackages = $env:NUGET_PACKAGES
if (-not $nugetPackages)
{
$nugetPackages = [System.Environment]::ExpandEnvironmentVariables("%userprofile%\.nuget\packages")
}
$this.CopyFiles("$nugetPackages\umbraco.sqlserverce\4.0.0.1\runtimes\win-x86\native", "*.*", "$tmp\bin\x86")
$this.CopyFiles("$nugetPackages\umbraco.sqlserverce\4.0.0.1\runtimes\win-x64\native", "*.*", "$tmp\bin\amd64")
$this.CopyFiles("$nugetPackages\umbraco.sqlserverce\4.0.0.1\runtimes\win-x86\native", "*.*", "$tmp\WebApp\bin\x86")
$this.CopyFiles("$nugetPackages\umbraco.sqlserverce\4.0.0.1\runtimes\win-x64\native", "*.*", "$tmp\WebApp\bin\amd64")
# copy Belle
Write-Host "Copy Belle"
$this.CopyFiles("$src\Umbraco.Web.UI\umbraco\assets", "*", "$tmp\WebApp\umbraco\assets")
$this.CopyFiles("$src\Umbraco.Web.UI\umbraco\js", "*", "$tmp\WebApp\umbraco\js")
$this.CopyFiles("$src\Umbraco.Web.UI\umbraco\lib", "*", "$tmp\WebApp\umbraco\lib")
$this.CopyFiles("$src\Umbraco.Web.UI\umbraco\views", "*", "$tmp\WebApp\umbraco\views")
})
$ubuild.DefineMethod("PackageZip",
{
Write-Host "Create Zip packages"
$src = "$($this.SolutionRoot)\src"
$tmp = $this.BuildTemp
$out = $this.BuildOutput
Write-Host "Zip all binaries"
&$this.BuildEnv.Zip a -r "$out\UmbracoCms.AllBinaries.$($this.Version.Semver).zip" `
"$tmp\bin\*" `
"-x!dotless.Core.*" `
> $null
if (-not $?) { throw "Failed to zip UmbracoCms.AllBinaries." }
Write-Host "Zip cms"
&$this.BuildEnv.Zip a -r "$out\UmbracoCms.$($this.Version.Semver).zip" `
"$tmp\WebApp\*" `
"-x!dotless.Core.*" "-x!Content_Types.xml" "-x!*.pdb" `
> $null
if (-not $?) { throw "Failed to zip UmbracoCms." }
})
$ubuild.DefineMethod("PrepareBuild",
{
$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")
Write-host "Set environment"
$env:UMBRACO_VERSION=$this.Version.Semver.ToString()
$env:UMBRACO_RELEASE=$this.Version.Release
$env:UMBRACO_COMMENT=$this.Version.Comment
$env:UMBRACO_BUILD=$this.Version.Build
if ($args -and $args[0] -eq "vso")
{
Write-host "Set VSO environment"
# set environment variable for VSO
# https://github.com/Microsoft/vsts-tasks/issues/375
# https://github.com/Microsoft/vsts-tasks/blob/master/docs/authoring/commands.md
Write-Host ("##vso[task.setvariable variable=UMBRACO_VERSION;]$($this.Version.Semver.ToString())")
Write-Host ("##vso[task.setvariable variable=UMBRACO_RELEASE;]$($this.Version.Release)")
Write-Host ("##vso[task.setvariable variable=UMBRACO_COMMENT;]$($this.Version.Comment)")
Write-Host ("##vso[task.setvariable variable=UMBRACO_BUILD;]$($this.Version.Build)")
Write-Host ("##vso[task.setvariable variable=UMBRACO_TMP;]$($this.SolutionRoot)\build.tmp")
}
})
$ubuild.DefineMethod("PrepareNuGet",
{
Write-Host "Prepare NuGet"
# add Web.config transform files to the NuGet package
Write-Host "Add web.config transforms to NuGet package"
mv "$($this.BuildTemp)\WebApp\Views\Web.config" "$($this.BuildTemp)\WebApp\Views\Web.config.transform"
})
$ubuild.DefineMethod("RestoreNuGet",
{
Write-Host "Restore NuGet"
Write-Host "Logging to $($this.BuildTemp)\nuget.restore.log"
&$this.BuildEnv.NuGet restore "$($this.SolutionRoot)\src\Umbraco.sln" > "$($this.BuildTemp)\nuget.restore.log"
if (-not $?) { throw "Failed to restore NuGet packages." }
})
$ubuild.DefineMethod("PackageNuGet",
{
$nuspecs = "$($this.SolutionRoot)\build\NuSpecs"
Write-Host "Create NuGet packages"
&$this.BuildEnv.NuGet Pack "$nuspecs\UmbracoCms.Core.nuspec" `
-Properties BuildTmp="$($this.BuildTemp)" `
-Version "$($this.Version.Semver.ToString())" `
-Symbols -Verbosity detailed -outputDirectory "$($this.BuildOutput)" > "$($this.BuildTemp)\nupack.cmscore.log"
if (-not $?) { throw "Failed to pack NuGet UmbracoCms.Core." }
&$this.BuildEnv.NuGet Pack "$nuspecs\UmbracoCms.Web.nuspec" `
-Properties BuildTmp="$($this.BuildTemp)" `
-Version "$($this.Version.Semver.ToString())" `
-Symbols -Verbosity detailed -outputDirectory "$($this.BuildOutput)" > "$($this.BuildTemp)\nupack.cmsweb.log"
if (-not $?) { throw "Failed to pack NuGet UmbracoCms.Web." }
&$this.BuildEnv.NuGet Pack "$nuspecs\UmbracoCms.nuspec" `
-Properties BuildTmp="$($this.BuildTemp)" `
-Version "$($this.Version.Semver.ToString())" `
-Verbosity detailed -outputDirectory "$($this.BuildOutput)" > "$($this.BuildTemp)\nupack.cms.log"
if (-not $?) { throw "Failed to pack NuGet UmbracoCms." }
# run hook
if ($this.HasMethod("PostPackageNuGet"))
{
Write-Host "Run PostPackageNuGet hook"
$this.PostPackageNuGet();
if (-not $?) { throw "Failed to run hook." }
}
})
$ubuild.DefineMethod("VerifyNuGet",
{
$this.VerifyNuGetConsistency(
("UmbracoCms", "UmbracoCms.Core", "UmbracoCms.Web"),
("Umbraco.Core", "Umbraco.Web", "Umbraco.Web.UI", "Umbraco.Examine"))
if ($this.OnError()) { return }
})
$ubuild.DefineMethod("PrepareAzureGallery",
{
Write-Host "Prepare Azure Gallery"
$this.CopyFile("$($this.SolutionRoot)\build\Azure\azuregalleryrelease.ps1", $this.BuildOutput)
})
$ubuild.DefineMethod("Build",
{
$error.Clear()
$this.PrepareBuild()
if ($this.OnError()) { return }
$this.RestoreNuGet()
if ($this.OnError()) { return }
$this.CompileBelle()
if ($this.OnError()) { return }
$this.CompileUmbraco()
if ($this.OnError()) { return }
$this.PrepareTests()
if ($this.OnError()) { return }
$this.CompileTests()
if ($this.OnError()) { return }
# not running tests
$this.PreparePackages()
if ($this.OnError()) { return }
$this.PackageZip()
if ($this.OnError()) { return }
$this.VerifyNuGet()
if ($this.OnError()) { return }
$this.PrepareNuGet()
if ($this.OnError()) { return }
$this.PackageNuGet()
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
# ################################################################
# configure
$ubuild.ReleaseBranches = @( "master" )
# run
if (-not $get)
{
$ubuild.Build()
if ($ubuild.OnError()) { return }
}
break
}
# get build environment
Write-Host "Setup Umbraco build Environment"
$uenv = Get-UmbracoBuildEnv
# set the version if any
if (-not [string]::IsNullOrWhiteSpace($version))
{
Write-Host "Set Umbraco version to $version"
Set-UmbracoVersion $version
}
# full umbraco build
Write-Host "Build Umbraco"
Build-Umbraco
if ($get) { return $ubuild }
-18
View File
@@ -1,18 +0,0 @@
# Usage: powershell .\setversion.ps1 7.6.8
# Or: powershell .\setversion 7.6.8-beta001
param (
[Parameter(Mandatory=$true)]
[string]
$version
)
# report
Write-Host "Setting Umbraco version to $version"
# import Umbraco Build PowerShell module - $pwd is ./build
$env:PSModulePath = "$pwd\Modules\;$env:PSModulePath"
Import-Module Umbraco.Build -Force -DisableNameChecking
# run commands
$version = Set-UmbracoVersion -Version $version
-7
View File
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
<add key="umbracocore" value="https://www.myget.org/F/umbracocore/api/v3/index.json" />
</packageSources>
</configuration>
@@ -1,21 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SqlCE4Umbraco")]
[assembly: AssemblyDescription("Umbraco specific Sql Ce Provider")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Umbraco CMS")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("04436b0a-1dc6-4ee1-9d96-4c04f1a9f429")]
[assembly: InternalsVisibleTo("Umbraco.Tests")]
-101
View File
@@ -1,101 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{5BA5425F-27A7-4677-865E-82246498AA2E}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SQLCE4Umbraco</RootNamespace>
<AssemblyName>SQLCE4Umbraco</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<DocumentationFile>bin\Release\SQLCE4Umbraco.XML</DocumentationFile>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\SqlServerCE.4.0.0.1\lib\System.Data.SqlServerCe.Entity.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\SolutionInfo.cs">
<Link>Properties\SolutionInfo.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SqlCeApplicationBlock.cs" />
<Compile Include="SqlCeContextGuardian.cs" />
<Compile Include="SqlCEDataReader.cs" />
<Compile Include="SqlCEHelper.cs" />
<Compile Include="SqlCEInstaller.cs" />
<Compile Include="SqlCEParameter.cs" />
<Compile Include="SqlCeProviderException.cs" />
<Compile Include="SqlCETableUtility.cs" />
<Compile Include="SqlCEUtility.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\umbraco.datalayer\umbraco.datalayer.csproj">
<Project>{C7CB79F0-1C97-4B33-BFA7-00731B579AE2}</Project>
<Name>umbraco.datalayer</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
@@ -1,2 +0,0 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String></wpf:ResourceDictionary>
-44
View File
@@ -1,44 +0,0 @@
/************************************************************************************
*
* Umbraco Data Layer
* MIT Licensed work
* ©2008 Ruben Verborgh
*
***********************************************************************************/
using System.Data.SqlServerCe;
using umbraco.DataLayer;
namespace SqlCE4Umbraco
{
/// <summary>
/// Class that adapts a SqlDataReader.SqlDataReader to a RecordsReaderAdapter.
/// </summary>
public class SqlCeDataReaderHelper : RecordsReaderAdapter<SqlCeDataReader>
{
#region Public Constructors
/// <summary>
/// Initializes a new instance of the <see cref="SqlServerDataReader"/> class.
/// </summary>
/// <param name="dataReader">The data reader.</param>
public SqlCeDataReaderHelper(System.Data.SqlServerCe.SqlCeDataReader dataReader) : base(dataReader) { }
#endregion
#region RecordsReaderAdapter Members
/// <summary>
/// Gets a value indicating whether this instance has records.
/// </summary>
/// <value>
/// <c>true</c> if this instance has records; otherwise, <c>false</c>.
/// </value>
public override bool HasRecords
{
get { return DataReader.HasRows; }
}
#endregion
}
}
-253
View File
@@ -1,253 +0,0 @@
/************************************************************************************
*
* Umbraco Data Layer
* MIT Licensed work
* ©2008 Ruben Verborgh
*
***********************************************************************************/
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlServerCe;
using System.Linq;
using System.Xml;
using System.Diagnostics;
using umbraco.DataLayer;
using umbraco.DataLayer.SqlHelpers.SqlServer;
namespace SqlCE4Umbraco
{
/// <summary>
/// Sql Helper for an SQL Server database.
/// </summary>
public class SqlCEHelper : SqlHelper<SqlCeParameter>
{
/// <summary>
/// Initializes a new instance of the <see cref="SqlCEHelper"/> class.
/// </summary>
/// <param name="connectionString">The connection string.</param>
public SqlCEHelper(string connectionString) : base(connectionString)
{
m_Utility = new SqlCEUtility(this);
}
/// <summary>
/// Checks if the actual database exists, if it doesn't then it will create it
/// </summary>
internal void CreateEmptyDatabase()
{
var localConnection = new SqlCeConnection(ConnectionString);
if (!System.IO.File.Exists(ReplaceDataDirectory(localConnection.Database)))
{
using (var sqlCeEngine = new SqlCeEngine(ConnectionString))
{
sqlCeEngine.CreateDatabase();
}
}
}
/// <summary>
/// Most likely only will be used for unit tests but will remove all tables from the database
/// </summary>
internal void ClearDatabase()
{
// drop constraints before tables to avoid exceptions
// looping on try/catching exceptions was not really nice
// http://stackoverflow.com/questions/536350/drop-all-the-tables-stored-procedures-triggers-constriants-and-all-the-depend
var localConnection = new SqlCeConnection(ConnectionString);
if (System.IO.File.Exists(ReplaceDataDirectory(localConnection.Database)))
{
List<string> tables;
// drop foreign keys
// SQL may need "where constraint_catalog=DB_NAME() and ..."
tables = new List<string>();
using (var reader = ExecuteReader("select table_name from information_schema.table_constraints where constraint_type = 'FOREIGN KEY' order by table_name"))
{
while (reader.Read()) tables.Add(reader.GetString("table_name").Trim());
}
foreach (var table in tables)
{
var constraints = new List<string>();
using (var reader = ExecuteReader("select constraint_name from information_schema.table_constraints where constraint_type = 'FOREIGN KEY' and table_name = '" + table + "' order by constraint_name"))
{
while (reader.Read()) constraints.Add(reader.GetString("constraint_name").Trim());
}
foreach (var constraint in constraints)
{
// SQL may need "[dbo].[table]"
ExecuteNonQuery("alter table [" + table + "] drop constraint [" + constraint + "]");
}
}
// drop primary keys
// SQL may need "where constraint_catalog=DB_NAME() and ..."
tables = new List<string>();
using (var reader = ExecuteReader("select table_name from information_schema.table_constraints where constraint_type = 'PRIMARY KEY' order by table_name"))
{
while (reader.Read()) tables.Add(reader.GetString("table_name").Trim());
}
foreach (var table in tables)
{
var constraints = new List<string>();
using (var reader = ExecuteReader("select constraint_name from information_schema.table_constraints where constraint_type = 'PRIMARY KEY' and table_name = '" + table + "' order by constraint_name"))
{
while (reader.Read()) constraints.Add(reader.GetString("constraint_name").Trim());
}
foreach (var constraint in constraints)
{
// SQL may need "[dbo].[table]"
ExecuteNonQuery("alter table [" + table + "] drop constraint [" + constraint + "]");
}
}
// drop tables
tables = new List<string>();
using (var reader = ExecuteReader("select table_name from information_schema.tables where table_type <> 'VIEW' order by table_name"))
{
while (reader.Read()) tables.Add(reader.GetString("table_name").Trim());
}
foreach (var table in tables)
{
ExecuteNonQuery("drop table [" + table + "]");
}
}
}
/// <summary>
/// Drops all foreign keys on a table.
/// </summary>
/// <param name="table">The name of the table.</param>
/// <remarks>To be used in unit tests.</remarks>
internal void DropForeignKeys(string table)
{
var constraints = new List<string>();
using (var reader = ExecuteReader("select constraint_name from information_schema.table_constraints where constraint_type = 'FOREIGN KEY' and table_name = '" + table + "' order by constraint_name"))
{
while (reader.Read()) constraints.Add(reader.GetString("constraint_name").Trim());
}
foreach (var constraint in constraints)
{
// SQL may need "[dbo].[table]"
ExecuteNonQuery("alter table [" + table + "] drop constraint [" + constraint + "]");
}
}
/// <summary>
/// Replaces the data directory with a local path.
/// </summary>
/// <param name="path">The path.</param>
/// <returns>A local path with the resolved 'DataDirectory' mapping.</returns>
private string ReplaceDataDirectory(string path)
{
if (!string.IsNullOrWhiteSpace(path) && path.Contains("|DataDirectory|"))
{
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory") as string;
if (!string.IsNullOrEmpty(dataDirectory))
{
path = path.Contains(@"|\")
? path.Replace("|DataDirectory|", dataDirectory)
: path.Replace("|DataDirectory|", dataDirectory + System.IO.Path.DirectorySeparatorChar);
}
}
return path;
}
/// <summary>
/// Creates a new parameter for use with this specific implementation of ISqlHelper.
/// </summary>
/// <param name="parameterName">Name of the parameter.</param>
/// <param name="value">Value of the parameter.</param>
/// <returns>A new parameter of the correct type.</returns>
/// <remarks>Abstract factory pattern</remarks>
public override IParameter CreateParameter(string parameterName, object value)
{
return new SqlCEParameter(parameterName, value);
}
/// <summary>
/// Executes a command that returns a single value.
/// </summary>
/// <param name="commandText">The command text.</param>
/// <param name="parameters">The parameters.</param>
/// <returns>The return value of the command.</returns>
protected override object ExecuteScalar(string commandText, SqlCeParameter[] parameters)
{
#if DEBUG && DebugDataLayer
// Log Query Execution
Trace.TraceInformation(GetType().Name + " SQL ExecuteScalar: " + commandText);
#endif
using (var cc = UseCurrentConnection)
{
return SqlCeApplicationBlock.ExecuteScalar(
(SqlCeConnection) cc.Connection, (SqlCeTransaction) cc.Transaction,
CommandType.Text, commandText, parameters);
}
}
/// <summary>
/// Executes a command and returns the number of rows affected.
/// </summary>
/// <param name="commandText">The command text.</param>
/// <param name="parameters">The parameters.</param>
/// <returns>
/// The number of rows affected by the command.
/// </returns>
protected override int ExecuteNonQuery(string commandText, SqlCeParameter[] parameters)
{
#if DEBUG && DebugDataLayer
// Log Query Execution
Trace.TraceInformation(GetType().Name + " SQL ExecuteNonQuery: " + commandText);
#endif
using (var cc = UseCurrentConnection)
{
return SqlCeApplicationBlock.ExecuteNonQuery(
(SqlCeConnection) cc.Connection, (SqlCeTransaction) cc.Transaction,
CommandType.Text, commandText, parameters);
}
}
/// <summary>
/// Executes a command and returns a records reader containing the results.
/// </summary>
/// <param name="commandText">The command text.</param>
/// <param name="parameters">The parameters.</param>
/// <returns>
/// A data reader containing the results of the command.
/// </returns>
protected override IRecordsReader ExecuteReader(string commandText, SqlCeParameter[] parameters)
{
#if DEBUG && DebugDataLayer
// Log Query Execution
Trace.TraceInformation(GetType().Name + " SQL ExecuteReader: " + commandText);
#endif
using (var cc = UseCurrentConnection)
{
return new SqlCeDataReaderHelper(SqlCeApplicationBlock.ExecuteReader(
(SqlCeConnection) cc.Connection, (SqlCeTransaction) cc.Transaction,
CommandType.Text, commandText, parameters));
}
}
internal IRecordsReader ExecuteReader(string commandText)
{
return ExecuteReader(commandText, new SqlCEParameter(string.Empty, string.Empty));
}
internal int ExecuteNonQuery(string commandText)
{
return ExecuteNonQuery(commandText, new SqlCEParameter(string.Empty, string.Empty));
}
}
}
-141
View File
@@ -1,141 +0,0 @@
/************************************************************************************
*
* Umbraco Data Layer
* MIT Licensed work
* ©2008 Ruben Verborgh
*
***********************************************************************************/
using System;
using System.Resources;
using SQLCE4Umbraco;
using umbraco.DataLayer.Utility.Installer;
using System.Diagnostics;
namespace SqlCE4Umbraco
{
/// <summary>
/// Database installer for an SQL Server data source.
/// </summary>
[Obsolete("The legacy installers are no longer used and will be removed from the codebase in the future")]
public class SqlCEInstaller : DefaultInstallerUtility<SqlCEHelper>
{
#region Private Constants
/// <summary>The latest database version this installer supports.</summary>
private const DatabaseVersion LatestVersionSupported = DatabaseVersion.Version4_8;
/// <summary>The specifications to determine the database version.</summary>
private static readonly VersionSpecs[] m_VersionSpecs = new VersionSpecs[] {
new VersionSpecs("SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS LEFT OUTER JOIN umbracoApp ON appAlias = appAlias WHERE CONSTRAINT_NAME = 'FK_umbracoUser2app_umbracoApp'", 0, DatabaseVersion.Version4_8),
new VersionSpecs("SELECT id FROM umbracoNode WHERE id = -21", 1, DatabaseVersion.Version4_1),
new VersionSpecs("SELECT action FROM umbracoAppTree",DatabaseVersion.Version4),
new VersionSpecs("SELECT description FROM cmsContentType",DatabaseVersion.Version3),
new VersionSpecs("SELECT id FROM sysobjects",DatabaseVersion.None) };
#endregion
#region Public Properties
/// <summary>
/// This ensures that the database exists, then runs the base method
/// </summary>
public override bool CanConnect
{
get
{
using (var sqlHelper = SqlHelper)
sqlHelper.CreateEmptyDatabase();
return base.CanConnect;
}
}
/// <summary>
/// Gets a value indicating whether the installer can upgrade the data source.
/// </summary>
/// <value>
/// <c>true</c> if the installer can upgrade the data source; otherwise, <c>false</c>.
/// </value>
/// <remarks>Empty data sources can't be upgraded, just installed.</remarks>
public override bool CanUpgrade
{
get
{
return CurrentVersion == DatabaseVersion.Version4_1;
}
}
#endregion
#region Protected Properties
/// <summary>
/// Gets the version specification for evaluation by DetermineCurrentVersion.
/// Only first matching specification is taken into account.
/// </summary>
/// <value>The version specifications.</value>
protected override VersionSpecs[] VersionSpecs
{
get { return m_VersionSpecs; }
}
#endregion
#region Public Constructors
/// <summary>
/// Initializes a new instance of the <see cref="SqlCEInstaller"/> class.
/// </summary>
/// <param name="sqlHelper">The SQL helper.</param>
public SqlCEInstaller(SqlCEHelper sqlHelper) : base(sqlHelper, LatestVersionSupported)
{ }
#endregion
#region DefaultInstaller Members
/// <summary>
/// Returns the sql to do a full install
/// </summary>
protected override string FullInstallSql
{
get { return string.Empty; }
}
/// <summary>
/// Returns the sql to do an upgrade
/// </summary>
protected override string UpgradeSql
{
get { return string.Empty; }
}
// We need to override this as the default way of detection a db connection checks for systables that doesn't exist
// in a CE db
protected override DatabaseVersion DetermineCurrentVersion()
{
DatabaseVersion version = base.DetermineCurrentVersion();
if (version != DatabaseVersion.Unavailable)
{
return version;
}
// verify connection
try
{
using (var sqlHelper = SqlHelper)
if (SqlCeApplicationBlock.VerifyConnection(sqlHelper.ConnectionString))
return DatabaseVersion.None;
}
catch (Exception e)
{
Trace.WriteLine(e.ToString());
}
return DatabaseVersion.Unavailable;
}
#endregion
}
}
-34
View File
@@ -1,34 +0,0 @@
/************************************************************************************
*
* Umbraco Data Layer
* MIT Licensed work
* ©2008 Ruben Verborgh
*
***********************************************************************************/
using System;
using System.Data.SqlServerCe;
using System.Data.SqlTypes;
using umbraco.DataLayer;
namespace SqlCE4Umbraco
{
/// <summary>
/// Parameter class for the SqlCEHelper.
/// </summary>
public class SqlCEParameter : SqlParameterAdapter<SqlCeParameter>
{
#region Public Constructors
/// <summary>
/// Initializes a new instance of the <see cref="SqlCEParameter"/> class.
/// </summary>
/// <param name="parameterName">Name of the parameter.</param>
/// <param name="value">Value of the parameter.</param>
public SqlCEParameter(string parameterName, object value)
: base(new SqlCeParameter(parameterName, value))
{ }
#endregion
}
}
-250
View File
@@ -1,250 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using umbraco.DataLayer.Utility.Table;
using umbraco.DataLayer;
using umbraco;
namespace SqlCE4Umbraco
{
/// <summary>
/// SQL Server implementation of <see cref="DefaultTableUtility&lt;S&gt;"/>.
/// </summary>
[Obsolete("The legacy installers are no longer used and will be removed from the codebase in the future")]
public class SqlCETableUtility : DefaultTableUtility<SqlCEHelper>
{
/// <summary>
/// Initializes a new instance of the <see cref="SqlCETableUtility"/> class.
/// </summary>
/// <param name="sqlHelper">The SQL helper.</param>
public SqlCETableUtility(SqlCEHelper sqlHelper)
: base(sqlHelper)
{ }
#region DefaultTableUtility<SqlCEHelper> members
/// <summary>
/// Gets the table with the specified name.
/// </summary>
/// <param name="name">The name.</param>
/// <returns>The table, or <c>null</c> if no table with that name exists.</returns>
public override ITable GetTable(string name)
{
if (name == null)
throw new ArgumentNullException("name");
ITable table = null;
// get name in correct casing
using (var sqlHelper = SqlHelper)
name = sqlHelper.ExecuteScalar<string>("SELECT name FROM sys.tables WHERE name=@name",
sqlHelper.CreateParameter("name", name));
if (name != null)
{
table = new DefaultTable(name);
using (var sqlHelper = SqlHelper)
using (IRecordsReader reader = sqlHelper.ExecuteReader(
@"SELECT c.name AS Name, st.name AS DataType, c.max_length, c.is_nullable, c.is_identity
FROM sys.tables AS t
JOIN sys.columns AS c ON t.object_id = c.object_id
JOIN sys.schemas AS s ON s.schema_id = t.schema_id
JOIN sys.types AS ty ON ty.user_type_id = c.user_type_id
JOIN sys.types st ON ty.system_type_id = st.user_type_id
WHERE t.name = @name
ORDER BY c.column_id", sqlHelper.CreateParameter("name", name)))
{
while (reader.Read())
{
table.AddField(table.CreateField(reader.GetString("Name"), GetType(reader)));
}
}
}
return table;
}
/// <summary>
/// Saves or updates the table.
/// </summary>
/// <param name="table">The table to be saved.</param>
public override void SaveTable(ITable table)
{
if (table == null)
throw new ArgumentNullException("table");
ITable oldTable = GetTable(table.Name);
// create the table if it didn't exist, update fields otherwise
if (oldTable == null)
{
CreateTable(table);
}
else
{
foreach (IField field in table)
{
// create the field if it did't exist in the old table
if (oldTable.FindField(field.Name)==null)
{
CreateColumn(table, field);
}
}
}
}
#endregion
#region Protected Helper Methods
/// <summary>
/// Creates the table in the data source.
/// </summary>
/// <param name="table">The table.</param>
protected virtual void CreateTable(ITable table)
{
Debug.Assert(table != null);
// create enumerator and check for first field
IEnumerator<IField> fieldEnumerator = table.GetEnumerator();
bool hasNext = fieldEnumerator.MoveNext();
if(!hasNext)
throw new ArgumentException("The table must contain at least one field.");
// create query
StringBuilder createTableQuery = new StringBuilder();
using (var sqlHelper = SqlHelper)
createTableQuery.AppendFormat("CREATE TABLE [{0}] (", sqlHelper.EscapeString(table.Name));
// add fields
while (hasNext)
{
// add field name and type
IField field = fieldEnumerator.Current;
createTableQuery.Append('[').Append(field.Name).Append(']');
createTableQuery.Append(' ').Append(GetDatabaseType(field));
// append comma if a following field exists
hasNext = fieldEnumerator.MoveNext();
if (hasNext)
{
createTableQuery.Append(',');
}
}
// close CREATE TABLE x (...) bracket
createTableQuery.Append(')');
// execute query
try
{
using (var sqlHelper = SqlHelper)
sqlHelper.ExecuteNonQuery(createTableQuery.ToString());
}
catch (Exception executeException)
{
throw new UmbracoException(String.Format("Could not create table '{0}'.", table), executeException);
}
}
/// <summary>
/// Creates a new column in the table.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="field">The field used to create the column.</param>
protected virtual void CreateColumn(ITable table, IField field)
{
Debug.Assert(table != null && field != null);
StringBuilder addColumnQuery = new StringBuilder();
using (var sqlHelper = SqlHelper)
addColumnQuery.AppendFormat("ALTER TABLE [{0}] ADD [{1}] {2}",
sqlHelper.EscapeString(table.Name),
sqlHelper.EscapeString(field.Name),
sqlHelper.EscapeString(GetDatabaseType(field)));
try
{
using (var sqlHelper = SqlHelper)
sqlHelper.ExecuteNonQuery(addColumnQuery.ToString());
}
catch (Exception executeException)
{
throw new UmbracoException(String.Format("Could not create column '{0}' in table '{1}'.",
field, table.Name), executeException);
}
}
/// <summary>
/// Gets the .Net type corresponding to the specified database data type.
/// </summary>
/// <param name="dataTypeReader">The data type reader.</param>
/// <returns>The .Net type</returns>
protected virtual Type GetType(IRecordsReader dataTypeReader)
{
string typeName = dataTypeReader.GetString("DataType");
switch (typeName)
{
case "bit": return typeof(bool);
case "tinyint": return typeof(byte);
case "datetime": return typeof(DateTime);
// TODO: return different decimal type according to field precision
case "decimal": return typeof(decimal);
case "uniqueidentifier": return typeof(Guid);
case "smallint": return typeof(Int16);
case "int": return typeof(Int32);
case "bigint": return typeof(Int64);
case "nvarchar": return typeof(string);
default:
throw new ArgumentException(String.Format("Cannot convert database type '{0}' to a .Net type.",
typeName));
}
}
/// <summary>
/// Gets the database type corresponding to the field, complete with field properties.
/// </summary>
/// <param name="field">The field.</param>
/// <returns>The database type.</returns>
protected virtual string GetDatabaseType(IField field)
{
StringBuilder fieldBuilder = new StringBuilder();
fieldBuilder.Append(GetDatabaseTypeName(field));
fieldBuilder.Append(field.HasProperty(FieldProperties.Identity) ? " IDENTITY(1,1)" : String.Empty);
fieldBuilder.Append(field.HasProperty(FieldProperties.NotNull) ? " NOT NULL" : " NULL");
return fieldBuilder.ToString();
}
/// <summary>
/// Gets the name of the database type, without field properties.
/// </summary>
/// <param name="field">The field.</param>
/// <returns></returns>
protected virtual string GetDatabaseTypeName(IField field)
{
switch (field.DataType.FullName)
{
case "System.Boolean": return "bit";
case "System.Byte": return "tinyint";
case "System.DateTime": return "datetime";
case "System.Decimal": return "decimal(28)";
case "System.Double": return "decimal(15)";
case "System.Single": return "decimal(7)";
case "System.Guid": return "uniqueidentifier";
case "System.Int16": return "smallint";
case "System.Int32": return "int";
case "System.Int64": return "bigint";;
case "System.String":
string type = "nvarchar";
return field.Size == 0 ? type : String.Format("{0}({1})", type, field.Size);
default:
throw new ArgumentException(String.Format("Cannot convert '{0}' to a database type.", field));
}
}
#endregion
}
}
-56
View File
@@ -1,56 +0,0 @@
/************************************************************************************
*
* Umbraco Data Layer
* MIT Licensed work
* ©2008 Ruben Verborgh
*
***********************************************************************************/
using System;
using umbraco.DataLayer.SqlHelpers.SqlServer;
using umbraco.DataLayer.Utility;
using umbraco.DataLayer.Utility.Installer;
using umbraco.DataLayer.Utility.Table;
namespace SqlCE4Umbraco
{
/// <summary>
/// Utility for an SQL Server data source.
/// </summary>
[Obsolete("The legacy installers are no longer used and will be removed from the codebase in the future")]
public class SqlCEUtility : DefaultUtility<SqlCEHelper>
{
#region Public Constructors
/// <summary>
/// Initializes a new instance of the <see cref="SqlServerUtility"/> class.
/// </summary>
/// <param name="sqlHelper">The SQL helper.</param>
public SqlCEUtility(SqlCEHelper sqlHelper) : base(sqlHelper)
{ }
#endregion
#region DefaultUtility Members
/// <summary>
/// Creates an installer.
/// </summary>
/// <returns>The SQL Server installer.</returns>
public override IInstallerUtility CreateInstaller()
{
return new SqlCEInstaller(SqlHelper);
}
/// <summary>
/// Creates a table utility.
/// </summary>
/// <returns>The table utility</returns>
public override ITableUtility CreateTableUtility()
{
return new SqlCETableUtility(SqlHelper);
}
#endregion
}
}
-270
View File
@@ -1,270 +0,0 @@
using System;
using System.Collections.Generic;
using System.Data.SqlServerCe;
using System.Data;
using System.Diagnostics;
using SQLCE4Umbraco;
namespace SqlCE4Umbraco
{
public class SqlCeApplicationBlock
{
/// <summary>
///
/// </summary>
/// <param name="connectionString"></param>
/// <param name="commandType"></param>
/// <param name="commandText"></param>
/// <param name="commandParameters"></param>
/// <returns></returns>
public static object ExecuteScalar(
string connectionString,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
try
{
using (var conn = SqlCeContextGuardian.Open(connectionString))
{
return ExecuteScalarTry(conn, null, commandText, commandParameters);
}
}
catch (Exception ee)
{
throw new SqlCeProviderException("Error running Scalar: \nSQL Statement:\n" + commandText + "\n\nException:\n" + ee);
}
}
public static object ExecuteScalar(
SqlCeConnection conn, SqlCeTransaction trx,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters)
{
try
{
return ExecuteScalarTry(conn, trx, commandText, commandParameters);
}
catch (Exception ee)
{
throw new SqlCeProviderException("Error running Scalar: \nSQL Statement:\n" + commandText + "\n\nException:\n" + ee);
}
}
public static object ExecuteScalar(
SqlCeConnection conn,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters)
{
return ExecuteScalar(conn, null, commandType, commandText, commandParameters);
}
private static object ExecuteScalarTry(
SqlCeConnection conn, SqlCeTransaction trx,
string commandText,
params SqlCeParameter[] commandParameters)
{
object retVal;
using (var cmd = trx == null ? new SqlCeCommand(commandText, conn) : new SqlCeCommand(commandText, conn, trx))
{
AttachParameters(cmd, commandParameters);
Debug.WriteLine("---------------------------------SCALAR-------------------------------------");
Debug.WriteLine(commandText);
Debug.WriteLine("----------------------------------------------------------------------------");
retVal = cmd.ExecuteScalar();
}
return retVal;
}
/// <summary>
///
/// </summary>
/// <param name="connectionString"></param>
/// <param name="commandType"></param>
/// <param name="commandText"></param>
/// <param name="commandParameters"></param>
public static int ExecuteNonQuery(
string connectionString,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
try
{
using (var conn = SqlCeContextGuardian.Open(connectionString))
{
return ExecuteNonQueryTry(conn, null, commandText, commandParameters);
}
}
catch (Exception ee)
{
throw new SqlCeProviderException("Error running NonQuery: \nSQL Statement:\n" + commandText + "\n\nException:\n" + ee.ToString());
}
}
public static int ExecuteNonQuery(
SqlCeConnection conn,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
return ExecuteNonQuery(conn, null, commandType, commandText, commandParameters);
}
public static int ExecuteNonQuery(
SqlCeConnection conn, SqlCeTransaction trx,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
try
{
return ExecuteNonQueryTry(conn, trx, commandText, commandParameters);
}
catch (Exception ee)
{
throw new SqlCeProviderException("Error running NonQuery: \nSQL Statement:\n" + commandText + "\n\nException:\n" + ee.ToString());
}
}
private static int ExecuteNonQueryTry(
SqlCeConnection conn, SqlCeTransaction trx,
string commandText,
params SqlCeParameter[] commandParameters)
{
// this is for multiple queries in the installer
if (commandText.Trim().StartsWith("!!!"))
{
commandText = commandText.Trim().Trim('!');
var commands = commandText.Split('|');
var currentCmd = string.Empty;
foreach (var command in commands)
{
try
{
currentCmd = command;
if (string.IsNullOrWhiteSpace(command)) continue;
var c = trx == null ? new SqlCeCommand(command, conn) : new SqlCeCommand(command, conn, trx);
c.ExecuteNonQuery();
}
catch (Exception e)
{
Debug.WriteLine("*******************************************************************");
Debug.WriteLine(currentCmd);
Debug.WriteLine(e);
Debug.WriteLine("*******************************************************************");
}
}
return 1;
}
Debug.WriteLine("----------------------------------------------------------------------------");
Debug.WriteLine(commandText);
Debug.WriteLine("----------------------------------------------------------------------------");
var cmd = new SqlCeCommand(commandText, conn);
AttachParameters(cmd, commandParameters);
var rowsAffected = cmd.ExecuteNonQuery();
return rowsAffected;
}
/// <summary>
///
/// </summary>
/// <param name="connectionString"></param>
/// <param name="commandType"></param>
/// <param name="commandText"></param>
/// <param name="commandParameters"></param>
/// <returns></returns>
public static SqlCeDataReader ExecuteReader(
string connectionString,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
try
{
var conn = SqlCeContextGuardian.Open(connectionString);
return ExecuteReaderTry(conn, null, commandText, commandParameters);
}
catch (Exception ee)
{
throw new SqlCeProviderException("Error running Reader: \nSQL Statement:\n" + commandText + "\n\nException:\n" + ee.ToString());
}
}
public static SqlCeDataReader ExecuteReader(
SqlCeConnection conn,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
return ExecuteReader(conn, commandType, commandText, commandParameters);
}
public static SqlCeDataReader ExecuteReader(
SqlCeConnection conn, SqlCeTransaction trx,
CommandType commandType,
string commandText,
params SqlCeParameter[] commandParameters
)
{
try
{
return ExecuteReaderTry(conn, trx, commandText, commandParameters);
}
catch (Exception ee)
{
throw new SqlCeProviderException("Error running Reader: \nSQL Statement:\n" + commandText + "\n\nException:\n" + ee.ToString());
}
}
private static SqlCeDataReader ExecuteReaderTry(
SqlCeConnection conn, SqlCeTransaction trx,
string commandText,
params SqlCeParameter[] commandParameters)
{
Debug.WriteLine("---------------------------------READER-------------------------------------");
Debug.WriteLine(commandText);
Debug.WriteLine("----------------------------------------------------------------------------");
try
{
var cmd = trx == null ? new SqlCeCommand(commandText, conn) : new SqlCeCommand(commandText, conn, trx);
AttachParameters(cmd, commandParameters);
return cmd.ExecuteReader();
}
catch
{
conn.Close();
throw;
}
}
public static bool VerifyConnection(string connectionString)
{
using (var conn = SqlCeContextGuardian.Open(connectionString))
{
return conn.State == ConnectionState.Open;
}
}
private static void AttachParameters(SqlCeCommand command, IEnumerable<SqlCeParameter> commandParameters)
{
foreach (var parameter in commandParameters)
{
if ((parameter.Direction == ParameterDirection.InputOutput) && (parameter.Value == null))
parameter.Value = DBNull.Value;
command.Parameters.Add(parameter);
}
}
}
}
-64
View File
@@ -1,64 +0,0 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlServerCe;
using System.Linq;
using System.Text;
namespace SQLCE4Umbraco
{
public static class SqlCeContextGuardian
{
private static SqlCeConnection _constantOpenConnection;
private static readonly object Lock = new object();
// Awesome SQL CE 4 speed improvement by Erik Ejskov Jensen - SQL CE 4 MVP
// It's not an issue with SQL CE 4 that we never close the connection
public static SqlCeConnection Open(string connectionString)
{
var connectionStringBuilder = new DbConnectionStringBuilder();
try
{
connectionStringBuilder.ConnectionString = connectionString;
}
catch (Exception ex)
{
throw new ArgumentException("Bad connection string.", "connectionString", ex);
}
connectionStringBuilder.Remove("datalayer");
// SQL CE 4 performs better when there's always a connection open in the background
EnsureOpenBackgroundConnection(connectionStringBuilder.ConnectionString);
SqlCeConnection conn = new SqlCeConnection(connectionStringBuilder.ConnectionString);
conn.Open();
return conn;
}
/// <summary>
/// Sometimes we need to ensure this is closed especially in unit tests
/// </summary>
internal static void CloseBackgroundConnection()
{
if (_constantOpenConnection != null)
_constantOpenConnection.Close();
}
private static void EnsureOpenBackgroundConnection(string connectionString)
{
lock (Lock)
{
if (_constantOpenConnection == null)
{
_constantOpenConnection = new SqlCeConnection(connectionString);
_constantOpenConnection.Open();
}
else if (_constantOpenConnection.State != ConnectionState.Open)
_constantOpenConnection.Open();
}
}
}
}
@@ -1,20 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SqlCE4Umbraco
{
public class SqlCeProviderException : Exception
{
public SqlCeProviderException() : base()
{
}
public SqlCeProviderException(string message) : base(message)
{
}
}
}
-39
View File
@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup></configuration>
-4
View File
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="SqlServerCE" version="4.0.0.1" targetFramework="net45" />
</packages>
+22 -15
View File
@@ -1,15 +1,22 @@
using System.Reflection;
using System.Resources;
[assembly: AssemblyCompany("Umbraco")]
[assembly: AssemblyCopyright("Copyright © Umbraco 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguageAttribute("en-US")]
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.14.0")]
[assembly: AssemblyInformationalVersion("7.14.0")]
using System.Reflection;
using System.Resources;
[assembly: AssemblyCompany("Umbraco")]
[assembly: AssemblyCopyright("Copyright © Umbraco 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en-US")]
// versions
// read https://stackoverflow.com/questions/64602/what-are-differences-between-assemblyversion-assemblyfileversion-and-assemblyin
// note: do NOT change anything here manually, use the build scripts
// this is the ONLY ONE the CLR cares about for compatibility
// should change ONLY when "hard" breaking compatibility (manual change)
[assembly: AssemblyVersion("8.0.0")]
// these are FYI and changed automatically
[assembly: AssemblyFileVersion("8.0.0")]
[assembly: AssemblyInformationalVersion("8.0.0-alpha.58")]
-98
View File
@@ -1,98 +0,0 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using umbraco.interfaces;
namespace Umbraco.Core
{
/// <summary>
/// A resolver to return all IAction objects
/// </summary>
public sealed class ActionsResolver : LazyManyObjectsResolverBase<ActionsResolver, IAction>
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="logger"></param>
/// <param name="packageActions"></param>
internal ActionsResolver(IServiceProvider serviceProvider, ILogger logger, Func<IEnumerable<Type>> packageActions)
: base(serviceProvider, logger, packageActions)
{
}
/// <summary>
/// Gets the <see cref="IAction"/> implementations.
/// </summary>
public IEnumerable<IAction> Actions
{
get
{
return Values;
}
}
/// <summary>
/// This method will return a list of IAction's based on a string (letter) list. Each character in the list may represent
/// an IAction. This will associate any found IActions based on the Letter property of the IAction with the character being referenced.
/// </summary>
/// <param name="actions"></param>
/// <returns>returns a list of actions that have an associated letter found in the action string list</returns>
public IEnumerable<IAction> FromActionSymbols(IEnumerable<string> actions)
{
var allActions = Actions.ToArray();
return actions
.Select(c => allActions.FirstOrDefault(a => a.Letter.ToString(CultureInfo.InvariantCulture) == c))
.WhereNotNull()
.ToArray();
}
/// <summary>
/// Returns the string (letter) representation of the actions that make up the actions collection
/// </summary>
/// <returns></returns>
public IEnumerable<string> ToActionSymbols(IEnumerable<IAction> actions)
{
return actions.Select(x => x.Letter.ToString(CultureInfo.InvariantCulture)).ToArray();
}
/// <summary>
/// Gets an Action if it exists.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
internal IAction GetAction<T>()
where T : IAction
{
return Actions.SingleOrDefault(x => x.GetType() == typeof (T));
}
protected override IEnumerable<IAction> CreateInstances()
{
var actions = new List<IAction>();
var foundIActions = InstanceTypes;
foreach (var type in foundIActions)
{
IAction typeInstance;
var instance = type.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static);
//if the singletone initializer is not found, try simply creating an instance of the IAction if it supports public constructors
if (instance == null)
typeInstance = ServiceProvider.GetService(type) as IAction;
else
typeInstance = instance.GetValue(null, null) as IAction;
if (typeInstance != null)
{
actions.Add(typeInstance);
}
}
return actions;
}
}
}
-20
View File
@@ -1,20 +0,0 @@
namespace Umbraco.Core
{
/// <summary>
/// Helper methods for Activation
/// </summary>
internal static class ActivatorHelper
{
/// <summary>
/// Creates an instance of a type using that type's default constructor.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T CreateInstance<T>() where T : class, new()
{
return new ActivatorServiceProvider().GetService(typeof (T)) as T;
}
}
}
@@ -1,12 +0,0 @@
using System;
namespace Umbraco.Core
{
internal class ActivatorServiceProvider : IServiceProvider
{
public object GetService(Type serviceType)
{
return Activator.CreateInstance(serviceType);
}
}
}
-506
View File
@@ -1,506 +0,0 @@
using Semver;
using System;
using System.Collections.Concurrent;
using System.Configuration;
using System.Threading;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using Umbraco.Core.Profiling;
using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
using Umbraco.Core.Sync;
namespace Umbraco.Core
{
/// <summary>
/// the Umbraco Application context
/// </summary>
/// <remarks>
/// one per AppDomain, represents the global Umbraco application
/// </remarks>
public class ApplicationContext : IDisposable
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <param name="cache"></param>
/// <param name="logger"></param>
public ApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, ProfilingLogger logger)
{
if (dbContext == null) throw new ArgumentNullException("dbContext");
if (serviceContext == null) throw new ArgumentNullException("serviceContext");
if (cache == null) throw new ArgumentNullException("cache");
if (logger == null) throw new ArgumentNullException("logger");
_databaseContext = dbContext;
_services = serviceContext;
ApplicationCache = cache;
ProfilingLogger = logger;
Init();
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <param name="cache"></param>
[Obsolete("Use the other constructor specifying a ProfilingLogger instead")]
public ApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache)
: this(dbContext, serviceContext, cache,
new ProfilingLogger(LoggerResolver.Current.Logger, ProfilerResolver.Current.Profiler))
{
}
/// <summary>
/// Creates a basic app context
/// </summary>
/// <param name="cache"></param>
[Obsolete("Use the other constructor specifying a ProfilingLogger instead")]
public ApplicationContext(CacheHelper cache)
{
if (cache == null) throw new ArgumentNullException("cache");
ApplicationCache = cache;
ProfilingLogger = new ProfilingLogger(LoggerResolver.Current.Logger, ProfilerResolver.Current.Profiler);
Init();
}
/// <summary>
/// Creates a basic app context
/// </summary>
/// <param name="cache"></param>
/// <param name="logger"></param>
public ApplicationContext(CacheHelper cache, ProfilingLogger logger)
{
if (cache == null) throw new ArgumentNullException("cache");
if (logger == null) throw new ArgumentNullException("logger");
ApplicationCache = cache;
ProfilingLogger = logger;
Init();
}
/// <summary>
/// A method used to set and/or ensure that a global ApplicationContext singleton is created.
/// </summary>
/// <param name="appContext">
/// The instance to set on the global application singleton
/// </param>
/// <param name="replaceContext">If set to true and the singleton is already set, it will be replaced</param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// </remarks>
public static ApplicationContext EnsureContext(ApplicationContext appContext, bool replaceContext)
{
if (Current != null)
{
if (!replaceContext)
return Current;
}
Current = appContext;
return Current;
}
/// <summary>
/// A method used to create and ensure that a global ApplicationContext singleton is created.
/// </summary>
/// <param name="cache"></param>
/// <param name="replaceContext">
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// startup if for some reason the boot manager is not the umbraco boot manager.
/// </param>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// </remarks>
[Obsolete("Use the other method specifying an ProfilingLogger instead")]
public static ApplicationContext EnsureContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, bool replaceContext)
{
if (Current != null)
{
if (!replaceContext)
return Current;
}
var ctx = new ApplicationContext(dbContext, serviceContext, cache);
Current = ctx;
return Current;
}
/// <summary>
/// A method used to create and ensure that a global ApplicationContext singleton is created.
/// </summary>
/// <param name="cache"></param>
/// <param name="logger"></param>
/// <param name="replaceContext">
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// startup if for some reason the boot manager is not the umbraco boot manager.
/// </param>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// </remarks>
public static ApplicationContext EnsureContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, ProfilingLogger logger, bool replaceContext)
{
if (Current != null)
{
if (!replaceContext)
return Current;
}
var ctx = new ApplicationContext(dbContext, serviceContext, cache, logger);
Current = ctx;
return Current;
}
/// <summary>
/// Singleton accessor
/// </summary>
public static ApplicationContext Current { get; internal set; }
/// <summary>
/// Gets the scope provider.
/// </summary>
internal IScopeProvider ScopeProvider { get { return _databaseContext == null ? null : _databaseContext.ScopeProvider; } }
/// <summary>
/// Returns the application wide cache accessor
/// </summary>
/// <remarks>
/// Any caching that is done in the application (app wide) should be done through this property
/// </remarks>
public CacheHelper ApplicationCache { get; private set; }
/// <summary>
/// Exposes the global ProfilingLogger - this should generally not be accessed via the UmbracoContext and should normally just be exposed
/// on most base classes or injected with IoC
/// </summary>
public ProfilingLogger ProfilingLogger { get; private set; }
// IsReady is set to true by the boot manager once it has successfully booted
// note - the original umbraco module checks on content.Instance in umbraco.dll
// now, the boot task that setup the content store ensures that it is ready
bool _isReady = false;
readonly ManualResetEventSlim _isReadyEvent = new ManualResetEventSlim(false);
private DatabaseContext _databaseContext;
private ServiceContext _services;
public bool IsReady
{
get
{
return _isReady;
}
internal set
{
AssertIsNotReady();
_isReady = value;
_isReadyEvent.Set();
}
}
public bool WaitForReady(int timeout)
{
return _isReadyEvent.WaitHandle.WaitOne(timeout);
}
// notes
// GlobalSettings.ConfigurationStatus returns the value that's in the web.config, so it's the "configured version"
// GlobalSettings.CurrentVersion returns the hard-coded "current version"
// the system is configured if they match
// if they don't, install runs, updates web.config (presumably) and updates GlobalSettings.ConfiguredStatus
public bool IsConfigured
{
get { return _configured.Value; }
}
/// <summary>
/// If the db is configured, there is a database context and there is an umbraco schema, but we are not 'configured' , then it means we are upgrading
/// </summary>
public bool IsUpgrading
{
get
{
if (IsConfigured == false
&& DatabaseContext != null
&& DatabaseContext.IsDatabaseConfigured)
{
var schemaresult = DatabaseContext.ValidateDatabaseSchema();
if (schemaresult.ValidTables.Count > 0) return true;
}
return false;
}
}
/// <summary>
/// The application url.
/// </summary>
/// <remarks>
/// The application url is the url that should be used by services to talk to the application,
/// eg keep alive or scheduled publishing services. It must exist on a global context because
/// some of these services may not run within a web context.
/// The format of the application url is:
/// - has a scheme (http or https)
/// - has the SystemDirectories.Umbraco path
/// - does not end with a slash
/// It is initialized on the first request made to the server, by UmbracoModule.EnsureApplicationUrl:
/// - if umbracoSettings:settings/web.routing/@umbracoApplicationUrl is set, use the value (new setting)
/// - if umbracoSettings:settings/scheduledTasks/@baseUrl is set, use the value (backward compatibility)
/// - otherwise, use the url of the (first) request.
/// Not locking, does not matter if several threads write to this.
/// See also issues:
/// - http://issues.umbraco.org/issue/U4-2059
/// - http://issues.umbraco.org/issue/U4-6788
/// - http://issues.umbraco.org/issue/U4-5728
/// - http://issues.umbraco.org/issue/U4-5391
/// </remarks>
public string UmbracoApplicationUrl
{
get
{
ApplicationUrlHelper.EnsureApplicationUrl(this);
return _umbracoApplicationUrl;
}
}
/// <summary>
/// Resets the url.
/// </summary>
public void ResetUmbracoApplicationUrl()
{
_umbracoApplicationUrl = null;
}
// ReSharper disable once InconsistentNaming
internal string _umbracoApplicationUrl;
internal ConcurrentDictionary<string, string> _umbracoApplicationDomains = new ConcurrentDictionary<string, string>();
internal string _umbracoApplicationDeploymentId;
private Lazy<bool> _configured;
internal MainDom MainDom { get; private set; }
private void Init()
{
MainDom = new MainDom(ProfilingLogger.Logger);
MainDom.Acquire();
//Create the lazy value to resolve whether or not the application is 'configured'
_configured = new Lazy<bool>(() =>
{
try
{
var configStatus = ConfigurationStatus;
var currentVersion = UmbracoVersion.GetSemanticVersion();
var ok =
//we are not configured if this is null
string.IsNullOrWhiteSpace(configStatus) == false
//they must match
&& configStatus == currentVersion;
if (ok)
{
//The versions are the same in config, but are they the same in the database. We can only check this
// if we have a db context available, if we don't then we are not installed anyways
if (DatabaseContext.IsDatabaseConfigured && DatabaseContext.CanConnect)
{
var found = Services.MigrationEntryService.FindEntry(Constants.System.UmbracoMigrationName, UmbracoVersion.GetSemanticVersion());
if (found == null)
{
//we haven't executed this migration in this environment, so even though the config versions match,
// this db has not been updated.
ProfilingLogger.Logger.Debug<ApplicationContext>(string.Format("The migration for version: '{0} has not been executed, there is no record in the database", currentVersion.ToSemanticString()));
ok = false;
}
}
}
else
{
ProfilingLogger.Logger.Debug<ApplicationContext>(string.Format("CurrentVersion different from configStatus: '{0}','{1}'", currentVersion.ToSemanticString(), configStatus));
}
return ok;
}
catch (Exception ex)
{
LogHelper.Error<ApplicationContext>("Error determining if application is configured, returning false", ex);
return false;
}
});
}
private string ConfigurationStatus
{
get
{
try
{
return ConfigurationManager.AppSettings["umbracoConfigurationStatus"];
}
catch
{
return String.Empty;
}
}
}
/// <summary>
/// Gets the Current Version of the Umbraco Site before an upgrade
/// by using the last/most recent Umbraco Migration that has been run
/// </summary>
/// <returns>A SemVersion of the latest Umbraco DB Migration run</returns>
/// <remarks>
/// NOTE: This existed in the InstallHelper previously but should really be here so it can be re-used if necessary
/// </remarks>
internal SemVersion CurrentVersion()
{
//Set a default version of 0.0.0
var version = new SemVersion(0);
//If we have a db context available, if we don't then we are not installed anyways
if (DatabaseContext.IsDatabaseConfigured && DatabaseContext.CanConnect)
version = DatabaseContext.ValidateDatabaseSchema().DetermineInstalledVersionByMigrations(Services.MigrationEntryService);
if (version != new SemVersion(0))
return version;
// If we aren't able to get a result from the umbracoMigrations table then use the version in web.config, if it's available
if (string.IsNullOrWhiteSpace(GlobalSettings.ConfigurationStatus))
return version;
var configuredVersion = GlobalSettings.ConfigurationStatus;
string currentComment = null;
var current = configuredVersion.Split('-');
if (current.Length > 1)
currentComment = current[1];
Version currentVersion;
if (Version.TryParse(current[0], out currentVersion))
{
version = new SemVersion(
currentVersion.Major,
currentVersion.Minor,
currentVersion.Build,
string.IsNullOrWhiteSpace(currentComment) ? null : currentComment,
currentVersion.Revision > 0 ? currentVersion.Revision.ToString() : null);
}
return version;
}
private void AssertIsNotReady()
{
if (this.IsReady)
throw new Exception("ApplicationContext has already been initialized.");
}
/// <summary>
/// Gets the current DatabaseContext
/// </summary>
/// <remarks>
/// Internal set is generally only used for unit tests
/// </remarks>
public DatabaseContext DatabaseContext
{
get
{
if (_databaseContext == null)
throw new InvalidOperationException("The DatabaseContext has not been set on the ApplicationContext");
return _databaseContext;
}
internal set { _databaseContext = value; }
}
/// <summary>
/// Gets the current ServiceContext
/// </summary>
/// <remarks>
/// Internal set is generally only used for unit tests
/// </remarks>
public ServiceContext Services
{
get
{
if (_services == null)
throw new InvalidOperationException("The ServiceContext has not been set on the ApplicationContext");
return _services;
}
internal set { _services = value; }
}
internal ServerRole GetCurrentServerRole()
{
var registrar = ServerRegistrarResolver.Current.Registrar as IServerRegistrar2;
return registrar == null ? ServerRole.Unknown : registrar.GetCurrentServerRole();
}
private volatile bool _disposed;
private readonly ReaderWriterLockSlim _disposalLocker = new ReaderWriterLockSlim();
/// <summary>
/// This will dispose and reset all resources used to run the application
/// </summary>
/// <remarks>
/// IMPORTANT: Never dispose this object if you require the Umbraco application to run, disposing this object
/// is generally used for unit testing and when your application is shutting down after you have booted Umbraco.
/// </remarks>
void IDisposable.Dispose()
{
// Only operate if we haven't already disposed
if (_disposed) return;
using (new WriteLock(_disposalLocker))
{
// Check again now we're inside the lock
if (_disposed) return;
//clear the cache
if (ApplicationCache != null)
{
ApplicationCache.RuntimeCache.ClearAllCache();
ApplicationCache.IsolatedRuntimeCache.ClearAllCaches();
}
//reset all resolvers
ResolverCollection.ResetAll();
//reset resolution itself (though this should be taken care of by resetting any of the resolvers above)
Resolution.Reset();
//reset the instance objects
this.ApplicationCache = null;
if (_databaseContext != null) //need to check the internal field here
{
if (_databaseContext.ScopeProvider.AmbientScope != null)
{
var scope = _databaseContext.ScopeProvider.AmbientScope;
scope.Dispose();
}
/*
if (DatabaseContext.IsDatabaseConfigured && DatabaseContext.Database != null)
{
DatabaseContext.Database.Dispose();
}
*/
}
this.DatabaseContext = null;
this.Services = null;
this._isReady = false; //set the internal field
// Indicate that the instance has been disposed.
_disposed = true;
}
}
}
}
-119
View File
@@ -1,119 +0,0 @@
namespace Umbraco.Core
{
/// <summary>
/// A plugin type that allows developers to execute code during the Umbraco bootup process
/// </summary>
/// <remarks>
/// Allows you to override the methods that you would like to execute code for: ApplicationInitialized, ApplicationStarting, ApplicationStarted.
///
/// By default none of these methods will execute if the Umbraco application is not configured or if the Umbraco database is not configured, however
/// if you need these methods to execute even if either of these are not configured you can override the properties:
/// ExecuteWhenApplicationNotConfigured and ExecuteWhenDatabaseNotConfigured
/// </remarks>
public abstract class ApplicationEventHandler : IApplicationEventHandler
{
public void OnApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
if (ShouldExecute(applicationContext))
{
ApplicationInitialized(umbracoApplication, applicationContext);
}
}
public void OnApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
if (ShouldExecute(applicationContext))
{
ApplicationStarting(umbracoApplication, applicationContext);
}
}
public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
if (ShouldExecute(applicationContext))
{
ApplicationStarted(umbracoApplication, applicationContext);
}
}
/// <summary>
/// Overridable method to execute when the ApplicationContext is created and other static objects that require initialization have been setup
/// </summary>
/// <param name="umbracoApplication"></param>
/// <param name="applicationContext"></param>
protected virtual void ApplicationInitialized(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
}
/// <summary>
/// Overridable method to execute when All resolvers have been initialized but resolution is not frozen so they can be modified in this method
/// </summary>
/// <param name="umbracoApplication"></param>
/// <param name="applicationContext"></param>
protected virtual void ApplicationStarting(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
}
/// <summary>
/// Overridable method to execute when Bootup is completed, this allows you to perform any other bootup logic required for the application.
/// Resolution is frozen so now they can be used to resolve instances.
/// </summary>
/// <param name="umbracoApplication"></param>
/// <param name="applicationContext"></param>
protected virtual void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
}
/// <summary>
/// Determine if the methods should execute based on the configuration status of the application.
/// </summary>
/// <param name="applicationContext"></param>
/// <returns></returns>
private bool ShouldExecute(ApplicationContext applicationContext)
{
if (applicationContext.IsConfigured && applicationContext.DatabaseContext.IsDatabaseConfigured)
{
return true;
}
if (!applicationContext.IsConfigured && ExecuteWhenApplicationNotConfigured)
{
return true;
}
if (!applicationContext.DatabaseContext.IsDatabaseConfigured && ExecuteWhenDatabaseNotConfigured)
{
return true;
}
return false;
}
/// <summary>
/// A flag to determine if the overridable methods for this class will execute even if the
/// Umbraco application is not configured
/// </summary>
/// <remarks>
/// An Umbraco Application is not configured when it requires a new install or upgrade. When the latest version in the
/// assembly does not match the version in the config.
/// </remarks>
protected virtual bool ExecuteWhenApplicationNotConfigured
{
get { return false; }
}
/// <summary>
/// A flag to determine if the overridable methods for this class will execute even if the
/// Umbraco database is not configured
/// </summary>
/// <remarks>
/// The Umbraco database is not configured when we cannot connect to the database or when the database tables are not installed.
/// </remarks>
protected virtual bool ExecuteWhenDatabaseNotConfigured
{
get { return false; }
}
}
}
+72 -72
View File
@@ -1,72 +1,72 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
namespace Umbraco.Core
{
internal static class AssemblyExtensions
{
/// <summary>
/// Returns the file used to load the assembly
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static FileInfo GetAssemblyFile(this Assembly assembly)
{
var codeBase = assembly.CodeBase;
var uri = new Uri(codeBase);
var path = uri.LocalPath;
return new FileInfo(path);
}
/// <summary>
/// Returns true if the assembly is the App_Code assembly
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static bool IsAppCodeAssembly(this Assembly assembly)
{
if (assembly.FullName.StartsWith("App_Code"))
{
try
{
Assembly.Load("App_Code");
return true;
}
catch (FileNotFoundException)
{
//this will occur if it cannot load the assembly
return false;
}
}
return false;
}
/// <summary>
/// Returns true if the assembly is the compiled global asax.
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static bool IsGlobalAsaxAssembly(this Assembly assembly)
{
//only way I can figure out how to test is by the name
return assembly.FullName.StartsWith("App_global.asax");
}
/// <summary>
/// Returns the file used to load the assembly
/// </summary>
/// <param name="assemblyName"></param>
/// <returns></returns>
public static FileInfo GetAssemblyFile(this AssemblyName assemblyName)
{
var codeBase = assemblyName.CodeBase;
var uri = new Uri(codeBase);
var path = uri.LocalPath;
return new FileInfo(path);
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
namespace Umbraco.Core
{
internal static class AssemblyExtensions
{
/// <summary>
/// Returns the file used to load the assembly
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static FileInfo GetAssemblyFile(this Assembly assembly)
{
var codeBase = assembly.CodeBase;
var uri = new Uri(codeBase);
var path = uri.LocalPath;
return new FileInfo(path);
}
/// <summary>
/// Returns true if the assembly is the App_Code assembly
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static bool IsAppCodeAssembly(this Assembly assembly)
{
if (assembly.FullName.StartsWith("App_Code"))
{
try
{
Assembly.Load("App_Code");
return true;
}
catch (FileNotFoundException)
{
//this will occur if it cannot load the assembly
return false;
}
}
return false;
}
/// <summary>
/// Returns true if the assembly is the compiled global asax.
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static bool IsGlobalAsaxAssembly(this Assembly assembly)
{
//only way I can figure out how to test is by the name
return assembly.FullName.StartsWith("App_global.asax");
}
/// <summary>
/// Returns the file used to load the assembly
/// </summary>
/// <param name="assemblyName"></param>
/// <returns></returns>
public static FileInfo GetAssemblyFile(this AssemblyName assemblyName)
{
var codeBase = assemblyName.CodeBase;
var uri = new Uri(codeBase);
var path = uri.LocalPath;
return new FileInfo(path);
}
}
}
+6 -6
View File
@@ -69,11 +69,11 @@ namespace Umbraco.Core
public Task<IDisposable> LockAsync()
{
var wait = _semaphore != null
var wait = _semaphore != null
? _semaphore.WaitAsync()
: _semaphore2.WaitOneAsync();
return wait.IsCompleted
return wait.IsCompleted
? _releaserTask ?? Task.FromResult(CreateReleaser()) // anonymous vs named
: wait.ContinueWith((_, state) => (((AsyncLock) state).CreateReleaser()),
this, CancellationToken.None,
@@ -112,7 +112,7 @@ namespace Umbraco.Core
return _releaser ?? CreateReleaser(); // anonymous vs named
}
// note - before making those classes some structs, read
// note - before making those classes some structs, read
// about "impure methods" and mutating readonly structs...
private class NamedSemaphoreReleaser : CriticalFinalizerObject, IDisposable
@@ -140,9 +140,9 @@ namespace Umbraco.Core
_semaphore.Dispose();
}
// we WANT to release the semaphore because it's a system object, ie a critical
// we WANT to release the semaphore because it's a system object, ie a critical
// non-managed resource - and if it is not released then noone else can acquire
// the lock - so we inherit from CriticalFinalizerObject which means that the
// the lock - so we inherit from CriticalFinalizerObject which means that the
// finalizer "should" run in all situations - there is always a chance that it
// does not run and the semaphore remains "acquired" but then chances are the
// whole process (w3wp.exe...) is going down, at which point the semaphore will
@@ -200,4 +200,4 @@ namespace Umbraco.Core
}
}
}
}
}
+126 -166
View File
@@ -1,166 +1,126 @@
using System;
namespace Umbraco.Core
{
/// <summary>
/// Provides ways to create attempts.
/// </summary>
public static class Attempt
{
/// <summary>
/// Creates a successful attempt with a result.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="result">The result of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<T> Succeed<T>(T result)
{
return Attempt<T>.Succeed(result);
}
/// <summary>
/// Creates a failed attempt with a result.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="result">The result of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<T> Fail<T>(T result)
{
return Attempt<T>.Fail(result);
}
/// <summary>
/// Creates a failed attempt with a result and an exception.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="result">The result of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<T> Fail<T>(T result, Exception exception)
{
return Attempt<T>.Fail(result, exception);
}
/// <summary>
/// Creates a successful or a failed attempt, with a result.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="success">A value indicating whether the attempt is successful.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<T> If<T>(bool success, T result)
{
return Attempt<T>.SucceedIf(success, result);
}
/// <summary>
/// Executes an attempt function, with callbacks.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="attempt">The attempt returned by the attempt function.</param>
/// <param name="onSuccess">An action to execute in case the attempt succeeds.</param>
/// <param name="onFail">An action to execute in case the attempt fails.</param>
/// <returns>The outcome of the attempt.</returns>
/// <remarks>Runs <paramref name="onSuccess"/> or <paramref name="onFail"/> depending on the
/// whether the attempt function reports a success or a failure.</remarks>
public static Outcome Try<T>(Attempt<T> attempt, Action<T> onSuccess, Action<Exception> onFail = null)
{
if (attempt.Success)
{
onSuccess(attempt.Result);
return Outcome.Success;
}
if (onFail != null)
{
onFail(attempt.Exception);
}
return Outcome.Failure;
}
/// <summary>
/// Represents the outcome of an attempt.
/// </summary>
/// <remarks>Can be a success or a failure, and allows for attempts chaining.</remarks>
public struct Outcome
{
private readonly bool _success;
/// <summary>
/// Gets an outcome representing a success.
/// </summary>
public static readonly Outcome Success = new Outcome(true);
/// <summary>
/// Gets an outcome representing a failure.
/// </summary>
public static readonly Outcome Failure = new Outcome(false);
private Outcome(bool success)
{
_success = success;
}
/// <summary>
/// Executes another attempt function, if the previous one failed, with callbacks.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="nextFunction">The attempt function to execute, returning an attempt.</param>
/// <param name="onSuccess">An action to execute in case the attempt succeeds.</param>
/// <param name="onFail">An action to execute in case the attempt fails.</param>
/// <returns>If it executes, returns the outcome of the attempt, else returns a success outcome.</returns>
/// <remarks>
/// <para>Executes only if the previous attempt failed, else does not execute and return a success outcome.</para>
/// <para>If it executes, then runs <paramref name="onSuccess"/> or <paramref name="onFail"/> depending on the
/// whether the attempt function reports a success or a failure.</para>
/// </remarks>
public Outcome OnFailure<T>(Func<Attempt<T>> nextFunction, Action<T> onSuccess, Action<Exception> onFail = null)
{
return _success
? Success
: ExecuteNextFunction(nextFunction, onSuccess, onFail);
}
/// <summary>
/// Executes another attempt function, if the previous one succeeded, with callbacks.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
/// <param name="nextFunction">The attempt function to execute, returning an attempt.</param>
/// <param name="onSuccess">An action to execute in case the attempt succeeds.</param>
/// <param name="onFail">An action to execute in case the attempt fails.</param>
/// <returns>If it executes, returns the outcome of the attempt, else returns a failed outcome.</returns>
/// <remarks>
/// <para>Executes only if the previous attempt succeeded, else does not execute and return a success outcome.</para>
/// <para>If it executes, then runs <paramref name="onSuccess"/> or <paramref name="onFail"/> depending on the
/// whether the attempt function reports a success or a failure.</para>
/// </remarks>
public Outcome OnSuccess<T>(Func<Attempt<T>> nextFunction, Action<T> onSuccess, Action<Exception> onFail = null)
{
return _success
? ExecuteNextFunction(nextFunction, onSuccess, onFail)
: Failure;
}
private static Outcome ExecuteNextFunction<T>(Func<Attempt<T>> nextFunction, Action<T> onSuccess, Action<Exception> onFail = null)
{
var attempt = nextFunction();
if (attempt.Success)
{
onSuccess(attempt.Result);
return Success;
}
if (onFail != null)
{
onFail(attempt.Exception);
}
return Failure;
}
}
}
}
using System;
namespace Umbraco.Core
{
/// <summary>
/// Provides ways to create attempts.
/// </summary>
public static class Attempt
{
// note:
// 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>
/// Creates a successful attempt with a result.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <param name="result">The result of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<TResult> Succeed<TResult>(TResult result)
{
return Attempt<TResult>.Succeed(result);
}
/// <summary>
/// Creates a successful attempt with a result and a status.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <typeparam name="TStatus">The type of the attempted operation status.</typeparam>
/// <param name="status">The status of the attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<TResult, TStatus> SucceedWithStatus<TResult, TStatus>(TStatus status, TResult result)
{
return Attempt<TResult, TStatus>.Succeed(status, result);
}
/// <summary>
/// Creates a failed attempt.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail<TResult>()
{
return Attempt<TResult>.Fail();
}
/// <summary>
/// Creates a failed attempt with a result.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <param name="result">The result of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail<TResult>(TResult result)
{
return Attempt<TResult>.Fail(result);
}
/// <summary>
/// Creates a failed attempt with a result and a status.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <typeparam name="TStatus">The type of the attempted operation status.</typeparam>
/// <param name="status">The status of the attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult, TStatus> FailWithStatus<TResult, TStatus>(TStatus status, TResult result)
{
return Attempt<TResult, TStatus>.Fail(status, result);
}
/// <summary>
/// Creates a failed attempt with a result and an exception.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <param name="result">The result of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail<TResult>(TResult result, Exception exception)
{
return Attempt<TResult>.Fail(result, exception);
}
/// <summary>
/// Creates a failed attempt with a result, an exception and a status.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <typeparam name="TStatus">The type of the attempted operation status.</typeparam>
/// <param name="status">The status of the attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult, TStatus> FailWithStatus<TResult, TStatus>(TStatus status, TResult result, Exception exception)
{
return Attempt<TResult, TStatus>.Fail(status, result, exception);
}
/// <summary>
/// Creates a successful or a failed attempt, with a result.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<TResult> If<TResult>(bool condition, TResult result)
{
return Attempt<TResult>.If(condition, result);
}
/// <summary>
/// Creates a successful or a failed attempt, with a result.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <typeparam name="TStatus">The type of the attempted operation status.</typeparam>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <param name="succStatus">The status of the successful attempt.</param>
/// <param name="failStatus">The status of the failed attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<TResult, TStatus> IfWithStatus<TResult, TStatus>(bool condition, TStatus succStatus, TStatus failStatus, TResult result)
{
return Attempt<TResult, TStatus>.If(condition, succStatus, failStatus, result);
}
}
}
+133
View File
@@ -0,0 +1,133 @@
using System;
namespace Umbraco.Core
{
/// <summary>
/// Represents the result of an operation attempt.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
[Serializable]
public struct Attempt<TResult>
{
// private - use Succeed() or Fail() methods to create attempts
private Attempt(bool success, TResult result, Exception exception)
{
Success = success;
Result = result;
Exception = exception;
}
/// <summary>
/// Gets a value indicating whether this <see cref="Attempt{TResult}"/> was successful.
/// </summary>
public bool Success { get; }
/// <summary>
/// Gets the exception associated with an unsuccessful attempt.
/// </summary>
public Exception Exception { get; }
/// <summary>
/// Gets the attempt result.
/// </summary>
public TResult Result { get; }
/// <summary>
/// Gets the attempt result, if successful, else a default value.
/// </summary>
public TResult ResultOr(TResult value) => Success ? Result : value;
// optimize, use a singleton failed attempt
private static readonly Attempt<TResult> Failed = new Attempt<TResult>(false, default(TResult), null);
/// <summary>
/// Creates a successful attempt.
/// </summary>
/// <returns>The successful attempt.</returns>
public static Attempt<TResult> Succeed()
{
return new Attempt<TResult>(true, default(TResult), null);
}
/// <summary>
/// Creates a successful attempt with a result.
/// </summary>
/// <param name="result">The result of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<TResult> Succeed(TResult result)
{
return new Attempt<TResult>(true, result, null);
}
/// <summary>
/// Creates a failed attempt.
/// </summary>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail()
{
return Failed;
}
/// <summary>
/// Creates a failed attempt with an exception.
/// </summary>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail(Exception exception)
{
return new Attempt<TResult>(false, default(TResult), exception);
}
/// <summary>
/// Creates a failed attempt with a result.
/// </summary>
/// <param name="result">The result of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail(TResult result)
{
return new Attempt<TResult>(false, result, null);
}
/// <summary>
/// Creates a failed attempt with a result and an exception.
/// </summary>
/// <param name="result">The result of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult> Fail(TResult result, Exception exception)
{
return new Attempt<TResult>(false, result, exception);
}
/// <summary>
/// Creates a successful or a failed attempt.
/// </summary>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <returns>The attempt.</returns>
public static Attempt<TResult> If(bool condition)
{
return condition ? new Attempt<TResult>(true, default(TResult), null) : Failed;
}
/// <summary>
/// Creates a successful or a failed attempt, with a result.
/// </summary>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<TResult> If(bool condition, TResult result)
{
return new Attempt<TResult>(condition, result, null);
}
/// <summary>
/// Implicitly operator to check if the attempt was successful without having to access the 'success' property
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
public static implicit operator bool(Attempt<TResult> a)
{
return a.Success;
}
}
}
+142
View File
@@ -0,0 +1,142 @@
using System;
namespace Umbraco.Core
{
/// <summary>
/// Represents the result of an operation attempt.
/// </summary>
/// <typeparam name="TResult">The type of the attempted operation result.</typeparam>
/// <typeparam name="TStatus">The type of the attempted operation status.</typeparam>
[Serializable]
public struct Attempt<TResult, TStatus>
{
/// <summary>
/// Gets a value indicating whether this <see cref="Attempt{TResult,TStatus}"/> was successful.
/// </summary>
public bool Success { get; }
/// <summary>
/// Gets the exception associated with an unsuccessful attempt.
/// </summary>
public Exception Exception { get; }
/// <summary>
/// Gets the attempt result.
/// </summary>
public TResult Result { get; }
/// <summary>
/// Gets the attempt status.
/// </summary>
public TStatus Status { get; }
// private - use Succeed() or Fail() methods to create attempts
private Attempt(bool success, TResult result, TStatus status, Exception exception)
{
Success = success;
Result = result;
Status = status;
Exception = exception;
}
/// <summary>
/// Creates a successful attempt.
/// </summary>
/// <param name="status">The status of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<TResult, TStatus> Succeed(TStatus status)
{
return new Attempt<TResult, TStatus>(true, default(TResult), status, null);
}
/// <summary>
/// Creates a successful attempt with a result.
/// </summary>
/// <param name="status">The status of the attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<TResult, TStatus> Succeed(TStatus status, TResult result)
{
return new Attempt<TResult, TStatus>(true, result, status, null);
}
/// <summary>
/// Creates a failed attempt.
/// </summary>
/// <param name="status">The status of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult, TStatus> Fail(TStatus status)
{
return new Attempt<TResult, TStatus>(false, default(TResult), status, null);
}
/// <summary>
/// Creates a failed attempt with an exception.
/// </summary>
/// <param name="status">The status of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult, TStatus> Fail(TStatus status, Exception exception)
{
return new Attempt<TResult, TStatus>(false, default(TResult), status, exception);
}
/// <summary>
/// Creates a failed attempt with a result.
/// </summary>
/// <param name="status">The status of the attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult, TStatus> Fail(TStatus status, TResult result)
{
return new Attempt<TResult, TStatus>(false, result, status, null);
}
/// <summary>
/// Creates a failed attempt with a result and an exception.
/// </summary>
/// <param name="status">The status of the attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<TResult, TStatus> Fail(TStatus status, TResult result, Exception exception)
{
return new Attempt<TResult, TStatus>(false, result, status, exception);
}
/// <summary>
/// Creates a successful or a failed attempt.
/// </summary>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <param name="succStatus">The status of the successful attempt.</param>
/// <param name="failStatus">The status of the failed attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<TResult, TStatus> If(bool condition, TStatus succStatus, TStatus failStatus)
{
return new Attempt<TResult, TStatus>(condition, default(TResult), condition ? succStatus : failStatus, null);
}
/// <summary>
/// Creates a successful or a failed attempt, with a result.
/// </summary>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <param name="succStatus">The status of the successful attempt.</param>
/// <param name="failStatus">The status of the failed attempt.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<TResult, TStatus> If(bool condition, TStatus succStatus, TStatus failStatus, TResult result)
{
return new Attempt<TResult, TStatus>(condition, result, condition ? succStatus : failStatus, null);
}
/// <summary>
/// Implicitly operator to check if the attempt was successful without having to access the 'success' property
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
public static implicit operator bool(Attempt<TResult, TStatus> a)
{
return a.Success;
}
}
}
-174
View File
@@ -1,174 +0,0 @@
using System;
using Umbraco.Core.Dynamics;
namespace Umbraco.Core
{
/// <summary>
/// Represents the result of an operation attempt.
/// </summary>
/// <typeparam name="T">The type of the attempted operation result.</typeparam>
[Serializable]
public struct Attempt<T>
{
private readonly bool _success;
private readonly T _result;
private readonly Exception _exception;
/// <summary>
/// Gets a value indicating whether this <see cref="Attempt{T}"/> was successful.
/// </summary>
public bool Success
{
get { return _success; }
}
/// <summary>
/// Gets the exception associated with an unsuccessful attempt.
/// </summary>
public Exception Exception { get { return _exception; } }
/// <summary>
/// Gets the exception associated with an unsuccessful attempt.
/// </summary>
/// <remarks>Keep it for backward compatibility sake.</remarks>
[Obsolete(".Error is obsolete, you should use .Exception instead.", false)]
public Exception Error { get { return _exception; } }
/// <summary>
/// Gets the attempt result.
/// </summary>
public T Result
{
get { return _result; }
}
// optimize, use a singleton failed attempt
private static readonly Attempt<T> Failed = new Attempt<T>(false, default(T), null);
/// <summary>
/// Represents an unsuccessful attempt.
/// </summary>
/// <remarks>Keep it for backward compatibility sake.</remarks>
[Obsolete(".Failed is obsolete, you should use Attempt<T>.Fail() instead.", false)]
public static readonly Attempt<T> False = Failed;
// private - use Succeed() or Fail() methods to create attempts
private Attempt(bool success, T result, Exception exception)
{
_success = success;
_result = result;
_exception = exception;
}
/// <summary>
/// Initialize a new instance of the <see cref="Attempt{T}"/> struct with a result.
/// </summary>
/// <param name="success">A value indicating whether the attempt is successful.</param>
/// <param name="result">The result of the attempt.</param>
/// <remarks>Keep it for backward compatibility sake.</remarks>
[Obsolete("Attempt ctors are obsolete, you should use Attempt<T>.Succeed(), Attempt<T>.Fail() or Attempt<T>.If() instead.", false)]
public Attempt(bool success, T result)
: this(success, result, null)
{ }
/// <summary>
/// Initialize a new instance of the <see cref="Attempt{T}"/> struct representing a failed attempt, with an exception.
/// </summary>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <remarks>Keep it for backward compatibility sake.</remarks>
[Obsolete("Attempt ctors are obsolete, you should use Attempt<T>.Succeed(), Attempt<T>.Fail() or Attempt<T>.If() instead.", false)]
public Attempt(Exception exception)
: this(false, default(T), exception)
{ }
/// <summary>
/// Creates a successful attempt.
/// </summary>
/// <returns>The successful attempt.</returns>
public static Attempt<T> Succeed()
{
return new Attempt<T>(true, default(T), null);
}
/// <summary>
/// Creates a successful attempt with a result.
/// </summary>
/// <param name="result">The result of the attempt.</param>
/// <returns>The successful attempt.</returns>
public static Attempt<T> Succeed(T result)
{
return new Attempt<T>(true, result, null);
}
/// <summary>
/// Creates a failed attempt.
/// </summary>
/// <returns>The failed attempt.</returns>
public static Attempt<T> Fail()
{
return Failed;
}
/// <summary>
/// Creates a failed attempt with an exception.
/// </summary>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<T> Fail(Exception exception)
{
return new Attempt<T>(false, default(T), exception);
}
/// <summary>
/// Creates a failed attempt with a result.
/// </summary>
/// <param name="result">The result of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<T> Fail(T result)
{
return new Attempt<T>(false, result, null);
}
/// <summary>
/// Creates a failed attempt with a result and an exception.
/// </summary>
/// <param name="result">The result of the attempt.</param>
/// <param name="exception">The exception causing the failure of the attempt.</param>
/// <returns>The failed attempt.</returns>
public static Attempt<T> Fail(T result, Exception exception)
{
return new Attempt<T>(false, result, exception);
}
/// <summary>
/// Creates a successful or a failed attempt.
/// </summary>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <returns>The attempt.</returns>
public static Attempt<T> SucceedIf(bool condition)
{
return condition ? new Attempt<T>(true, default(T), null) : Failed;
}
/// <summary>
/// Creates a successful or a failed attempt, with a result.
/// </summary>
/// <param name="condition">A value indicating whether the attempt is successful.</param>
/// <param name="result">The result of the attempt.</param>
/// <returns>The attempt.</returns>
public static Attempt<T> SucceedIf(bool condition, T result)
{
return new Attempt<T>(condition, result, null);
}
/// <summary>
/// Implicity operator to check if the attempt was successful without having to access the 'success' property
/// </summary>
/// <param name="a"></param>
/// <returns></returns>
public static implicit operator bool(Attempt<T> a)
{
return a.Success;
}
}
}
-17
View File
@@ -1,17 +0,0 @@
using System;
using System.ComponentModel;
namespace Umbraco.Core.Auditing
{
[Obsolete("Use Umbraco.Core.Services.IAuditService instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static class Audit
{
public static void Add(Umbraco.Core.Auditing.AuditTypes type, string comment, int userId, int objectId)
{
ApplicationContext.Current.Services.AuditService.Add(
Enum<Umbraco.Core.Models.AuditType>.Parse(type.ToString()),
comment, userId, objectId);
}
}
}
@@ -1,351 +0,0 @@
using System;
using System.Linq;
using System.Text;
using System.Threading;
using System.Web;
using Umbraco.Core.Events;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Security;
using Umbraco.Core.Services;
namespace Umbraco.Core.Auditing
{
public sealed class AuditEventHandler : ApplicationEventHandler
{
private IAuditService _auditServiceInstance;
private IUserService _userServiceInstance;
private IEntityService _entityServiceInstance;
private IUser CurrentPerformingUser
{
get
{
var identity = Thread.CurrentPrincipal?.GetUmbracoIdentity();
return identity == null
? new User { Id = 0, Name = "SYSTEM", Email = "" }
: _userServiceInstance.GetUserById(Convert.ToInt32(identity.Id));
}
}
private IUser GetPerformingUser(int userId)
{
var found = userId >= 0 ? _userServiceInstance.GetUserById(userId) : null;
return found ?? new User {Id = 0, Name = "SYSTEM", Email = ""};
}
private string PerformingIp
{
get
{
var httpContext = HttpContext.Current == null ? (HttpContextBase) null : new HttpContextWrapper(HttpContext.Current);
var ip = httpContext.GetCurrentRequestIpAddress();
if (ip.ToLowerInvariant().StartsWith("unknown")) ip = "";
return ip;
}
}
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
_auditServiceInstance = applicationContext.Services.AuditService;
_userServiceInstance = applicationContext.Services.UserService;
_entityServiceInstance = applicationContext.Services.EntityService;
//BackOfficeUserManager.AccountLocked += ;
//BackOfficeUserManager.AccountUnlocked += ;
BackOfficeUserManager.ForgotPasswordRequested += OnForgotPasswordRequest;
BackOfficeUserManager.ForgotPasswordChangedSuccess += OnForgotPasswordChange;
BackOfficeUserManager.LoginFailed += OnLoginFailed;
//BackOfficeUserManager.LoginRequiresVerification += ;
BackOfficeUserManager.LoginSuccess += OnLoginSuccess;
BackOfficeUserManager.LogoutSuccess += OnLogoutSuccess;
BackOfficeUserManager.PasswordChanged += OnPasswordChanged;
BackOfficeUserManager.PasswordReset += OnPasswordReset;
//BackOfficeUserManager.ResetAccessFailedCount += ;
UserService.SavedUserGroup2 += 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}>";
}
private string FormatEmail(IUser user)
{
return user == null ? string.Empty : user.Email.IsNullOrWhiteSpace() ? "" : $"<{user.Email}>";
}
private void OnRemovedRoles(IMemberService sender, RolesEventArgs args)
{
var performingUser = CurrentPerformingUser;
var roles = string.Join(", ", args.Roles);
var members = sender.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
foreach (var id in args.MemberIds)
{
members.TryGetValue(id, out var member);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"Member {id} \"{member?.Name ?? "(unknown)"}\" {FormatEmail(member)}",
"umbraco/member/roles/removed", $"roles modified, removed {roles}");
}
}
private void OnAssignedRoles(IMemberService sender, RolesEventArgs args)
{
var performingUser = CurrentPerformingUser;
var roles = string.Join(", ", args.Roles);
var members = sender.GetAllMembers(args.MemberIds).ToDictionary(x => x.Id, x => x);
foreach (var id in args.MemberIds)
{
members.TryGetValue(id, out var member);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"Member {id} \"{member?.Name ?? "(unknown)"}\" {FormatEmail(member)}",
"umbraco/member/roles/assigned", $"roles modified, assigned {roles}");
}
}
private void OnMemberExported(IMemberService sender, ExportedMemberEventArgs exportedMemberEventArgs)
{
var performingUser = CurrentPerformingUser;
var member = exportedMemberEventArgs.Member;
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"Member {member.Id} \"{member.Name}\" {FormatEmail(member)}",
"umbraco/member/exported", "exported member data");
}
private void OnSavedUserGroupWithUsers(IUserService sender, SaveEventArgs<UserGroupWithUsers> saveEventArgs)
{
var performingUser = CurrentPerformingUser;
foreach (var groupWithUser in saveEventArgs.SavedEntities)
{
var group = groupWithUser.UserGroup;
var dp = string.Join(", ", ((UserGroup)group).GetPreviouslyDirtyProperties());
var sections = ((UserGroup)group).WasPropertyDirty("AllowedSections")
? string.Join(", ", group.AllowedSections)
: null;
var perms = ((UserGroup)group).WasPropertyDirty("Permissions")
? string.Join(", ", group.Permissions)
: null;
var sb = new StringBuilder();
sb.Append($"updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)};");
if (sections != null)
sb.Append($", assigned sections: {sections}");
if (perms != null)
{
if (sections != null)
sb.Append(", ");
sb.Append($"default perms: {perms}");
}
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"User Group {group.Id} \"{group.Name}\" ({group.Alias})",
"umbraco/user-group/save", $"{sb}");
// now audit the users that have changed
foreach (var user in groupWithUser.RemovedUsers)
{
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
user.Id, $"User \"{user.Name}\" {FormatEmail(user)}",
"umbraco/user-group/save", $"Removed user \"{user.Name}\" {FormatEmail(user)} from group {group.Id} \"{group.Name}\" ({group.Alias})");
}
foreach (var user in groupWithUser.AddedUsers)
{
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
user.Id, $"User \"{user.Name}\" {FormatEmail(user)}",
"umbraco/user-group/save", $"Added user \"{user.Name}\" {FormatEmail(user)} to group {group.Id} \"{group.Name}\" ({group.Alias})");
}
}
}
private void UserGroupPermissionAssigned(IUserService sender, SaveEventArgs<EntityPermission> saveEventArgs)
{
var performingUser = CurrentPerformingUser;
var perms = saveEventArgs.SavedEntities;
foreach (var perm in perms)
{
var group = sender.GetUserGroupById(perm.UserGroupId);
var assigned = string.Join(", ", perm.AssignedPermissions);
var entity = _entityServiceInstance.Get(perm.EntityId);
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"User Group {group.Id} \"{group.Name}\" ({group.Alias})",
"umbraco/user-group/permissions-change", $"assigning {(string.IsNullOrWhiteSpace(assigned) ? "(nothing)" : assigned)} on id:{perm.EntityId} \"{entity.Name}\"");
}
}
private void OnSavedMember(IMemberService sender, SaveEventArgs<IMember> saveEventArgs)
{
var performingUser = CurrentPerformingUser;
var members = saveEventArgs.SavedEntities;
foreach (var member in members)
{
var dp = string.Join(", ", ((Member) member).GetPreviouslyDirtyProperties());
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"Member {member.Id} \"{member.Name}\" {FormatEmail(member)}",
"umbraco/member/save", $"updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)}");
}
}
private void OnDeletedMember(IMemberService sender, DeleteEventArgs<IMember> deleteEventArgs)
{
var performingUser = CurrentPerformingUser;
var members = deleteEventArgs.DeletedEntities;
foreach (var member in members)
{
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
-1, $"Member {member.Id} \"{member.Name}\" {FormatEmail(member)}",
"umbraco/member/delete", $"delete member id:{member.Id} \"{member.Name}\" {FormatEmail(member)}");
}
}
private void OnSavedUser(IUserService sender, SaveEventArgs<IUser> saveEventArgs)
{
var performingUser = CurrentPerformingUser;
var affectedUsers = saveEventArgs.SavedEntities;
foreach (var affectedUser in affectedUsers)
{
var groups = affectedUser.WasPropertyDirty("Groups")
? string.Join(", ", affectedUser.Groups.Select(x => x.Alias))
: null;
var dp = string.Join(", ", ((User)affectedUser).GetPreviouslyDirtyProperties());
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
affectedUser.Id, $"User \"{affectedUser.Name}\" {FormatEmail(affectedUser)}",
"umbraco/user/save", $"updating {(string.IsNullOrWhiteSpace(dp) ? "(nothing)" : dp)}{(groups == null ? "" : "; groups assigned: " + groups)}");
}
}
private void OnDeletedUser(IUserService sender, DeleteEventArgs<IUser> deleteEventArgs)
{
var performingUser = CurrentPerformingUser;
var affectedUsers = deleteEventArgs.DeletedEntities;
foreach (var affectedUser in affectedUsers)
_auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp,
DateTime.UtcNow,
affectedUser.Id, $"User \"{affectedUser.Name}\" {FormatEmail(affectedUser)}",
"umbraco/user/delete", "delete user");
}
private void OnLoginSuccess(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = GetPerformingUser(identityArgs.PerformingUser);
WriteAudit(performingUser, identityArgs.AffectedUser, identityArgs.IpAddress, "umbraco/user/sign-in/login", "login success");
}
}
private void OnLogoutSuccess(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs)
{
var performingUser = GetPerformingUser(identityArgs.PerformingUser);
WriteAudit(performingUser, identityArgs.AffectedUser, identityArgs.IpAddress, "umbraco/user/sign-in/logout", "logout success");
}
}
private void OnPasswordReset(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs && identityArgs.PerformingUser >= 0)
{
WriteAudit(identityArgs.PerformingUser, identityArgs.AffectedUser, identityArgs.IpAddress, "umbraco/user/password/reset", "password reset");
}
}
private void OnPasswordChanged(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs && identityArgs.PerformingUser >= 0)
{
WriteAudit(identityArgs.PerformingUser, identityArgs.AffectedUser, identityArgs.IpAddress, "umbraco/user/password/change", "password change");
}
}
private void OnLoginFailed(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs && identityArgs.PerformingUser >= 0)
{
WriteAudit(identityArgs.PerformingUser, 0, identityArgs.IpAddress, "umbraco/user/sign-in/failed", "login failed", affectedDetails: "");
}
}
private void OnForgotPasswordChange(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs && identityArgs.PerformingUser >= 0)
{
WriteAudit(identityArgs.PerformingUser, identityArgs.AffectedUser, identityArgs.IpAddress, "umbraco/user/password/forgot/change", "password forgot/change");
}
}
private void OnForgotPasswordRequest(object sender, EventArgs args)
{
if (args is IdentityAuditEventArgs identityArgs && identityArgs.PerformingUser >= 0)
{
WriteAudit(identityArgs.PerformingUser, identityArgs.AffectedUser, identityArgs.IpAddress, "umbraco/user/password/forgot/request", "password forgot/request");
}
}
private void WriteAudit(int performingId, int affectedId, string ipAddress, string eventType, string eventDetails, string affectedDetails = null)
{
var performingUser = _userServiceInstance.GetUserById(performingId);
var performingDetails = performingUser == null
? $"User UNKNOWN:{performingId}"
: $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}";
WriteAudit(performingId, performingDetails, affectedId, ipAddress, eventType, eventDetails, affectedDetails);
}
private void WriteAudit(IUser performingUser, int affectedId, string ipAddress, string eventType, string eventDetails)
{
var performingDetails = performingUser == null
? $"User UNKNOWN"
: $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}";
WriteAudit(performingUser?.Id ?? 0, performingDetails, affectedId, ipAddress, eventType, eventDetails);
}
private void WriteAudit(int performingId, string performingDetails, int affectedId, string ipAddress, string eventType, string eventDetails, string affectedDetails = null)
{
if (affectedDetails == null)
{
var affectedUser = _userServiceInstance.GetUserById(affectedId);
affectedDetails = affectedUser == null
? $"User UNKNOWN:{affectedId}"
: $"User \"{affectedUser.Name}\" {FormatEmail(affectedUser)}";
}
_auditServiceInstance.Write(performingId, performingDetails,
ipAddress,
DateTime.UtcNow,
affectedId, affectedDetails,
eventType, eventDetails);
}
}
}
-87
View File
@@ -1,87 +0,0 @@
using System;
using System.ComponentModel;
namespace Umbraco.Core.Auditing
{
[Obsolete("Use Umbraco.Core.Models.AuditType instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public enum AuditTypes
{
/// <summary>
/// Used when new nodes are added
/// </summary>
New,
/// <summary>
/// Used when nodes are saved
/// </summary>
Save,
/// <summary>
/// Used when nodes are opened
/// </summary>
Open,
/// <summary>
/// Used when nodes are deleted
/// </summary>
Delete,
/// <summary>
/// Used when nodes are published
/// </summary>
Publish,
/// <summary>
/// Used when nodes are send to publishing
/// </summary>
SendToPublish,
/// <summary>
/// Used when nodes are unpublished
/// </summary>
UnPublish,
/// <summary>
/// Used when nodes are moved
/// </summary>
Move,
/// <summary>
/// Used when nodes are copied
/// </summary>
Copy,
/// <summary>
/// Used when nodes are assígned a domain
/// </summary>
AssignDomain,
/// <summary>
/// Used when public access are changed for a node
/// </summary>
PublicAccess,
/// <summary>
/// Used when nodes are sorted
/// </summary>
Sort,
/// <summary>
/// Used when a notification are send to a user
/// </summary>
Notify,
/// <summary>
/// General system notification
/// </summary>
System,
/// <summary>
/// Used when a node's content is rolled back to a previous version
/// </summary>
RollBack,
/// <summary>
/// Used when a package is installed
/// </summary>
PackagerInstall,
/// <summary>
/// Used when a package is uninstalled
/// </summary>
PackagerUninstall,
/// <summary>
/// Used when a node is send to translation
/// </summary>
SendToTranslate,
/// <summary>
/// Use this log action for custom log messages that should be shown in the audit trail
/// </summary>
Custom
}
}
+3 -12
View File
@@ -1,4 +1,4 @@
using System;
using System;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Web;
@@ -18,9 +18,6 @@ namespace Umbraco.Core
// this only gets called when an assembly can't be resolved
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private static readonly Regex Log4NetAssemblyPattern = new Regex("log4net, Version=([\\d\\.]+?), Culture=neutral, PublicKeyToken=\\w+$", RegexOptions.Compiled);
private const string Log4NetReplacement = "log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a";
/// <summary>
/// This is used to do an assembly binding redirect via code - normally required due to signature changes in assemblies
@@ -30,12 +27,6 @@ namespace Umbraco.Core
/// <returns></returns>
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
//log4net:
if (Log4NetAssemblyPattern.IsMatch(args.Name) && args.Name != Log4NetReplacement)
{
return Assembly.Load(Log4NetAssemblyPattern.Replace(args.Name, Log4NetReplacement));
}
//AutoMapper:
// ensure the assembly is indeed AutoMapper and that the PublicKeyToken is null before trying to Load again
// do NOT just replace this with 'return Assembly', as it will cause an infinite loop -> stackoverflow
@@ -43,7 +34,7 @@ namespace Umbraco.Core
return Assembly.Load(args.Name.Replace(", PublicKeyToken=null", ", PublicKeyToken=be96cd2c38ef1005"));
return null;
}
}
}
}
-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);
}
}
}
@@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Extensions for strongly typed access
/// </summary>
public static class AppCacheExtensions
{
public static T GetCacheItem<T>(this IAppPolicyCache provider,
string cacheKey,
Func<T> getCacheItem,
TimeSpan? timeout,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null)
{
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 IAppPolicyCache provider,
string cacheKey,
Func<T> getCacheItem,
TimeSpan? timeout = null,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null)
{
provider.Insert(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
}
public static IEnumerable<T> GetCacheItemsByKeySearch<T>(this IAppCache provider, string keyStartsWith)
{
var result = provider.SearchByKey(keyStartsWith);
return result.Select(x => x.TryConvertTo<T>().Result);
}
public static IEnumerable<T> GetCacheItemsByKeyExpression<T>(this IAppCache provider, string regexString)
{
var result = provider.SearchByRegex(regexString);
return result.Select(x => x.TryConvertTo<T>().Result);
}
public static T GetCacheItem<T>(this IAppCache provider, string cacheKey)
{
var result = provider.Get(cacheKey);
if (result == null)
{
return default(T);
}
return result.TryConvertTo<T>().Result;
}
public static T GetCacheItem<T>(this IAppCache provider, string cacheKey, Func<T> getCacheItem)
{
var result = provider.Get(cacheKey, () => getCacheItem());
if (result == null)
{
return default(T);
}
return result.TryConvertTo<T>().Result;
}
}
}
+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();
}
}
}
+15 -97
View File
@@ -1,97 +1,15 @@
using System;
using System.ComponentModel;
using Umbraco.Core.CodeAnnotations;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Constants storing cache keys used in caching
/// </summary>
public static class CacheKeys
{
public const string ApplicationTreeCacheKey = "ApplicationTreeCache";
public const string ApplicationsCacheKey = "ApplicationCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string UserTypeCacheKey = "UserTypeCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future - it is referenced but no cache is stored against this key")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string ContentItemCacheKey = "contentItem";
[UmbracoWillObsolete("This cache key is only used for the legacy 'library' caching, remove in v8")]
public const string MediaCacheKey = "UL_GetMedia";
public const string MacroXsltCacheKey = "macroXslt_";
[UmbracoWillObsolete("This cache key is only used for legacy business logic caching, remove in v8")]
public const string MacroCacheKey = "UmbracoMacroCache";
public const string MacroHtmlCacheKey = "macroHtml_";
public const string MacroControlCacheKey = "macroControl_";
public const string MacroHtmlDateAddedCacheKey = "macroHtml_DateAdded_";
public const string MacroControlDateAddedCacheKey = "macroControl_DateAdded_";
[UmbracoWillObsolete("This cache key is only used for legacy 'library' member caching, remove in v8")]
public const string MemberLibraryCacheKey = "UL_GetMember";
[UmbracoWillObsolete("This cache key is only used for legacy business logic caching, remove in v8")]
public const string MemberBusinessLogicCacheKey = "MemberCacheItem_";
[UmbracoWillObsolete("This cache key is only used for legacy template business logic caching, remove in v8")]
public const string TemplateFrontEndCacheKey = "template";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string TemplateBusinessLogicCacheKey = "UmbracoTemplateCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string UserContextCacheKey = "UmbracoUserContext";
public const string UserContextTimeoutCacheKey = "UmbracoUserContextTimeout";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string UserCacheKey = "UmbracoUser";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string UserGroupPermissionsCacheKey = "UmbracoUserGroupPermissions";
[UmbracoWillObsolete("This cache key is only used for legacy business logic caching, remove in v8")]
public const string ContentTypeCacheKey = "UmbracoContentType";
[UmbracoWillObsolete("This cache key is only used for legacy business logic caching, remove in v8")]
public const string ContentTypePropertiesCacheKey = "ContentType_PropertyTypes_Content:";
[Obsolete("No longer used and will be removed in v8")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string PropertyTypeCacheKey = "UmbracoPropertyTypeCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string LanguageCacheKey = "UmbracoLanguageCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string DomainCacheKey = "UmbracoDomainList";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string StylesheetCacheKey = "UmbracoStylesheet";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string StylesheetPropertyCacheKey = "UmbracoStylesheetProperty";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
[EditorBrowsable(EditorBrowsableState.Never)]
public const string DataTypeCacheKey = "UmbracoDataTypeDefinition";
public const string DataTypePreValuesCacheKey = "UmbracoPreVal";
public const string IdToKeyCacheKey = "UI2K__";
public const string KeyToIdCacheKey = "UK2I__";
}
}
namespace Umbraco.Core.Cache
{
/// <summary>
/// Constants storing cache keys used in caching
/// </summary>
public static class CacheKeys
{
public const string ApplicationsCacheKey = "ApplicationCache"; // used by SectionService
// TODO: this one can probably be removed
public const string TemplateFrontEndCacheKey = "template";
public const string MacroContentCacheKey = "macroContent_"; // used in MacroRenderers
}
}
@@ -1,70 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Extensions for strongly typed access
/// </summary>
public static class CacheProviderExtensions
{
public static T GetCacheItem<T>(this IRuntimeCacheProvider provider,
string cacheKey,
Func<T> getCacheItem,
TimeSpan? timeout,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null)
{
var result = provider.GetCacheItem(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
return result == null ? default(T) : result.TryConvertTo<T>().Result;
}
public static void InsertCacheItem<T>(this IRuntimeCacheProvider provider,
string cacheKey,
Func<T> getCacheItem,
TimeSpan? timeout = null,
bool isSliding = false,
CacheItemPriority priority = CacheItemPriority.Normal,
CacheItemRemovedCallback removedCallback = null,
string[] dependentFiles = null)
{
provider.InsertCacheItem(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles);
}
public static IEnumerable<T> GetCacheItemsByKeySearch<T>(this ICacheProvider provider, string keyStartsWith)
{
var result = provider.GetCacheItemsByKeySearch(keyStartsWith);
return result.Select(x => x.TryConvertTo<T>().Result);
}
public static IEnumerable<T> GetCacheItemsByKeyExpression<T>(this ICacheProvider provider, string regexString)
{
var result = provider.GetCacheItemsByKeyExpression(regexString);
return result.Select(x => x.TryConvertTo<T>().Result);
}
public static T GetCacheItem<T>(this ICacheProvider provider, string cacheKey)
{
var result = provider.GetCacheItem(cacheKey);
if (result == null)
{
return default(T);
}
return result.TryConvertTo<T>().Result;
}
public static T GetCacheItem<T>(this ICacheProvider provider, string cacheKey, Func<T> getCacheItem)
{
var result = provider.GetCacheItem(cacheKey, () => getCacheItem());
if (result == null)
{
return default(T);
}
return result.TryConvertTo<T>().Result;
}
}
}
+120 -78
View File
@@ -1,78 +1,120 @@
using System;
using Umbraco.Core.Events;
using Umbraco.Core.Sync;
using umbraco.interfaces;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A base class for cache refreshers to inherit from that ensures the correct events are raised
/// when cache refreshing occurs.
/// </summary>
/// <typeparam name="TInstanceType">The real cache refresher type, this is used for raising strongly typed events</typeparam>
public abstract class CacheRefresherBase<TInstanceType> : ICacheRefresher
where TInstanceType : ICacheRefresher
{
/// <summary>
/// An event that is raised when cache is updated on an individual server
/// </summary>
/// <remarks>
/// This event will fire on each server configured for an Umbraco project whenever a cache refresher
/// is updated.
/// </remarks>
public static event TypedEventHandler<TInstanceType, CacheRefresherEventArgs> CacheUpdated;
/// <summary>
/// Raises the event
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
protected static void OnCacheUpdated(TInstanceType sender, CacheRefresherEventArgs args)
{
if (CacheUpdated != null)
{
CacheUpdated(sender, args);
}
}
/// <summary>
/// Returns the real instance of the object ('this') for use in strongly typed events
/// </summary>
protected abstract TInstanceType Instance { get; }
public abstract Guid UniqueIdentifier { get; }
public abstract string Name { get; }
public virtual void RefreshAll()
{
OnCacheUpdated(Instance, new CacheRefresherEventArgs(null, MessageType.RefreshAll));
}
public virtual void Refresh(int id)
{
OnCacheUpdated(Instance, new CacheRefresherEventArgs(id, MessageType.RefreshById));
}
public virtual void Remove(int id)
{
OnCacheUpdated(Instance, new CacheRefresherEventArgs(id, MessageType.RemoveById));
}
public virtual void Refresh(Guid id)
{
OnCacheUpdated(Instance, new CacheRefresherEventArgs(id, MessageType.RefreshById));
}
/// <summary>
/// Clears the cache for all repository entities of this type
/// </summary>
/// <typeparam name="TEntity"></typeparam>
internal void ClearAllIsolatedCacheByEntityType<TEntity>()
where TEntity : class, IAggregateRoot
{
ApplicationContext.Current.ApplicationCache.IsolatedRuntimeCache.ClearCache<TEntity>();
}
}
}
using System;
using Umbraco.Core.Events;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Sync;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A base class for cache refreshers that handles events.
/// </summary>
/// <typeparam name="TInstanceType">The actual cache refresher type.</typeparam>
/// <remarks>The actual cache refresher type is used for strongly typed events.</remarks>
public abstract class CacheRefresherBase<TInstanceType> : ICacheRefresher
where TInstanceType : class, ICacheRefresher
{
/// <summary>
/// Initializes a new instance of the <see cref="CacheRefresherBase{TInstanceType}"/>.
/// </summary>
/// <param name="appCaches">A cache helper.</param>
protected CacheRefresherBase(AppCaches appCaches)
{
AppCaches = appCaches;
}
/// <summary>
/// Triggers when the cache is updated on the server.
/// </summary>
/// <remarks>
/// Triggers on each server configured for an Umbraco project whenever a cache refresher is updated.
/// </remarks>
public static event TypedEventHandler<TInstanceType, CacheRefresherEventArgs> CacheUpdated;
#region Define
/// <summary>
/// Gets the typed 'this' for events.
/// </summary>
protected abstract TInstanceType This { get; }
/// <summary>
/// Gets the unique identifier of the refresher.
/// </summary>
public abstract Guid RefresherUniqueId { get; }
/// <summary>
/// Gets the name of the refresher.
/// </summary>
public abstract string Name { get; }
#endregion
#region Refresher
/// <summary>
/// Refreshes all entities.
/// </summary>
public virtual void RefreshAll()
{
OnCacheUpdated(This, new CacheRefresherEventArgs(null, MessageType.RefreshAll));
}
/// <summary>
/// Refreshes an entity.
/// </summary>
/// <param name="id">The entity's identifier.</param>
public virtual void Refresh(int id)
{
OnCacheUpdated(This, new CacheRefresherEventArgs(id, MessageType.RefreshById));
}
/// <summary>
/// Refreshes an entity.
/// </summary>
/// <param name="id">The entity's identifier.</param>
public virtual void Refresh(Guid id)
{
OnCacheUpdated(This, new CacheRefresherEventArgs(id, MessageType.RefreshById));
}
/// <summary>
/// Removes an entity.
/// </summary>
/// <param name="id">The entity's identifier.</param>
public virtual void Remove(int id)
{
OnCacheUpdated(This, new CacheRefresherEventArgs(id, MessageType.RemoveById));
}
#endregion
#region Protected
/// <summary>
/// Gets the cache helper.
/// </summary>
protected AppCaches AppCaches { get; }
/// <summary>
/// Clears the cache for all repository entities of a specified type.
/// </summary>
/// <typeparam name="TEntity">The type of the entities.</typeparam>
protected void ClearAllIsolatedCacheByEntityType<TEntity>()
where TEntity : class, IEntity
{
AppCaches.IsolatedCaches.ClearCache<TEntity>();
}
/// <summary>
/// Raises the CacheUpdated event.
/// </summary>
/// <param name="sender">The event sender.</param>
/// <param name="args">The event arguments.</param>
protected static void OnCacheUpdated(TInstanceType sender, CacheRefresherEventArgs args)
{
CacheUpdated?.Invoke(sender, args);
}
#endregion
}
}
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
public class CacheRefresherCollection : BuilderCollectionBase<ICacheRefresher>
{
public CacheRefresherCollection(IEnumerable<ICacheRefresher> items)
: base(items)
{ }
public ICacheRefresher this[Guid id]
=> this.FirstOrDefault(x => x.RefresherUniqueId == id);
}
}
@@ -0,0 +1,9 @@
using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
public class CacheRefresherCollectionBuilder : LazyCollectionBuilderBase<CacheRefresherCollectionBuilder, CacheRefresherCollection, ICacheRefresher>
{
protected override CacheRefresherCollectionBuilder This => this;
}
}
@@ -1,19 +1,19 @@
using System;
using Umbraco.Core.Sync;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Event args for cache refresher updates
/// </summary>
public class CacheRefresherEventArgs : EventArgs
{
public CacheRefresherEventArgs(object msgObject, MessageType type)
{
MessageType = type;
MessageObject = msgObject;
}
public object MessageObject { get; private set; }
public MessageType MessageType { get; private set; }
}
}
using System;
using Umbraco.Core.Sync;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Event args for cache refresher updates
/// </summary>
public class CacheRefresherEventArgs : EventArgs
{
public CacheRefresherEventArgs(object msgObject, MessageType type)
{
MessageType = type;
MessageObject = msgObject;
}
public object MessageObject { get; private set; }
public MessageType MessageType { get; private set; }
}
}
+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,151 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Caching;
using Umbraco.Core.Models;
using Umbraco.Core.Models.EntityBase;
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; private set; }
public DeepCloneRuntimeCacheProvider(IRuntimeCacheProvider innerProvider)
{
if (innerProvider.GetType() == typeof(DeepCloneRuntimeCacheProvider))
throw new InvalidOperationException("A " + typeof(DeepCloneRuntimeCacheProvider) + " cannot wrap another instance of " + typeof(DeepCloneRuntimeCacheProvider));
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 out of 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)
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();
}
//on initial construction we don't want to have dirty properties tracked
// http://issues.umbraco.org/issue/U4-1946
var tracksChanges = input as IRememberBeingDirty;
if (tracksChanges != null)
{
tracksChanges.ResetDirtyProperties(false);
input = tracksChanges;
}
return input;
}
}
}
@@ -1,7 +1,7 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Scoping;
namespace Umbraco.Core.Cache
@@ -18,37 +18,31 @@ namespace Umbraco.Core.Cache
/// <para>If options.GetAllCacheValidateCount then we check against the db when getting many entities.</para>
/// </remarks>
internal class DefaultRepositoryCachePolicy<TEntity, TId> : RepositoryCachePolicyBase<TEntity, TId>
where TEntity : class, IAggregateRoot
where TEntity : class, IEntity
{
private static readonly TEntity[] EmptyEntities = new TEntity[0]; // const
private readonly RepositoryCachePolicyOptions _options;
public DefaultRepositoryCachePolicy(IRuntimeCacheProvider cache, RepositoryCachePolicyOptions options)
: base(cache)
public DefaultRepositoryCachePolicy(IAppPolicyCache cache, IScopeAccessor scopeAccessor, RepositoryCachePolicyOptions options)
: base(cache, scopeAccessor)
{
if (options == null) throw new ArgumentNullException("options");
_options = options;
}
public override IRepositoryCachePolicy<TEntity, TId> Scoped(IRuntimeCacheProvider runtimeCache, IScope scope)
{
return new ScopedRepositoryCachePolicy<TEntity, TId>(this, runtimeCache, scope);
_options = options ?? throw new ArgumentNullException(nameof(options));
}
protected string GetEntityCacheKey(object id)
{
if (id == null) throw new ArgumentNullException("id");
if (id == null) throw new ArgumentNullException(nameof(id));
return GetEntityTypeCacheKey() + id;
}
protected string GetEntityTypeCacheKey()
{
return string.Format("uRepo_{0}_", typeof(TEntity).Name);
return $"uRepo_{typeof (TEntity).Name}_";
}
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)
@@ -58,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
{
@@ -66,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);
}
}
}
@@ -74,7 +68,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void Create(TEntity entity, Action<TEntity> persistNew)
{
if (entity == null) throw new ArgumentNullException("entity");
if (entity == null) throw new ArgumentNullException(nameof(entity));
try
{
@@ -83,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;
}
@@ -106,7 +100,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void Update(TEntity entity, Action<TEntity> persistUpdated)
{
if (entity == null) throw new ArgumentNullException("entity");
if (entity == null) throw new ArgumentNullException(nameof(entity));
try
{
@@ -115,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;
}
@@ -138,7 +132,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void Delete(TEntity entity, Action<TEntity> persistDeleted)
{
if (entity == null) throw new ArgumentNullException("entity");
if (entity == null) throw new ArgumentNullException(nameof(entity));
try
{
@@ -148,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());
}
}
@@ -244,7 +238,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void ClearAll()
{
Cache.ClearAllCache();
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));
}
}
}
@@ -1,255 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Umbraco.Core.Cache
{
internal abstract class DictionaryCacheProviderBase : ICacheProvider
{
// prefix cache keys so we know which one are ours
protected const string CacheItemPrefix = "umbrtmche";
// 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);
// read-write lock the underlying cache
protected abstract IDisposable ReadLock { get; }
protected abstract IDisposable WriteLock { get; }
protected string GetCacheKey(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(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
try
{
return lazy.Value;
}
catch (InvalidOperationException e)
{
throw new InvalidOperationException("The method that computes a value for the cache has tried to read that value from the cache.", e);
}
}
internal class ExceptionHolder
{
public ExceptionHolder(Exception e)
{
Exception = e;
}
public Exception Exception { get; private set; }
}
#region Clear
public virtual void ClearAllCache()
{
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
.ToArray())
RemoveEntry((string) entry.Key);
}
}
public virtual void ClearCacheItem(string key)
{
var cacheKey = GetCacheKey(key);
using (WriteLock)
{
RemoveEntry(cacheKey);
}
}
public virtual void ClearCacheObjectTypes(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
var isInterface = type.IsInterface;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
.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 = GetSafeLazyValue((Lazy<object>)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));
})
.ToArray())
RemoveEntry((string) entry.Key);
}
}
public virtual void ClearCacheObjectTypes<T>()
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
.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 = GetSafeLazyValue((Lazy<object>)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));
})
.ToArray())
RemoveEntry((string) entry.Key);
}
}
public virtual void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
var plen = CacheItemPrefix.Length + 1;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
.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 = GetSafeLazyValue((Lazy<object>)x.Value, true);
if (value == null) return true;
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return (isInterface ? (value is T) : (value.GetType() == typeOfT))
// run predicate on the 'public key' part only, ie without prefix
&& predicate(((string) x.Key).Substring(plen), (T) value);
}))
RemoveEntry((string) entry.Key);
}
}
public virtual void ClearCacheByKeySearch(string keyStartsWith)
{
var plen = CacheItemPrefix.Length + 1;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
.Where(x => ((string)x.Key).Substring(plen).InvariantStartsWith(keyStartsWith))
.ToArray())
RemoveEntry((string) entry.Key);
}
}
public virtual void ClearCacheByKeyExpression(string regexString)
{
var plen = CacheItemPrefix.Length + 1;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
.Where(x => Regex.IsMatch(((string)x.Key).Substring(plen), regexString))
.ToArray())
RemoveEntry((string) entry.Key);
}
}
#endregion
#region Get
public virtual IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith)
{
var plen = CacheItemPrefix.Length + 1;
IEnumerable<DictionaryEntry> entries;
using (ReadLock)
{
entries = GetDictionaryEntries()
.Where(x => ((string)x.Key).Substring(plen).InvariantStartsWith(keyStartsWith))
.ToArray(); // evaluate while locked
}
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
}
public virtual IEnumerable<object> GetCacheItemsByKeyExpression(string regexString)
{
const string prefix = CacheItemPrefix + "-";
var plen = prefix.Length;
IEnumerable<DictionaryEntry> entries;
using (ReadLock)
{
entries = GetDictionaryEntries()
.Where(x => Regex.IsMatch(((string)x.Key).Substring(plen), regexString))
.ToArray(); // evaluate while locked
}
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
}
public virtual object GetCacheItem(string cacheKey)
{
cacheKey = GetCacheKey(cacheKey);
Lazy<object> result;
using (ReadLock)
{
result = GetEntry(cacheKey) as Lazy<object>; // null if key not found
}
return result == null ? null : GetSafeLazyValue(result); // return exceptions as null
}
public abstract object GetCacheItem(string cacheKey, Func<object> getCacheItem);
#endregion
}
}
@@ -0,0 +1,162 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Implements a fast <see cref="IAppCache"/> on top of a concurrent dictionary.
/// </summary>
internal class FastDictionaryAppCache : IAppCache
{
/// <summary>
/// Gets the internal items dictionary, for tests only!
/// </summary>
internal readonly ConcurrentDictionary<string, Lazy<object>> Items = new ConcurrentDictionary<string, Lazy<object>>();
/// <inheritdoc />
public object Get(string cacheKey)
{
Items.TryGetValue(cacheKey, out var result); // else null
return result == null ? null : FastDictionaryAppCacheBase.GetSafeLazyValue(result); // return exceptions as null
}
/// <inheritdoc />
public object Get(string cacheKey, Func<object> getCacheItem)
{
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
}
/// <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
.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 = 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 _);
}
/// <inheritdoc />
public void ClearOfType<T>()
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
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 = 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 _);
}
/// <inheritdoc />
public void ClearOfType<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
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 = FastDictionaryAppCacheBase.GetSafeLazyValue(x.Value, true);
if (value == null) return true;
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return (isInterface ? (value is T) : (value.GetType() == typeOfT))
// run predicate on the 'public key' part only, ie without prefix
&& predicate(x.Key, (T)value);
}))
Items.TryRemove(kvp.Key, out _);
}
/// <inheritdoc />
public void ClearByKey(string keyStartsWith)
{
foreach (var ikvp in Items
.Where(kvp => kvp.Key.InvariantStartsWith(keyStartsWith)))
Items.TryRemove(ikvp.Key, out _);
}
/// <inheritdoc />
public void ClearByRegex(string regex)
{
var compiled = new Regex(regex, RegexOptions.Compiled);
foreach (var ikvp in Items
.Where(kvp => compiled.IsMatch(kvp.Key)))
Items.TryRemove(ikvp.Key, out _);
}
}
}
@@ -0,0 +1,329 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.ExceptionServices;
using System.Text.RegularExpressions;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Cache
{
/// <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";
// an object that represent a value that has not been created yet
protected internal static readonly object ValueNotCreated = new object();
#region IAppCache
/// <inheritdoc />
public virtual object Get(string key)
{
key = GetCacheKey(key);
Lazy<object> result;
try
{
EnterReadLock();
result = GetEntry(key) as Lazy<object>; // null if key not found
}
finally
{
ExitReadLock();
}
return result == null ? null : GetSafeLazyValue(result); // return exceptions as null
}
/// <inheritdoc />
public abstract object Get(string key, Func<object> factory);
/// <inheritdoc />
public virtual IEnumerable<object> SearchByKey(string keyStartsWith)
{
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
}
/// <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
}
/// <inheritdoc />
public virtual void Clear()
{
try
{
EnterWriteLock();
foreach (var entry in GetDictionaryEntries()
.ToArray())
RemoveEntry((string) entry.Key);
}
finally
{
ExitWriteLock();
}
}
/// <inheritdoc />
public virtual void Clear(string key)
{
var cacheKey = GetCacheKey(key);
try
{
EnterWriteLock();
RemoveEntry(cacheKey);
}
finally
{
ExitWriteLock();
}
}
/// <inheritdoc />
public virtual void ClearOfType(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
var isInterface = type.IsInterface;
try
{
EnterWriteLock();
foreach (var entry in GetDictionaryEntries()
.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 = GetSafeLazyValue((Lazy<object>) 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));
})
.ToArray())
RemoveEntry((string) entry.Key);
}
finally
{
ExitWriteLock();
}
}
/// <inheritdoc />
public virtual void ClearOfType<T>()
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
try
{
EnterWriteLock();
foreach (var entry in GetDictionaryEntries()
.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 = GetSafeLazyValue((Lazy<object>) 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));
})
.ToArray())
RemoveEntry((string) entry.Key);
}
finally
{
ExitWriteLock();
}
}
/// <inheritdoc />
public virtual void ClearOfType<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
var plen = CacheItemPrefix.Length + 1;
try
{
EnterWriteLock();
foreach (var entry in GetDictionaryEntries()
.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 = GetSafeLazyValue((Lazy<object>) x.Value, true);
if (value == null) return true;
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return (isInterface ? (value is T) : (value.GetType() == typeOfT))
// run predicate on the 'public key' part only, ie without prefix
&& predicate(((string) x.Key).Substring(plen), (T) value);
}))
RemoveEntry((string) entry.Key);
}
finally
{
ExitWriteLock();
}
}
/// <inheritdoc />
public virtual void ClearByKey(string keyStartsWith)
{
var plen = CacheItemPrefix.Length + 1;
try
{
EnterWriteLock();
foreach (var entry in GetDictionaryEntries()
.Where(x => ((string)x.Key).Substring(plen).InvariantStartsWith(keyStartsWith))
.ToArray())
RemoveEntry((string) entry.Key);
}
finally
{
ExitWriteLock();
}
}
/// <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 => compiled.IsMatch(((string)x.Key).Substring(plen)))
.ToArray())
RemoveEntry((string) entry.Key);
}
finally
{
ExitWriteLock();
}
}
#endregion
#region Dictionary
// 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)
{
return $"{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 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
{
return lazy.Value;
}
catch (InvalidOperationException e)
{
throw new InvalidOperationException("The method that computes a value for the cache has tried to read that value from the cache.", e);
}
}
internal class ExceptionHolder
{
public ExceptionHolder(ExceptionDispatchInfo e)
{
Exception = e;
}
public ExceptionDispatchInfo Exception { get; }
}
#endregion
}
}
@@ -1,8 +1,8 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Collections;
using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Models.Entities;
using Umbraco.Core.Scoping;
namespace Umbraco.Core.Cache
@@ -19,28 +19,23 @@ namespace Umbraco.Core.Cache
/// keep as a whole in memory.</para>
/// </remarks>
internal class FullDataSetRepositoryCachePolicy<TEntity, TId> : RepositoryCachePolicyBase<TEntity, TId>
where TEntity : class, IAggregateRoot
where TEntity : class, IEntity
{
private readonly Func<TEntity, TId> _entityGetId;
private readonly bool _expires;
public FullDataSetRepositoryCachePolicy(IRuntimeCacheProvider cache, Func<TEntity, TId> entityGetId, bool expires)
: base(cache)
public FullDataSetRepositoryCachePolicy(IAppPolicyCache cache, IScopeAccessor scopeAccessor, Func<TEntity, TId> entityGetId, bool expires)
: base(cache, scopeAccessor)
{
_entityGetId = entityGetId;
_expires = expires;
}
public override IRepositoryCachePolicy<TEntity, TId> Scoped(IRuntimeCacheProvider runtimeCache, IScope scope)
{
return new ScopedRepositoryCachePolicy<TEntity, TId>(this, runtimeCache, scope);
}
protected static readonly TId[] EmptyIds = new TId[0]; // const
protected string GetEntityTypeCacheKey()
{
return string.Format("uRepo_{0}_", typeof(TEntity).Name);
return $"uRepo_{typeof (TEntity).Name}_";
}
protected void InsertEntities(TEntity[] entities)
@@ -56,20 +51,22 @@ namespace Umbraco.Core.Cache
// set to ListCloneBehavior.CloneOnce ie it will clone *once* when inserting,
// and then will *not* clone when retrieving.
var key = GetEntityTypeCacheKey();
if (_expires)
{
Cache.InsertCacheItem(GetEntityTypeCacheKey(), () => new DeepCloneableList<TEntity>(entities), TimeSpan.FromMinutes(5), true);
Cache.Insert(key, () => new DeepCloneableList<TEntity>(entities), TimeSpan.FromMinutes(5), true);
}
else
{
Cache.InsertCacheItem(GetEntityTypeCacheKey(), () => new DeepCloneableList<TEntity>(entities));
Cache.Insert(key, () => new DeepCloneableList<TEntity>(entities));
}
}
/// <inheritdoc />
public override void Create(TEntity entity, Action<TEntity> persistNew)
{
if (entity == null) throw new ArgumentNullException("entity");
if (entity == null) throw new ArgumentNullException(nameof(entity));
try
{
@@ -84,7 +81,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void Update(TEntity entity, Action<TEntity> persistUpdated)
{
if (entity == null) throw new ArgumentNullException("entity");
if (entity == null) throw new ArgumentNullException(nameof(entity));
try
{
@@ -99,7 +96,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void Delete(TEntity entity, Action<TEntity> persistDeleted)
{
if (entity == null) throw new ArgumentNullException("entity");
if (entity == null) throw new ArgumentNullException(nameof(entity));
try
{
@@ -120,7 +117,7 @@ namespace Umbraco.Core.Cache
// see note in InsertEntities - what we get here is the original
// cached entity, not a clone, so we need to manually ensure it is deep-cloned.
return entity == null ? null : (TEntity) entity.DeepClone();
return (TEntity)entity?.DeepClone();
}
/// <inheritdoc />
@@ -128,11 +125,11 @@ namespace Umbraco.Core.Cache
{
// get all from the cache -- and only the cache, then look for the entity
var all = Cache.GetCacheItem<DeepCloneableList<TEntity>>(GetEntityTypeCacheKey());
var entity = all == null ? null : all.FirstOrDefault(x => _entityGetId(x).Equals(id));
var entity = all?.FirstOrDefault(x => _entityGetId(x).Equals(id));
// see note in InsertEntities - what we get here is the original
// cached entity, not a clone, so we need to manually ensure it is deep-cloned.
return entity == null ? null : (TEntity)entity.DeepClone();
return (TEntity) entity?.DeepClone();
}
/// <inheritdoc />
@@ -159,7 +156,7 @@ namespace Umbraco.Core.Cache
}
// does NOT clone anything, so be nice with the returned values
private IEnumerable<TEntity> GetAllCached(Func<TId[], IEnumerable<TEntity>> performGetAll)
internal IEnumerable<TEntity> GetAllCached(Func<TId[], IEnumerable<TEntity>> performGetAll)
{
// try the cache first
var all = Cache.GetCacheItem<DeepCloneableList<TEntity>>(GetEntityTypeCacheKey());
@@ -174,7 +171,7 @@ namespace Umbraco.Core.Cache
/// <inheritdoc />
public override void ClearAll()
{
Cache.ClearCacheItem(GetEntityTypeCacheKey());
Cache.Clear(GetEntityTypeCacheKey());
}
}
}
}
@@ -0,0 +1,144 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Implements a fast <see cref="IAppCache"/> on top of HttpContext.Items.
/// </summary>
/// <remarks>
/// <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 HttpRequestAppCache : FastDictionaryAppCacheBase
{
private readonly 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;
}
/// <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)
{
//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 + "-";
if (HasContextItems == false) return Enumerable.Empty<DictionaryEntry>();
return ContextItems.Cast<DictionaryEntry>()
.Where(x => x.Key is string s && s.StartsWith(prefix));
}
protected override void RemoveEntry(string key)
{
if (HasContextItems == false) return;
ContextItems.Remove(key);
}
protected override object GetEntry(string key)
{
return HasContextItems ? ContextItems[key] : null;
}
#endregion
#region Lock
private const string ContextItemsLockKey = "Umbraco.Core.Cache.HttpRequestCache::LockEntered";
protected override void EnterReadLock() => EnterWriteLock();
protected override void EnterWriteLock()
{
if (HasContextItems)
{
// note: cannot keep 'entered' as a class variable here,
// since there is one per request - so storing it within
// ContextItems - which is locked, so this should be safe
var entered = false;
Monitor.Enter(ContextItems.SyncRoot, ref entered);
ContextItems[ContextItemsLockKey] = entered;
}
}
protected override void ExitReadLock() => ExitWriteLock();
protected override void ExitWriteLock()
{
var entered = (bool?) ContextItems[ContextItemsLockKey] ?? false;
if (entered)
Monitor.Exit(ContextItems.SyncRoot);
ContextItems.Remove(ContextItemsLockKey);
}
#endregion
}
}
@@ -1,155 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A cache provider that caches items in the HttpContext.Items
/// </summary>
/// <remarks>
/// If the Items collection is null, then this provider has no effect
/// </remarks>
internal class HttpRequestCacheProvider : DictionaryCacheProviderBase
{
// 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)
{
_context = context;
}
// main constructor
// will use HttpContext.Current
public HttpRequestCacheProvider(/*Func<HttpContext> context*/)
{
//_context2 = context;
}
protected override IEnumerable<DictionaryEntry> GetDictionaryEntries()
{
const string prefix = CacheItemPrefix + "-";
if (HasContextItems == false) return Enumerable.Empty<DictionaryEntry>();
return ContextItems.Cast<DictionaryEntry>()
.Where(x => x.Key is string && ((string)x.Key).StartsWith(prefix));
}
protected override void RemoveEntry(string key)
{
if (HasContextItems == false) return;
ContextItems.Remove(key);
}
protected override object GetEntry(string key)
{
return HasContextItems ? ContextItems[key] : null;
}
#region Lock
protected override IDisposable ReadLock
{
// there's no difference between ReadLock and WriteLock here
get { return WriteLock; }
}
protected override IDisposable WriteLock
{
// NOTE
// could think about just overriding base.Locker to return a different
// object but then we'd create a ReaderWriterLockSlim per request,
// which is less efficient than just using a basic monitor lock.
get
{
return HasContextItems
? (IDisposable) new MonitorLock(ContextItems.SyncRoot)
: new NoopLocker();
}
}
#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;
using (WriteLock)
{
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;
}
}
// 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)
var eh = value as ExceptionHolder;
if (eh != null) throw eh.Exception; // throw once!
return value;
}
#endregion
#region Insert
#endregion
private class NoopLocker : DisposableObjectSlim
{
protected override void DisposeResources()
{ }
}
}
}
@@ -1,218 +0,0 @@
using System;
using System.Collections;
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
/// </summary>
internal class HttpRuntimeCacheProvider : DictionaryCacheProviderBase, IRuntimeCacheProvider
{
// locker object that supports upgradeable read locking
// does not need to support recursion if we implement the cache correctly and ensure
// that methods cannot be reentrant, ie we do NOT create values while holding a lock.
private readonly ReaderWriterLockSlim _locker = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
private readonly System.Web.Caching.Cache _cache;
/// <summary>
/// Used for debugging
/// </summary>
internal Guid InstanceId { get; private set; }
public HttpRuntimeCacheProvider(System.Web.Caching.Cache cache)
{
_cache = cache;
InstanceId = Guid.NewGuid();
}
protected override IEnumerable<DictionaryEntry> GetDictionaryEntries()
{
const string prefix = CacheItemPrefix + "-";
return _cache.Cast<DictionaryEntry>()
.Where(x => x.Key is string && ((string)x.Key).StartsWith(prefix));
}
protected override void RemoveEntry(string key)
{
_cache.Remove(key);
}
protected override object GetEntry(string key)
{
return _cache.Get(key);
}
#region Lock
protected override IDisposable ReadLock
{
get { return new ReadLock(_locker); }
}
protected override IDisposable WriteLock
{
get { return new WriteLock(_locker); }
}
#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)
{
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);
// 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
// nasty performance issues.
// So.... we insert a Lazy<object> in the cache while holding the global application lock, and then rely
// on the Lazy lock to ensure that getCacheItem runs once and everybody waits on it, while the global
// application lock has been released.
// NOTE
// The Lazy value creation may produce a null value.
// Must make sure (for backward compatibility) that we pretend they are not in the cache.
// So if we find an entry in the cache that already has its value created and is null,
// pretend it was not there. If value is not already created, wait... and return null, that's
// what prior code did.
// NOTE
// The Lazy value creation may throw.
// So... the null value _will_ be in the cache but never returned
Lazy<object> result;
// Fast!
// Only one thread can enter an UpgradeableReadLock at a time, but it does not prevent other
// threads to enter a ReadLock in the meantime -- only upgrading to WriteLock will prevent all
// reads. We first try with a normal ReadLock for maximum concurrency and take the penalty of
// having to re-lock in case there's no value. Would need to benchmark to figure out whether
// it's worth it, though...
using (new ReadLock(_locker))
{
result = _cache.Get(cacheKey) as Lazy<object>; // null if key not found
}
var value = result == null ? null : GetSafeLazyValue(result);
if (value != null) return value;
using (var lck = new UpgradeableReadLock(_locker))
{
result = _cache.Get(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);
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);
}
}
// 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;
value = result.Value; // will not throw (safe lazy)
var eh = value as ExceptionHolder;
if (eh != null) throw new Exception("Exception while creating a value.", eh.Exception); // throw once!
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)
{
// 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 = 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; // do not store null values (backward compat)
cacheKey = GetCacheKey(cacheKey);
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);
using (new WriteLock(_locker))
{
//NOTE: 'Insert' on System.Web.Caching.Cache actually does an add or update!
_cache.Insert(cacheKey, result, dependency, absolute, sliding, priority, removedCallback);
}
}
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
}
}

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