Compare commits

..

661 Commits

Author SHA1 Message Date
Niels Lyngsø dbb99c2e6b use btn style action for consistency + cleaning button styles 2019-03-19 14:19:34 +01:00
Niels Lyngsø 61c76dc28b Merge remote-tracking branch 'origin/dev-v8' into temp8-4621-consistent-create-buttons 2019-03-19 13:54:03 +01:00
Niels Lyngsø 532f69e9b7 Show checkmark when list has selection 2019-03-19 13:53:13 +01:00
Bjarke Berg e2b1f0a82d Merge pull request #4948 from umbraco/temp8-temp-gather-url-for-list-items
V8: Provide url in content lists for ability to open item in a new tab
2019-03-19 13:35:45 +01:00
Niels Lyngsø 9597bde7bb visual corrections + remember view layout in a cookie 2019-03-19 13:03:59 +01:00
Niels Lyngsø 7f45d852ed fix search icon location 2019-03-19 13:03:02 +01:00
Niels Lyngsø 3f10c78bee correct js error 2019-03-19 11:04:52 +01:00
Niels Lyngsø 4b02bf2ddf use umb-table for users table 2019-03-19 10:55:36 +01:00
Niels Lyngsø 542eb2ab1d borrow great stuff from KJAC. 2019-03-19 10:04:13 +01:00
Sebastiaan Janssen 935a495d0e Merge branch 'dev-v8' of https://github.com/umbraco/Umbraco-CMS into dev-v8 2019-03-19 09:46:47 +01:00
Sebastiaan Janssen fe7c6bd1ed Merge branch 'patch-8.0.1' into dev-v8 2019-03-19 09:46:14 +01:00
Sebastiaan Janssen 44cb5fd96b Apparently the highest minClientVersion allowed is 4.1.0 for now - see https://github.com/NuGet/NuGetGallery/blob/master/src/NuGetGallery/GalleryConstants.cs#L36 2019-03-19 09:24:41 +01:00
Niels Lyngsø 137c08eaf3 Parse $event argument 2019-03-19 09:06:05 +01:00
Bjarke Berg 1545fe0d5f Merge pull request #5004 from kjac/v8-fix-filter-datatypes
V8: Improve the filtering in the datatype picker
2019-03-19 08:20:09 +01:00
Niels Lyngsø 9e7a062671 Merge branch 'dev-v8' into temp8-4621-consistent-create-buttons 2019-03-19 08:10:18 +01:00
Niels Lyngsø 970f336a5d clean up imports 2019-03-18 16:41:34 +01:00
Niels Lyngsø c6dfc28f03 make open user able to open in a new tab + only use pointer is selectable + improved hover state for open user 2019-03-18 16:34:41 +01:00
Niels Lyngsø 873d230e0e improve hover state for open user 2019-03-18 16:19:02 +01:00
Niels Lyngsø 4a26bfe3c3 clean up imports 2019-03-18 15:00:32 +01:00
Stephan 79dd593ee7 Merge pull request #5009 from umbraco/v8/bugfix/4967-list-view-ordering-ispublished
V8: Fix for ordering by isPublished in list view
2019-03-18 14:56:19 +01:00
Bjarke Berg 919f139607 https://github.com/umbraco/Umbraco-CMS/issues/4967 - fix for ordering by IsPublished in list view 2019-03-18 14:52:50 +01:00
Kenn Jacobsen 6e2c143d00 Improve the filtering in the datatype picker 2019-03-18 12:16:20 +01:00
Bjarke Berg 212b0ba932 Missing injection 2019-03-18 10:14:23 +01:00
Warren Buckley 51be2a5baf Merge pull request #5002 from umbraco/v8/bugfix/avoid-breaking-change-in-dashboard-events
Avoid removing a public method (used by forms 8.0.0)
2019-03-18 09:08:57 +00:00
Bjarke Berg 44beb81e71 Avoid removing a public method (used by forms 8.0.0) 2019-03-18 09:51:05 +01:00
Bjarke Berg 2f187fa403 Merge pull request #5001 from kjac/v8-fix-inherit-culture
V8: Fix the "Language" dropdown in the "Culture and Hostnames" dialog
2019-03-18 08:39:41 +01:00
Bjarke Berg 7359b0b244 Merge pull request #4996 from kjac/v8-fix-assign-domain-close-on-save
V8: Automatically close "Cultures and Hostnames" on successful save
2019-03-18 08:33:15 +01:00
Kenn Jacobsen 8f06603774 Fix the "Language" dropdown in the "Culture and Hostnames" dialog 2019-03-17 20:51:42 +01:00
Kenn Jacobsen 688173488d Automatically close "Cultures and Hostnames" on successful save 2019-03-15 09:26:21 +01:00
Warren Buckley edb8340b32 Merge pull request #4364 from umbraco/abjerner-patch-1
V8: fixed type of dashboards in EditorModelEventManager
2019-03-14 15:00:34 +00:00
Robert b0b987f9cd Merge pull request #4710 from umbraco/temp8-4708-fix-for-exit-preview-with-null-culture
Fix for exit preview with null culture

(cherry picked from commit 9b25cdaa14)
2019-03-14 13:21:28 +01:00
Niels Lyngsø 808d33edf6 force commit white logo svg 2019-03-13 11:13:00 +01:00
Shannon Deminick 8714bb816f Merge pull request #4950 from umbraco/v8/feature/4590-resolvable-ifactory
IFactory is resolvable
2019-03-13 14:49:12 +11:00
Robert a3e842a315 Merge pull request #4844 from umbraco/dev-v8-4827-fix-for-image-mediapickervalueconverter
V8: Fix for MediaPickerValueConverter when config is only images
2019-03-12 11:59:54 +01:00
Robert c3bf6b0631 Merge pull request #4908 from umbraco/temp8-ui-use-umb-checkbox-for-all-variants-dialogs
Use umb-checkbox for all content variant dialogs
2019-03-12 11:55:40 +01:00
Robert bf28dfe04a Merge pull request #4956 from umbraco/temp8-fix-for-creating-content-templates
V8: Fixed issue when creating variant content templates,
2019-03-12 11:30:44 +01:00
Robert 3e6cdd86b2 Merge branch 'dev-v8' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs 2019-03-12 11:09:20 +01:00
Robert abd681277d Merge pull request #4906 from umbraco/temp8-ui-umb-checkbox-refactor-for-general-usage
changed umb-checkbox model to be the boolean property, not a object c…
2019-03-12 10:29:43 +01:00
Niels Lyngsø 5ad1dcf894 Merge remote-tracking branch 'origin/temp8-4728' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.html
2019-03-12 10:17:17 +01:00
Niels Lyngsø 485c1fbf6c use existing notifications for warnings 2019-03-12 10:14:25 +01:00
Niels Lyngsø 447eb88b86 Use tokens for translate + shortcut for reject 2019-03-12 10:14:06 +01:00
Robert ece9c4ae21 Merge branch 'dev-v8' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs 2019-03-12 10:08:14 +01:00
Robert 1509c7364c Reverted extra check 2019-03-12 09:52:03 +01:00
Bjarke Berg 010e2e1f19 Merge pull request #4954 from umbraco/temp8-grid-rte-image-size
Fixes inserting an image into the grid rte since it doesn't get resized correctly
2019-03-12 09:07:54 +01:00
Robert 9b25cdaa14 Merge pull request #4710 from umbraco/temp8-4708-fix-for-exit-preview-with-null-culture
Fix for exit preview with null culture
2019-03-12 08:31:28 +01:00
Bjarke Berg 31eea2a2a8 Fixed issue when creating variant content templates, but the properties is invariant. Before this change an exception was thrown 2019-03-12 08:17:09 +01:00
Shannon 2e52a869b6 Merge branch 'dev-v8' into temp8-4728
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/content/overlays/publish.controller.js
2019-03-12 13:03:32 +11:00
Shannon 95d1ceb529 overrides ToString on UrlInfo to return the correct result 2019-03-12 12:47:37 +11:00
Shannon 10f333081d Fixes inserting an image into the grid rte since it doesn't get resized correctly 2019-03-12 12:43:04 +11:00
Shannon Deminick cefff71edf Merge pull request #4853 from umbraco/temp8-js-error-unpublishing
Fixes javascript error when trying to unpublish an invariant item
2019-03-12 11:18:09 +11:00
Stephan 13d97fffdf IFactory is resolvable 2019-03-11 17:14:07 +01:00
Sebastiaan Janssen ba297ad839 Merge branch 'patch-8.0.1' into dev-v8 2019-03-11 16:12:18 +01:00
Sebastiaan Janssen 3961e2533d Fix JS unit tests 2019-03-11 15:50:16 +01:00
Stephan b46f842400 Do not inject IEnumerable but Collection in UmbracoContextFactory
(cherry picked from commit 7e67bbea13)
2019-03-11 15:41:40 +01:00
Stephan 7e67bbea13 Do not inject IEnumerable but Collection in UmbracoContextFactory 2019-03-11 15:37:07 +01:00
Kenn Jacobsen 930acfeb68 Show the content app for media folders with content properties
(cherry picked from commit 9062b400d4)
2019-03-11 14:58:13 +01:00
Kenn Jacobsen 9062b400d4 Show the content app for media folders with content properties 2019-03-11 14:57:25 +01:00
Shannon b004c616ad Removes faulty CustomRouteUrlProvider
(cherry picked from commit 52beb01110)
2019-03-11 14:54:43 +01:00
Niels Lyngsø 48ec795e7b do not open as infinite editing yet. 2019-03-11 14:54:11 +01:00
Bjarke Berg e7781cd95b DRY - Reused code 2019-03-11 14:53:49 +01:00
Niels Lyngsø 1098db1632 use item.editPath for new tab URL 2019-03-11 14:52:16 +01:00
Shannon 6880937b90 Merge branch 'dev-v8' of https://github.com/umbraco/Umbraco-CMS into dev-v8 2019-03-12 00:46:52 +11:00
Shannon 52beb01110 Removes faulty CustomRouteUrlProvider 2019-03-12 00:46:39 +11:00
Sebastiaan Janssen 9d64c4e551 Bugfix CoreRuntime
(cherry picked from commit 2209b37a4a and 7f31ddc250)
2019-03-11 14:45:48 +01:00
Stephan fbfa7e8566 Cleanup temp path in global config 2019-03-11 14:40:18 +01:00
Sebastiaan Janssen 9a0aacd45a Upgrade to ModelsBuilder 8.0.2, support Custom Tool (#4881)
* Upgrade to ModelsBuilder 8.0.2, support Custom Tool

* Upgrade to ModelsBuilder 8.0.3

* Fix controllers

* Upgrade MB

* Fix previous commit

(cherry picked from commit c85c055424)
2019-03-11 14:37:59 +01:00
Stephan c85c055424 Upgrade to ModelsBuilder 8.0.2, support Custom Tool (#4881)
* Upgrade to ModelsBuilder 8.0.2, support Custom Tool

* Upgrade to ModelsBuilder 8.0.3

* Fix controllers

* Upgrade MB

* Fix previous commit
2019-03-11 23:14:32 +11:00
Niels Lyngsø 829980adb2 Merge remote-tracking branch 'origin/dev-v8' into temp8-temp-gather-url-for-list-items
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/layouts/list/list.listviewlayout.controller.js
2019-03-11 13:05:59 +01:00
Bjarke Berg 8f3bcf87da Merge pull request #4754 from umbraco/temp8-ui-update-login-screen
V8: UI — updated login screen
2019-03-11 12:41:40 +01:00
Niels Lyngsø ba55c24d43 correcting path in umbracoSettings.Release.config
+ changed comment to fit with new look
2019-03-11 12:40:23 +01:00
Niels Lyngsø 4d806c1cef correction error colors 2019-03-11 12:38:04 +01:00
Niels Lyngsø b237e4a55e make warnings an array that angularJS can watch 2019-03-11 12:37:53 +01:00
Niels Lyngsø 502794aae9 validation text provided for more languages, plus it takes action when name is an empty string 2019-03-11 11:51:13 +01:00
Kenn Jacobsen 29ff7bc340 Handle checkbox value conversion from Nested Content
(cherry picked from commit 2352b50d97)
2019-03-08 15:09:54 +01:00
Kenn Jacobsen 2352b50d97 Handle checkbox value conversion from Nested Content 2019-03-08 15:07:50 +01:00
Niels Lyngsø 356b7681e8 Merge remote-tracking branch 'origin/temp8-ui-umb-checkbox-refactor-for-general-usage' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs 2019-03-08 14:37:42 +01:00
Niels Lyngsø 0d58b4c42b renamed umb-checkbox id attribute to input-id to avoid colliding Ids 2019-03-08 14:37:23 +01:00
Niels Lyngsø 171cae5fca reverted this line, cause for some wierd reason this line works, and corrected one ruins the feature. Super wierd, i guess the person writting this was just lucky to hit something that works. Need to look into what is going on here. 2019-03-08 14:24:54 +01:00
Niels Lyngsø 979a166b41 changed checkbox-inputs to umb-checkbox 2019-03-08 14:23:37 +01:00
Niels Lyngsø 623ace56bc Improved UX of Save
+ Remove special case for new content
+ Never disable the user choices, instead provide feedback for when the selection doesn't make sense.
2019-03-08 14:22:05 +01:00
Niels Lyngsø 7203926cea no need for type attribute 2019-03-08 12:54:55 +01:00
Niels Lyngsø 021bf470c2 umb-checkbox for save dialog 2019-03-08 12:41:33 +01:00
Niels Lyngsø 7194d7d6b8 update to input-id 2019-03-08 12:41:18 +01:00
Niels Lyngsø 45423ae932 use tokens in localizationsService for replace of %0% 2019-03-08 12:40:57 +01:00
Niels Lyngsø 2b7f12253f umb-checkbox id renamed to input-id for it not to collide, since ids have to be unique. 2019-03-08 12:40:24 +01:00
Niels Lyngsø 129210946d Merge branch 'temp8-ui-umb-checkbox-refactor-for-general-usage' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs 2019-03-07 15:29:47 +01:00
Niels Lyngsø 62808958b0 umb-checkbox callback should call a new digest for callbacks changes to take effect. 2019-03-07 15:29:28 +01:00
Niels Lyngsø c5096e67e6 Merge remote-tracking branch 'origin/temp8-ui-umb-checkbox-refactor-for-general-usage' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbcheckbox.directive.js
2019-03-07 14:47:40 +01:00
Niels Lyngsø 320d2ae953 Change umb-checkbox to AngularJs Component + fix for callback digest flow 2019-03-07 14:46:50 +01:00
Niels Lyngsø 264a96971a Merge remote-tracking branch 'origin/temp8-ui-umb-checkbox-refactor-for-general-usage' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/components/forms/umb-checkbox.html
2019-03-07 13:01:04 +01:00
Niels Lyngsø 8c28172efc changed umb-checkbox model to be the boolean property, not a object containing a checked property.
This means that the on-change callback will recive the model and the value instead.
2019-03-07 12:57:10 +01:00
Niels Lyngsø 8a4dfd4350 first step for implementing umb-checkbox 2019-03-07 11:54:46 +01:00
Niels Lyngsø 3814138d68 Merge remote-tracking branch 'origin/dev-v8' into temp8-ui-use-umb-checkbox-for-all-variants-dialogs 2019-03-07 11:32:04 +01:00
Niels Lyngsø f54a8725db CSS: change form check inputs to use not-allow cursor when disabled 2019-03-07 11:25:13 +01:00
Bjarne Fyrstenborg bbc2b1a54a v8: Checkbox/radio with disabled state (#4902)
* Add property to disable checkbox and radiobutton

* Add basic styles of disabled state

* Change cursor style for disabled checkbox/radiobutton

* Remove duplicate classes

* Change nested elements to span since it is not valid to have div as nested elements in labels

* Adjust positions

* Better way to center align icon

* Add white as default background color in checkbox/radiobutton e.g. for Nested Content

* Adjust sizing a bit
2019-03-07 11:24:16 +01:00
Niels Lyngsø 6dc5a3b130 Make login background image configurable 2019-03-07 10:33:10 +01:00
Niels Lyngsø 3d941e89a6 Merge remote-tracking branch 'origin/dev-v8' into temp8-ui-update-login-screen 2019-03-07 10:00:56 +01:00
Bjarke Berg a988bd2608 Merge pull request #4809 from umbraco/temp8-3958-fixes-doc-type-details-in-narrow-screen
V8: makes document-details go on to two lines when necessary
2019-03-07 09:57:28 +01:00
Niels Lyngsø cb083d5b2a increased break point to 500px 2019-03-07 09:47:03 +01:00
Sebastiaan Janssen 8334d088e7 Update PULL_REQUEST_TEMPLATE.md 2019-03-07 09:33:43 +01:00
Shannon 39a97fb768 Enable adding api controllers 2019-03-07 19:09:13 +11:00
Shannon Deminick 75a9109971 Merge pull request #4874 from umbraco/temp8-4873-register-api-controllers
Enable adding api controllers
2019-03-07 18:33:13 +11:00
Shannon 52cea17816 Merge remote-tracking branch 'origin/dev-v8' into temp8-4873-register-api-controllers 2019-03-07 18:32:48 +11:00
Niels Lyngsø 6a67f38025 Merge remote-tracking branch 'origin/dev-v8' into temp8-3958-fixes-doc-type-details-in-narrow-screen 2019-03-07 08:12:04 +01:00
Shannon Deminick 22d012c4db Merge pull request #4856 from umbraco/temp8-4775-components-sequence
Better composer sequence
2019-03-07 18:04:01 +11:00
Niels Lyngsø 3046e44f60 minor UI improvements regarding validation 2019-03-07 07:59:13 +01:00
Shannon 790da9d5ca Adds todo note 2019-03-07 17:23:00 +11:00
Stephan 7f31ddc250 Bugfix CoreRuntime 2019-03-06 18:11:10 +01:00
Kenn Jacobsen 0852bd90d0 Always update URLs on save no matter which app is active
(cherry picked from commit 869d088e4b)
2019-03-06 17:26:36 +01:00
Kenn Jacobsen 869d088e4b Always update URLs on save no matter which app is active 2019-03-06 17:02:10 +01:00
Niels Lyngsø e28365a0e5 hack for not using scope() in grid redordering
(cherry picked from commit a67163fd03)
2019-03-06 16:58:57 +01:00
Sebastiaan Janssen 6e3ffc0dd9 Removes outdated gulp setup helper 2019-03-06 16:19:14 +01:00
Niels Lyngsø 45dc3a26ed Updated CONTRIBUTING_DETAILED to fit new npm setup (#4735)
Updated CONTRIBUTING_DETAILED to fit new npm setup

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
2019-03-06 16:06:56 +01:00
Sebastiaan Janssen 9ef94a667c Merge pull request #4716 from MMasey/#4715
#4715 - V8 - IE11: section name underline not in correct position
2019-03-06 15:39:24 +01:00
Niels Lyngsø 70122c85d7 Merge pull request #4825 from kjac/v8-fix-validation-colors
V8: Update validation colors throughout the backoffice
2019-03-06 15:31:39 +01:00
Niels Lyngsø 72e236a7ab css class umb-list-item--error for when a list item contain a error that needs to be highlighted, currently only used for Save & Publish overlay-dialog. 2019-03-06 14:58:32 +01:00
Sebastiaan Janssen 0d16c79d0c Require higher NuGet version so we don't target VS15 any more (unsupported)
Making backups before we upgrade is no longer needed, removed from install.ps1
If people include the bin folder in their solution they will get errors upgrading now, we shouldn't need to try and fix this, there's no reason to include the bin folder in the solution - therefore install.core.ps1 is removed

(cherry picked from commit 82b78c7530)
2019-03-06 14:57:53 +01:00
Niels Lyngsø 444497be7c For Save & Publish overlay:
+ Publish multiple variants for new nodes.
+ Auto selects mandatory languages.
+ Auto selects languages that has changes.
+ Provides feedback if missing nodeName on variant that isn't open.
+ Highlights "mandatory language"-description if variant isn't selected.
2019-03-06 14:42:31 +01:00
Sebastiaan Janssen b7e929a675 Fix checkboxes and radiobuttons saving the wrong value 2019-03-06 14:01:11 +01:00
Stephan 2209b37a4a Bugfix CoreRuntime 2019-03-06 11:56:03 +01:00
Sebastiaan Janssen 634138724b Merge branch 'dev-v7' into dev-v8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbcheckbox.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/forms/umbradiobutton.directive.js
#	src/Umbraco.Web.UI.Client/src/less/components/umb-form-check.less
#	src/Umbraco.Web.UI.Client/src/views/components/forms/umb-checkbox.html
#	src/Umbraco.Web.UI.Client/src/views/components/forms/umb-radiobutton.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/radiobuttons/radiobuttons.html
#	src/Umbraco.Web/Trees/ApplicationTreeController.cs
#	src/Umbraco.Web/Trees/ContentTreeControllerBase.cs
#	src/Umbraco.Web/Trees/MemberTreeController.cs
#	src/Umbraco.Web/Trees/TreeControllerBase.cs
#	src/Umbraco.Web/WebApi/Filters/HttpQueryStringFilterAttribute.cs
#	src/Umbraco.Web/WebApi/Filters/HttpQueryStringModelBinder.cs
#	src/umbraco.cms/businesslogic/translation/Translation.cs
2019-03-06 11:47:30 +01:00
Sebastiaan Janssen d1c9b7a060 Merge pull request #4842 from umbraco/temp8-merge-3464
Merge branch 'dev-v7' into dev-v8
2019-03-06 11:45:09 +01:00
Sebastiaan Janssen b65f60af78 Update documentation 2019-03-06 11:43:50 +01:00
Niels Lyngsoe 92453c4652 fix front-end requirement of umb-checkbox 2019-03-06 11:18:07 +01:00
Sebastiaan Janssen b86a1aa687 Merge branch 'patch-8.0.1' into dev-v8
# Conflicts:
#	src/SolutionInfo.cs
#	src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs
2019-03-06 10:44:09 +01:00
Sebastiaan Janssen ac4c98a7fc Enable direct command execution in build script (#4882) 2019-03-06 10:35:26 +01:00
Sebastiaan Janssen 7cc8983a25 Fix NuCache url segments
(cherry picked from commits 7a0f11bc6f and cfa94b1bb8)
2019-03-06 10:25:21 +01:00
Bjarke Berg b406835c9c Code styling 2019-03-06 10:08:15 +01:00
Stephan 9f7fae2ca6 Enable adding api controllers 2019-03-05 19:23:57 +01:00
Bjarke Berg f508a97c18 Merge pull request #4857 from umbraco/temp8-4649-fix-nucache-url-segments
Fix NuCache url segments
2019-03-05 14:54:51 +01:00
Niels Lyngsø b4de15f19e removed unused htmlId 2019-03-05 14:22:58 +01:00
Bjarke Berg f8abd0f457 Merge pull request #4858 from umbraco/temp8-fix-malformed-logs
Fixes LogViewer if JSON log contains malformed JSON lines
2019-03-05 13:41:54 +01:00
Niels Lyngsø 31eefe1cf9 Front-end mandatory-validation for radiolist and checkbox list. 2019-03-05 13:20:59 +01:00
Stephan a14b1540ea Merge pull request #4848 from umbraco/temp8-modernize-nuget-install
Modernize NuGet install
2019-03-05 13:15:10 +01:00
Warren Buckley 67fdf75da8 Fix typo 2019-03-05 11:12:04 +00:00
Niels Lyngsø 21405266ef align the use of input name attribute for checkboxes and radiobuttons 2019-03-05 11:38:43 +01:00
Niels Lyngsø a4d25dc594 design corrections 2019-03-05 11:38:04 +01:00
Warren Buckley 27cc433b96 We will ignore malformed log lines in the JSON log file - so the rest of the logviewer continues to work 2019-03-05 10:35:51 +00:00
Stephan cfa94b1bb8 Import missing file 2019-03-05 11:21:29 +01:00
Stephan 7a0f11bc6f Fix NuCache url segments 2019-03-05 11:15:30 +01:00
Stephan b665d4825d Better composer sequence 2019-03-05 08:53:37 +01:00
Stephan 55a374bb71 Introduce WebFinalComponent 2019-03-05 08:53:37 +01:00
Shannon 13b35ec7ce Fix to get Js unit tests working again. 2019-03-05 18:53:26 +11:00
Shannon Deminick 54968c819b Merge pull request #4803 from umbraco/temp8-4752-fix-reordering-grid-in-non-debug-mode
Solution for not using scope() in grid redordering
2019-03-05 16:52:01 +11:00
Shannon c910e3afaf Fixes javascript error when trying to unpublish an invariant item 2019-03-05 16:39:03 +11:00
Shannon e7f8baeca4 fixed correct destination url instead of #. 2019-03-05 16:14:06 +11:00
Shannon Deminick 4b7c14113c Merge pull request #4770 from umbraco/temp8-4652-tinymce-inserting-image
change insertContent to selection.setContent
2019-03-05 16:12:05 +11:00
Shannon Deminick b294b83c9f Merge pull request #4753 from mvanhelmont/#4580
Redirects management is broken #4580
2019-03-05 16:04:11 +11:00
Shannon Deminick 5ddba3e64e Merge pull request #3851 from umbraco/temp-fix-formdatacollection-3796
Fixes binding of FormDataCollection for GET requests which fixes the …
2019-03-05 13:39:37 +10:00
Stephan e716d14a0a Fix distributed cache handler for medias (#4751)
(cherry picked from commit 31b293aa4d)
2019-03-04 16:51:15 +01:00
Stephan 31b293aa4d Fix distributed cache handler for medias (#4751) 2019-03-04 16:39:34 +01:00
Sebastiaan Janssen 82b78c7530 Require higher NuGet version so we don't target VS15 any more (unsupported)
Making backups before we upgrade is no longer needed, removed from install.ps1
If people include the bin folder in their solution they will get errors upgrading now, we shouldn't need to try and fix this, there's no reason to include the bin folder in the solution - therefore install.core.ps1 is removed
2019-03-04 16:27:44 +01:00
Robert Foster 4c6a742007 Changed all references of umbracoUseSSL to Umbraco.Core.UseHttps to fix issue #4749
(cherry picked from commit 5aa38c1f43)
2019-03-04 15:33:08 +01:00
Sebastiaan Janssen 410241b61d 4766 fixed up other instances where nodeSelectHandler was being passed incorrect number of arguments
(cherry picked from commit 553bf6d304 and 4503967778)
2019-03-04 15:13:30 +01:00
Kenn Jacobsen 4e47fa9a70 Fix the "selected" checkmark in tree picker search results
(cherry picked from commit 09dc908332)
2019-03-04 15:10:55 +01:00
Robert Foster 9c5fb1fead Fix for Content App badges not being displayed (#4787)
(cherry picked from commit 055f983cbf)
2019-03-04 15:10:09 +01:00
Sebastiaan Janssen dc41db5fc1 Bumps version to 8.0.1 2019-03-04 15:08:23 +01:00
Sebastiaan Janssen 11b6a98df8 Bugfix exception during install, live models collision
(cherry picked from commit aa86dfa956)
2019-03-04 15:05:17 +01:00
Sebastiaan Janssen da9fc1e147 Make it possible to upload the same file twice or more (#4755)
(cherry picked from commit b5bda772af)
2019-03-04 15:04:27 +01:00
Sebastiaan Janssen 319c75757a Bugfix: Don't use ToString :'(
(cherry picked from commit ed6d54e64a)
2019-03-04 15:01:54 +01:00
Pete Duncanson 6e81e57c8e Removed System.Web.WebPages reference in nonodes.aspx as was failing a clean build
(cherry picked from commit f1d1c95709)
2019-03-04 14:58:05 +01:00
Sebastiaan Janssen 9ebe282ba6 Ensure we dont double insert
(cherry picked from commit 578eb8b32c and b86e7dc0e8)
2019-03-04 14:57:13 +01:00
Niels Lyngsø d3904086f0 adjusted PR 3464 for V8 2019-03-04 14:39:49 +01:00
Bjarke Berg a43f8c4cbd Bugfix: https://github.com/umbraco/Umbraco-CMS/issues/4827 - Fixed MediaPickerValueConverter when config is Only Images 2019-03-04 14:31:45 +01:00
Pete Duncanson f1d1c95709 Removed System.Web.WebPages reference in nonodes.aspx as was failing a clean build 2019-03-04 14:21:38 +01:00
Sebastiaan Janssen 58ce528324 Merge branch 'dev-v7' into dev-v8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/radiobuttons/radiobuttons.html
#	src/umbraco.cms/businesslogic/translation/Translation.cs
2019-03-04 13:43:31 +01:00
Niels Lyngsø c72a5c07fe Merge pull request #3464 from BatJan/feature/temp-U4-3463
3463 - Suggestion: Make checkboxes look prettier in checkbox lists
2019-03-04 11:39:08 +01:00
Stephan eace918258 Merge pull request #4782 from kjac/v8-fix-create-content-template
V8: Fix "ambient scope" error when creating content template from content
2019-03-04 10:40:40 +01:00
Niels Lyngsoe 409ae99bf7 renaming of umb-form-control to umb-form-check 2019-03-04 10:29:58 +01:00
Stephan 8961e8b4be Merge pull request #4834 from umbraco/temp-4609-rte-not-rendering-macros-correctly
Bugfix: Could not render macros in RTE
2019-03-04 09:29:06 +01:00
Stephan b526b8f246 Merge pull request #4823 from Brianmanden/patch-1
Update Utf8ToAsciiConverter.cs
2019-03-04 09:15:00 +01:00
Bjarke Berg ed6d54e64a Bugfix: Don't use ToString :'( 2019-03-04 08:43:19 +01:00
Kenn Jacobsen 89153c2fcf Update log viewer error color 2019-03-03 16:22:12 +01:00
Kenn Jacobsen c134aff6cd Update validation colors throughout the backoffice 2019-03-03 13:54:45 +01:00
Brian Juul Andersen 57290c4180 Update Utf8ToAsciiConverter.cs
Fix minor grammatical error.
2019-03-02 21:44:28 +01:00
Kenn Jacobsen 84b60f8b9f V8: Make variant state clickable in various dialogs (#4760)
* Fix publish dialog

* Fix publish with descendants dialog

* Fix save dialog

* Fix scheduled publishing dialog

* Fix send to publish dialog

* Fix unpublish dialog

* Add missing magic IDs to send to publish dialog so the labels actually work.

* Add missing magic IDs to unpublish dialog
2019-03-01 15:21:34 +01:00
Niels Lyngsø e33ae253ee makes document-details go on to two lines when necessary 2019-03-01 12:56:09 +01:00
Niels Lyngsø a67163fd03 hack for not using scope() in grid redordering 2019-02-28 15:29:28 +01:00
Shannon Deminick cfc04a9df0 Merge pull request #4799 from robertjf/dev-v8-uduf-4749
v8 - uduf - Changed all references of umbracoUseSSL to Umbraco.Core.UseHttps to f…
2019-02-28 18:20:25 +11:00
Shannon 3e4ff05d37 removes unused params 2019-02-28 17:18:47 +10:00
Shannon Deminick 28034d664e Merge pull request #4793 from dinc5150/4489
v8 - uduf - Redirect away from page under the settings section when the page is deleted
2019-02-28 18:16:33 +11:00
David Sheiles edf3fd5d31 remove test code 2019-02-28 18:15:41 +11:00
David Sheiles f7705ef134 Move logic from navigation service to controller 2019-02-28 18:10:03 +11:00
David Sheiles f0caa6be4b Update null check 2019-02-28 17:57:05 +11:00
Robert Foster 5aa38c1f43 Changed all references of umbracoUseSSL to Umbraco.Core.UseHttps to fix issue #4749 2019-02-28 16:48:56 +10:00
Shannon Deminick b809f9f03a Merge pull request #4798 from emmanueltissera/v8-uduf2019-issue-4757
v8 - uduf - Fixes hotkey for navigation between apps and content apps
2019-02-28 17:45:16 +11:00
Shannon Deminick eabc05d6f8 Merge pull request #4796 from skartknet/4790_-_Content_and_media_overloads_for_Udis
4790 - added Content and Media Udi overloads
2019-02-28 17:33:05 +11:00
David Sheiles d3fb614d25 Move logic to tree service and navigarion service 2019-02-28 17:29:40 +11:00
Emmanuel Tissera 0eb7d404a1 Fixes hotkey for navigation between apps and content apps
Fixes https://github.com/umbraco/Umbraco-CMS/issues/4757
2019-02-28 17:10:39 +11:00
Mario Lopez 093b57505a simplified GuidUdi checking. 2019-02-28 16:50:28 +11:00
Shannon Deminick 2a7cd4d94a Merge pull request #4797 from iofsauron/4766-list-view-selected-bug
4766 list view selected bug
2019-02-28 16:31:56 +11:00
iofsauron 4503967778 4766 fixed up other instances where nodeSelectHandler was being passed incorrect number of arguments 2019-02-28 15:02:53 +10:00
Mario Lopez f227f2ed61 added Content and Media Udi overloads 2019-02-28 13:55:14 +11:00
iofsauron 553bf6d304 4766 Fixed list view selected item issue by uncommenting out the umb-table-body__fileicon and umb-table-body__checkicon. Fixed call to nodeSelectHandler in selectListViewNode by removing erroneous first parameter 2019-02-28 12:33:49 +10:00
David Sheiles 45dfef78bd Redirect away from page under the settings section when the page is deleted. Affects DataTypes, DocTypes, Macros, MediaTypes, Membertypes, PartialViewMacro,PartialViews, Scripts, Stylesheet & Templates 2019-02-28 13:33:45 +11:00
Shannon Deminick b172a5f847 Merge pull request #4791 from robertjf/dev-v8-uduf-4787
Fix for Content App badges not being displayed (#4787)
2019-02-28 13:05:56 +11:00
Shannon 41f80b942a Merge branch 'dev-v8' of https://github.com/umbraco/Umbraco-CMS into dev-v8 2019-02-28 11:02:12 +10:00
Robert Foster 055f983cbf Fix for Content App badges not being displayed (#4787) 2019-02-28 11:01:59 +10:00
Shannon 3e9556fead Adds TODO note 2019-02-28 11:01:53 +10:00
Kenn Jacobsen b403272389 Fix "ambient scope" error when creating content template from content 2019-02-27 18:54:53 +01:00
Niels Lyngsø 60b178dcf7 change insertContent to selection.setContent 2019-02-27 10:28:40 +01:00
Jan Skovgaard 969a9c1193 Update radiobuttons view to make use of the umb-radiobutton directive 2019-02-27 09:56:22 +01:00
Jan Skovgaard 3643e170c5 Add radiobutton directive 2019-02-27 09:55:52 +01:00
Kenn Jacobsen b5bda772af Make it possible to upload the same file twice or more (#4755) 2019-02-27 09:51:11 +01:00
Mikkel Holck Madsen 02ccd45bf6 Merge pull request #4767 from umbraco/temp8-4711-update-web-config-transformations-to-v8
Updated versions and added new dependencies to transformation file
2019-02-27 09:47:12 +01:00
Bjarke Berg b86e7dc0e8 Ensure we dont double insert 2019-02-27 09:44:28 +01:00
Jan Skovgaard afc872de5a Refactor checkboxlist to make use of the umbcheckbox directive 2019-02-27 09:40:48 +01:00
Jan Skovgaard 56aef39014 Add checkbox directive 2019-02-27 09:40:25 +01:00
Bjarke Berg 578eb8b32c Updated versions and added new dependencies to transformation file 2019-02-27 09:30:15 +01:00
Bjarke Berg f2d7ed69ca Fix for printing html in uninstall package readme 2019-02-27 09:10:33 +01:00
Jan Skovgaard ae07b2b299 Refactor modifiers so they're done on the top level of the block instead 2019-02-26 21:42:24 +01:00
Jan Skovgaard b99cf238e0 Fix order of pseudo selectors to :focus is actually also set on the focused radio button 2019-02-26 21:26:14 +01:00
Jan Skovgaard 68457b7eaf Refactor styling of checkbox and radiobuttons so they're now both "umb-form-control" with modifiers, which makes it easier to reuse especially the checkbox throughout the UI. The umb-editor has been extented to have a item element and a list modfier too. Overall less code too 2019-02-26 21:21:55 +01:00
Jan Skovgaard 24c74676f6 Merge branch 'dev-v7' into feature/temp-U4-3463 2019-02-26 19:45:51 +01:00
Marcel van Helmont ff708f4ad5 fixed correct destination url instead of #. 2019-02-26 12:17:20 +01:00
Marcel van Helmont 44212f6b53 Revert "the wrong id was used for getting the correct destination url."
This reverts commit 5d1fccb2c4.
2019-02-26 12:15:22 +01:00
Marcel van Helmont 5d1fccb2c4 the wrong id was used for getting the correct destination url. 2019-02-26 12:12:18 +01:00
Per Søndergaard Jensen ac1ee2fe0c #4428 - Replaced Log.Add calls with AuditService.Add in translations 2019-02-26 11:17:08 +01:00
Claus 746573d28b Merge pull request #4744 from kjac/v8-fix-selectable-search-results
V8: Fix the "selected" checkmark in tree picker search results
2019-02-26 10:36:07 +01:00
Kenn Jacobsen 09dc908332 Fix the "selected" checkmark in tree picker search results 2019-02-26 09:56:07 +01:00
Sebastiaan Janssen 35bf75bc82 Do the version dance 2019-02-26 09:28:51 +01:00
Sebastiaan Janssen cb0268dfdd Merge branch 'dev-v8-fix' into dev-v8 2019-02-26 09:17:47 +01:00
Sebastiaan Janssen 9186b392c9 Merge branch 'dev-v7' into dev-v8
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/common/directives/components/imaging/umbimagecrop.directive.js
#	src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs
2019-02-25 19:57:18 +01:00
Skid Vis 4f30dd32f1 Updates link to dev-v8
Was linked to temp8 which no longer exists and results in 404
2019-02-25 17:20:35 +01:00
Anders Bjerner bac2b1cb71 Updated reference to dev-v7 as dev-v8 is now the default branch 2019-02-25 17:19:55 +01:00
Bjarke Berg 57af355d85 Bugfix: get installStateComplete variable from labels 2019-02-25 14:37:25 +01:00
Carole Rennie Logan 9bcce48df3 still reference to temp8 2019-02-25 07:43:35 +01:00
Skid Vis c83630b376 Updates branch to checkout when trying v8
The branch specified, 'temp8', no longer exists. Updates to the current 'dev-v8' branch name.
2019-02-23 16:32:33 +01:00
Sebastiaan Janssen e1856bf851 Update README.md 2019-02-23 16:30:18 +01:00
Sebastiaan Janssen fe3525bc54 Update README.md 2019-02-23 16:27:18 +01:00
Sebastiaan Janssen 452dcbd016 Update README.md 2019-02-23 16:26:48 +01:00
Mike 7a20ea8781 fix: position of section name underline on IE11 2019-02-23 15:00:29 +00:00
Sebastiaan Janssen 4b489b52ef Bump version again 2019-02-23 14:21:44 +01:00
Stephan aa86dfa956 Bugfix exception during install, live models collision 2019-02-22 19:13:48 +01:00
Bjarke Berg 02122f5e03 Revert "Fix NullReferenceException when using LocalDb, because SqlServerSyntaxProvider.ServerVersion can be null"
This reverts commit a9450f9e.

Root cause is fixed
2019-02-22 14:27:54 +01:00
Bjarke Berg 064f637006 #4708 - Fix for YSOD when exiting preview with on invariant cultures 2019-02-22 11:23:57 +01:00
Bjarke Berg a9450f9ed9 Fix NullReferenceException when using LocalDb, because SqlServerSyntaxProvider.ServerVersion can be null 2019-02-22 11:02:37 +01:00
Stephan 04e916b41c Fix test 2019-02-22 10:42:43 +01:00
Stephan e167388e74 Make UniqueMediaPathScheme deterministic 2019-02-22 09:44:25 +01:00
Claus b8db430615 Revert "Fix UmbracoDatabaseFactory"
This reverts commit 716fc582a0.
2019-02-21 21:01:24 +01:00
Sebastiaan Janssen f9d51ba415 fix version 2019-02-21 19:32:11 +01:00
Stephan e07a17db29 Merge branch 'dev-v8' of https://github.com/umbraco/Umbraco-CMS into dev-v8 2019-02-21 19:17:01 +01:00
Stephan ad62983327 Introduce ILivePublishedModelFactory 2019-02-21 19:15:35 +01:00
Bjarke Berg fc8ae1b228 Merge remote-tracking branch 'origin/dev-v8' into dev-v8-fix 2019-02-21 16:24:31 +01:00
Stephan 48f27afbc9 Merge branch 'dev-v8' of https://github.com/umbraco/Umbraco-CMS into dev-v8 2019-02-21 16:23:20 +01:00
Stephan e1532f9215 Merge branch 'temp8-saving-event-cannot-publish-values' into dev-v8 2019-02-21 16:22:44 +01:00
Bjarke Berg a2279d03f6 Materializing the TypeContentSources before iterating them. 2019-02-21 16:13:21 +01:00
Bjarke Berg e52ff0ea03 merge fix 2019-02-21 14:57:41 +01:00
Bjarke Berg aaa8e881f8 Version number revert 2019-02-21 14:45:12 +01:00
Bjarke Berg 14ec6b8792 Merge branch 'dev-v8' into dev-v8-fix
# Conflicts:
#	src/Umbraco.Core/IO/ShadowWrapper.cs
2019-02-21 14:43:18 +01:00
Stephan 90feb463aa Cleanup 2019-02-21 14:13:37 +01:00
Stephan 73c4e734b3 Move to UniqueMediaPathScheme 2019-02-21 13:48:33 +01:00
Stephan c85b90d65d Combined Guids media path scheme 2019-02-21 13:48:14 +01:00
Stephan e923b940f9 Cleanup Url token encoding 2019-02-21 13:47:10 +01:00
Bjarke Berg d29d629eae Merge pull request #4688 from umbraco/temp8-4674-media-paths
Fix media paths length issues
2019-02-21 13:21:39 +01:00
Stephan 50b076ce38 Merge branch 'dev-v8' into temp8-saving-event-cannot-publish-values 2019-02-21 13:03:36 +01:00
Stephan badb55476b Merge branch 'dev-v8' of https://github.com/umbraco/Umbraco-CMS into dev-v8 2019-02-21 13:03:19 +01:00
Stephan 9ecd63eaed Move to UniqueMediaPathScheme 2019-02-21 12:20:10 +01:00
Stephan 5edd61107f Combined Guids media path scheme 2019-02-21 11:28:51 +01:00
Stephan c21039f1af Fix SqlServer bulk insert / unwrapping commands 2019-02-21 11:17:41 +01:00
Stephan 51f6c639bf Cleanup Url token encoding 2019-02-21 09:35:38 +01:00
Shannon d9a3fa443d fixes test 2019-02-21 15:29:36 +11:00
Shannon 13a1c02507 Fixes content service Saving events so that they are fired before the model's values are published when the service is publishing 2019-02-21 14:46:14 +11:00
Shannon 7a9bc19ffd Adds notes + unit test showing the problem 2019-02-21 12:08:00 +11:00
Stephan 3dfe653ef4 Better throwing on long path in filesystems 2019-02-20 17:04:29 +01:00
Stephan db4dc9006a Shorten filepaths 2019-02-20 17:04:29 +01:00
Stephan 212244b9f2 Hopefully fix PublishedMember 2019-02-20 17:04:29 +01:00
Stephan 12f7492d80 Reorg code 2019-02-20 17:04:29 +01:00
Claus d9d68cf6bf The content service is not returning the invalid properties when publishing fails
(cherry picked from commit d94e383ed7)
2019-02-20 16:17:39 +01:00
Claus d94e383ed7 The content service is not returning the invalid properties when publishing fails 2019-02-20 16:05:42 +01:00
Stephan 716fc582a0 Fix UmbracoDatabaseFactory 2019-02-20 15:52:21 +01:00
Stephan 50c9625cc6 Oops fix previous commit 2019-02-20 15:01:32 +01:00
Stephan 5cbc428590 Fix UserRepository 2019-02-20 15:00:23 +01:00
Stephan db4d88b2dc Shorten shadow filesystems identifiers 2019-02-20 14:10:15 +01:00
Stephan d9d54f7982 Merge branch 'temp8-fixes-published-content-children-method' into dev-v8
(cherry picked from commit 735d759208)
2019-02-20 13:36:10 +01:00
Shannon a61a2b4d97 Removes notes
(cherry picked from commit 717efb6b09)
2019-02-20 13:35:50 +01:00
Stephan 735d759208 Merge branch 'temp8-fixes-published-content-children-method' into dev-v8 2019-02-20 12:56:14 +01:00
Shannon 65f99a9bfd renames the method params to be consistent 2019-02-20 21:06:36 +11:00
Shannon 6c23066fb7 Fixes the Content.Children conundrum with ChildrenOfType method 2019-02-20 21:03:36 +11:00
Shannon 717efb6b09 Removes notes 2019-02-20 20:37:10 +11:00
Anders Bjerner 4d71c5550b Should be returned as a list - otherwise we'll get a new collection and new tab objects each time we iterate over it 2019-02-19 22:36:12 +01:00
Anders Bjerner 0636616a6b #H5IS 2019-02-19 22:21:13 +01:00
Sebastiaan Janssen 91c52cffc8 And revert again 2019-02-19 15:57:40 +01:00
Sebastiaan Janssen 03e7779afb Update install screen 2019-02-19 15:57:06 +01:00
Sebastiaan Janssen 15562ec12f Bump version 2019-02-19 15:01:26 +01:00
Sebastiaan Janssen 6e8862954a Bump version 2019-02-19 15:00:58 +01:00
Warren Buckley 9c7ab96c92 Typo FilderedControllerFactory (#4650) 2019-02-19 14:23:26 +01:00
Sebastiaan Janssen 8f17d6fcd2 Merge branch 'patch-7.13.2' into dev-v7
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/colorpicker/colorpicker.controller.js
2019-02-19 11:22:59 +01:00
Stephan 49ca4bbc91 Fix MB in nuspec 2019-02-19 09:42:42 +01:00
Stephan 5121142760 Merge remote-tracking branch 'origin/temp8' into temp8 2019-02-19 08:48:59 +01:00
Stephan 4c53604bd0 Merge branch 'temp8-fixes-publishing-new-content' into temp8 2019-02-19 08:48:28 +01:00
Stephan bf329aa431 Merge branch 'temp8' into temp8-fixes-publishing-new-content 2019-02-19 08:45:54 +01:00
Bjarke Berg d456ee9a31 Merge pull request #4632 from umbraco/temp8-4438
Fixes 4438: Local variant picker squeezes the width of node-name-input, to make it scroll instead of disappear behind.
2019-02-19 08:36:33 +01:00
Stephan f06d720dbd Fix SqlServer detection 2019-02-19 08:12:48 +01:00
Bjarke Berg 87839f4f6a Merge pull request #4643 from umbraco/temp8-show-notification-msg-client-validation
v8 - Shows a notification message when client validation fails in the content editor, else it's not clear there are any problems
2019-02-19 07:54:55 +01:00
Shannon 02f8c4a106 Adds TODO note 2019-02-19 16:55:57 +11:00
Shannon 71ad7df787 adds code comments 2019-02-19 12:23:08 +11:00
Shannon 4b7520b6f8 Updates the validation warning for media and members 2019-02-19 12:06:55 +11:00
Shannon c06c996ccf Shows a notification message when client validation fails in the content editor, else it's not clear there are any problems. 2019-02-19 11:46:46 +11:00
Sebastiaan Janssen 9fe4d9c44e Make "add group" shortcut consistent 2019-02-18 22:00:25 +01:00
Carole Rennie Logan 560174a21f V8: Changing tab to group (#4391) 2019-02-18 21:44:32 +01:00
Kenn Jacobsen e34a0ec73b Update/fix the blur handling for the tags editor 2019-02-18 20:54:55 +01:00
Jan Skovgaard 152b318d78 v8: Remove open sans font (#4613) 2019-02-18 20:52:18 +01:00
BatJan 414c6b8788 Remove old preview functionality 2019-02-18 20:50:57 +01:00
SimonHilo 1300389ce6 Skip the check for approved/locked out members if not using Umbracos built-in MembershipProvider (#4607) 2019-02-18 20:49:27 +01:00
Kenn Jacobsen ea8d8ba771 Make the image crop slider move at 66 hertz 2019-02-18 20:39:16 +01:00
Kenn Jacobsen 1eb6ae10c9 Fix the initial zoom offset for new crops in the image cropper 2019-02-18 20:38:11 +01:00
Jan Skovgaard 5d3e1fb95f v7: User history showing even if it's empty (#4524) 2019-02-18 20:36:36 +01:00
Kenn Jacobsen 19fb1a55e3 Add missing dirty checks to mediatypes 2019-02-18 20:34:16 +01:00
Kenn Jacobsen b02a9c3e7a Add missing dirty checks to content type dirty checking 2019-02-18 20:22:19 +01:00
Shannon e6f8309d54 reverts the list view changes so they open normally 2019-02-18 17:01:34 +01:00
Shannon 3ecf4144e7 Fixes publishing new variant content that has validation errors 2019-02-19 02:51:05 +11:00
Sebastiaan Janssen 817dd21155 Allow for unselecting a color in the color picker 2019-02-18 16:42:05 +01:00
Sebastiaan Janssen 34216fd635 Create a valid date picker datatype 2019-02-18 16:16:31 +01:00
Shannon c81ff85b41 Merge branch 'kjac-v8-fix-dont-retain-cculture' into temp8 2019-02-19 01:52:26 +11:00
Shannon ca1ec0e4a3 Merge branch 'v8-fix-dont-retain-cculture' of https://github.com/kjac/Umbraco-CMS into kjac-v8-fix-dont-retain-cculture 2019-02-19 01:49:27 +11:00
Shannon f2ae41ada2 Fixes the culturerequest.interceptor so that it works in tests (and so circular deps aren't caused), internalizes ClientCulture and makes it a little less error prone. 2019-02-19 01:44:00 +11:00
Niels Lyngsø a9fa049183 #4621 consistent create button colors 2019-02-18 15:28:33 +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
Mathieu Deslauriers 62463ecc21 Issue 4634 : Fixed colorpicker unselection condition
When the user remove the selection the model is set to null.
When the user tries to select another value after that, the condition is trying to check the "value" property for a null object.
2019-02-18 14:52:13 +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
Niels Lyngsø e1d990e6e8 Only show wrapper when it has content to show 2019-02-18 14:13:23 +01:00
Niels Lyngsø ce8b29bfcc Fixes #4438, makes variant-picker push the width of input, moed border of input to input-wrapper. 2019-02-18 13:35:16 +01: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
Rasmus John Pedersen 3a469cdc77 Multi Url Picker fixes (#4527)
*  Fix not being able to save link with only an anchor

* Don't allow Multi Url Picker as a parameter editor
2019-02-14 18:11:44 +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
Kenn Jacobsen 1fe1762724 Retain cculture in breadcrumbs 2019-02-14 15:02:54 +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
Kenn Jacobsen 65670ab539 Merge branch 'temp8' into v8-fix-dont-retain-cculture 2019-02-14 14:01:16 +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
matthew-hair 6665695986 Added null check for context.Identity
Signed-off-by: matthew-hair <matthew.hair@sedgwick.gov>
2019-02-14 12:55:56 +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
Niels Lyngsø 9f182e6461 compressed login.jpg 2019-02-12 13:17:48 +01:00
Niels Lyngsø 2403373457 added login image 2019-02-12 13:16:28 +01:00
Niels Lyngsø e9e852c499 Merge remote-tracking branch 'origin/temp8' into temp8-ui-update-login-screen 2019-02-12 12:59:01 +01: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
Niels Lyngsø a1abdc8ba7 Login screen color changes 2019-02-12 11:56:51 +01: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
Bjarke Berg 354c45e0e2 #4477 - also refresh cache after migration 2019-02-08 10:32:21 +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
Kenn Jacobsen 2ab3889b23 Don't retain cculture when navigating away from the current content 2019-02-07 18:15:21 +01:00
Niels Lyngsø 5c8fad330e motion added for umb-editor-navigation-item anchor-dropdown 2019-02-07 15:10:31 +01:00
Niels Lyngsø 0b19eab5a9 umb-group-panel for umbtabbedcontent 2019-02-07 13:59:20 +01:00
Niels Lyngsø 42803ff006 V8: umb-editor-navigation anchor-dropdown refined, remembers last active anchor, 2019-02-07 13:26:23 +01:00
Niels Lyngsø fb070928f7 V8: umb-editor-navigation-anchor-dropdown first version 2019-02-07 08:57:20 +01: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
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
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
Kenn Jacobsen b9d554908d Track redirects for invariant content under variant content 2019-02-04 21:03:45 +01:00
Niels Lyngsø bd4b4620d4 First part of refactoring umb-editor-navigation 2019-02-04 13:34:26 +01: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
Anders Bjerner 6130b475da IDashboard -> IDashboardSlim 2019-02-01 18:47:17 +01:00
Niels Lyngsø 95b4f9141e test for gathering url for list items so you can Ctrl/CMD+click. 2019-02-01 14:06:44 +01:00
Kenn Jacobsen 19aae9ffdc Make sure the color picker label is stored on first select (#4325)
(cherry picked from commit 4dd51f645a)
2019-01-30 16:14:09 +01:00
Sebastiaan Janssen 218995f9e0 Set version to 7.13.2 2019-01-29 17:34:05 +01:00
Kenn Jacobsen 0d167c4f2d Fix callback
(cherry picked from commit 99f0e6c05a)
2019-01-29 14:13:22 +01:00
Kenn Jacobsen d44e0d8664 Set form dirty on color picker value change + update selected item label + clean up unused code
(cherry picked from commit 2c40e46d56)
2019-01-29 14:13:14 +01:00
Jan Skovgaard 94a4e34e0c Make sure to hide the whole state element for screen readers rather than just the icon 2019-01-27 15:32:52 +01:00
Jan Skovgaard 7d42583177 Fix animation 2019-01-27 15:30:02 +01:00
Jan Skovgaard 77a8697ca7 Make sure the border is green when the checkbox is checked and that it's darker gray when it is focused (also while checked) 2019-01-27 15:24:49 +01:00
Jan Skovgaard 7462686778 Add styles and minor refactoring so we no longer use the "wing" icon when a radio button is checked but rather make it look like a readio button 2019-01-27 15:22:37 +01:00
Jan Skovgaard 44d5ce4a2e Include the radiobuttonlist component 2019-01-27 15:21:54 +01:00
Jan Skovgaard 34888f31e6 Place the ul styling in the proper context 2019-01-27 14:50:15 +01:00
Jan Skovgaard 0994aac656 Restructure markup to ensure the label text is properly wrapped and make sure it all aligns nicely on small breakpoints too 2019-01-27 14:38:27 +01:00
Jan Skovgaard 0e0d38be30 Refactor styling of the checkbox so the boxes are now a tad smaller and better aligned with one another and the UI in general 2019-01-27 14:18:41 +01:00
Jan Skovgaard 91735e7e3f Fix bad merge 2019-01-27 14:17:59 +01:00
Jan Skovgaard 0d4b3e4173 Merge branch 'dev-v7' into feature/temp-U4-3463
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/less/components/umb-radiobuttons-list.less
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/checkboxlist/checkboxlist.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/radiobuttons/radiobuttons.html
2019-01-27 13:31:33 +01:00
Shannon a0f15bba44 Fixes binding of FormDataCollection for GET requests which fixes the compatibility with the latest WebApi 5.2.7 version 2018-12-11 11:58:39 +11:00
Jan Skovgaard 007cdeb9ab Fix long label issue on RADIO button list 2018-10-31 21:48:47 +01:00
Jan Skovgaard 5716353518 Offset the state 1 px to align it with the radio button list if they ever occur as properties beneath each other 2018-10-31 21:46:00 +01:00
Jan Skovgaard 87340d6c2c Fix width issue on the checkbox label 2018-10-31 21:24:35 +01:00
Jan Skovgaard fc742bcf18 Merge branch 'dev-v7' into feature/temp-U4-3463 2018-10-31 20:03:05 +01:00
Jan Skovgaard 4eb4cd8962 Refactor checkboxlist to show a prettier checkbox than the default browser one 2018-10-28 16:35:37 +01:00
842 changed files with 10369 additions and 11714 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/temp8/.github/V8_GETTING_STARTED.md) to go to the v8 branch_
_Looking for Umbraco version 8? [Click here](https://github.com/umbraco/Umbraco-CMS/blob/dev-v8/.github/V8_GETTING_STARTED.md) to go to the v8 branch_
# Contributing to Umbraco CMS
👍🎉 First off, thanks for taking the time to contribute! 🎉👍
+2 -4
View File
@@ -103,11 +103,9 @@ There's two big areas that you should know about:
1. The Umbraco backoffice is a extensible AngularJS app and requires you to run a `gulp dev` command while you're working with it, so changes are copied over to the appropriate directories and you can refresh your browser to view the results of your changes.
You may need to run the following commands to set up gulp properly:
```
npm cache clean
npm install -g gulp
npm install -g gulp-cli
npm cache clean --force
npm install
gulp build
npm run build
```
2. "The rest" is a C# based codebase, with some traces of our WebForms past but mostly ASP.NET MVC based these days. You can make changes, build them in Visual Studio, and hit `F5` to see the result.
+1 -1
View File
@@ -2,7 +2,7 @@
- [ ] I have added steps to test this contribution in the description below
If there's an existing issue for this PR then this fixes: <!-- link to the issue here! -->
If there's an existing issue for this PR then this fixes <!-- link to the issue here! -->
### Description
<!-- A description of the changes proposed in the pull-request and how to test these changes -->
+5 -3
View File
@@ -1,7 +1,9 @@
_You are browsing the Umbraco v8 branch. Umbraco 8 is currently under development._
[![pullreminders](https://pullreminders.com/badge.svg)](https://pullreminders.com?ref=badge)
[![Build status](https://umbraco.visualstudio.com/Umbraco%20Cms/_apis/build/status/Cms%208%20Continuous?branchName=dev-v8)](https://umbraco.visualstudio.com/Umbraco%20Cms/_build?definitionId=75) [![pullreminders](https://pullreminders.com/badge.svg)](https://pullreminders.com?ref=badge)
_Looking for Umbraco version 7? [Click here](https://github.com/umbraco/Umbraco-CMS) to go to the v7 branch._
_You are browsing the Umbraco v8 branch. Umbraco 8 is currently under development._
_Looking for Umbraco version 7? [Click here](https://github.com/umbraco/Umbraco-CMS/tree/dev-v7) to go to the v7 branch._
_Ready to try out Version 8? [See the quick start guide](V8_GETTING_STARTED.md)._
+1 -1
View File
@@ -5,7 +5,7 @@
* [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)_
* Clone the Umbraco repository using the `dev-v8` branch. If your git client doesn't support specifying the branch as you clone then use the command `git clone --single-branch -b dev-v8 <your fork url>`. _(If you clone the repo using the default v7 branch and then checkout the `dev-v8` branch you **might** get problems)_
### Start the solution
+161 -158
View File
@@ -1,160 +1,163 @@
#
# Umbraco Cms Git Ignore
#
# common files
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
*.orig
*.suo
*.vs10x
*.ndproj
#
# 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.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/
# 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
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<metadata minClientVersion="4.1.0">
<id>UmbracoCms.Core</id>
<version>8.0.0</version>
<title>Umbraco Cms Core Binaries</title>
+3 -3
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<metadata minClientVersion="4.1.0">
<id>UmbracoCms.Web</id>
<version>8.0.0</version>
<title>Umbraco Cms Core Binaries</title>
@@ -27,9 +27,9 @@
<dependency id="ClientDependency" version="[1.9.7,1.999999)" />
<dependency id="ClientDependency-Mvc5" version="[1.8.0,1.999999)" />
<dependency id="CSharpTest.Net.Collections" version="[14.906.1403.1082,14.999999)" />
<dependency id="Examine" version="[1.0.0-beta078,1.999999)" />
<dependency id="Examine" version="[1.0.0,1.999999)" />
<dependency id="HtmlAgilityPack" version="[1.8.14,1.999999)" />
<dependency id="ImageProcessor" version="[2.6.2.25,2.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)" />
+5 -5
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="3.4.4">
<metadata minClientVersion="4.1.0">
<id>UmbracoCms</id>
<version>8.0.0</version>
<title>Umbraco Cms</title>
@@ -25,15 +25,15 @@
not want this to happen as the alpha of the next major is, really, the next major already.
-->
<dependency id="Microsoft.AspNet.SignalR.Core" version="[2.4.0, 2.999999)" />
<dependency id="Umbraco.ModelsBuilder.Ui" version="[8.0.0-alpha.37]" />
<dependency id="ImageProcessor.Web" version="[4.9.3.25,4.999999)" />
<dependency id="ImageProcessor.Web.Config" version="[2.4.1.19,2.999999)" />
<dependency id="Umbraco.ModelsBuilder.Ui" version="[8.0.4]" />
<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>
+46 -36
View File
@@ -126,45 +126,55 @@
<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" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.ValueTuple')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http.Formatting')" xdt:Transform="Remove" />
</assemblyBinding>
</runtime>
<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>
<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.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.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.3.0" newVersion="1.2.3.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.web.webPages.razor xdt:Transform="Remove" />
-93
View File
@@ -1,93 +0,0 @@
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}"
$umbracoBinFolder = Join-Path $projectPath "bin"
Write-Host "umbracoBinFolder:" "${umbracoBinFolder}"
# 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
# After backing up, remove all umbraco dlls from bin folder in case dll files are included in the VS project
# See: http://issues.umbraco.org/issue/U4-4930
if(Test-Path $umbracoBinFolder) {
$umbracoBinBackupPath = Join-Path $backupPath "bin"
New-Item -ItemType Directory -Force -Path $umbracoBinBackupPath
robocopy $umbracoBinFolder $umbracoBinBackupPath /e /LOG:$copyLogsPath\UmbracoBinBackup.log
# Delete files Umbraco ships with
if(Test-Path $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll) { Remove-Item $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.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\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.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.Web.UI.dll) { Remove-Item $umbracoBinFolder\Umbraco.Web.UI.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"
if(Test-Path $amd64Folder) { Remove-Item $amd64Folder -Force -Recurse -Confirm:$false }
$x86Folder = Join-Path $umbracoBinFolder "x86"
if(Test-Path $x86Folder) { Remove-Item $x86Folder -Force -Recurse -Confirm:$false }
if(Test-Path $umbracoBinFolder\AutoMapper.dll) { Remove-Item $umbracoBinFolder\AutoMapper.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\AutoMapper.Net4.dll) { Remove-Item $umbracoBinFolder\AutoMapper.Net4.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\ClientDependency.Core.dll) { Remove-Item $umbracoBinFolder\ClientDependency.Core.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\ClientDependency.Core.Mvc.dll) { Remove-Item $umbracoBinFolder\ClientDependency.Core.Mvc.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\CookComputing.XmlRpcV2.dll) { Remove-Item $umbracoBinFolder\CookComputing.XmlRpcV2.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Examine.dll) { Remove-Item $umbracoBinFolder\Examine.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\HtmlAgilityPack.dll) { Remove-Item $umbracoBinFolder\HtmlAgilityPack.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\ICSharpCode.SharpZipLib.dll) { Remove-Item $umbracoBinFolder\ICSharpCode.SharpZipLib.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\ImageProcessor.dll) { Remove-Item $umbracoBinFolder\ImageProcessor.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\ImageProcessor.Web.dll) { Remove-Item $umbracoBinFolder\ImageProcessor.Web.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Lucene.Net.dll) { Remove-Item $umbracoBinFolder\Lucene.Net.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.IO.RecyclableMemoryStream.dll) { Remove-Item $umbracoBinFolder\Microsoft.IO.RecyclableMemoryStream.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.AspNet.Identity.Core.dll) { Remove-Item $umbracoBinFolder\Microsoft.AspNet.Identity.Core.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.AspNet.Identity.Owin.dll) { Remove-Item $umbracoBinFolder\Microsoft.AspNet.Identity.Owin.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.CodeAnalysis.CSharp.dll) { Remove-Item $umbracoBinFolder\Microsoft.CodeAnalysis.CSharp.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.CodeAnalysis.dll) { Remove-Item $umbracoBinFolder\Microsoft.CodeAnalysis.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Owin.dll) { Remove-Item $umbracoBinFolder\Microsoft.Owin.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Owin.Host.SystemWeb.dll) { Remove-Item $umbracoBinFolder\Microsoft.Owin.Host.SystemWeb.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Owin.Security.dll) { Remove-Item $umbracoBinFolder\Microsoft.Owin.Security.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Owin.Security.Cookies.dll) { Remove-Item $umbracoBinFolder\Microsoft.Owin.Security.Cookies.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Owin.Security.OAuth.dll) { Remove-Item $umbracoBinFolder\Microsoft.Owin.Security.OAuth.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Web.Infrastructure.dll) { Remove-Item $umbracoBinFolder\Microsoft.Web.Infrastructure.dll -Force -Confirm:$false }
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\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 }
if(Test-Path $umbracoBinFolder\System.Collections.Immutable.dll) { Remove-Item $umbracoBinFolder\System.Collections.Immutable.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Reflection.Metadata.dll) { Remove-Item $umbracoBinFolder\System.Reflection.Metadata.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Net.Http.Extensions.dll) { Remove-Item $umbracoBinFolder\System.Net.Http.Extensions.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Net.Http.Formatting.dll) { Remove-Item $umbracoBinFolder\System.Net.Http.Formatting.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Net.Http.Primitives.dll) { Remove-Item $umbracoBinFolder\System.Net.Http.Primitives.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.Helpers.dll) { Remove-Item $umbracoBinFolder\System.Web.Helpers.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.Http.dll) { Remove-Item $umbracoBinFolder\System.Web.Http.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.Http.WebHost.dll) { Remove-Item $umbracoBinFolder\System.Web.Http.WebHost.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.Mvc.dll) { Remove-Item $umbracoBinFolder\System.Web.Mvc.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.Razor.dll) { Remove-Item $umbracoBinFolder\System.Web.Razor.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Web.WebPages.dll) { Remove-Item $umbracoBinFolder\System.Web.WebPages.dll -Force -Confirm:$false }
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 }
}
}
-27
View File
@@ -11,37 +11,15 @@ if ($project) {
# 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
@@ -100,11 +78,6 @@ if ($project) {
}
}
$installFolder = Join-Path $projectPath "Install"
if(Test-Path $installFolder) {
Remove-Item $installFolder -Force -Recurse -Confirm:$false
}
# Open appropriate readme
if($copyWebconfig -eq $true)
{
+11 -2
View File
@@ -15,7 +15,12 @@
[Parameter(Mandatory=$false)]
[Alias("c")]
[Alias("cont")]
[switch] $continue = $false
[switch] $continue = $false,
# execute a command
[Parameter(Mandatory=$false, ValueFromRemainingArguments=$true)]
[String[]]
$command
)
# ################################################################
@@ -475,7 +480,11 @@
# run
if (-not $get)
{
$ubuild.Build()
if ($command.Length -eq 0)
{
$command = @( "Build" )
}
$ubuild.RunMethod($command);
if ($ubuild.OnError()) { return }
}
if ($get) { return $ubuild }
+2 -2
View File
@@ -18,5 +18,5 @@ using System.Resources;
[assembly: AssemblyVersion("8.0.0")]
// these are FYI and changed automatically
[assembly: AssemblyFileVersion("8.0.0")]
[assembly: AssemblyInformationalVersion("8.0.0-alpha.58")]
[assembly: AssemblyFileVersion("8.1.0")]
[assembly: AssemblyInformationalVersion("8.1.0")]
+13 -7
View File
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
namespace Umbraco.Core.Cache
@@ -110,7 +111,7 @@ namespace Umbraco.Core.Cache
#region Lock
private bool _entered;
private const string ContextItemsLockKey = "Umbraco.Core.Cache.HttpRequestCache::LockEntered";
protected override void EnterReadLock() => EnterWriteLock();
@@ -118,7 +119,13 @@ namespace Umbraco.Core.Cache
{
if (HasContextItems)
{
System.Threading.Monitor.Enter(ContextItems.SyncRoot, ref _entered);
// 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;
}
}
@@ -126,11 +133,10 @@ namespace Umbraco.Core.Cache
protected override void ExitWriteLock()
{
if (_entered)
{
_entered = false;
System.Threading.Monitor.Exit(ContextItems.SyncRoot);
}
var entered = (bool?) ContextItems[ContextItemsLockKey] ?? false;
if (entered)
Monitor.Exit(ContextItems.SyncRoot);
ContextItems.Remove(ContextItemsLockKey);
}
#endregion
@@ -1,13 +0,0 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a core <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>All core composers are required by (compose before) all user composers,
/// and require (compose after) all runtime composers.</para>
/// </remarks>
[ComposeAfter(typeof(IRuntimeComposer))]
public interface ICoreComposer : IComposer
{ }
}
@@ -1,11 +0,0 @@
namespace Umbraco.Core.Components
{
/// <summary>
/// Represents a runtime <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>All runtime composers are required by (compose before) all core composers</para>
/// </remarks>
public interface IRuntimeComposer : IComposer
{ }
}
@@ -3,6 +3,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Web;
using Umbraco.Core.Composing;
using Umbraco.Core.Events;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
@@ -10,7 +11,7 @@ using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Compose
{
public sealed class AuditEventsComponent : IComponent
{
@@ -1,4 +1,6 @@
namespace Umbraco.Core.Components
using Umbraco.Core.Composing;
namespace Umbraco.Core.Compose
{
public sealed class AuditEventsComposer : ComponentComposer<AuditEventsComponent>, ICoreComposer
{ }
@@ -1,9 +1,10 @@
using System.IO;
using Umbraco.Core.Composing;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Manifest;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Compose
{
public sealed class ManifestWatcherComponent : IComponent
{
@@ -1,4 +1,6 @@
namespace Umbraco.Core.Components
using Umbraco.Core.Composing;
namespace Umbraco.Core.Compose
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public class ManifestWatcherComposer : ComponentComposer<ManifestWatcherComponent>, ICoreComposer
@@ -3,7 +3,7 @@ using Umbraco.Core.Models;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Compose
{
// TODO: This should just exist in the content service/repo!
public sealed class RelateOnCopyComponent : IComponent
@@ -1,4 +1,6 @@
namespace Umbraco.Core.Components
using Umbraco.Core.Composing;
namespace Umbraco.Core.Compose
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class RelateOnCopyComposer : ComponentComposer<RelateOnCopyComponent>, ICoreComposer
@@ -5,7 +5,7 @@ using Umbraco.Core.Models;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Compose
{
public sealed class RelateOnTrashComponent : IComponent
{
@@ -1,4 +1,6 @@
namespace Umbraco.Core.Components
using Umbraco.Core.Composing;
namespace Umbraco.Core.Compose
{
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class RelateOnTrashComposer : ComponentComposer<RelateOnTrashComponent>, ICoreComposer
@@ -1,9 +1,8 @@
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Represents the collection of <see cref="IComponent"/> implementations.
@@ -24,7 +23,7 @@ namespace Umbraco.Core.Components
{
using (_logger.DebugDuration<ComponentCollection>($"Initializing. (log components when >{LogThresholdMilliseconds}ms)", "Initialized."))
{
foreach (var component in this.Reverse()) // terminate components in reverse order
foreach (var component in this)
{
var componentType = component.GetType();
using (_logger.DebugDuration<ComponentCollection>($"Initializing {componentType.FullName}.", $"Initialized {componentType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
@@ -1,9 +1,8 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Builds a <see cref="ComponentCollection"/>.
@@ -31,7 +30,7 @@ namespace Umbraco.Core.Components
protected override IComponent CreateItem(IFactory factory, Type itemType)
{
using (_logger.DebugDuration<Composers>($"Creating {itemType.FullName}.", $"Created {itemType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
using (_logger.DebugDuration<ComponentCollectionBuilder>($"Creating {itemType.FullName}.", $"Created {itemType.FullName}.", thresholdMilliseconds: LogThresholdMilliseconds))
{
return base.CreateItem(factory, itemType);
}
@@ -1,4 +1,6 @@
namespace Umbraco.Core.Components
using Umbraco.Core.Compose;
namespace Umbraco.Core.Composing
{
/// <summary>
/// Provides a base class for composers which compose a component.
@@ -1,6 +1,6 @@
using System;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Indicates that a composer requires another composer.
@@ -1,6 +1,6 @@
using System;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Indicates that a component is required by another composer.
@@ -6,7 +6,7 @@ using System.Text;
using Umbraco.Core.Collections;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
// note: this class is NOT thread-safe in any ways
@@ -1,10 +1,9 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Represents a composition.
@@ -134,7 +133,11 @@ namespace Umbraco.Core.Components
Configs.RegisterWith(_register);
return _register.CreateFactory();
IFactory factory = null;
// ReSharper disable once AccessToModifiedClosure -- on purpose
_register.Register(_ => factory, Lifetime.Singleton);
factory = _register.CreateFactory();
return factory;
}
/// <summary>
@@ -1,13 +1,11 @@
using Umbraco.Core.Components;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Configuration.UmbracoSettings;
namespace Umbraco.Core.Composing.Composers
namespace Umbraco.Core.Composing.CompositionExtensions
{
/// <summary>
/// Compose configurations.
/// </summary>
public static class ConfigurationComposer
public static class Configuration
{
public static Composition ComposeConfiguration(this Composition composition)
{
@@ -1,11 +1,10 @@
using AutoMapper;
using Umbraco.Core.Components;
using Umbraco.Core.Models.Identity;
namespace Umbraco.Core.Composing.Composers
namespace Umbraco.Core.Composing.CompositionExtensions
{
public static class CoreMappingProfilesComposer
public static class CoreMappingProfiles
{
public static Composition ComposeCoreMappingProfiles(this Composition composition)
{
@@ -1,10 +1,10 @@
using Umbraco.Core.Components;
using Umbraco.Core.Compose;
using Umbraco.Core.IO;
using Umbraco.Core.IO.MediaPathSchemes;
namespace Umbraco.Core.Composing.Composers
namespace Umbraco.Core.Composing.CompositionExtensions
{
public static class FileSystemsComposer
public static class FileSystems
{
/*
* HOW TO REPLACE THE MEDIA UNDERLYING FILESYSTEM
@@ -73,13 +73,13 @@ namespace Umbraco.Core.Composing.Composers
// it needs to be registered (not only the interface) because it provides additional
// functionality eg for scoping, and is injected in the scope provider - whereas the
// interface is really for end-users to get access to filesystems.
composition.RegisterUnique(factory => factory.CreateInstance<FileSystems>(factory));
composition.RegisterUnique(factory => factory.CreateInstance<IO.FileSystems>(factory));
// register IFileSystems, which gives access too all filesystems
composition.RegisterUnique<IFileSystems>(factory => factory.GetInstance<FileSystems>());
composition.RegisterUnique<IFileSystems>(factory => factory.GetInstance<IO.FileSystems>());
// register the scheme for media paths
composition.RegisterUnique<IMediaPathScheme, TwoGuidsMediaPathScheme>();
composition.RegisterUnique<IMediaPathScheme, UniqueMediaPathScheme>();
// register the IMediaFileSystem implementation
composition.RegisterFileSystem<IMediaFileSystem, MediaFileSystem>();
@@ -1,13 +1,12 @@
using Umbraco.Core.Components;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.Repositories.Implement;
namespace Umbraco.Core.Composing.Composers
namespace Umbraco.Core.Composing.CompositionExtensions
{
/// <summary>
/// Composes repositories.
/// </summary>
public static class RepositoriesComposer
public static class Repositories
{
public static Composition ComposeRepositories(this Composition composition)
{
@@ -2,7 +2,6 @@
using System.IO;
using System.Linq;
using Umbraco.Core.Cache;
using Umbraco.Core.Components;
using Umbraco.Core.Events;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
@@ -10,9 +9,9 @@ using Umbraco.Core.Packaging;
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Composing.Composers
namespace Umbraco.Core.Composing.CompositionExtensions
{
public static class ServicesComposer
public static class Services
{
public static Composition ComposeServices(this Composition composition)
{
@@ -1,6 +1,6 @@
using System;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Indicates that a composer should be disabled.
@@ -1,6 +1,6 @@
using System;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Indicates that a composer should be disabled.
@@ -1,6 +1,6 @@
using System;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Indicates that a composer should be enabled.
@@ -1,6 +1,6 @@
using System;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Indicates that a composer should be enabled.
@@ -1,4 +1,4 @@
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Represents a component.
@@ -1,6 +1,4 @@
using Umbraco.Core.Composing;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Represents a composer.
@@ -10,7 +8,6 @@ namespace Umbraco.Core.Components
/// <summary>
/// Compose.
/// </summary>
/// <param name="composition"></param>
void Compose(Composition composition);
}
}
}
@@ -0,0 +1,11 @@
namespace Umbraco.Core.Composing
{
/// <summary>
/// Represents a core <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>Core composers compose after the initial composer, and before user composers.</para>
/// </remarks>
public interface ICoreComposer : IComposer
{ }
}
@@ -1,12 +1,12 @@
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Represents a user <see cref="IComposer"/>.
/// </summary>
/// <remarks>
/// <para>All user composers require (compose after) all core composers.</para>
/// <para>User composers compose after core composers, and before the final composer.</para>
/// </remarks>
[ComposeAfter(typeof(ICoreComposer))]
public interface IUserComposer : IComposer
{ }
}
}
@@ -1,7 +1,6 @@
using System;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Components
namespace Umbraco.Core.Composing
{
/// <summary>
/// Marks a composer to indicate a minimum and/or maximum runtime level for which the composer would compose.
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
namespace Umbraco.Core.Composing
{
/// <summary>
/// Provides a base class for collections of types.
/// </summary>
public abstract class TypeCollectionBuilderBase<TCollection, TConstraint> : ICollectionBuilder<TCollection, Type>
where TCollection : class, IBuilderCollection<Type>
{
private readonly HashSet<Type> _types = new HashSet<Type>();
private Type Validate(Type type, string action)
{
if (!typeof(TConstraint).IsAssignableFrom(type))
throw new InvalidOperationException($"Cannot {action} type {type.FullName} as it does not inherit from/implement {typeof(TConstraint).FullName}.");
return type;
}
public void Add(Type type) => _types.Add(Validate(type, "add"));
public void Add<T>() => Add(typeof(T));
public void Add(IEnumerable<Type> types)
{
foreach (var type in types) Add(type);
}
public void Remove(Type type) => _types.Remove(Validate(type, "remove"));
public void Remove<T>() => Remove(typeof(T));
public TCollection CreateCollection(IFactory factory)
{
return factory.CreateInstance<TCollection>(_types);
}
public void RegisterWith(IRegister register)
{
register.Register(CreateCollection, Lifetime.Singleton);
}
}
}
+8 -26
View File
@@ -42,30 +42,30 @@ namespace Umbraco.Core.Composing
private string _currentAssembliesHash;
private IEnumerable<Assembly> _assemblies;
private bool _reportedChange;
private static LocalTempStorage _localTempStorage;
private static string _localTempPath;
private static string _fileBasePath;
/// <summary>
/// Initializes a new instance of the <see cref="TypeLoader"/> class.
/// </summary>
/// <param name="runtimeCache">The application runtime cache.</param>
/// <param name="localTempStorage">Files storage mode.</param>
/// <param name="localTempPath">Files storage location.</param>
/// <param name="logger">A profiling logger.</param>
public TypeLoader(IAppPolicyCache runtimeCache, LocalTempStorage localTempStorage, IProfilingLogger logger)
: this(runtimeCache, localTempStorage, logger, true)
public TypeLoader(IAppPolicyCache runtimeCache, string localTempPath, IProfilingLogger logger)
: this(runtimeCache, localTempPath, logger, true)
{ }
/// <summary>
/// Initializes a new instance of the <see cref="TypeLoader"/> class.
/// </summary>
/// <param name="runtimeCache">The application runtime cache.</param>
/// <param name="localTempStorage">Files storage mode.</param>
/// <param name="localTempPath">Files storage location.</param>
/// <param name="logger">A profiling logger.</param>
/// <param name="detectChanges">Whether to detect changes using hashes.</param>
internal TypeLoader(IAppPolicyCache runtimeCache, LocalTempStorage localTempStorage, IProfilingLogger logger, bool detectChanges)
internal TypeLoader(IAppPolicyCache runtimeCache, string localTempPath, IProfilingLogger logger, bool detectChanges)
{
_runtimeCache = runtimeCache ?? throw new ArgumentNullException(nameof(runtimeCache));
_localTempStorage = localTempStorage == LocalTempStorage.Unknown ? LocalTempStorage.Default : localTempStorage;
_localTempPath = localTempPath;
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
if (detectChanges)
@@ -388,25 +388,7 @@ namespace Umbraco.Core.Composing
if (_fileBasePath != null)
return _fileBasePath;
switch (_localTempStorage)
{
case LocalTempStorage.AspNetTemp:
_fileBasePath = Path.Combine(HttpRuntime.CodegenDir, "UmbracoData", "umbraco-types");
break;
case LocalTempStorage.EnvironmentTemp:
// include the appdomain hash is just a safety check, for example if a website is moved from worker A to worker B and then back
// to worker A again, in theory the %temp% folder should already be empty but we really want to make sure that its not
// utilizing an old path - assuming we cannot have SHA1 collisions on AppDomainAppId
var appDomainHash = HttpRuntime.AppDomainAppId.ToSHA1();
var cachePath = Path.Combine(Environment.ExpandEnvironmentVariables("%temp%"), "UmbracoData", appDomainHash);
_fileBasePath = Path.Combine(cachePath, "umbraco-types");
break;
case LocalTempStorage.Default:
default:
var tempFolder = IOHelper.MapPath(SystemDirectories.TempData.EnsureEndsWith('/') + "TypesCache");
_fileBasePath = Path.Combine(tempFolder, "umbraco-types." + NetworkHelper.FileSafeMachineName);
break;
}
_fileBasePath = Path.Combine(_localTempPath, "TypesCache", "umbraco-types." + NetworkHelper.FileSafeMachineName);
// ensure that the folder exists
var directory = Path.GetDirectoryName(_fileBasePath);
@@ -1,64 +1,23 @@
using System;
using Umbraco.Core.Cache;
using Umbraco.Core.Dictionary;
using Umbraco.Core.Composing;
using Umbraco.Core.Dictionary;
using Umbraco.Core.IO;
using Umbraco.Core.Migrations;
using Umbraco.Core.Logging.Viewer;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PackageActions;
using Umbraco.Core.Persistence.Mappers;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Strings;
using Umbraco.Core.Sync;
using Umbraco.Core.Logging.Viewer;
using Umbraco.Core.PackageActions;
namespace Umbraco.Core.Components
namespace Umbraco.Core
{
/// <summary>
/// Provides extension methods to the <see cref="Composition"/> class.
/// </summary>
public static class CompositionExtensions
public static partial class CompositionExtensions
{
#region FileSystems
/// <summary>
/// Registers a filesystem.
/// </summary>
/// <typeparam name="TFileSystem">The type of the filesystem.</typeparam>
/// <typeparam name="TImplementing">The implementing type.</typeparam>
/// <param name="composition">The composition.</param>
/// <returns>The register.</returns>
public static void RegisterFileSystem<TFileSystem, TImplementing>(this Composition composition)
where TImplementing : FileSystemWrapper, TFileSystem
where TFileSystem : class
{
composition.RegisterUnique<TFileSystem>(factory =>
{
var fileSystems = factory.GetInstance<FileSystems>();
var supporting = factory.GetInstance<SupportingFileSystems>();
return fileSystems.GetFileSystem<TImplementing>(supporting.For<TFileSystem>());
});
}
/// <summary>
/// Registers a filesystem.
/// </summary>
/// <typeparam name="TFileSystem">The type of the filesystem.</typeparam>
/// <param name="composition">The composition.</param>
/// <returns>The register.</returns>
public static void RegisterFileSystem<TFileSystem>(this Composition composition)
where TFileSystem : FileSystemWrapper
{
composition.RegisterUnique(factory =>
{
var fileSystems = factory.GetInstance<FileSystems>();
var supporting = factory.GetInstance<SupportingFileSystems>();
return fileSystems.GetFileSystem<TFileSystem>(supporting.For<TFileSystem>());
});
}
#endregion
#region Collection Builders
/// <summary>
@@ -110,13 +69,6 @@ namespace Umbraco.Core.Components
internal static ManifestValueValidatorCollectionBuilder Validators(this Composition composition)
=> composition.WithCollectionBuilder<ManifestValueValidatorCollectionBuilder>();
/// <summary>
/// Gets the post-migrations collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
internal static PostMigrationCollectionBuilder PostMigrations(this Composition composition)
=> composition.WithCollectionBuilder<PostMigrationCollectionBuilder>();
/// <summary>
/// Gets the components collection builder.
/// </summary>
@@ -0,0 +1,35 @@
using Umbraco.Core.Cache;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
namespace Umbraco.Core
{
/// <summary>
/// Provides extension methods to the <see cref="Composition"/> class.
/// </summary>
public static partial class CompositionExtensions
{
/// <summary>
/// Registers essential services.
/// </summary>
public static void RegisterEssentials(this Composition composition,
ILogger logger, IProfiler profiler, IProfilingLogger profilingLogger,
IMainDom mainDom,
AppCaches appCaches,
IUmbracoDatabaseFactory databaseFactory,
TypeLoader typeLoader,
IRuntimeState state)
{
composition.RegisterUnique(logger);
composition.RegisterUnique(profiler);
composition.RegisterUnique(profilingLogger);
composition.RegisterUnique(mainDom);
composition.RegisterUnique(appCaches);
composition.RegisterUnique(databaseFactory);
composition.RegisterUnique(factory => factory.GetInstance<IUmbracoDatabaseFactory>().SqlContext);
composition.RegisterUnique(typeLoader);
composition.RegisterUnique(state);
}
}
}
@@ -0,0 +1,47 @@
using Umbraco.Core.Composing;
using Umbraco.Core.IO;
namespace Umbraco.Core
{
/// <summary>
/// Provides extension methods to the <see cref="Composition"/> class.
/// </summary>
public static partial class CompositionExtensions
{
/// <summary>
/// Registers a filesystem.
/// </summary>
/// <typeparam name="TFileSystem">The type of the filesystem.</typeparam>
/// <typeparam name="TImplementing">The implementing type.</typeparam>
/// <param name="composition">The composition.</param>
/// <returns>The register.</returns>
public static void RegisterFileSystem<TFileSystem, TImplementing>(this Composition composition)
where TImplementing : FileSystemWrapper, TFileSystem
where TFileSystem : class
{
composition.RegisterUnique<TFileSystem>(factory =>
{
var fileSystems = factory.GetInstance<FileSystems>();
var supporting = factory.GetInstance<SupportingFileSystems>();
return fileSystems.GetFileSystem<TImplementing>(supporting.For<TFileSystem>());
});
}
/// <summary>
/// Registers a filesystem.
/// </summary>
/// <typeparam name="TFileSystem">The type of the filesystem.</typeparam>
/// <param name="composition">The composition.</param>
/// <returns>The register.</returns>
public static void RegisterFileSystem<TFileSystem>(this Composition composition)
where TFileSystem : FileSystemWrapper
{
composition.RegisterUnique(factory =>
{
var fileSystems = factory.GetInstance<FileSystems>();
var supporting = factory.GetInstance<SupportingFileSystems>();
return fileSystems.GetFileSystem<TFileSystem>(supporting.For<TFileSystem>());
});
}
}
}
@@ -1,43 +1,12 @@
using Umbraco.Core.Cache;
using Umbraco.Core.Components;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Composing
namespace Umbraco.Core
{
/// <summary>
/// Provides extension methods to the <see cref="Composition"/> class.
/// </summary>
public static class CompositionExtensions
public static partial class CompositionExtensions
{
#region Essentials
/// <summary>
/// Registers essential services.
/// </summary>
public static void RegisterEssentials(this Composition composition,
ILogger logger, IProfiler profiler, IProfilingLogger profilingLogger,
IMainDom mainDom,
AppCaches appCaches,
IUmbracoDatabaseFactory databaseFactory,
TypeLoader typeLoader,
IRuntimeState state)
{
composition.RegisterUnique(logger);
composition.RegisterUnique(profiler);
composition.RegisterUnique(profilingLogger);
composition.RegisterUnique(mainDom);
composition.RegisterUnique(appCaches);
composition.RegisterUnique(databaseFactory);
composition.RegisterUnique(factory => factory.GetInstance<IUmbracoDatabaseFactory>().SqlContext);
composition.RegisterUnique(typeLoader);
composition.RegisterUnique(state);
}
#endregion
#region Unique
/// <summary>
/// Registers a unique service as its own implementation.
/// </summary>
@@ -62,7 +31,5 @@ namespace Umbraco.Core.Composing
/// </summary>
public static void RegisterUnique<TService>(this Composition composition, TService instance)
=> composition.RegisterUnique(typeof(TService), instance);
#endregion
}
}
}
@@ -5,14 +5,8 @@ using System.Net.Configuration;
using System.Web;
using System.Web.Configuration;
using System.Web.Hosting;
using System.Web.Security;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using Umbraco.Core.Composing;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Security;
namespace Umbraco.Core.Configuration
{
@@ -24,16 +18,15 @@ namespace Umbraco.Core.Configuration
/// </summary>
public class GlobalSettings : IGlobalSettings
{
private string _localTempPath;
#region Private static fields
// TODO these should not be static
private static string _reservedPaths;
private static string _reservedUrls;
//ensure the built on (non-changeable) reserved paths are there at all times
internal const string StaticReservedPaths = "~/app_plugins/,~/install/,~/mini-profiler-resources/,"; //must end with a comma!
internal const string StaticReservedUrls = "~/config/splashes/noNodes.aspx,~/.well-known,"; //must end with a comma!
#endregion
/// <summary>
/// Used in unit testing to reset all config items that were set with property setters (i.e. did not come from config)
@@ -138,7 +131,7 @@ namespace Umbraco.Core.Configuration
: "~/App_Data/umbraco.config";
}
}
/// <summary>
/// Gets the path to umbraco's root directory (/umbraco by default).
/// </summary>
@@ -170,7 +163,7 @@ namespace Umbraco.Core.Configuration
SaveSetting(Constants.AppSettings.ConfigurationStatus, value);
}
}
/// <summary>
/// Saves a setting into the configuration file.
/// </summary>
@@ -213,7 +206,7 @@ namespace Umbraco.Core.Configuration
ConfigurationManager.RefreshSection("appSettings");
}
}
/// <summary>
/// Gets a value indicating whether umbraco is running in [debug mode].
/// </summary>
@@ -257,7 +250,7 @@ namespace Umbraco.Core.Configuration
}
}
}
/// <summary>
/// Returns the number of days that should take place between version checks.
/// </summary>
@@ -276,13 +269,8 @@ namespace Umbraco.Core.Configuration
}
}
}
/// <summary>
/// This is the location type to store temporary files such as cache files or other localized files for a given machine
/// </summary>
/// <remarks>
/// Currently used for the xml cache file and the plugin cache files
/// </remarks>
/// <inheritdoc />
public LocalTempStorage LocalTempStorageLocation
{
get
@@ -295,6 +283,48 @@ namespace Umbraco.Core.Configuration
}
}
/// <inheritdoc />
public string LocalTempPath
{
get
{
if (_localTempPath != null)
return _localTempPath;
switch (LocalTempStorageLocation)
{
case LocalTempStorage.AspNetTemp:
return _localTempPath = System.IO.Path.Combine(HttpRuntime.CodegenDir, "UmbracoData");
case LocalTempStorage.EnvironmentTemp:
// environment temp is unique, we need a folder per site
// use a hash
// combine site name and application id
// site name is a Guid on Cloud
// application id is eg /LM/W3SVC/123456/ROOT
// the combination is unique on one server
// and, if a site moves from worker A to B and then back to A...
// hopefully it gets a new Guid or new application id?
var siteName = HostingEnvironment.SiteName;
var applicationId = HostingEnvironment.ApplicationID; // ie HttpRuntime.AppDomainAppId
var hashString = siteName + "::" + applicationId;
var hash = hashString.GenerateHash();
var siteTemp = System.IO.Path.Combine(Environment.ExpandEnvironmentVariables("%temp%"), "UmbracoData", hash);
return _localTempPath = System.IO.Path.Combine(siteTemp, "umbraco.config");
//case LocalTempStorage.Default:
//case LocalTempStorage.Unknown:
default:
return _localTempPath = IOHelper.MapPath("~/App_Data/TEMP");
}
}
}
/// <summary>
/// Gets the default UI language.
/// </summary>
@@ -348,10 +378,5 @@ namespace Umbraco.Core.Configuration
}
}
}
}
}
@@ -128,6 +128,7 @@ namespace Umbraco.Core.Configuration
if (routes == null) throw new ArgumentNullException(nameof(routes));
//check if the current request matches a route, if so then it is reserved.
//TODO: This value should be cached! Else this is doing double routing in MVC every request!
var route = routes.GetRouteData(httpContext);
if (route != null)
return true;
@@ -1,6 +1,4 @@
using System;
namespace Umbraco.Core.Configuration
namespace Umbraco.Core.Configuration
{
/// <summary>
/// Contains general settings information for the entire Umbraco instance based on information from web.config appsettings
@@ -61,11 +59,13 @@ namespace Umbraco.Core.Configuration
int VersionCheckPeriod { get; }
/// <summary>
/// This is the location type to store temporary files such as cache files or other localized files for a given machine
/// Gets the configuration for the location of temporary files.
/// </summary>
/// <remarks>
/// Used for some cache files and for specific environments such as Azure
/// </remarks>
LocalTempStorage LocalTempStorageLocation { get; }
/// <summary>
/// Gets the location of temporary files.
/// </summary>
string LocalTempPath { get; }
}
}
+3 -3
View File
@@ -77,7 +77,7 @@
/// alias for the macro tree.
/// </summary>
public const string Macros = "macros";
/// <summary>
/// alias for the datatype tree.
/// </summary>
@@ -92,7 +92,7 @@
/// alias for the dictionary tree.
/// </summary>
public const string Dictionary = "dictionary";
public const string Stylesheets = "stylesheets";
/// <summary>
@@ -121,7 +121,7 @@
public const string Templates = "templates";
public const string RelationTypes = "relationTypes";
public const string Languages = "languages";
/// <summary>
+6 -6
View File
@@ -219,7 +219,7 @@ namespace Umbraco.Core
},
{
FailedPasswordAttempts,
new PropertyType(PropertyEditors.Aliases.NoEdit, ValueStorageType.Integer, true, FailedPasswordAttempts)
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Integer, true, FailedPasswordAttempts)
{
Name = FailedPasswordAttemptsLabel
}
@@ -240,35 +240,35 @@ namespace Umbraco.Core
},
{
LastLockoutDate,
new PropertyType(PropertyEditors.Aliases.NoEdit, ValueStorageType.Date, true, LastLockoutDate)
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Date, true, LastLockoutDate)
{
Name = LastLockoutDateLabel
}
},
{
LastLoginDate,
new PropertyType(PropertyEditors.Aliases.NoEdit, ValueStorageType.Date, true, LastLoginDate)
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Date, true, LastLoginDate)
{
Name = LastLoginDateLabel
}
},
{
LastPasswordChangeDate,
new PropertyType(PropertyEditors.Aliases.NoEdit, ValueStorageType.Date, true, LastPasswordChangeDate)
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Date, true, LastPasswordChangeDate)
{
Name = LastPasswordChangeDateLabel
}
},
{
PasswordAnswer,
new PropertyType(PropertyEditors.Aliases.NoEdit, ValueStorageType.Nvarchar, true, PasswordAnswer)
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Nvarchar, true, PasswordAnswer)
{
Name = PasswordAnswerLabel
}
},
{
PasswordQuestion,
new PropertyType(PropertyEditors.Aliases.NoEdit, ValueStorageType.Nvarchar, true, PasswordQuestion)
new PropertyType(PropertyEditors.Aliases.Label, ValueStorageType.Nvarchar, true, PasswordQuestion)
{
Name = PasswordQuestionLabel
}
+7 -11
View File
@@ -34,11 +34,7 @@ namespace Umbraco.Core
/// </summary>
public const string ContentPicker = "Umbraco.ContentPicker";
/// <summary>
/// Date.
/// </summary>
public const string Date = "Umbraco.Date";
/// <summary>
/// DateTime.
/// </summary>
@@ -48,7 +44,7 @@ namespace Umbraco.Core
/// DropDown List.
/// </summary>
public const string DropDownListFlexible = "Umbraco.DropDown.Flexible";
/// <summary>
/// Grid.
/// </summary>
@@ -105,9 +101,9 @@ namespace Umbraco.Core
public const string MultipleTextstring = "Umbraco.MultipleTextstring";
/// <summary>
/// NoEdit.
/// Label.
/// </summary>
public const string NoEdit = "Umbraco.NoEdit";
public const string Label = "Umbraco.Label";
/// <summary>
/// Picker Relations.
@@ -118,7 +114,7 @@ namespace Umbraco.Core
/// RadioButton list.
/// </summary>
public const string RadioButtonList = "Umbraco.RadioButtonList";
/// <summary>
/// Slider.
/// </summary>
@@ -142,7 +138,7 @@ namespace Umbraco.Core
/// <summary>
/// TinyMCE
/// </summary>
public const string TinyMce = "Umbraco.TinyMCEv3";
public const string TinyMce = "Umbraco.TinyMCE";
/// <summary>
/// Boolean.
@@ -163,7 +159,7 @@ namespace Umbraco.Core
/// Upload Field.
/// </summary>
public const string UploadField = "Umbraco.UploadField";
/// <summary>
/// Email Address.
/// </summary>
-64
View File
@@ -1,64 +0,0 @@
using System;
namespace Umbraco.Core
{
/// <summary>
/// Abstract implementation of IDisposable.
/// </summary>
/// <remarks>
/// This is for objects that DO have unmanaged resources. Use <see cref="DisposableObjectSlim"/>
/// for objects that do NOT have unmanaged resources, and avoid creating a finalizer.
///
/// Can also be used as a pattern for when inheriting is not possible.
///
/// See also: https://msdn.microsoft.com/en-us/library/b1yfkh5e%28v=vs.110%29.aspx
/// See also: https://lostechies.com/chrispatterson/2012/11/29/idisposable-done-right/
///
/// Note: if an object's ctor throws, it will never be disposed, and so if that ctor
/// has allocated disposable objects, it should take care of disposing them.
/// </remarks>
public abstract class DisposableObject : IDisposable
{
private readonly object _locko = new object();
// gets a value indicating whether this instance is disposed.
// for internal tests only (not thread safe)
public bool Disposed { get; private set; }
// implements IDisposable
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// finalizer
~DisposableObject()
{
Dispose(false);
}
private void Dispose(bool disposing)
{
// can happen if the object construction failed
if (_locko == null)
return;
lock (_locko)
{
if (Disposed) return;
Disposed = true;
}
DisposeUnmanagedResources();
if (disposing)
DisposeResources();
}
protected abstract void DisposeResources();
protected virtual void DisposeUnmanagedResources()
{ }
}
}
@@ -1,8 +1,9 @@
using System;
using System.Linq;
using System.Reflection;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Composing
namespace Umbraco.Core
{
/// <summary>
/// Provides extension methods to the <see cref="IFactory"/> class.
+67
View File
@@ -40,5 +40,72 @@ namespace Umbraco.Core
public DecomposedGuid(Guid value) : this() => this.Value = value;
}
private static readonly char[] Base32Table =
{
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5'
};
/// <summary>
/// Converts a Guid into a base-32 string.
/// </summary>
/// <param name="guid">A Guid.</param>
/// <param name="length">The string length.</param>
/// <returns>A base-32 encoded string.</returns>
/// <remarks>
/// <para>A base-32 string representation of a Guid is the shortest, efficient, representation
/// that is case insensitive (base-64 is case sensitive).</para>
/// <para>Length must be 1-26, anything else becomes 26.</para>
/// </remarks>
public static string ToBase32String(Guid guid, int length = 26)
{
if (length <= 0 || length > 26)
length = 26;
var bytes = guid.ToByteArray(); // a Guid is 128 bits ie 16 bytes
// this could be optimized by making it unsafe,
// and fixing the table + bytes + chars (see Convert.ToBase64CharArray)
// each block of 5 bytes = 5*8 = 40 bits
// becomes 40 bits = 8*5 = 8 byte-32 chars
// a Guid is 3 blocks + 8 bits
// so it turns into a 3*8+2 = 26 chars string
var chars = new char[length];
var i = 0;
var j = 0;
while (i < 15)
{
if (j == length) break;
chars[j++] = Base32Table[(bytes[i] & 0b1111_1000) >> 3];
if (j == length) break;
chars[j++] = Base32Table[((bytes[i] & 0b0000_0111) << 2) | ((bytes[i + 1] & 0b1100_0000) >> 6)];
if (j == length) break;
chars[j++] = Base32Table[(bytes[i + 1] & 0b0011_1110) >> 1];
if (j == length) break;
chars[j++] = Base32Table[(bytes[i + 1] & 0b0000_0001) | ((bytes[i + 2] & 0b1111_0000) >> 4)];
if (j == length) break;
chars[j++] = Base32Table[((bytes[i + 2] & 0b0000_1111) << 1) | ((bytes[i + 3] & 0b1000_0000) >> 7)];
if (j == length) break;
chars[j++] = Base32Table[(bytes[i + 3] & 0b0111_1100) >> 2];
if (j == length) break;
chars[j++] = Base32Table[((bytes[i + 3] & 0b0000_0011) << 3) | ((bytes[i + 4] & 0b1110_0000) >> 5)];
if (j == length) break;
chars[j++] = Base32Table[bytes[i + 4] & 0b0001_1111];
i += 5;
}
if (j < length)
chars[j++] = Base32Table[(bytes[i] & 0b1111_1000) >> 3];
if (j < length)
chars[j] = Base32Table[(bytes[i] & 0b0000_0111) << 2];
return new string(chars);
}
}
}
+48 -18
View File
@@ -29,7 +29,7 @@ namespace Umbraco.Core.IO
// shadow support
private readonly List<ShadowWrapper> _shadowWrappers = new List<ShadowWrapper>();
private readonly object _shadowLocker = new object();
private static Guid _shadowCurrentId = Guid.Empty; // static - unique!!
private static string _shadowCurrentId; // static - unique!!
#region Constructor
// DI wants a public ctor
@@ -45,13 +45,13 @@ namespace Umbraco.Core.IO
_shadowWrappers.Clear();
_filesystems.Clear();
Volatile.Write(ref _wkfsInitialized, false);
_shadowCurrentId = Guid.Empty;
_shadowCurrentId = null;
}
// for tests only, totally unsafe
internal static void ResetShadowId()
{
_shadowCurrentId = Guid.Empty;
_shadowCurrentId = null;
}
// set by the scope provider when taking control of filesystems
@@ -126,11 +126,11 @@ namespace Umbraco.Core.IO
var scriptsFileSystem = new PhysicalFileSystem(SystemDirectories.Scripts);
var mvcViewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews);
_macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "Views/MacroPartials", IsScoped);
_partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "Views/Partials", IsScoped);
_macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "macro-partials", IsScoped);
_partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "partials", IsScoped);
_stylesheetsFileSystem = new ShadowWrapper(stylesheetsFileSystem, "css", IsScoped);
_scriptsFileSystem = new ShadowWrapper(scriptsFileSystem, "scripts", IsScoped);
_mvcViewsFileSystem = new ShadowWrapper(mvcViewsFileSystem, "Views", IsScoped);
_mvcViewsFileSystem = new ShadowWrapper(mvcViewsFileSystem, "views", IsScoped);
// TODO: do we need a lock here?
_shadowWrappers.Add(_macroPartialFileSystem);
@@ -146,6 +146,11 @@ namespace Umbraco.Core.IO
#region Providers
private readonly Dictionary<Type, string> _paths = new Dictionary<Type, string>();
// internal for tests
internal IReadOnlyDictionary<Type, string> Paths => _paths;
/// <summary>
/// Gets a strongly-typed filesystem.
/// </summary>
@@ -162,10 +167,33 @@ namespace Umbraco.Core.IO
return (TFileSystem) _filesystems.GetOrAdd(typeof(TFileSystem), _ => new Lazy<IFileSystem>(() =>
{
var name = typeof(TFileSystem).FullName;
if (name == null) throw new Exception("panic!");
var typeofTFileSystem = typeof(TFileSystem);
var shadowWrapper = CreateShadowWrapper(supporting, "typed/" + name);
// path must be unique and not collide with paths used in CreateWellKnownFileSystems
// for our well-known 'media' filesystem we can use the short 'media' path
// for others, put them under 'x/' and use ... something
string path;
if (typeofTFileSystem == typeof(MediaFileSystem))
{
path = "media";
}
else
{
lock (_paths)
{
if (!_paths.TryGetValue(typeofTFileSystem, out path))
{
path = Guid.NewGuid().ToString("N").Substring(0, 6);
while (_paths.ContainsValue(path)) // this can't loop forever, right?
path = Guid.NewGuid().ToString("N").Substring(0, 6);
_paths[typeofTFileSystem] = path;
}
}
path = "x/" + path;
}
var shadowWrapper = CreateShadowWrapper(supporting, path);
return _container.CreateInstance<TFileSystem>(shadowWrapper);
})).Value;
}
@@ -179,35 +207,37 @@ namespace Umbraco.Core.IO
// global shadow for the entire application, so great care should be taken to ensure that the
// application is *not* doing anything else when using a shadow.
internal ICompletable Shadow(Guid id)
internal ICompletable Shadow()
{
if (Volatile.Read(ref _wkfsInitialized) == false) EnsureWellKnownFileSystems();
var id = ShadowWrapper.CreateShadowId();
return new ShadowFileSystems(this, id); // will invoke BeginShadow and EndShadow
}
internal void BeginShadow(Guid id)
internal void BeginShadow(string id)
{
lock (_shadowLocker)
{
// if we throw here, it means that something very wrong happened.
if (_shadowCurrentId != Guid.Empty)
if (_shadowCurrentId != null)
throw new InvalidOperationException("Already shadowing.");
_shadowCurrentId = id;
_logger.Debug<ShadowFileSystems>("Shadow '{ShadowId}'", id);
_logger.Debug<ShadowFileSystems>("Shadow '{ShadowId}'", _shadowCurrentId);
foreach (var wrapper in _shadowWrappers)
wrapper.Shadow(id);
wrapper.Shadow(_shadowCurrentId);
}
}
internal void EndShadow(Guid id, bool completed)
internal void EndShadow(string id, bool completed)
{
lock (_shadowLocker)
{
// if we throw here, it means that something very wrong happened.
if (_shadowCurrentId == Guid.Empty)
if (_shadowCurrentId == null)
throw new InvalidOperationException("Not shadowing.");
if (id != _shadowCurrentId)
throw new InvalidOperationException("Not the current shadow.");
@@ -228,7 +258,7 @@ namespace Umbraco.Core.IO
}
}
_shadowCurrentId = Guid.Empty;
_shadowCurrentId = null;
if (exceptions.Count > 0)
throw new AggregateException(completed ? "Failed to apply all changes (see exceptions)." : "Failed to abort (see exceptions).", exceptions);
@@ -240,7 +270,7 @@ namespace Umbraco.Core.IO
lock (_shadowLocker)
{
var wrapper = new ShadowWrapper(filesystem, shadowPath, IsScoped);
if (_shadowCurrentId != Guid.Empty)
if (_shadowCurrentId != null)
wrapper.Shadow(_shadowCurrentId);
_shadowWrappers.Add(wrapper);
return wrapper;
@@ -7,7 +7,7 @@ namespace Umbraco.Core.IO.MediaPathSchemes
/// Implements a combined-guids media path scheme.
/// </summary>
/// <remarks>
/// <para>Path is "{combinedGuid}/{filename>}" where combinedGuid is a combination of itemGuid and propertyGuid.</para>
/// <para>Path is "{combinedGuid}/{filename}" where combinedGuid is a combination of itemGuid and propertyGuid.</para>
/// </remarks>
public class CombinedGuidsMediaPathScheme : IMediaPathScheme
{
@@ -16,7 +16,9 @@ namespace Umbraco.Core.IO.MediaPathSchemes
{
// assumes that cuid and puid keys can be trusted - and that a single property type
// for a single content cannot store two different files with the same name
var directory = HexEncoder.Encode(GuidUtils.Combine(itemGuid, propertyGuid).ToByteArray()/*'/', 2, 4*/); // could use ext to fragment path eg 12/e4/f2/...
var combinedGuid = GuidUtils.Combine(itemGuid, propertyGuid);
var directory = HexEncoder.Encode(combinedGuid.ToByteArray()/*'/', 2, 4*/); // could use ext to fragment path eg 12/e4/f2/...
return Path.Combine(directory, filename).Replace('\\', '/');
}
@@ -0,0 +1,37 @@
using System;
using System.IO;
namespace Umbraco.Core.IO.MediaPathSchemes
{
/// <summary>
/// Implements a unique directory media path scheme.
/// </summary>
/// <remarks>
/// <para>This scheme provides deterministic short paths, with potential collisions.</para>
/// </remarks>
public class UniqueMediaPathScheme : IMediaPathScheme
{
private const int DirectoryLength = 8;
/// <inheritdoc />
public string GetFilePath(IMediaFileSystem fileSystem, Guid itemGuid, Guid propertyGuid, string filename, string previous = null)
{
var combinedGuid = GuidUtils.Combine(itemGuid, propertyGuid);
var directory = GuidUtils.ToBase32String(combinedGuid, DirectoryLength);
return Path.Combine(directory, filename).Replace('\\', '/');
}
/// <inheritdoc />
/// <remarks>
/// <para>Returning null so that <see cref="MediaFileSystem.DeleteMediaFiles"/> does *not*
/// delete any directory. This is because the above shortening of the Guid to 8 chars
/// means we're increasing the risk of collision, and we don't want to delete files
/// belonging to other media items.</para>
/// <para>And, at the moment, we cannot delete directory "only if it is empty" because of
/// race conditions. We'd need to implement locks in <see cref="MediaFileSystem"/> for
/// this.</para>
/// </remarks>
public string GetDeleteDirectory(IMediaFileSystem fileSystem, string filepath) => null;
}
}
@@ -304,7 +304,13 @@ namespace Umbraco.Core.IO
// permissions to reach that path, but it may nevertheless be outside of
// our root path, due to relative segments, so better check
if (IOHelper.PathStartsWith(path, _rootPath, Path.DirectorySeparatorChar))
{
// this says that 4.7.2 supports long paths - but Windows does not
// https://docs.microsoft.com/en-us/dotnet/api/system.io.pathtoolongexception?view=netframework-4.7.2
if (path.Length > 260)
throw new PathTooLongException($"Path {path} is too long.");
return path;
}
// nothing prevents us to reach the file, security-wise, yet it is outside
// this filesystem's root - throw
+2 -2
View File
@@ -10,7 +10,7 @@ namespace Umbraco.Core.IO
private bool _completed;
// invoked by the filesystems when shadowing
public ShadowFileSystems(FileSystems fileSystems, Guid id)
public ShadowFileSystems(FileSystems fileSystems, string id)
{
_fileSystems = fileSystems;
Id = id;
@@ -19,7 +19,7 @@ namespace Umbraco.Core.IO
}
// for tests
public Guid Id { get; }
public string Id { get; }
// invoked by the scope when exiting, if completed
public void Complete()
+27 -1
View File
@@ -22,7 +22,33 @@ namespace Umbraco.Core.IO
_isScoped = isScoped;
}
internal void Shadow(Guid id)
public static string CreateShadowId()
{
const int retries = 50; // avoid infinite loop
const int idLength = 8; // 6 chars
// shorten a Guid to idLength chars, and see whether it collides
// with an existing directory or not - if it does, try again, and
// we should end up with a unique identifier eventually - but just
// detect infinite loops (just in case)
for (var i = 0; i < retries; i++)
{
var id = GuidUtils.ToBase32String(Guid.NewGuid(), idLength);
var virt = ShadowFsPath + "/" + id;
var shadowDir = IOHelper.MapPath(virt);
if (Directory.Exists(shadowDir))
continue;
Directory.CreateDirectory(shadowDir);
return id;
}
throw new Exception($"Could not get a shadow identifier (tried {retries} times)");
}
internal void Shadow(string id)
{
// note: no thread-safety here, because ShadowFs is thread-safe due to the check
// on ShadowFileSystemsScope.None - and if None is false then we should be running
+2 -20
View File
@@ -1,6 +1,4 @@
using System;
using System.IO;
using System.Web;
using System.IO;
using Umbraco.Core.Configuration;
namespace Umbraco.Core.IO
@@ -12,23 +10,7 @@ namespace Umbraco.Core.IO
// TODO: Kill this off we don't have umbraco.config XML cache we now have NuCache
public static string GetContentCacheXml(IGlobalSettings globalSettings)
{
switch (globalSettings.LocalTempStorageLocation)
{
case LocalTempStorage.AspNetTemp:
return Path.Combine(HttpRuntime.CodegenDir, @"UmbracoData\umbraco.config");
case LocalTempStorage.EnvironmentTemp:
var appDomainHash = HttpRuntime.AppDomainAppId.ToSHA1();
var cachePath = Path.Combine(Environment.ExpandEnvironmentVariables("%temp%"), "UmbracoData",
//include the appdomain hash is just a safety check, for example if a website is moved from worker A to worker B and then back
// to worker A again, in theory the %temp% folder should already be empty but we really want to make sure that its not
// utilizing an old path
appDomainHash);
return Path.Combine(cachePath, "umbraco.config");
case LocalTempStorage.Default:
return IOHelper.ReturnPath(Constants.AppSettings.ContentXML, "~/App_Data/umbraco.config");
default:
throw new ArgumentOutOfRangeException();
}
return Path.Combine(globalSettings.LocalTempPath, "umbraco.config");
}
}
}
+1 -1
View File
@@ -41,7 +41,7 @@ namespace Umbraco.Core.Logging
}
// a lightweight disposable timer
private class LightDisposableTimer : DisposableObject
private class LightDisposableTimer : DisposableObjectSlim
{
private readonly Action<long> _callback;
private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
@@ -22,6 +22,7 @@ namespace Umbraco.Core.Logging.Serilog
//Set this environment variable - so that it can be used in external config file
//add key="serilog:write-to:RollingFile.pathFormat" value="%BASEDIR%\logs\log.txt" />
Environment.SetEnvironmentVariable("BASEDIR", AppDomain.CurrentDomain.BaseDirectory, EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("MACHINENAME", Environment.MachineName, EnvironmentVariableTarget.Process);
logConfig.MinimumLevel.Verbose() //Set to highest level of logging (as any sinks may want to restrict it to Errors only)
.Enrich.WithProcessId()
@@ -41,8 +41,6 @@ namespace Umbraco.Core.Logging.Serilog
var loggerConfig = new LoggerConfiguration();
loggerConfig
.MinimalConfiguration()
.OutputDefaultTextFile(LogEventLevel.Debug)
.OutputDefaultJsonFile()
.ReadFromConfigFile()
.ReadFromUserConfigFile();
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using Serilog.Events;
using Serilog.Formatting.Compact.Reader;
@@ -10,13 +11,15 @@ namespace Umbraco.Core.Logging.Viewer
internal class JsonLogViewer : LogViewerSourceBase
{
private readonly string _logsPath;
private readonly ILogger _logger;
public JsonLogViewer(string logsPath = "", string searchPath = "") : base(searchPath)
public JsonLogViewer(ILogger logger, string logsPath = "", string searchPath = "") : base(searchPath)
{
if (string.IsNullOrEmpty(logsPath))
logsPath = $@"{AppDomain.CurrentDomain.BaseDirectory}\App_Data\Logs\";
_logsPath = logsPath;
_logger = logger;
}
private const int FileSizeCap = 100;
@@ -77,8 +80,14 @@ namespace Umbraco.Core.Logging.Viewer
using (var stream = new StreamReader(fs))
{
var reader = new LogEventReader(stream);
while (reader.TryRead(out var evt))
while (TryRead(reader, out var evt))
{
//We may get a null if log line is malformed
if (evt == null)
{
continue;
}
if (count > skip + take)
{
break;
@@ -105,5 +114,21 @@ namespace Umbraco.Core.Logging.Viewer
return logs;
}
private bool TryRead(LogEventReader reader, out LogEvent evt)
{
try
{
return reader.TryRead(out evt);
}
catch (JsonReaderException ex)
{
// As we are reading/streaming one line at a time in the JSON file
// Thus we can not report the line number, as it will always be 1
_logger.Error<JsonLogViewer>(ex, "Unable to parse a line in the JSON log file");
evt = null;
return true;
}
}
}
}
@@ -1,4 +1,5 @@
using Umbraco.Core.Components;
using Umbraco.Core.Compose;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Logging.Viewer
{
@@ -8,7 +9,7 @@ namespace Umbraco.Core.Logging.Viewer
{
public void Compose(Composition composition)
{
composition.SetLogViewer(_ => new JsonLogViewer());
composition.SetLogViewer(_ => new JsonLogViewer(composition.Logger));
}
}
}
+1 -1
View File
@@ -22,7 +22,7 @@ namespace Umbraco.Core.Logging
public void Stop(bool discardResults = false)
{ }
private class VoidDisposable : DisposableObject
private class VoidDisposable : DisposableObjectSlim
{
protected override void DisposeResources()
{ }
+1 -1
View File
@@ -101,7 +101,7 @@ namespace Umbraco.Core.Manifest
var gridEditors = new List<GridEditor>();
var contentApps = new List<ManifestContentAppDefinition>();
var dashboards = new List<ManifestDashboard>();
var sections = new List<ManifestBackOfficeSection>();
var sections = new List<ManifestSection>();
foreach (var manifest in manifests)
{
@@ -1,10 +1,10 @@
using System.Runtime.Serialization;
using Umbraco.Core.Models.Trees;
using Umbraco.Core.Models.Sections;
namespace Umbraco.Core.Manifest
{
[DataContract(Name = "section", Namespace = "")]
public class ManifestBackOfficeSection : IBackOfficeSection
public class ManifestSection : ISection
{
[DataMember(Name = "alias")]
public string Alias { get; set; }
+1 -1
View File
@@ -55,6 +55,6 @@ namespace Umbraco.Core.Manifest
/// Gets or sets the sections listed in the manifest.
/// </summary>
[JsonProperty("sections")]
public ManifestBackOfficeSection[] Sections { get; set; } = Array.Empty<ManifestBackOfficeSection>();
public ManifestSection[] Sections { get; set; } = Array.Empty<ManifestSection>();
}
}
@@ -1,4 +1,6 @@
using Umbraco.Core.Logging;
using System;
using System.Collections.Generic;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
namespace Umbraco.Core.Migrations
@@ -32,5 +34,11 @@ namespace Umbraco.Core.Migrations
/// Gets or sets a value indicating whether an expression is being built.
/// </summary>
bool BuildingExpression { get; set; }
/// <summary>
/// Adds a post-migrations.
/// </summary>
void AddPostMigration<TMigration>()
where TMigration : IMigration;
}
}
@@ -1,12 +0,0 @@
using Semver;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
using Umbraco.Core.Scoping;
namespace Umbraco.Core.Migrations
{
public interface IPostMigration : IDiscoverable
{
void Execute(string name, IScope scope, SemVersion originVersion, SemVersion targetVersion, ILogger logger);
}
}
@@ -27,7 +27,6 @@ namespace Umbraco.Core.Migrations.Install
private readonly IRuntimeState _runtime;
private readonly IMigrationBuilder _migrationBuilder;
private readonly IKeyValueService _keyValueService;
private readonly PostMigrationCollection _postMigrations;
private readonly ILogger _logger;
private DatabaseSchemaResult _databaseSchemaValidationResult;
@@ -35,7 +34,7 @@ namespace Umbraco.Core.Migrations.Install
/// <summary>
/// Initializes a new instance of the <see cref="DatabaseBuilder"/> class.
/// </summary>
public DatabaseBuilder(IScopeProvider scopeProvider, IGlobalSettings globalSettings, IUmbracoDatabaseFactory databaseFactory, IRuntimeState runtime, ILogger logger, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService, PostMigrationCollection postMigrations)
public DatabaseBuilder(IScopeProvider scopeProvider, IGlobalSettings globalSettings, IUmbracoDatabaseFactory databaseFactory, IRuntimeState runtime, ILogger logger, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService)
{
_scopeProvider = scopeProvider;
_globalSettings = globalSettings;
@@ -44,7 +43,6 @@ namespace Umbraco.Core.Migrations.Install
_logger = logger;
_migrationBuilder = migrationBuilder;
_keyValueService = keyValueService;
_postMigrations = postMigrations;
}
#region Status
@@ -483,7 +481,7 @@ namespace Umbraco.Core.Migrations.Install
/// configured and it is possible to connect to the database.</para>
/// <para>Runs whichever migrations need to run.</para>
/// </remarks>
public Result UpgradeSchemaAndData()
public Result UpgradeSchemaAndData(MigrationPlan plan)
{
try
{
@@ -496,8 +494,8 @@ namespace Umbraco.Core.Migrations.Install
_logger.Info<DatabaseBuilder>("Database upgrade started");
// upgrade
var upgrader = new UmbracoUpgrader();
upgrader.Execute(_scopeProvider, _migrationBuilder, _keyValueService, _logger, _postMigrations);
var upgrader = new Upgrader(plan);
upgrader.Execute(_scopeProvider, _migrationBuilder, _keyValueService, _logger);
var message = "<p>Upgrade completed!</p>";
@@ -271,17 +271,17 @@ namespace Umbraco.Core.Migrations.Install
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -88, EditorAlias = Constants.PropertyEditors.Aliases.TextBox, DbType = "Nvarchar" });
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -89, EditorAlias = Constants.PropertyEditors.Aliases.TextArea, DbType = "Ntext" });
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -90, EditorAlias = Constants.PropertyEditors.Aliases.UploadField, DbType = "Nvarchar" });
InsertDataTypeDto(Constants.DataTypes.LabelString, Constants.PropertyEditors.Aliases.NoEdit, "Nvarchar", "{\"umbracoDataValueType\":\"STRING\"}");
InsertDataTypeDto(Constants.DataTypes.LabelInt, Constants.PropertyEditors.Aliases.NoEdit, "Integer", "{\"umbracoDataValueType\":\"INT\"}");
InsertDataTypeDto(Constants.DataTypes.LabelBigint, Constants.PropertyEditors.Aliases.NoEdit, "Nvarchar", "{\"umbracoDataValueType\":\"BIGINT\"}");
InsertDataTypeDto(Constants.DataTypes.LabelDateTime, Constants.PropertyEditors.Aliases.NoEdit, "Date", "{\"umbracoDataValueType\":\"DATETIME\"}");
InsertDataTypeDto(Constants.DataTypes.LabelDecimal, Constants.PropertyEditors.Aliases.NoEdit, "Decimal", "{\"umbracoDataValueType\":\"DECIMAL\"}");
InsertDataTypeDto(Constants.DataTypes.LabelTime, Constants.PropertyEditors.Aliases.NoEdit, "Date", "{\"umbracoDataValueType\":\"TIME\"}");
InsertDataTypeDto(Constants.DataTypes.LabelString, Constants.PropertyEditors.Aliases.Label, "Nvarchar", "{\"umbracoDataValueType\":\"STRING\"}");
InsertDataTypeDto(Constants.DataTypes.LabelInt, Constants.PropertyEditors.Aliases.Label, "Integer", "{\"umbracoDataValueType\":\"INT\"}");
InsertDataTypeDto(Constants.DataTypes.LabelBigint, Constants.PropertyEditors.Aliases.Label, "Nvarchar", "{\"umbracoDataValueType\":\"BIGINT\"}");
InsertDataTypeDto(Constants.DataTypes.LabelDateTime, Constants.PropertyEditors.Aliases.Label, "Date", "{\"umbracoDataValueType\":\"DATETIME\"}");
InsertDataTypeDto(Constants.DataTypes.LabelDecimal, Constants.PropertyEditors.Aliases.Label, "Decimal", "{\"umbracoDataValueType\":\"DECIMAL\"}");
InsertDataTypeDto(Constants.DataTypes.LabelTime, Constants.PropertyEditors.Aliases.Label, "Date", "{\"umbracoDataValueType\":\"TIME\"}");
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -36, EditorAlias = Constants.PropertyEditors.Aliases.DateTime, DbType = "Date" });
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -37, EditorAlias = Constants.PropertyEditors.Aliases.ColorPicker, DbType = "Nvarchar" });
InsertDataTypeDto(Constants.DataTypes.DropDownSingle, Constants.PropertyEditors.Aliases.DropDownListFlexible, "Nvarchar", "{\"multiple\":false}");
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -40, EditorAlias = Constants.PropertyEditors.Aliases.RadioButtonList, DbType = "Nvarchar" });
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -41, EditorAlias = Constants.PropertyEditors.Aliases.Date, DbType = "Date" });
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -41, EditorAlias = "Umbraco.DateTime", DbType = "Date", Configuration = "{\"format\":\"YYYY-MM-DD\"}" });
InsertDataTypeDto(Constants.DataTypes.DropDownMultiple, Constants.PropertyEditors.Aliases.DropDownListFlexible, "Nvarchar", "{\"multiple\":true}");
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = -43, EditorAlias = Constants.PropertyEditors.Aliases.CheckBoxList, DbType = "Nvarchar" });
_database.Insert(Constants.DatabaseSchema.Tables.DataType, "pk", false, new DataTypeDto { NodeId = 1041, EditorAlias = Constants.PropertyEditors.Aliases.Tags, DbType = "Ntext",
@@ -321,7 +321,7 @@ namespace Umbraco.Core.Migrations.Install
{
// on install, initialize the umbraco migration plan with the final state
var upgrader = new UmbracoUpgrader();
var upgrader = new Upgrader(new UmbracoPlan());
var stateValueKey = upgrader.StateValueKey;
var finalState = upgrader.Plan.FinalState;
@@ -50,8 +50,6 @@ namespace Umbraco.Core.Migrations.Install
typeof (MemberTypeDto),
typeof (MemberDto),
typeof (Member2MemberGroupDto),
typeof (ContentXmlDto),
typeof (PreviewXmlDto),
typeof (PropertyTypeGroupDto),
typeof (PropertyTypeDto),
typeof (PropertyDataDto),
@@ -139,13 +137,18 @@ namespace Umbraco.Core.Migrations.Install
/// Validates the schema of the current database.
/// </summary>
internal DatabaseSchemaResult ValidateSchema()
{
return ValidateSchema(OrderedTables);
}
internal DatabaseSchemaResult ValidateSchema(IEnumerable<Type> orderedTables)
{
var result = new DatabaseSchemaResult(SqlSyntax);
result.IndexDefinitions.AddRange(SqlSyntax.GetDefinedIndexes(_database)
.Select(x => new DbIndexDefinition(x)));
result.TableDefinitions.AddRange(OrderedTables
result.TableDefinitions.AddRange(orderedTables
.Select(x => DefinitionFactory.GetTableDefinition(x, SqlSyntax)));
ValidateDbTables(result);
@@ -96,6 +96,12 @@ namespace Umbraco.Core.Migrations
return tables.Any(x => x.InvariantEquals(tableName));
}
protected bool IndexExists(string indexName)
{
var indexes = SqlSyntax.GetDefinedIndexes(Context.Database);
return indexes.Any(x => x.Item2.InvariantEquals(indexName));
}
protected bool ColumnExists(string tableName, string columnName)
{
var columns = SqlSyntax.GetColumnsInSchema(Context.Database).Distinct().ToArray();
@@ -1,11 +1,12 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
namespace Umbraco.Core.Migrations
{
/// <summary>
/// Represents a migration context.
/// Implements <see cref="IMigrationContext"/>.
/// </summary>
internal class MigrationContext : IMigrationContext
{
@@ -32,5 +33,15 @@ namespace Umbraco.Core.Migrations
/// <inheritdoc />
public bool BuildingExpression { get; set; }
// this is only internally exposed
public List<Type> PostMigrations { get; } = new List<Type>();
/// <inheritdoc />
public void AddPostMigration<TMigration>()
where TMigration : IMigration
{
PostMigrations.Add(typeof(TMigration));
}
}
}
@@ -14,6 +14,7 @@ namespace Umbraco.Core.Migrations
public class MigrationPlan
{
private readonly Dictionary<string, Transition> _transitions = new Dictionary<string, Transition>();
private readonly List<Type> _postMigrationTypes = new List<Type>();
private string _prevState;
private string _finalState;
@@ -166,6 +167,25 @@ namespace Umbraco.Core.Migrations
return this;
}
/// <summary>
/// Prepares post-migrations.
/// </summary>
/// <remarks>
/// <para>This can be overriden to filter, complement, and/or re-order post-migrations.</para>
/// </remarks>
protected virtual IEnumerable<Type> PreparePostMigrations(IEnumerable<Type> types)
=> types;
/// <summary>
/// Adds a post-migration to the plan.
/// </summary>
public virtual MigrationPlan AddPostMigration<TMigration>()
where TMigration : IMigration
{
_postMigrationTypes.Add(typeof(TMigration));
return this;
}
/// <summary>
/// Creates a random, unique state.
/// </summary>
@@ -270,6 +290,7 @@ namespace Umbraco.Core.Migrations
throw new Exception($"Unknown state \"{origState}\".");
var context = new MigrationContext(scope.Database, logger);
context.PostMigrations.AddRange(_postMigrationTypes);
while (transition != null)
{
@@ -285,6 +306,20 @@ namespace Umbraco.Core.Migrations
throw new Exception($"Unknown state \"{origState}\".");
}
// prepare and de-duplicate post-migrations, only keeping the 1st occurence
var temp = new HashSet<Type>();
var postMigrationTypes = PreparePostMigrations(context.PostMigrations)
.Where(x => !temp.Contains(x))
.Select(x => { temp.Add(x); return x; });
// run post-migrations
foreach (var postMigrationType in postMigrationTypes)
{
logger.Info<MigrationPlan>($"PostMigration: {postMigrationType.FullName}.");
var postMigration = migrationBuilder.Build(postMigrationType, context);
postMigration.Migrate();
}
logger.Info<MigrationPlan>("Done (pending scope completion).");
// safety check
@@ -1,12 +0,0 @@
using System.Collections.Generic;
using Umbraco.Core.Composing;
namespace Umbraco.Core.Migrations
{
public class PostMigrationCollection : BuilderCollectionBase<IPostMigration>
{
public PostMigrationCollection(IEnumerable<IPostMigration> items)
: base(items)
{ }
}
}
@@ -1,11 +0,0 @@
using Umbraco.Core.Composing;
namespace Umbraco.Core.Migrations
{
public class PostMigrationCollectionBuilder : LazyCollectionBuilderBase<PostMigrationCollectionBuilder, PostMigrationCollection, IPostMigration>
{
protected override PostMigrationCollectionBuilder This => this;
protected override Lifetime CollectionLifetime => Lifetime.Transient;
}
}
@@ -0,0 +1,18 @@
namespace Umbraco.Core.Migrations.PostMigrations
{
/// <summary>
/// Rebuilds the published snapshot.
/// </summary>
/// <remarks>
/// <para>This interface exists because the entire published snapshot lives in Umbraco.Web
/// but we may want to trigger rebuilds from Umbraco.Core. These two assemblies should
/// be refactored, really.</para>
/// </remarks>
public interface IPublishedSnapshotRebuilder
{
/// <summary>
/// Rebuilds.
/// </summary>
void Rebuild();
}
}
@@ -0,0 +1,12 @@
namespace Umbraco.Core.Migrations.PostMigrations
{
/// <summary>
/// Implements <see cref="IPublishedSnapshotRebuilder"/> in Umbraco.Core (doing nothing).
/// </summary>
public class PublishedSnapshotRebuilder : IPublishedSnapshotRebuilder
{
/// <inheritdoc />
public void Rebuild()
{ }
}
}
@@ -0,0 +1,24 @@
namespace Umbraco.Core.Migrations.PostMigrations
{
/// <summary>
/// Rebuilds the published snapshot.
/// </summary>
public class RebuildPublishedSnapshot : IMigration
{
private readonly IPublishedSnapshotRebuilder _rebuilder;
/// <summary>
/// Initializes a new instance of the <see cref="RebuildPublishedSnapshot"/> class.
/// </summary>
public RebuildPublishedSnapshot(IPublishedSnapshotRebuilder rebuilder)
{
_rebuilder = rebuilder;
}
/// <inheritdoc />
public void Migrate()
{
_rebuilder.Rebuild();
}
}
}
@@ -5,6 +5,7 @@ using Umbraco.Core.Configuration;
using Umbraco.Core.Migrations.Upgrade.V_7_12_0;
using Umbraco.Core.Migrations.Upgrade.V_7_14_0;
using Umbraco.Core.Migrations.Upgrade.V_8_0_0;
using Umbraco.Core.Migrations.Upgrade.V_8_0_1;
namespace Umbraco.Core.Migrations.Upgrade
{
@@ -56,7 +57,7 @@ namespace Umbraco.Core.Migrations.Upgrade
}
}
// define the plan
// define the plan
protected void DefinePlan()
{
// MODIFYING THE PLAN
@@ -127,7 +128,17 @@ namespace Umbraco.Core.Migrations.Upgrade
To<ConvertRelatedLinksToMultiUrlPicker>("{ED28B66A-E248-4D94-8CDB-9BDF574023F0}");
To<UpdatePickerIntegerValuesToUdi>("{38C809D5-6C34-426B-9BEA-EFD39162595C}");
To<RenameUmbracoDomainsTable>("{6017F044-8E70-4E10-B2A3-336949692ADD}");
To<AddUserLoginDtoDateIndex>("{98339BEF-E4B2-48A8-B9D1-D173DC842BBE}");
Merge()
.To<DropXmlTables>("{CDBEDEE4-9496-4903-9CF2-4104E00FF960}")
.With()
.To<RadioAndCheckboxAndDropdownPropertyEditorsMigration>("{940FD19A-00A8-4D5C-B8FF-939143585726}")
.As("{0576E786-5C30-4000-B969-302B61E90CA3}");
To<RenameLabelAndRichTextPropertyEditorAliases>("{E0CBE54D-A84F-4A8F-9B13-900945FD7ED9}");
To<MergeDateAndDateTimePropertyEditor>("{78BAF571-90D0-4D28-8175-EF96316DA789}");
To<ChangeNuCacheJsonFormat>("{80C0A0CB-0DD5-4573-B000-C4B7C313C70D}");
//FINAL
@@ -159,7 +170,7 @@ namespace Umbraco.Core.Migrations.Upgrade
From("{init-7.12.4}").To("{init-7.10.0}"); // same as 7.12.0
From("{init-7.13.0}").To("{init-7.10.0}"); // same as 7.12.0
From("{init-7.13.1}").To("{init-7.10.0}"); // same as 7.12.0
// 7.14.0 has migrations, handle it...
// clone going from 7.10 to 1350617A (the last one before we started to merge 7.12 migrations), then
// clone going from CF51B39B (after 7.12 migrations) to 0009109C (the last one before we started to merge 7.12 migrations),
@@ -1,48 +0,0 @@
using System;
using System.Configuration;
using Semver;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
namespace Umbraco.Core.Migrations.Upgrade
{
/// <summary>
/// Represents the Umbraco upgrader.
/// </summary>
public class UmbracoUpgrader : Upgrader
{
private PostMigrationCollection _postMigrations;
/// <summary>
/// Initializes a new instance of the <see ref="UmbracoUpgrader" /> class.
/// </summary>
public UmbracoUpgrader()
: base(new UmbracoPlan())
{ }
/// <summary>
/// Executes.
/// </summary>
public void Execute(IScopeProvider scopeProvider, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService, ILogger logger, PostMigrationCollection postMigrations)
{
_postMigrations = postMigrations;
Execute(scopeProvider, migrationBuilder, keyValueService, logger);
}
/// <inheritdoc />
public override void AfterMigrations(IScope scope, ILogger logger)
{
// assume we have something in web.config that makes some sense = the origin version
if (!SemVersion.TryParse(ConfigurationManager.AppSettings[Constants.AppSettings.ConfigurationStatus], out var originVersion))
throw new InvalidOperationException($"Could not get current version from web.config {Constants.AppSettings.ConfigurationStatus} appSetting.");
// target version is the code version
var targetVersion = UmbracoVersion.SemanticVersion;
foreach (var postMigration in _postMigrations)
postMigration.Execute(Name, scope, originVersion, targetVersion, logger);
}
}
}
@@ -53,7 +53,7 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
var dataTypeDto = new DataTypeDto
{
NodeId = id,
EditorAlias = Constants.PropertyEditors.Aliases.NoEdit,
EditorAlias = Constants.PropertyEditors.Aliases.Label,
DbType = dbType
};
@@ -0,0 +1,22 @@
using Umbraco.Core.Persistence.Dtos;
namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
{
public class AddUserLoginDtoDateIndex : MigrationBase
{
public AddUserLoginDtoDateIndex(IMigrationContext context)
: base(context)
{ }
public override void Migrate()
{
if (!IndexExists("IX_umbracoUserLogin_lastValidatedUtc"))
Create.Index("IX_umbracoUserLogin_lastValidatedUtc")
.OnTable(UserLoginDto.TableName)
.OnColumn("lastValidatedUtc")
.Ascending()
.WithOptions().NonClustered()
.Do();
}
}
}
@@ -99,7 +99,6 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
if (requiresCacheRebuild)
{
var dataTypeCacheRefresher = _cacheRefreshers[Guid.Parse("35B16C25-A17E-45D7-BC8F-EDAB1DCC28D2")];
// TODO: this should use DistributedCache not messengers, alas DistributedCache lives in Umbraco.Web
_serverMessenger.PerformRefreshAll(dataTypeCacheRefresher);
}
}
@@ -1,6 +1,5 @@
namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
{
public class DropTaskTables : MigrationBase
{
public DropTaskTables(IMigrationContext context)
@@ -0,0 +1,17 @@
namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
{
public class DropXmlTables : MigrationBase
{
public DropXmlTables(IMigrationContext context)
: base(context)
{ }
public override void Migrate()
{
if (TableExists("cmsContentXml"))
Delete.Table("cmsContentXml").Do();
if (TableExists("cmsPreviewXml"))
Delete.Table("cmsPreviewXml").Do();
}
}
}
@@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.PropertyEditors;
namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
{
public class MergeDateAndDateTimePropertyEditor : MigrationBase
{
public MergeDateAndDateTimePropertyEditor(IMigrationContext context)
: base(context)
{
}
public override void Migrate()
{
var dataTypes = GetDataTypes("Umbraco.Date");
foreach (var dataType in dataTypes)
{
DateTimeConfiguration config;
try
{
config = (DateTimeConfiguration) new CustomDateTimeConfigurationEditor().FromDatabase(
dataType.Configuration);
}
catch (Exception ex)
{
Logger.Error<DropDownPropertyEditorsMigration>(
ex,
"Invalid property editor configuration detected: \"{Configuration}\", cannot convert editor, values will be cleared",
dataType.Configuration);
continue;
}
config.OffsetTime = false;
dataType.EditorAlias = Constants.PropertyEditors.Aliases.DateTime;
dataType.Configuration = ConfigurationEditor.ToDatabase(config);
Database.Update(dataType);
}
}
private List<DataTypeDto> GetDataTypes(string editorAlias)
{
//need to convert the old drop down data types to use the new one
var dataTypes = Database.Fetch<DataTypeDto>(Sql()
.Select<DataTypeDto>()
.From<DataTypeDto>()
.Where<DataTypeDto>(x => x.EditorAlias == editorAlias));
return dataTypes;
}
private class CustomDateTimeConfigurationEditor : ConfigurationEditor<DateTimeConfiguration>
{
}
}
}
@@ -0,0 +1,183 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Umbraco.Core.Logging;
using Umbraco.Core.Migrations.PostMigrations;
using Umbraco.Core.Models;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Dtos;
using Umbraco.Core.PropertyEditors;
namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
{
public class RadioAndCheckboxAndDropdownPropertyEditorsMigration : MigrationBase
{
public RadioAndCheckboxAndDropdownPropertyEditorsMigration(IMigrationContext context)
: base(context)
{
}
public override void Migrate()
{
var refreshCache = false;
refreshCache |= Migrate(Constants.PropertyEditors.Aliases.RadioButtonList, (dto, configuration) => UpdateRadioOrCheckboxPropertyDataDto(dto, configuration, true));
refreshCache |= Migrate(Constants.PropertyEditors.Aliases.CheckBoxList, (dto, configuration) => UpdateRadioOrCheckboxPropertyDataDto(dto, configuration, false));
refreshCache |= Migrate(Constants.PropertyEditors.Aliases.DropDownListFlexible, UpdateDropDownPropertyDataDto);
if (refreshCache)
{
Context.AddPostMigration<RebuildPublishedSnapshot>();
}
}
private bool Migrate(string editorAlias, Func<PropertyDataDto, ValueListConfiguration, bool> updateRadioPropertyDataFunc)
{
var refreshCache = false;
var dataTypes = GetDataTypes(editorAlias);
foreach (var dataType in dataTypes)
{
ValueListConfiguration config;
if (dataType.Configuration.IsNullOrWhiteSpace())
continue;
// parse configuration, and update everything accordingly
try
{
config = (ValueListConfiguration) new ValueListConfigurationEditor().FromDatabase(
dataType.Configuration);
}
catch (Exception ex)
{
Logger.Error<DropDownPropertyEditorsMigration>(
ex,
"Invalid property editor configuration detected: \"{Configuration}\", cannot convert editor, values will be cleared",
dataType.Configuration);
continue;
}
// get property data dtos
var propertyDataDtos = Database.Fetch<PropertyDataDto>(Sql()
.Select<PropertyDataDto>()
.From<PropertyDataDto>()
.InnerJoin<PropertyTypeDto>()
.On<PropertyTypeDto, PropertyDataDto>((pt, pd) => pt.Id == pd.PropertyTypeId)
.InnerJoin<DataTypeDto>()
.On<DataTypeDto, PropertyTypeDto>((dt, pt) => dt.NodeId == pt.DataTypeId)
.Where<PropertyTypeDto>(x => x.DataTypeId == dataType.NodeId));
// update dtos
var updatedDtos = propertyDataDtos.Where(x => updateRadioPropertyDataFunc(x, config));
// persist changes
foreach (var propertyDataDto in updatedDtos) Database.Update(propertyDataDto);
UpdateDataType(dataType);
refreshCache = true;
}
return refreshCache;
}
private List<DataTypeDto> GetDataTypes(string editorAlias)
{
//need to convert the old drop down data types to use the new one
var dataTypes = Database.Fetch<DataTypeDto>(Sql()
.Select<DataTypeDto>()
.From<DataTypeDto>()
.Where<DataTypeDto>(x => x.EditorAlias == editorAlias));
return dataTypes;
}
private void UpdateDataType(DataTypeDto dataType)
{
dataType.DbType = ValueStorageType.Nvarchar.ToString();
Database.Update(dataType);
}
private bool UpdateRadioOrCheckboxPropertyDataDto(PropertyDataDto propData, ValueListConfiguration config, bool singleValue)
{
//Get the INT ids stored for this property/drop down
int[] ids = null;
if (!propData.VarcharValue.IsNullOrWhiteSpace())
{
ids = ConvertStringValues(propData.VarcharValue);
}
else if (!propData.TextValue.IsNullOrWhiteSpace())
{
ids = ConvertStringValues(propData.TextValue);
}
else if (propData.IntegerValue.HasValue)
{
ids = new[] {propData.IntegerValue.Value};
}
//if there are INT ids, convert them to values based on the configuration
if (ids == null || ids.Length <= 0) return false;
//map the ids to values
var values = new List<string>();
var canConvert = true;
foreach (var id in ids)
{
var val = config.Items.FirstOrDefault(x => x.Id == id);
if (val != null)
values.Add(val.Value);
else
{
Logger.Warn<DropDownPropertyEditorsMigration>(
"Could not find associated data type configuration for stored Id {DataTypeId}", id);
canConvert = false;
}
}
if (!canConvert) return false;
//The radio button only supports selecting a single value, so if there are multiple for some insane reason we can only use the first
propData.VarcharValue = singleValue ? values[0] : JsonConvert.SerializeObject(values);
propData.TextValue = null;
propData.IntegerValue = null;
return true;
}
private bool UpdateDropDownPropertyDataDto(PropertyDataDto propData, ValueListConfiguration config)
{
//Get the INT ids stored for this property/drop down
var values = propData.VarcharValue.Split(new []{","}, StringSplitOptions.RemoveEmptyEntries);
//if there are INT ids, convert them to values based on the configuration
if (values == null || values.Length <= 0) return false;
//The radio button only supports selecting a single value, so if there are multiple for some insane reason we can only use the first
propData.VarcharValue = JsonConvert.SerializeObject(values);
propData.TextValue = null;
propData.IntegerValue = null;
return true;
}
private int[] ConvertStringValues(string val)
{
var splitVals = val.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries);
var intVals = splitVals
.Select(x => int.TryParse(x, out var i) ? i : int.MinValue)
.Where(x => x != int.MinValue)
.ToArray();
//only return if the number of values are the same (i.e. All INTs)
if (splitVals.Length == intVals.Length)
return intVals;
return null;
}
private class ValueListConfigurationEditor : ConfigurationEditor<ValueListConfiguration>
{
}
}
}
@@ -0,0 +1,41 @@
using System.Collections.Generic;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Dtos;
namespace Umbraco.Core.Migrations.Upgrade.V_8_0_0
{
public class RenameLabelAndRichTextPropertyEditorAliases : MigrationBase
{
public RenameLabelAndRichTextPropertyEditorAliases(IMigrationContext context)
: base(context)
{
}
public override void Migrate()
{
MigratePropertyEditorAlias("Umbraco.TinyMCEv3", Constants.PropertyEditors.Aliases.TinyMce);
MigratePropertyEditorAlias("Umbraco.NoEdit", Constants.PropertyEditors.Aliases.Label);
}
private void MigratePropertyEditorAlias(string oldAlias, string newAlias)
{
var dataTypes = GetDataTypes(oldAlias);
foreach (var dataType in dataTypes)
{
dataType.EditorAlias = newAlias;
Database.Update(dataType);
}
}
private List<DataTypeDto> GetDataTypes(string editorAlias)
{
var dataTypes = Database.Fetch<DataTypeDto>(Sql()
.Select<DataTypeDto>()
.From<DataTypeDto>()
.Where<DataTypeDto>(x => x.EditorAlias == editorAlias));
return dataTypes;
}
}
}

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