Compare commits

..

1330 Commits

Author SHA1 Message Date
Sebastiaan Janssen 5fdd7d8bd6 Merge branch 'bjarnef-dev-v7-U4-6898' into dev-v7 2015-07-31 11:29:58 +02:00
Sebastiaan Janssen b5c87ccfb7 Merge branch 'dev-v7-U4-6898' of https://github.com/bjarnef/Umbraco-CMS into bjarnef-dev-v7-U4-6898 2015-07-31 11:29:51 +02:00
Sebastiaan Janssen 2efe6ae7a4 Merge pull request #754 from bjarnef/dev-v7-U4-6179
Highlight recycle bin tree node
2015-07-31 11:20:44 +02:00
Sebastiaan Janssen cbab70fd7c Should finally fix this test that apparently relies on super strict timings 2015-07-30 19:28:33 +02:00
bjarnef 09a3b0d155 Highlight recycle bin tree node
Ensure recycle bin tree node is highlighted when chosen.
2015-07-30 18:36:22 +02:00
Sebastiaan Janssen ca9cd77ded Fix log type 2015-07-30 18:14:29 +02:00
Sebastiaan Janssen 812601217a Merge branch 'pete2' into dev-v7 2015-07-30 18:03:09 +02:00
Pete Duncanson 3a6ec5ef0c Add a log message to stop database start up code from swallowing exception messages, now stash them in the logs to give developers a chance ;) 2015-07-30 18:01:24 +02:00
Rasmus Eeg Møller 4197a7654f U4-6902 - Changed from internal to public
Just like the ContentFinderResolver.cs
2015-07-30 17:59:18 +02:00
Sebastiaan Janssen 3133014650 Removes more references to FixedDisplayModes 2015-07-30 17:39:07 +02:00
Sebastiaan Janssen 4bce945946 Remove stray FixedDisplayModes reference 2015-07-30 17:19:43 +02:00
Sebastiaan Janssen 2d15c9c01c Use the new views config transform 2015-07-30 17:08:40 +02:00
Sebastiaan Janssen 58e648828b Fix web.config and adds a transform for NuGet 2015-07-30 17:08:40 +02:00
Sebastiaan Janssen d87b268a40 Update to MVC5 2015-07-30 17:08:39 +02:00
bjarnef 5174645059 Make tree nodes consistent
Make tree nodes have same position from the left regardless of the arrow
to expand the children.
2015-07-30 16:04:54 +02:00
Shannon e4286bc35b Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-30 15:13:51 +02:00
Shannon cf4d13da31 fixes backward compat issue 2015-07-30 15:13:39 +02:00
Shannon Deminick a89b064e29 Merge pull request #751 from rasmuseeg/patch-1
U4-6902 - Changed from internal to public
2015-07-30 15:04:23 +02:00
Rasmus Eeg Møller 1e41973eb5 U4-6902 - Changed from internal to public
Just like the ContentFinderResolver.cs
2015-07-30 14:54:10 +02:00
Shannon b4e496fceb Fixes backwards compat issue in 7.3 with TagQuery property on UmbracoHelper. see: http://issues.umbraco.org/issue/U4-6899 2015-07-30 14:03:17 +02:00
Shannon bb94fc7d71 Ensures notifications are shown for drag/drop uploads 2015-07-30 11:35:00 +02:00
Shannon 959378c456 Fixes file cleanup with blue imp uploads 2015-07-29 16:14:09 +02:00
Shannon 787e128d5c wires up event messages for media editor and tree (haven't done the drag/drop media upload though) 2015-07-29 16:00:06 +02:00
Shannon b7912a7be7 fixes build 2015-07-29 15:22:22 +02:00
Shannon 0bc7aa6ba7 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-29 15:18:34 +02:00
Shannon 367da39bbb wires up UI to show notifications for delete cancellation 2015-07-29 15:18:23 +02:00
Shannon 6d8ffb903f Ensures events for deleting, trashing and unpublishing are done using the event messages, updates UI to support showing these messages in the list view, Since we cannot change the
method results on a service, we've created a new temporary service that we will explicitly implement with an extension method to get it. This is temporary until v8 where we will just replace
the original methods on the service with these methods and then remove this class.
2015-07-29 15:12:12 +02:00
Shannon 0e992f897f Removes standalone classes, we can replace these with what we've got in the LinqPad provider 2015-07-29 15:07:55 +02:00
Shannon 3f19878c18 changes member controller to use long overload 2015-07-29 15:07:32 +02:00
Stephan 308f64a7e2 doc BatchedDatabaseServerMessenger startup 2015-07-29 11:22:12 +02:00
Shannon 1eab92b299 updates prog bars in examine mgt dashboard to be like other umb prog bars 2015-07-27 18:58:14 +02:00
Shannon 7a8b8f138f Fixes list view search debounce and adds a ui indication that search is in progress. 2015-07-27 18:48:41 +02:00
Shannon 926ea54c39 Developers can cancel an event with the CancelOperation method of the event with a custom message which will be used in place of the normal default cancellation message 2015-07-27 18:04:20 +02:00
Shannon b44494a093 Works on: U4-5308 Umbraco 7 Content Tree Width not resizable or scrollable 2015-07-27 16:38:39 +02:00
Shannon a6094a82cb Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-27 16:16:22 +02:00
Shannon 07f58d191b fixes js error 2015-07-27 16:16:10 +02:00
Sebastiaan Janssen 51eae92a5a Update json.net everywhere 2015-07-27 16:11:18 +02:00
Sebastiaan Janssen 0be3f3fb76 Oops, wrong path! Come on msbuild: just intuit what I wanted to do! :) 2015-07-27 16:08:28 +02:00
Sebastiaan Janssen 9f000eb90c Updates build to include and exclude correct files, syncs web.config and syncs dependency versions between core and nuget pkg 2015-07-27 15:52:10 +02:00
Sebastiaan Janssen b7926bfa19 Cookie monster 2015-07-27 15:52:10 +02:00
Shannon fa76ffa5ca workaround for upgrade auth issue 2015-07-27 15:48:14 +02:00
Shannon Deminick 5ed8ade862 Merge pull request #748 from mattbrailsford/dev-v7-increase-tree-icon-size
Increased tree icon font size for better visibility
2015-07-27 12:55:13 +02:00
Shannon 7a31ce16e2 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-27 12:53:20 +02:00
Shannon 16c9ca9e4b Refactors IDomain model, simplifies it so that it doesn't contain references, simplifies the domain repository to no longer require lookups of content and languages, updates all other code referencing IDomain and now if a language lookup is required it is made when appropriate. 2015-07-27 12:53:09 +02:00
Shannon 00c13b9939 fixes tests 2015-07-27 12:03:38 +02:00
Shannon Deminick dbced8bef7 Merge pull request #749 from AndyButland/u4-6856
U4-6856 - fixed issue that prevents username update...
2015-07-27 10:47:54 +02:00
AndyButland 9552922795 Fixed issue that prevents username update if other core membership provider properties are updated at the same time
Fixed typo in previous commit
2015-07-27 10:33:37 +02:00
mattbrailsford de53c8886b Increased to 19 pixels based on feedback 2015-07-25 09:32:54 +01:00
mattbrailsford 3672d13215 Increased font tree icon font size to 17px for better visibility 2015-07-24 21:36:24 +01:00
Shannon 5ab036e9d3 missing column creation in migration script. 2015-07-24 18:58:08 +02:00
Shannon accf52ca38 if user has explicitly opted out of index rebuild on startup, we must ensure that the database server messenger doesn't rebuild them either. 2015-07-24 18:52:04 +02:00
Shannon 51d14a7a01 Updates all calls to GetAll(params int[]) that potentially could have looked up all data un-intentionally - cause for U4-6869 contentService + domainService is slow outside Umbraco App Context 2015-07-24 18:36:07 +02:00
Shannon db0defb93f Ensures that indexes aren't double rebuilt on startup which can occur if there are no indexes and the DatabaseServerMessenger hasn't sync'd anything 2015-07-24 18:07:20 +02:00
Shannon 1fca0d22bf Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-24 17:34:28 +02:00
Shannon 7d7e92432e Fixes how the BatchedDatabaseServerMessenger startsup/boots 2015-07-24 17:34:06 +02:00
Sebastiaan Janssen 86ad3f6b05 Makes sure that R# doesn't suggest C#6 features 2015-07-24 17:25:52 +02:00
Shannon 615ab564e5 fixes build 2015-07-24 12:57:01 +02:00
Shannon ee36a46d51 fixes tests 2015-07-24 12:54:59 +02:00
Shannon 293568228c Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-24 12:13:31 +02:00
Shannon 8b86276011 Ensures event messages are passed to Saved events for content/media 2015-07-24 12:07:32 +02:00
Shannon 9406675bf2 Ensures the Saving methods on the media service are wired up with the event messages, obsoletes the hacked WasCancelled internal property on Entity. 2015-07-24 11:52:30 +02:00
Shannon aa08a4ca37 Gets the messages being pumped out to the UI. Updates the ContentService and MediaServices to have a SaveWithStatus in order to determine the response, we'll need to update most of the methods to also have this OperationStatus. Now messages can be added to the UI for Saving & publishing for media and content services, we'll need to update more to support everything. 2015-07-24 11:44:09 +02:00
Sebastiaan Janssen abf8777b0a U4-6867 UmbracoLog wrongfully logs unPublish event with user ID 0
#U4-6867 Fixed Assignee: Unassigned
2015-07-24 11:02:13 +02:00
Shannon a6a2b02cd8 working on U4-5927 - this extends the base event class to have EventMessages which event consumers can add to, the trick is that there is a factory for these EventMessages, in a web context, the factory is a request based factory so that during a request all instances of the EventMessages are the same instance. All services then accept an instance of IEventMessagesFactory which they can then use when raising events. We'll then use this to send messages to the UI. Not sure if i should make this a resolver yet or not. Still a WIP!! 2015-07-23 20:04:40 +02:00
Shannon 445dff7c5e publicizes the ctor for PetaPocoUnitOfWorkProvider 2015-07-23 18:30:20 +02:00
Shannon 37076fa4eb Completes: U4-6871 CoreBootManager.CreateApplicationContext & CoreBootManager.CreateApplicationCache returns the instance instead of setting the singleton 2015-07-23 18:26:56 +02:00
Shannon 8c871a6172 publicizes a ctor for the ServiceContext which will allow you to pass in a custom repository factory. 2015-07-23 18:13:43 +02:00
Shannon Deminick 3e42358f2a Merge pull request #744 from timothyleerussell/dev-v7-umbracohelper-componentRender
Update Field() methods in UmbracoHelper
2015-07-23 18:05:01 +02:00
Shannon 9bdb91b3c0 latest examine 2015-07-23 18:03:44 +02:00
Shannon 7f1f090a10 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-23 17:57:08 +02:00
Shannon 5c91c204fa removes unneeded class 2015-07-23 17:57:02 +02:00
Shannon 11c7955b1e Lazily serializes the member data when required instead of all at once, this will save memory since the xml will only be created when it's required. 2015-07-23 17:56:29 +02:00
Shannon Deminick 72d4457a24 Merge pull request #745 from KevinJump/dev-v7-PackageMacros
Package Service - Case Insensitive Macro parameters
2015-07-23 15:43:19 +02:00
Shannon 9606cab81e Fixes: U4-4669 Required checkbox is overruled by regex on document type 2015-07-23 14:44:02 +02:00
Shannon 7cd47114e0 Fixes: U4-6771 Sorting editorstyles is not possible 2015-07-23 14:27:54 +02:00
Shannon cd578b7b19 Fixes: U4-6770 When creating editorstyles: No stylesheet property found with name when creating headingstyles with capitals 2015-07-23 13:18:53 +02:00
Shannon f3d9b4a9f3 Fixes BatchedDatabaseServerMessenger - it implements IApplicationEventHandler to control it's bootup process which ensures it doesn't attempt to boot or bind to events if the app is not configured or installing. This was preventing upgrading to 7.3 2015-07-23 12:28:17 +02:00
Shannon b0fb892b16 Fixes: U4-6736 Log "logout" from Umbraco and also ensures logging is occuring on timeout, logout, login all with Identity stuff. 2015-07-23 12:03:50 +02:00
Shannon 66ca4e48bb Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-22 18:25:21 +02:00
Shannon 96cd4daca5 Fixes how modelstate and viewdata get populated into the PartialViewMacroController and in turn get populated into the viewresult, privatize's EnsureViewObjectDataOnResult so that it's not used by accident elsewhere 2015-07-22 18:25:08 +02:00
Stephan a1f08ad1b4 Fix build 2015-07-22 13:11:39 +02:00
Shannon 44c3140b20 Updates CoreBootManager to be provided a logger which decouples it a little bit, updates CoreBootManagerTests to ensure resolution is reset on teardown, updates the ApplicationEventsResolver inner resolver to not use obsolete ctor's 2015-07-22 12:44:29 +02:00
Shannon 7fac2b811b Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-22 12:10:33 +02:00
Shannon 201512d5f2 Fixes :U4-6858 add localizationService.GetDictionaryItemDescendants, also obsoletes FlattenList since if used incorrectly could cause a flood of SQL calls, adds some tests to verify the output of SelectRecursive is in the same order and updates anything using FlattenList to SelectRecursive. Updates the Language repository to use GetAll wherever possible so all languages are simply cached, this means there less overall cache and less lookups. Updates the Dictionary repository to have less N+1 lookups when building the entity from the DTO by just looking up all languages instead of one at a time. Adds tests for getting descendants for dictionary items. 2015-07-22 12:10:21 +02:00
Kevin Jump c1f5d8392d Package Service - Case Insensitive Macro parameters
Make the check for existing alias values case Insensitive - stops the
SQL error you get if you try to add the same parameter twice.
2015-07-22 10:53:08 +01:00
Timothy Lee Russell 1aaeb75e0e Update Field() methods in UmbracoHelper
Update Field() methods in UmbracoHelper to use the existing lazy
instantiation of ComponentRenderer to fix a problem where
_componentRenderer is not provided by the default constructor.
2015-07-21 14:58:34 -07:00
Sebastiaan Janssen 0bbe1c6cdc U4-6721 Error when submitting Macros, Collection was modified; enumeration operation may not execute. (after project has been updated to MVC5)
#U4-6721 In Progress
2015-07-21 19:35:00 +02:00
Shannon b78f75775d Fixes: U4-6859 get membertype by key 2015-07-21 16:55:27 +02:00
Sebastiaan Janssen 34f44b02a2 U4-6721 Error when submitting Macros, Collection was modified; enumeration operation may not execute. (after project has been updated to MVC5)
#U4-6721 In Progress
2015-07-21 15:55:39 +02:00
Shannon 93c1321b99 fixes potential null ref when accessing the TagQuery property of UmbracoHelper 2015-07-20 15:37:40 +02:00
Shannon 73cb9ab3e5 updates core boot manager tests 2015-07-20 15:30:58 +02:00
Shannon e402768212 simplifies methods to just be GetTaggedEntityByKey, GetTaggedEntityById 2015-07-20 13:49:46 +02:00
Shannon 6095f0233e Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-20 13:45:47 +02:00
Shannon 9b1f4ecff9 Fixes: U4-6855 ITag does not expose the property it belongs to 2015-07-20 13:45:31 +02:00
Sebastiaan Janssen 3c884b583e U4-6762 7.3 beta: Could not load file or assembly 'System.Web.Mvc, Version=4.0.0.0
#U4-6762 Fixed
2015-07-20 11:30:41 +02:00
Sebastiaan Janssen ea653cbd18 U4-6762 7.3 beta: Could not load file or assembly 'System.Web.Mvc, Version=4.0.0.0
#U4-6762 Fixed
2015-07-20 11:30:04 +02:00
Stephan b2679f3f17 Bugfix 2015-07-19 13:08:29 +02:00
Shannon 231a7fa7c4 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-17 15:47:44 +02:00
Stephan a3936d69cb Revert rogue umbracoSettings.config changes (dbaf7c0) 2015-07-17 14:20:05 +02:00
Shannon a273584cc8 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-17 11:09:48 +02:00
Shannon 62c4e404b3 enabled db server registrar by default unless the legacy dist calls is enabled. 2015-07-17 11:09:31 +02:00
Stephan d1b6b5c76f DatabaseServerMessenger - cleanup 2015-07-17 10:48:09 +02:00
Shannon b5cf3e9f59 Fixes: U4-6844 Potential perf issue with new Domain service 2015-07-16 18:09:56 +02:00
Shannon d97c772c70 Fixes: U4-6831 Add {machinename} to ExamineIndex.config by default 2015-07-16 17:19:49 +02:00
Shannon d5460068d4 Merge remote-tracking branch 'origin/master-v7' into dev-v7
Conflicts:
	build/UmbracoVersion.txt
	src/SolutionInfo.cs
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Core/Macros/MacroTagParser.cs
	src/Umbraco.Core/packages.config
	src/Umbraco.Tests/Controllers/BackOfficeControllerUnitTests.cs
	src/Umbraco.Tests/Macros/MacroParserTests.cs
	src/Umbraco.Tests/Strings/StringExtensionsTests.cs
	src/Umbraco.Tests/Umbraco.Tests.csproj
	src/Umbraco.Web.UI.Client/src/common/services/macro.service.js
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web/Editors/BackOfficeController.cs
	src/umbraco.cms/Actions/Action.cs
2015-07-16 17:04:25 +02:00
Shannon 5ac34a700f fixes get file checks in FileSystemTree when the folder doesn't exist 2015-07-16 16:58:13 +02:00
Shannon a40762f09d excludes folders from the UI project that we don't need to ship with. 2015-07-16 16:29:36 +02:00
Shannon 0f00eaed78 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-16 15:59:22 +02:00
Shannon 01653f60f9 Fixes: U4-6756 Don't ship or generate unnecessary folders 2015-07-16 15:59:08 +02:00
Shannon d8b6f1fef1 Fixes database server messenger to not bind to events if we're not installed, otherwise we get ysods (not sure if there was a typo there or not, but should defo not boot when not installed) 2015-07-16 15:52:22 +02:00
Sebastiaan Janssen 1ecd0af268 New installer image 2015-07-16 15:49:18 +02:00
Shannon c2dc896fce working on: U4-6756 Don't ship or generate unnecessary folders 2015-07-16 15:29:46 +02:00
Sebastiaan Janssen 2f714d0b3e Update MySql.Data dependency 2015-07-16 13:59:19 +02:00
Shannon 0bbcaca067 Add unique id for TextSearch / LuceneSearch
Add unique id for TextSearch / LuceneSearch for each searcher.
2015-07-16 13:52:52 +02:00
Sebastiaan Janssen 55d3d8437a Update number of tattoos 2015-07-16 12:44:10 +02:00
Shannon 9e2ab8507f Fixes c# macro tag parser - it needs to parse all macros contained in the entire string, the regex options were wrong meaning if you tried to add multiple macros without parameters it would fail, have added a unit test for that. 2015-07-16 12:31:07 +02:00
Shannon 6ee6c77d6e bumps version 2015-07-16 11:10:36 +02:00
Shannon 9b5d4e5b08 Moves some logic into StringExtensions, updates tests, adds other tests 2015-07-16 10:40:43 +02:00
Shannon 49f8b530b7 FIX U4-6687: Adding tests for RTE Macro parsing when macroAlias is the first attribute and a new test for multiple Macros of various format. 2015-07-16 09:51:04 +02:00
Shannon 56176d0e36 Fix U4-6687: Can't add multiple instances of a macro in RTE in 7.2.6 without ruining RTE formatting
We found that the MacroTagParser.cs was being greedy and matching all UMBRACO_MACRO tags instead of getting them individually.

macro.service.js was updated for posterity purposes to match the regex in the .cs side, but testing showed that it was functioning as expected without this change.
2015-07-16 09:50:49 +02:00
Shannon ab41c900da Quick stab at testing a method from BackofficeController for U4-6843
* Move GetLegacyActionJs logic into an internal static method so we can test
* Change LegacyJsActionType to internal for testing
* Add tests to verify method can determine between js paths and js blocks, so as not to pass js code into IOHelper.ResolveUrl

Conflicts:
	src/Umbraco.Tests/Umbraco.Tests.csproj
2015-07-16 09:48:04 +02:00
Shannon Deminick 92e0e5e570 Merge pull request #743 from tomfulton/tests-u4-6843
Quick stab at testing a method from BackofficeController for U4-6843
2015-07-16 09:47:11 +02:00
Shannon 90645e5e85 Check for ~/ before using IOHelper.ResolveUrl
An "relative virtual path" exception can be thrown by a path like "umbraco/test.js"
2015-07-16 09:45:18 +02:00
Shannon 872c345ac9 Fix backoffice breaking when Actions use code in their JsSource - U4-6843
This reverts/refactors this pull request: https://github.com/umbraco/Umbraco-CMS/pull/722/files

Since JsSource can be used for a file path or actual javascript, we can't use IOHelper.ResolveUrl here.  Instead we're moving it to the GetLegacyActionJs() method, which already handles deciding if it's a code or a URL.

💩

Conflicts:
	src/umbraco.cms/Actions/Action.cs
2015-07-16 09:44:25 +02:00
Shannon Deminick b4e0ddb7ad Merge pull request #742 from tomfulton/fix/u4-6843
Fix backoffice breaking when Actions use code in JsSource - U4-6843
2015-07-16 09:41:20 +02:00
Tom Fulton a1f40a3e6e Quick stab at testing a method from BackofficeController for U4-6843
* Move GetLegacyActionJs logic into an internal static method so we can test
* Change LegacyJsActionType to internal for testing
* Add tests to verify method can determine between js paths and js blocks, so as not to pass js code into IOHelper.ResolveUrl
2015-07-15 23:46:31 -06:00
Tom Fulton 28df1af226 Check for ~/ before using IOHelper.ResolveUrl
An "relative virtual path" exception can be thrown by a path like "umbraco/test.js"
2015-07-15 23:42:42 -06:00
Tom Fulton 195953d63c Fix backoffice breaking when Actions use code in their JsSource - U4-6843
This reverts/refactors this pull request: https://github.com/umbraco/Umbraco-CMS/pull/722/files

Since JsSource can be used for a file path or actual javascript, we can't use IOHelper.ResolveUrl here.  Instead we're moving it to the GetLegacyActionJs() method, which already handles deciding if it's a code or a URL.

💩
2015-07-15 16:59:09 -06:00
Stephan a93684f1f2 Bugfix unit tests 2015-07-15 18:16:45 +02:00
Shannon 18e8f09654 BatchedDatabaseServerMessenger only exists in Web now, no reason for it to be in Core. CoreBootManager by default now uses DatabaseServerMessenger (non-batched), WebBootManager now uses BatchedDatabaseServerMessenger and is always enabled by default unless the Dist Calls setting in umbracoSettings is enabled, in that case it will revert to using the legacy batched web services messenger. 2015-07-15 17:27:01 +02:00
Shannon 85ebcadcdd Fixes more tests and more decoupling of singletons 2015-07-15 16:40:50 +02:00
Shannon 0efeba3744 Fixing unit tests, decouples more singleton accessors 2015-07-15 16:28:50 +02:00
Shannon 2a63519e8c Fixes: U4-6834 Add TagService.GetTagsForEntity(Guid key) method 2015-07-15 15:54:06 +02:00
Shannon ba1d546579 Merge remote-tracking branch 'origin/master-v7' into dev-v7
Conflicts:
	src/Umbraco.Core/MainDom.cs
	src/Umbraco.Tests/Umbraco.Tests.csproj
	src/Umbraco.Tests/packages.config
	src/Umbraco.Web.UI.Client/src/canvasdesigner/index.html
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web/Umbraco.Web.csproj
	src/Umbraco.Web/packages.config
	src/UmbracoExamine/UmbracoExamine.csproj
	src/umbraco.MacroEngines/packages.config
	src/umbraco.MacroEngines/umbraco.MacroEngines.csproj
2015-07-15 14:58:19 +02:00
Sebastiaan Janssen 8baaae4da6 Merge branch '7.2.7' into master-v7 2015-07-15 12:58:48 +02:00
Sebastiaan Janssen ed05a3223f Update Examine NuGet dependency 2015-07-15 12:52:24 +02:00
Shannon 25e3134e35 Fixes unit tests 2015-07-15 12:33:47 +02:00
Shannon f1b9b98f5d Updates to latest examine 2015-07-15 12:32:11 +02:00
Sebastiaan Janssen d2f7eda074 Fixes unit test that failed because HostingEnvironment.ApplicationID is null in unit tests 2015-07-15 10:58:38 +02:00
Shannon a5d5809385 Fixes DatabaseServerMessenger, when an exception occurs, we need to log but we cannot keep trying to process an invalid instruction otherwise we're in an infinite error loop and no further instructions will ever get processed. 2015-07-15 10:50:01 +02:00
Shannon d9d38b9cc1 Merge remote-tracking branch 'origin/dev-v7' into dev-v7
Conflicts:
	src/Umbraco.Core/Sync/DatabaseServerMessenger.cs
	src/Umbraco.Tests/Umbraco.Tests.csproj
	src/Umbraco.Tests/packages.config
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web/Umbraco.Web.csproj
	src/UmbracoExamine/UmbracoExamine.csproj
	src/umbraco.MacroEngines/umbraco.MacroEngines.csproj
2015-07-15 10:32:55 +02:00
Shannon 1e147f97e1 Updates examine, updates loghelper references. 2015-07-15 10:29:28 +02:00
Stephan db0cfad6b9 Merge 7.2.7 into dev-v7
Conflicts:
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Tests/packages.config
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web.UI/packages.config
	src/Umbraco.Web/Umbraco.Web.csproj
	src/Umbraco.Web/packages.config
	src/umbraco.MacroEngines/packages.config
	src/umbraco.cms/packages.config
	src/umbraco.cms/umbraco.cms.csproj
	src/umbraco.controls/umbraco.controls.csproj
	src/umbraco.editorControls/umbraco.editorControls.csproj
2015-07-14 19:57:56 +02:00
Stephan 3062eedb4f content - ensure backward compatibility 2015-07-14 19:28:15 +02:00
Stephan 1e3dd4c5cd Cleanup new umbracoApplicationUrl config 2015-07-14 19:28:14 +02:00
Sebastiaan Janssen a7871abbd9 Update Examine and ClientDependency to latest version 2015-07-14 16:50:45 +02:00
Stephan effa632fab DatabaseServerMessenger - ensure instructions 2015-07-14 16:21:05 +02:00
Stephan 161f2eda86 DisposableObject - cleanup & use 2015-07-14 15:57:01 +02:00
Stephan bf3a08cf85 DisposableObject - cleanup & use 2015-07-14 15:56:23 +02:00
Sebastiaan Janssen 7bc208e490 U4-6825 Can't blank out values using the built-in EditProfile snippet
#U4-6825 Fixed
2015-07-14 15:32:08 +02:00
Shannon a4dbc33b9a updates LogHelper references 2015-07-14 10:52:04 +02:00
Shannon 6b2e042e76 updates LogHelper references 2015-07-14 10:49:43 +02:00
Shannon b4bb15c66f fixes up a bower reference 2015-07-14 10:47:51 +02:00
Stephan 7bf28a20e7 DatabaseServerMessenger - sync only if MainDom 2015-07-13 22:57:39 +02:00
Stephan d386c069ee Post-merge 2015-07-13 22:57:38 +02:00
Stephan d83fdb48c9 Merge branch 7.2.7 into dev-v7
Conflicts:
	build/UmbracoVersion.txt
	src/SolutionInfo.cs
	src/Umbraco.Core/ApplicationContext.cs
	src/Umbraco.Core/AsyncLock.cs
	src/Umbraco.Core/Cache/DictionaryCacheProviderBase.cs
	src/Umbraco.Core/Cache/ObjectCacheRuntimeCacheProvider.cs
	src/Umbraco.Core/CoreBootManager.cs
	src/Umbraco.Core/Logging/LogHelper.cs
	src/Umbraco.Core/PluginManager.cs
	src/Umbraco.Core/Sync/ServerEnvironmentHelper.cs
	src/Umbraco.Core/TypeFinder.cs
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
	src/Umbraco.Tests/ServerEnvironmentHelperTests.cs
	src/Umbraco.Web.UI.Client/bower.json
	src/Umbraco.Web.UI.Client/gruntFile.js
	src/Umbraco.Web.UI.Client/src/less/grid.less
	src/Umbraco.Web.UI.Client/src/less/panel.less
	src/Umbraco.Web.UI.Client/src/less/property-editors.less
	src/Umbraco.Web.UI.Client/src/loader.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/datepicker/datepicker.controller.js
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web.UI/config/ClientDependency.config
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlCacheFilePersister.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
	src/Umbraco.Web/Scheduling/KeepAlive.cs
	src/Umbraco.Web/Scheduling/LatchedBackgroundTaskBase.cs
	src/Umbraco.Web/Scheduling/LogScrubber.cs
	src/Umbraco.Web/Scheduling/RecurringTaskBase.cs
	src/Umbraco.Web/Scheduling/ScheduledPublishing.cs
	src/Umbraco.Web/Scheduling/ScheduledTasks.cs
	src/Umbraco.Web/Scheduling/Scheduler.cs
	src/Umbraco.Web/UI/JavaScript/JsInitialize.js
	src/Umbraco.Web/Umbraco.Web.csproj
	src/Umbraco.Web/umbraco.presentation/content.cs
	src/umbraco.cms/Actions/Action.cs
2015-07-13 22:45:37 +02:00
Shannon 6aa633c8c5 changes app timeout to 1.5 mins 2015-07-13 17:10:35 +02:00
Shannon eddd643249 ensures that when setting the PropertyType's property on a PropertyGroup that the PropertyGroupId is set and updates an auth method to ensure that the correct identity type is returned. 2015-07-13 15:52:21 +02:00
Stephan 9be2f99e7b Scheduler - does not run tasks if not MainDom 2015-07-13 14:53:07 +02:00
Stephan 2d5bfc0fe2 Use MainDom status to protect umbraco.config
Conflicts:
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlCacheFilePersister.cs
	src/Umbraco.Web/umbraco.presentation/content.cs
2015-07-13 14:52:55 +02:00
Stephan c01f864e37 ApplicationContext - manage MainDom
Conflicts:
	src/Umbraco.Core/ApplicationContext.cs
	src/Umbraco.Core/Umbraco.Core.csproj
2015-07-13 14:41:07 +02:00
Stephan a8be796d68 Bugfix content for LB 2015-07-13 14:17:00 +02:00
Stephan 4acbdbe896 Move WaitOneAsync from AsyncLock to WaitHandleExtensions
Conflicts:
	src/Umbraco.Core/AsyncLock.cs
	src/Umbraco.Core/Umbraco.Core.csproj
2015-07-13 14:16:43 +02:00
Stephan 34a9eef8b8 BackgroundTaskRunner - add Hosted option, refactor some tasks
Conflicts:
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
2015-07-13 14:13:47 +02:00
Stephan 0f56fa4baa Bugfix content xml doctype issue 2015-07-13 14:08:50 +02:00
Shannon 82a8404b2e Updates TemplateRenderer to not use singletons and to ensure that the http context values are copied back if anything fails 2015-07-09 18:30:52 +02:00
Shannon bce8affe16 removes unused method 2015-07-09 15:19:47 +02:00
Shannon 4bbd8097a2 Merge branch '7.2.7' of https://github.com/umbraco/Umbraco-CMS into 7.2.7 2015-07-09 15:08:41 +02:00
Shannon da9c810d78 Updates examine initialization of its IIndexCriteria to be lazy, this will save a few db calls on startup and ensure they are excuted at the very last possible time. 2015-07-09 14:32:50 +02:00
Shannon 431d066300 Changes the ApplicationEventHandler to check if the db is configured instead of being connected to which can cause issues if SQLCE file is locked by another app domain on startup. Then we verify in the CoreBootManager that the db can be connected to with a retry policy. Changes the db context CanConnect method to not store a static value since it might later be able to be connected to. 2015-07-09 14:31:59 +02:00
Shannon 6d50bd891a moves the ApplicationContext.IsConfigured to a lazy initializer 2015-07-09 14:30:32 +02:00
Stephan 1d00e3c5d8 UmbracoApplication - log unhandled exceptions
Conflicts:
	src/Umbraco.Core/UmbracoApplicationBase.cs
2015-07-08 21:33:22 +02:00
Stephan 97533e7c3d UmbracoApplication - log unhandled exceptions 2015-07-08 21:29:17 +02:00
Shannon e69422c8d8 Fixes tests (backports cache fix by name) 2015-07-08 18:14:31 +02:00
Shannon a277ac2fe4 udpates some logging stuff which will also make logging faster. 2015-07-08 17:55:08 +02:00
Shannon 1067b1e245 BackgroundTaskRunner - refactor recurring tasks, improve shutdown
Conflicts:
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlCacheFilePersister.cs
	src/Umbraco.Web/Scheduling/LogScrubber.cs
	src/Umbraco.Web/Scheduling/Scheduler.cs
	src/Umbraco.Web/Umbraco.Web.csproj
2015-07-08 17:41:20 +02:00
Shannon 7987f13a11 U4-6788 - refactor OriginalRequestUrl into UmbracoApplicationUrl
and fixes merge issues.
2015-07-08 17:32:36 +02:00
Shannon ccda1bdd73 Refactor scheduled tasks & publishing cancellation 2015-07-08 17:23:15 +02:00
Shannon 76a6f2d2d0 Updates scheduled tasks to be async with cancellation token 2015-07-08 17:23:00 +02:00
Shannon 69428b2281 Scheduled publishing is executing request async with cancellation token 2015-07-08 17:22:44 +02:00
Shannon 7cd39918a0 another log entry 2015-07-08 16:54:38 +02:00
Shannon 9a626c9da6 Merge branch '7.2.7' of https://github.com/umbraco/Umbraco-CMS into 7.2.7 2015-07-08 16:45:42 +02:00
Shannon 0520797c09 more logging 2015-07-08 16:45:34 +02:00
Stephan 9b85ba5b90 Resolution - better logging when freezing 2015-07-08 16:32:43 +02:00
Stephan 993a5bbc92 Resolution - better logging when freezing 2015-07-08 16:28:53 +02:00
Shannon ca738979ce Adds some more detailed logging. 2015-07-08 16:27:06 +02:00
Stephan c9489bb912 DatabaseServerMessenger - default instructions retention is 2 days 2015-07-08 14:42:47 +02:00
Stephan fce688f47f DatabaseServerMessenger - local identity is unique appdomain 2015-07-08 14:42:38 +02:00
Shannon 8cfb56adf4 adds machine name logging to startup 2015-07-08 13:28:15 +02:00
Stephan 6833c195c1 BackgroundTaskRunner - refactor recurring tasks, improve shutdown 2015-07-08 13:18:46 +02:00
Shannon 053346d79b fixes merge 2015-07-08 11:54:10 +02:00
Shannon 044c9c95f8 Merge branch 'dev-v7-U4-6677' of https://github.com/bjarnef/Umbraco-CMS into bjarnef-dev-v7-U4-6677
Conflicts:
	src/Umbraco.Web.UI.Client/src/less/panel.less

Conflicts:
	src/Umbraco.Web.UI.Client/src/less/panel.less
2015-07-08 11:49:09 +02:00
Shannon b23ea69b3e Fixes: U4-6636 Left navbar (section-bar) is unnecessary wide on mobile devices
Conflicts:
	src/Umbraco.Web.UI.Client/src/less/grid.less
2015-07-08 11:48:17 +02:00
Shannon 46f9c5ff05 Fixes: U4-5052 (U7) Previewing a published page changes icon in content tree to the little green plus indicating changes need to be published even though no changes have been made. 2015-07-08 11:46:03 +02:00
Shannon 3bc4b50d74 updates version 2015-07-08 11:36:50 +02:00
Shannon 1a2849dfb0 fixes merge issues 2015-07-08 11:35:55 +02:00
Shannon bcb5883230 Fixes: U4-3514 Add dropdown list of tabs, if more then 6 tabs
Conflicts:
	src/Umbraco.Web.UI.Client/bower.json
	src/Umbraco.Web.UI.Client/gruntFile.js
2015-07-08 11:16:46 +02:00
Shannon 18080c1cfb Fixes: U4-6796 BackOfficeIdentity gets assigned inadvertently for front-end requests if using ui.Text to localize 2015-07-08 11:13:49 +02:00
Shannon 2600a3887e Fixes issue with upgrading - potential file lock issues and also file check for access.config
Conflicts:
	src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSevenThreeZero/MovePublicAccessXmlDataToDb.cs
2015-07-08 11:13:24 +02:00
Shannon 45bec2a67d Fixes date picker: U4-6715 i can't seem to remove a "publish-at" date? - date picker is more robust now and does proper validity checking/feedback 2015-07-08 11:12:19 +02:00
Shannon da7456fd2a Fixes up unit test for testing back office request to ensure that the GlobalSettings.Path is consistent with a vdir 2015-07-08 11:11:17 +02:00
Shannon 275ba00e24 Fix IsBackOfficeRequest returning false for virtual directory paths - U4-6346 2015-07-08 11:10:30 +02:00
Shannon d00bf4649d Fix for JsSource on legacy trees not supporting virtual paths (~/) - U4-6346
Conflicts:
	src/umbraco.cms/Actions/Action.cs
2015-07-08 11:10:18 +02:00
Shannon 04976f8063 U4-6202 - cache clearing by object type
Conflicts:
	src/Umbraco.Core/Cache/ObjectCacheRuntimeCacheProvider.cs
2015-07-08 11:08:19 +02:00
Shannon 3e7c9fc81e Fixes: U4-6202 Cache not clearing by object type properly
Conflicts:
	src/Umbraco.Core/Cache/ObjectCacheRuntimeCacheProvider.cs
2015-07-08 11:07:53 +02:00
Shannon a1f4d7b16f Fixes: U4-5798 The database configuration failed with the following message: The incoming request has too many parameters. The server supports a maximum of 2100 parameters. 2015-07-08 11:05:30 +02:00
Shannon 811ef4a444 Fixes: U4-5673 SQL Azure cannot drop clustered index on upgrade 2015-07-08 11:03:42 +02:00
Shannon 69ac621f5a Fixes: U4-5670 Umbraco.DropDown List pre value with alias ** already exists for this data type 2015-07-08 11:03:10 +02:00
Shannon 610582df38 U4-5162 - do not cache macro if previewing 2015-07-08 11:02:30 +02:00
Shannon Deminick cf16692b5a Merge pull request #741 from abryukhov/patch-2
UI localization (RU) - All 7.2 and actual at the moment 7.3 keys
2015-07-08 09:53:23 +02:00
Shannon 5d60440a6f Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-07 18:27:38 +02:00
Shannon 0fe96e80c9 Fixes: U4-6782 ContentTypeService should support getByKey(Guid) and refactors a little bit of the RepositoryBase stuff with the addition of IReadRepository, adds some tests to support. 2015-07-07 18:26:53 +02:00
Shannon a712726065 Updates the logger and how to output process id and app domain id with the default log4net patterns. 2015-07-07 16:18:57 +02:00
Shannon 253b9dab27 Ensures log4net is shutdown on app shutdown 2015-07-07 16:12:05 +02:00
Shannon 1ffde1e9a6 makes log tests go a little quicker 2015-07-07 16:11:49 +02:00
Shannon f6e0dfe9dc Changes published media cache log output to warnings (when indexes are not found) 2015-07-07 16:11:33 +02:00
Sebastiaan Janssen 30dfd2772b "+" in the version doesn't work with the current NuGet 2015-07-07 15:20:35 +02:00
Alexander Bryukhov f93364ab96 All 7.2 and actual at the moment 7.3 keys 2015-07-07 19:17:56 +06:00
Sebastiaan Janssen b903e0503f "+" in the version doesn't work with the current NuGet 2015-07-07 15:11:58 +02:00
Sebastiaan Janssen b0ccb040a1 Makes sure we can have nightlies for non-pre-releases as well 2015-07-07 15:11:57 +02:00
Sebastiaan Janssen db030ffa31 Adds the ability to pass in a nightly version to the version comment 2015-07-07 15:11:57 +02:00
Shannon cf90e9a6b8 Fixes: U4-6796 BackOfficeIdentity gets assigned inadvertently for front-end requests if using ui.Text to localize 2015-07-07 12:05:51 +02:00
Shannon 7c451411cb Fixes issue with upgrading - potential file lock issues and also file check for access.config 2015-07-07 11:24:28 +02:00
Shannon bf19d61d14 bumps txt version 2015-07-06 18:02:25 +02:00
Shannon 2cd5551913 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-06 17:57:07 +02:00
Shannon 3a3917c1fc Fixes: U4-4231 remove umbracoUserLogins table 2015-07-06 17:52:07 +02:00
Shannon 7e798e18e8 Fixes: U4-6789 Core.Models.Macro is internal 2015-07-06 17:50:10 +02:00
Shannon Deminick 9cb5026a0a Merge pull request #740 from shwld/dev-v7
update language conf file (ja)
2015-07-06 17:36:23 +02:00
Stephan 39a9d68f43 U4-6785 - crlf when serializing to xml 2015-07-06 15:32:06 +02:00
Stephan 8c54f2edc9 U4-6788 - refactor OriginalRequestUrl into UmbracoApplicationUrl 2015-07-06 13:58:10 +02:00
Stephan d26b12137b CoreBootManager - report version in log 2015-07-03 16:39:35 +02:00
Stephan 081d6f9158 Logger - report process and domain ID 2015-07-03 16:39:34 +02:00
Stephan b52439f8f1 AsyncLock - support timeout when async-locking 2015-07-03 15:42:09 +02:00
Shannon d63f83f7c7 Fixes: U4-6786 Update to CDF 1.8.4 2015-07-03 11:40:41 +02:00
Shannon 85158abb5f removes unit test that no longer makes any sense. 2015-07-02 18:27:55 +02:00
Shannon c917fc37ae Fixes: U4-6113 Cannot delete member with upload field 2015-07-02 17:20:27 +02:00
Shannon f68cdf43e1 Fixes: U4-6099 cmsLanguageText.languageId needs to be a foreign key to the umbracoLanguage table 2015-07-02 17:19:42 +02:00
Shannon f0742c9d7c Fixes: U4-6733 Adding dictionary item (7.3): No parent dictionary item was found with id 41c7638d-f529-4bff-853e-59a0c2fb1bde 2015-07-02 14:52:01 +02:00
Shannon 32e21b0314 Fixes: U4-5798 The database configuration failed with the following message: The incoming request has too many parameters. The server supports a maximum of 2100 parameters. 2015-07-02 14:30:21 +02:00
Shannon 22c035c9b9 Fixes test 2015-07-02 11:21:46 +02:00
Shannon Deminick 4257d85aa7 Merge pull request #733 from base33/dev-v7
U4-6724 Moving content with JSON Tags add extra characters
2015-07-02 11:08:39 +02:00
craig 9c50c67319 U4-6724 Moving content with JSON Tags add extra characters 2015-07-01 21:25:03 +01:00
Shannon d0c4b2ab72 Fixes user lockout with aspnet identity 2015-07-01 18:02:58 +02:00
Shannon 53a0c55b14 Implements SignInManager, implements lock out policy for user manager, allows for better implementation of 2 factor auth for developers. Updates to latest owin libs. 2015-07-01 17:07:29 +02:00
Shannon d76b8d91b1 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-07-01 13:53:45 +02:00
Shannon 44943e367f Updates async logging to a newer format 2015-07-01 13:46:11 +02:00
Shannon Deminick 89c3c71251 Merge pull request #732 from SoerenDeger/U4-6759
Added missing language areas/keys to de lang file
2015-07-01 11:13:48 +02:00
Shannon Deminick 7e7725f0f5 Merge pull request #737 from tomfulton/fix/u46775
Support virtual paths for PreValueField attributes (U4-6775)
2015-07-01 10:54:10 +02:00
Shannon Deminick 7b881a2110 Merge pull request #736 from base33/U4-6773
U4-6773 create property - available properties are not sorted a-z
2015-07-01 10:50:33 +02:00
Shannon Deminick ccb078c8f2 Merge pull request #734 from jessetinell/sv-translations
Edited swedish translations
2015-07-01 10:41:26 +02:00
shwld 974f827e8b update language conf file (ja) 2015-07-01 01:18:29 +09:00
Tom Fulton 048a8683dd Support virtual paths for PreValueField attributes (U4-6775) 2015-06-29 17:51:40 -06:00
craig bdd7d7280d U4-6773 create property - available properties are not sorted a-z 2015-06-29 22:26:08 +01:00
Jesse 671026cfc9 Edited swedish translations
Added a few missing and removed unused translations.
2015-06-29 08:30:13 +02:00
Shannon 56315768e9 updates method name 2015-06-26 17:04:40 +02:00
Shannon 309675dce7 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-26 17:00:07 +02:00
Shannon b42959f663 Gets U4-6753 Identity support must have an option to enable auto-linked accounts working 2015-06-26 16:59:40 +02:00
Sören Deger 30979f92cc Added missing language areas/keys to de lang file
Added missing language areas and keys to the german language file, i.e.
area with alias: changeDocType, media, placeholders, grid and a lot of
more.
2015-06-26 14:48:57 +02:00
Stephan 623e8e3979 U4-6642 - bugfix PR 2015-06-26 12:31:53 +02:00
Shannon 42b2b16f0e fixes js error with date picker 2015-06-26 10:06:22 +02:00
Shannon f14989f7fd Updates code for U4-6579 with equals check and adds logic to the content editor too 2015-06-26 10:06:07 +02:00
Shannon acf7fa7907 Updates code for U4-6579 with equals check and adds logic to the content editor too 2015-06-26 10:01:32 +02:00
Shannon aa9751afff adds tests for U4-6696 2015-06-26 09:58:44 +02:00
Shannon Deminick 3be714d786 Merge pull request #730 from base33/dev-v7
U4-6696 - UmbracoHelper.GetPreValueAsString fires exception with inva…
2015-06-26 09:35:52 +02:00
Shannon Deminick bcd1395e08 Merge pull request #729 from DaveGreasley/dev-v7
Fixes U4-6579 error deleting media item in umbraco 7
2015-06-26 09:29:47 +02:00
craig 96199caa11 U4-6696 - UmbracoHelper.GetPreValueAsString fires exception with invalid integer 2015-06-25 22:40:56 +01:00
David Greasley 73de12037e Fixes U4-6579: Checks if media item being deleted was at the root then redirects to the root, otherwise redirects to parent item. 2015-06-25 21:11:36 +01:00
Shannon 1a8c89b99a fixes oembed typo 2015-06-25 17:34:33 +02:00
Shannon fdf53b8550 puts the Flickr provider back for backwards compat, adds a todo and updates the release config with all providers 2015-06-25 17:10:45 +02:00
Shannon 5487ec1d5f Merge branch 'dev-v7-oembed' of https://github.com/tcmorris/Umbraco-CMS into tcmorris-dev-v7-oembed
Conflicts:
	src/Umbraco.Web/Umbraco.Web.csproj
2015-06-25 16:57:52 +02:00
Shannon 7b28e64c9e updates NodeDto and PropertyTypeDto to auto-gen GUIDs by default 2015-06-25 16:55:55 +02:00
Shannon 88a0189f23 fixes test 2015-06-25 16:46:57 +02:00
Shannon 95d8fe239e fixes js errors with grid and date picker 2015-06-25 16:40:48 +02:00
Shannon 8ad814a3b6 fixes property type Key generation 2015-06-25 16:40:24 +02:00
Shannon b5fb6bc2d5 Fixes: U4-5052 (U7) Previewing a published page changes icon in content tree to the little green plus indicating changes need to be published even though no changes have been made. 2015-06-25 16:30:06 +02:00
Shannon 9901b2ee3d Fixes: U4-6754 Resizing image in RTE passes invalid dimension parameters to ImageProcessor 2015-06-25 15:18:07 +02:00
Shannon 346d13174a Fixes: U4-6624 Sensitive form field has not disabled autocomplete 2015-06-25 14:40:28 +02:00
Shannon 79ad33dd6e Fixes: U4-5673 SQL Azure cannot drop clustered index on upgrade 2015-06-25 14:35:05 +02:00
Shannon 805d743f69 Fixes upgrade issue 2015-06-25 11:15:57 +02:00
Shannon a85f3bfc16 Fixes install issue that was causing so many tests to fail 2015-06-25 09:56:40 +02:00
Shannon 84cac6ac90 Fixes: U4-5741 [7.2] CodeMirror in RTE has issues in IE11 & U4-5781 Update to latest codemirror 2015-06-24 19:06:42 +02:00
Shannon Deminick e758bf2eca Merge pull request #716 from rasmusfjord/dev-v7
Updating image cropper interface
2015-06-24 17:49:17 +02:00
Shannon 1f0a4490a6 U4-6737 Add unique id (guid) column to property type 2015-06-24 17:47:20 +02:00
Shannon 85a4a4fa81 fixes migration check to ensure that migrations for the current version always run if the current installation version is a pre-release 2015-06-24 17:46:52 +02:00
Shannon aaf49667ec Fixes member indexer to ensure that all user fields are indexed. 2015-06-24 17:45:25 +02:00
Shannon a7029e4733 Fixes up migration runner with regard to semver numbers. All migrations for a normal version within a build number will execute. For example if migrating from 7.3.x-x to 7.3.0 (final), all migrations for 7.3 will execute. 2015-06-24 15:20:08 +02:00
Shannon 18b1857539 Changes versioning to SemVersion (via nuget package), now target migrations with the full SemVer and update the web.config with the correct sem ver. Creates migration to create the migration table. 2015-06-24 14:17:24 +02:00
Shannon 4f5c24d2e3 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-24 11:39:57 +02:00
Shannon f82d8a5df1 updates bower and bower install task. 2015-06-24 11:39:50 +02:00
Shannon Deminick cb3ed7ed8d Merge pull request #727 from bjarnef/dev-v7-U4-6748
Add unique id for TextSearch / LuceneSearch
2015-06-24 09:32:49 +02:00
bjarnef 1cade7f8c7 Add unique id for TextSearch / LuceneSearch
Add unique id for TextSearch / LuceneSearch for each searcher.
2015-06-23 22:28:49 +02:00
Shannon 7503a83219 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-23 18:10:57 +02:00
Shannon 869e0dcbd2 Updates the upgrader to ensure that the latest migrations are run if they don't exist, fixes the migration runner null check, adds test to subtract a revision number from a Version object. 2015-06-23 18:10:50 +02:00
Stephan a814b51682 U4-6675 - in-memory temp media cache 2015-06-23 13:57:00 +02:00
Shannon c204741fb9 Fixes up unit test for testing back office request to ensure that the GlobalSettings.Path is consistent with a vdir 2015-06-23 12:30:09 +02:00
Shannon Deminick 5f64b2cf37 Merge pull request #723 from tomfulton/fix/u4-6346
Fix unable to login to backoffice when using virtual directory - U4-6346
2015-06-23 12:16:36 +02:00
Shannon Deminick 9efa67224e Merge pull request #722 from tomfulton/fix/u4-6346-2
Fix for JsSource on legacy trees not supporting virtual paths (~/) - U4-6346
2015-06-23 12:13:32 +02:00
Shannon b00776901c Changes the routing context to be publicly accessable on the umbraco context. 2015-06-23 11:15:56 +02:00
Shannon Deminick 37211b9a2c Merge pull request #721 from robertjf/dev-v7
Issue U4-6734 Fix: Tweaks to TreePicker dialog for better entity support
2015-06-23 11:09:02 +02:00
Shannon 40c35e5851 Fixes: U4-6582 RTE "Link To File" missing rel="nodeId" attribute 2015-06-23 10:53:56 +02:00
Shannon 68073fdb8b Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-23 09:41:41 +02:00
Tom Fulton 5eb9138775 Fix IsBackOfficeRequest returning false for virtual directory paths - U4-6346 2015-06-22 16:26:35 -04:00
Tom Fulton cb6b8434f0 Fix for JsSource on legacy trees not supporting virtual paths (~/) - U4-6346 2015-06-22 16:12:13 -04:00
Shannon ff7bdb0f5b Ensures the migrations table is created on install, updates the installation to create the latest migration version once complete. 2015-06-22 19:31:34 +02:00
Shannon 38953212a3 Fixes up some unit tests with changes to migration runner, creates unit tests for ApplicationContext.IsConfigured, updates DatabaseContext to be able to mock some methods. 2015-06-22 18:59:44 +02:00
Shannon 8e1e7a8676 Gets the IsConfigured check checking the migration data, updates the install controller to ensure there's no infinite redirects and to use the IsUpgrading flag. Now to add entries to the table when the migrations have executed. 2015-06-22 16:22:47 +02:00
Stephan a296437547 Fix test that fails in Release mode 2015-06-22 15:50:41 +02:00
Stephan 012c3289cd U4-6675 - in-memory temp media cache 2015-06-22 15:50:22 +02:00
Sebastiaan Janssen 48dd3fe0c7 Update test for mapper added in commit a1d7f2d8 2015-06-21 15:24:50 +02:00
Sebastiaan Janssen 367d82d103 Experiment with less verbose logging for the build (so AppVeyor is easier to use) 2015-06-21 14:51:17 +02:00
Sebastiaan Janssen b7aadaa3d2 Experiment with less verbose logging for the build (so AppVeyor is easier to use) 2015-06-21 14:41:18 +02:00
Robert Foster 05d59bba73 Merge remote-tracking branch 'upstream/dev-v7' into dev-v7 2015-06-20 09:42:09 +10:00
Robert Foster d5baa586cf Adds the ability to provide the Entity Type to the treepicker dialog controller rather than just guessing from the type. This allows other types than just Document, Media or Member to be picked properly without errors.
Also fixed treepicker prevallue controller to pass in treeAlias properly to treepicker dialog.
2015-06-20 09:37:20 +10:00
Shannon a1d7f2d8b3 Created IMigrationEntryService and affiliated models, etc.... also updates the IServerRegistration stuff to be interfaced. 2015-06-19 12:03:02 +02:00
Shannon 3496a064c9 Fixes: U4-3514 Add dropdown list of tabs, if more then 6 tabs 2015-06-19 10:54:46 +02:00
Shannon 7c96f95491 Fixes: U4-6723 User timeout in the back office is an issue with new ASP.Net identity implementation 2015-06-18 19:16:49 +02:00
Shannon 7fc474d62b removes sort check from test - not sure why it is 2, something must have been fixed 2015-06-18 15:30:55 +02:00
Shannon 6a7229e983 Fixes: U4-5670 Umbraco.DropDown List pre value with alias ** already exists for this data type 2015-06-18 15:07:46 +02:00
Shannon f4d507eaa0 Allows the date + time picker to specify a format in the pre-values. 2015-06-18 10:14:31 +02:00
Shannon c962a9331a Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-18 10:04:45 +02:00
Shannon b175177770 Fixes date picker: U4-6715 i can't seem to remove a "publish-at" date? - date picker is more robust now and does proper validity checking/feedback 2015-06-18 10:04:22 +02:00
Shannon 08ff284121 adds test to ensure the service level can remove a scheduled publish date, obsoletes method: GetHasPermission 2015-06-18 09:44:16 +02:00
Shannon Deminick 221183d791 Merge pull request #718 from WebCentrum/dev-v7-gridsort2
Fixed bug in U4-6593 - After sort, reset the TinyMCE editors with previous settings
2015-06-17 15:22:52 +02:00
Shannon be84db097a Fixes: U4-6599 TinyMCE autoresize plugin has a bug and needs to be updated, U4-5689 update to latest TinyMCE 4.x version 2015-06-17 15:06:34 +02:00
Allyen eaaccdad75 Fixed bug in U4-6593 - After sort, reset the TinyMCE editors with previous settings 2015-06-17 14:57:15 +02:00
Shannon 4fcadc7e94 fixes: U4-5591 Error Change premissions on many nodes. 500 - The server supports a maximum of 2100 parameters 2015-06-17 12:21:47 +02:00
Shannon d77f95f29b removes tutorial docs and irrelavent readme and todo files, updates docs build to exclude tutorials header 2015-06-17 11:56:20 +02:00
Shannon 2751a4a02d added Icon to the base grid editor config interface 2015-06-17 10:01:45 +02:00
Shannon 437a9cf2b3 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-17 09:59:32 +02:00
Shannon aef1fb13b1 Fixes: U4-6148 Grid values should not store meta data/grid configuration, the grid config should be accessed globally for use in rendering the grid 2015-06-17 09:59:25 +02:00
Stephan db5697c455 Merge pull request #710 from dampee/U4-6642
U4-6642 - fix new node sort order
2015-06-16 18:25:46 +02:00
Shannon 10d368696d Updates grid editor to filter the values that will be persisted so it's a minimal subset. 2015-06-16 15:49:09 +02:00
Shannon ef2e86b271 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-16 15:04:39 +02:00
Shannon 1c0188351c Moves the grid configuration to a config class so it can be re-used. Updates the BackOfficeController to use the new config classes. Creates a new Grid property value converter (which can be overridden by user's ones) which merges the grid config values at runtime so we are not storing stale grid config values with the actual property value. Now we need to ensure that the grid doesn't post or persist these config values since they don't belong there. 2015-06-16 15:04:31 +02:00
Stephan 6d3377cc6e Revert "temp - temp media memory cache"
This reverts commit 8d1cdf020b.
2015-06-16 12:29:09 +02:00
Shannon fd6caf5cee updates how scripts render in main view - make it more clear where the callback is 2015-06-16 10:59:47 +02:00
Shannon 20e265491f Updates to latest AutoMapper and HtmlAgility 2015-06-16 10:19:34 +02:00
Shannon 10c8645b5f fixes button alignment now that the left section panel shrinks 2015-06-15 18:10:54 +02:00
Shannon 3c353fc7f9 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-15 17:47:01 +02:00
Shannon bc04f578e3 fix build 2015-06-15 17:46:53 +02:00
Shannon 03a8ee437d Merge branch 'dev-v7-U4-6677' of https://github.com/bjarnef/Umbraco-CMS into bjarnef-dev-v7-U4-6677
Conflicts:
	src/Umbraco.Web.UI.Client/src/less/panel.less
2015-06-15 17:43:06 +02:00
Stephan ee0297bb69 U4-6631 - throw on missing physical template file 2015-06-15 17:36:53 +02:00
Shannon Deminick 9765e9cf3a Merge pull request #715 from dampee/fixes/U4-5559
Fix Typo's build-in and seperate (U4-5559)
2015-06-15 17:31:23 +02:00
Shannon 6d9aba0952 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-15 17:13:42 +02:00
Shannon 1b137bb785 Fixes: U4-5777 Allow Localization of Plugins without having to edit core language files 2015-06-15 17:13:34 +02:00
Rasmus Fjord d57561b0e3 Updating image cropper interface to show crop more intuitive and also fixing u4-4622 2015-06-15 16:39:07 +02:00
Damiaan d2dc4efed8 U4-5559 Fix Typo "Seperate" to Separate 2015-06-15 16:12:46 +02:00
Damiaan 4f02a13a46 U4-5559 Fix Typo "Build-In" (Code) 2015-06-15 16:07:45 +02:00
Stephan 52c33055af U4-6702 - handle wildcard domains also for virtual node handler 2015-06-15 14:58:34 +02:00
Stephan bef6b8cd4c U4-5162 - do not cache macro if previewing 2015-06-15 14:45:16 +02:00
Stephan 8d1cdf020b temp - temp media memory cache 2015-06-15 14:38:09 +02:00
Shannon 29b64965ed Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-15 13:35:01 +02:00
Shannon 1e5a7a13dd fixes tree sync when the tree type alias isn't the correct case 2015-06-15 13:34:54 +02:00
Shannon Deminick e6cc90f6dd Merge pull request #714 from Tobz91/U4-6699
Removed capitalize from headings
2015-06-15 13:28:09 +02:00
Shannon c29af1df48 Fixes: U4-6636 Left navbar (section-bar) is unnecessary wide on mobile devices 2015-06-15 13:18:46 +02:00
Tobz91 8451a020dd Removed capitalize from headings
To avoid uppercase on first letter in every word for headings (in modals
for example).

Issue: http://issues.umbraco.org/issue/U4-6699
2015-06-15 13:18:18 +02:00
Shannon Deminick b413d717e2 Merge pull request #713 from vnbaaij/patch-1
As discussed in cg15 Grid workshop
2015-06-15 12:15:05 +02:00
Shannon Deminick dafaca414c Merge pull request #708 from fraabye/dev-v7
Added debugger display attribute to PropertyEditor base class. Fixes: U4-6534
2015-06-15 12:13:58 +02:00
Shannon Deminick b1fda57e50 Merge pull request #707 from trankin/bugfixes/U4-6687
Fix U4-6687: Can't add multiple instances of a macro in RTE in 7.2.6 …
2015-06-15 12:05:14 +02:00
Shannon Deminick 4cd8522921 Merge pull request #706 from bjarnef/dev-v7-U4-6058
U4-6058 - Move search field out of table header in listview
2015-06-15 11:44:58 +02:00
Vincent Baaij 4574aa2173 As discussed in cg15 Grid workshop
If you use more than one grid datatype in one doctype, the editors are shown the text 'Choose a layout for the page' more than once. By showing 'Choose a layout for this section', the text is in line with the documentation
2015-06-15 10:13:04 +02:00
Vincent Baaij 226f8f60ca As discussed in cg15 Grid workshop
If you use more than one grid datatype in one doctype, the editors are shown the text 'Choose a layout for the page' more than once. By showing 'Choose a layout for this section', the text is in line with the documentation
2015-06-15 10:10:05 +02:00
Shannon a3d4ccc062 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Web.UI.Client/src/views/common/dialogs/login.html
2015-06-15 09:41:50 +02:00
Shannon Deminick 7ca323d8d3 Merge pull request #704 from bjarnef/dev-v7-loginview
Add ng-cloak for login view
2015-06-15 09:29:25 +02:00
Damiaan Peeters d35b47b960 MYSQL doesn't handle the same way. So used the same code as in PersistUpdatedItem() 2015-06-14 00:52:37 +02:00
Damiaan Peeters 00ad45f436 Fix for U4-6642 (Sort order messing up after deleting a node) 2015-06-13 11:37:14 +02:00
Frederik Raabye d75179b742 Added debugger display attribute to PropertyEditor base class. Fixes: U4-6534 2015-06-11 12:00:34 +02:00
Tom Rankin 6be183f11b FIX U4-6687: Adding tests for RTE Macro parsing when macroAlias is the first attribute and a new test for multiple Macros of various format. 2015-06-10 12:53:32 -05:00
Tom Rankin a979f7ab12 Missed a test case when the properties were not in front of MacroAlias 2015-06-10 11:20:51 -05:00
hartvig e639869bb1 Update index.html 2015-06-10 09:20:25 +02:00
hartvig 09552d282f Update canvasdesigner.controller.js 2015-06-10 09:19:44 +02:00
Tom Rankin afe09c0850 Fix U4-6687: Can't add multiple instances of a macro in RTE in 7.2.6 without ruining RTE formatting
We found that the MacroTagParser.cs was being greedy and matching all UMBRACO_MACRO tags instead of getting them individually.

macro.service.js was updated for posterity purposes to match the regex in the .cs side, but testing showed that it was functioning as expected without this change.
2015-06-09 14:19:59 -05:00
Sebastiaan Janssen 0695839717 Updates version 2015-06-09 19:39:45 +02:00
Sebastiaan Janssen 181f7c1819 Adds close button to the preview 2015-06-09 18:19:26 +02:00
Sebastiaan Janssen 12dba80553 Removes zzaaa from version number 2015-06-09 14:38:01 +02:00
Sebastiaan Janssen f1d26d0990 Bring web.config in line with the nuget one 2015-06-09 14:35:30 +02:00
Stephan 83d5eda63c Bugfix xdt upgrade to 7.3 2015-06-09 12:22:08 +02:00
Shannon 2f80d5466d Merge branch '7.3.0' of https://github.com/umbraco/Umbraco-CMS into 7.3.0 2015-06-09 12:17:53 +02:00
Shannon e90766ad06 Ensures that during install that we don't enable the identity user manager or cookie auth since no db tables exist, fixes the IsUpgrading check to check for actual valid tables 2015-06-09 12:17:45 +02:00
bjarnef 3c21ccab78 Move search field out of table header
Move search field out of table header in listview to give more space for
content in listview.
2015-06-09 00:45:15 +02:00
Stephan 379c629e9c U4-6683 - TEMP workaround enabling upgrade to 7.3 2015-06-08 22:50:48 +02:00
bjarnef 3f0ea176e3 Add ng-cloak for login view
Add ng-cloak for login view to prevent Angular from briefly displaying
raw (uncompiled) content ```{{ }}```.
2015-06-08 01:42:51 +02:00
Shannon 49417cbce4 Fixes assembly references and assembly redirects 2015-06-06 22:35:24 +02:00
Shannon 6153c70ef6 Fixes: U4-6673 Xml data integrity dashboard 2015-06-05 17:27:18 +02:00
Stephan dffe09af58 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Web/UmbracoModule.cs
2015-06-04 18:32:54 +02:00
Stephan 07e9a3a4ea Refactor scheduled tasks & publishing cancellation 2015-06-04 14:00:02 +02:00
Shannon e3973de880 Updates scheduled tasks to be async with cancellation token 2015-06-04 12:13:27 +02:00
Shannon 8e114f1e8f Scheduled publishing is executing request async with cancellation token 2015-06-04 11:49:58 +02:00
Shannon b21289a32f Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-04 10:51:23 +02:00
Shannon 52cf5b5ec3 Changes header modification to PostReleaseRequestState 2015-06-04 10:51:15 +02:00
Shannon 3fbf90e56d Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/SolutionInfo.cs
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2015-06-03 15:08:47 +02:00
Sebastiaan Janssen 73fbe7d78c Merge branch 'dev-v7' into master-v7 2015-06-03 14:53:37 +02:00
Sebastiaan Janssen f100d82e2c Bump version 2015-06-03 14:03:04 +02:00
Shannon 3890353ff5 fixes merge issue 2015-06-03 12:37:31 +02:00
Shannon 60ce993c09 Fixes change password dashboard to have autocomplete = off and to not show plain text passwords. 2015-06-03 12:20:20 +02:00
Shannon c07021d2a0 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-02 22:41:06 +02:00
Shannon 744ee39904 Changes the IIS header removal to BeginRequest instead of PreSendRequestHeaders since that is not a recommended practice 2015-06-02 22:40:57 +02:00
Shannon Deminick d669bf64c0 Merge pull request #698 from Nicholas-Westby/dev-v7
Fixes U4-6665 (Localization Bug)
2015-06-02 21:29:16 +02:00
Shannon ff277cd99c Fixes: U4-6654 NullReferenceException downloading translation xml 2015-06-02 21:13:29 +02:00
Shannon Deminick 30cd303a13 Merge pull request #697 from wp-manaosoftware/dev-7-angularthrowexception
U4-6621 - fix issue AngularJS throws exception that locationEvent was…
2015-06-02 21:04:08 +02:00
Shannon 60ce987507 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-06-02 20:53:55 +02:00
Shannon a231899052 Fixes: U4-6635 with label overlaying the folder icon when the folder icons are small. 2015-06-02 20:53:46 +02:00
Shannon Deminick 7ddcccb0c5 Merge pull request #685 from gavinfaux/U4-6618
Back office insecure content warning loading Google Web Fonts when running over HTTPS
2015-06-02 20:16:12 +02:00
Nicholas-Westby db824d8daf Fixes U4-6665 (Localization Bug)
Fix for localization not working some of the time: http://issues.umbraco.org/issue/U4-6665
2015-05-29 21:02:07 -07:00
Warm a1a30240f6 U4-6621 - fix issue AngularJS throws exception that locationEvent was not defined when leaved a page without saving 2015-05-29 10:40:48 +07:00
Stephan f285af8a4e Merge remote-tracking branch 'origin/dev-v7' into 7.3.0 2015-05-26 13:19:43 +02:00
Shannon Deminick 7c4a189aa3 Merge pull request #696 from tomfulton/fix/u4-6655
Fix U4-6655:  RTE Macro not rendering in backoffice when "macroAlias" is not first attribute
2015-05-26 08:01:40 +10:00
Stephan 3b77c301c3 Warn if SkipIisCustomErrors is false 2015-05-23 23:16:15 +02:00
Tom Fulton 4ec66bc868 Fix U4-6655: RTE Macro not rendering in backoffice when "macroAlias" is not first attribute
Loosens UMBRACO_MACRO regex parsing to fix, add tests
2015-05-22 20:40:30 -06:00
Stephan fa8fe8ec66 BackgroundTaskRunner - few fixes 2015-05-21 21:54:30 +02:00
Stephan 61718f9450 fix merge 2015-05-21 21:03:32 +02:00
Stephan 115ba8dcb8 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs
	src/Umbraco.Web/Umbraco.Web.csproj
2015-05-21 20:49:18 +02:00
Stephan a76ba9a0a7 BackgroundTaskRunner - more fixes 2015-05-21 19:37:22 +02:00
Stephan b804ff6107 Explicit exception on cache reentry 2015-05-21 16:09:20 +02:00
Shannon 9b086c7fdd fixes merge issues 2015-05-21 17:14:25 +10:00
Shannon b788a6c642 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlCacheFilePersister.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs
	src/Umbraco.Web/Scheduling/Scheduler.cs
	src/umbraco.cms/businesslogic/web/StyleSheet.cs
2015-05-21 17:12:30 +10:00
Shannon a94f7e6ec0 Fixes RepositoryBase.Get to not use a GetOrAdd with the IRuntimeCache and instead just use a linear lookup, set cache, return - this causes less confusion and also prevents any inner recursive key lookups within our cache which was causing YSODs. Added tests for the RepositoryBase's DeepCloneRuntimeCacheProvider (see code comment about what this does), updates other repo's to use the RuntimeCache property instead of accessing it via the RepositoryCache.RuntimeCache property. 2015-05-21 17:04:14 +10:00
Shannon 72046a6ab9 removes test - expected behavior 2015-05-21 16:36:09 +10:00
Shannon ea2303c327 commits cache tests with recursive key lookup 2015-05-21 16:13:58 +10:00
Shannon 4c4117a052 Fixes BackgroundTaskRunner - moves the OnStopped call to where it should be. Un-ignores tests - these need to execute and cannot be ignored. They are not long running but if there are issues then they will timeout - DO NOT IGNORE. if the build server has issues with these then it's our logic that is at fault. 2015-05-21 13:05:58 +10:00
Stephan 521b8076d2 U4-6638 - bugfix BackgroundTaskRunner 2015-05-20 20:56:05 +02:00
Stephan 1def88d764 U4-6626 2015-05-20 18:26:08 +02:00
Stephan 910c349f7c Bugfix StyleSheet concatenation causing LOH GC issues 2015-05-20 17:00:32 +02:00
Shannon 260ec800c2 Disables the DeepCloneRuntimeCacheProvider for now until we solve this cache problem 2015-05-20 17:51:53 +10:00
Shannon 9e223eb891 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Cache/ObjectCacheRuntimeCacheProvider.cs
	src/Umbraco.Core/CoreBootManager.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
	src/Umbraco.Web/umbraco.presentation/content.cs
2015-05-20 16:24:17 +10:00
Shannon 6cfb5bc678 Have made the buttons always left aligned with the editing section, seems better since it's consistent on all screens and less right hand motion to click a button 2015-05-20 16:13:36 +10:00
Shannon a3b5996372 Fixes save/publish button placement on small screens 2015-05-20 16:01:44 +10:00
Shannon 31b4560daa Merge branch 'sebastian-claesson-dev-v7' into dev-v7 2015-05-20 15:08:45 +10:00
Shannon 2f2dd9c9b6 Merge branch 'dev-v7' of https://github.com/sebastian-claesson/Umbraco-CMS into sebastian-claesson-dev-v7 2015-05-20 15:07:48 +10:00
Shannon Deminick 02599e1254 Merge pull request #694 from Alain-es/datepicker-custom-format
Datepicker custom format
2015-05-20 14:48:36 +10:00
Stephan ac7ff31a67 U4-6626 - XmlCache, bugfix locks 2015-05-19 20:08:52 +02:00
Stephan bea7387459 bugfix LegacyPropertyEditorIdToAliasConverterTests 2015-05-19 15:06:22 +02:00
Stephan 009f071f48 XmlCache - comments 2015-05-19 14:04:32 +02:00
Stephan e0ecb3291d XmlCache - bugfix running with file cache disabled 2015-05-19 10:20:36 +02:00
Stephan dbaf7c0190 U4-6597 - fix issue with caches that would cache exceptions 2015-05-19 09:24:38 +02:00
Stephan 16e06b6d4d Revert 444a028, 0e5a469 and 9d8f33e 2015-05-19 09:24:25 +02:00
Shannon 444a028e30 adds tests for caching exceptions and only caching one time and fixes HttpRequestCacheProvider to work with them. 2015-05-19 15:57:11 +10:00
Shannon 0e5a469577 Fixes: U4-6597 Umbraco fails to reconnect to a SQL Server if it started up when SQL server was offline - however this requires some review. 2015-05-19 14:29:25 +10:00
Shannon 9d8f33e98e Fixes: U4-6597 Umbraco fails to reconnect to a SQL Server if it started up when SQL server was offline - however this requires some review. 2015-05-19 14:25:31 +10:00
Alain-es 2abb3177af Datepicker custom format 2015-05-18 15:57:27 +01:00
Alain-es 43f99e11a5 Datepicker custom format 2015-05-18 15:54:50 +01:00
Stephan 99ff86aefb DistributedCache - don't serialize payload on local node 2015-05-18 16:35:42 +02:00
Stephan 918bb761b2 Bugfix property value editors null-checks 2015-05-18 16:24:53 +02:00
Stephan 031f70f529 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/ApplicationContext.cs
	src/Umbraco.Core/Logging/LogHelper.cs
	src/Umbraco.Web.UI.Client/src/less/login.less
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
2015-05-18 16:23:12 +02:00
Sebastian Claesson Hoffback d1d9878ab6 Fix content-edit-view on mobile devices
The content editing view did not work at all on small screens. The label
took to much space, leaving the controller with almost none. Now the
label and the controller get its own row on smaller screens. Much
cleaner look and you can acctually edit a page on a small screen. Note:
Grids still don't work well.
2015-05-18 13:59:42 +02:00
Sebastian Claesson Hoffback e9753c72a7 Merge pull request #1 from umbraco/dev-v7
Merge Shannons changes
2015-05-18 12:13:33 +02:00
Shannon 3b791c75f6 Fixes: U4-5020 Login view on mobile screen is too big 2015-05-18 20:09:03 +10:00
Shannon Deminick 35cb4d5690 Merge pull request #693 from sebastian-claesson/dev-v7
Fixed login-view on mobile devices
2015-05-18 19:37:33 +10:00
Sebastian Claesson Hoffback adde7c2f50 Fixed login-view on mobile devices
On smaller screens the login-view was too far to the right.

Related issue: http://issues.umbraco.org/issue/U4-5020
2015-05-18 11:34:13 +02:00
Shannon 25f9fecc16 Completes: U4-1979 Some legacy business logic APIs do not wrap the new Service APIs - gets permissions wrapped too 2015-05-18 19:34:01 +10:00
Shannon 76a10fc776 Works on: U4-1979 Some legacy business logic APIs do not wrap the new Service APIs. Deprecates the ctor passing in a parent id for the data type (since it's always -1). Wraps legacy DataTypeDefinition to use the new services layer. 2015-05-18 16:06:22 +10:00
Shannon 1d0b5f3251 ensures courier has access to internals 2015-05-18 16:04:23 +10:00
Shannon b01f8799ae oops! long time ago with the original 7.3 refactor of runtime caches, before we fixed deep cloning, the changes made just used normal http runtime cache, but with the deep cloning fixes these were not carried over. This fixes that by forcing the base RepositoryBase to use a DeepCloneRuntimeCacheProvider which is a wrapper for the normal runtime cache but ensures deep cloning in/out and resets dirty properties. 2015-05-18 16:03:25 +10:00
Shannon Deminick 62943d391f Merge pull request #692 from bjarnef/dev-v7-U4-6629
Fix changes in user section labels
2015-05-18 13:47:13 +10:00
Shannon 76fb595a55 Fixes: U4-6363 Expose Dictionary item access on UmbracoHelper 2015-05-18 13:38:14 +10:00
Shannon Deminick 0942eb839d Merge pull request #691 from Vrijdagonline/dev-v7
Updating Dutch Translations
2015-05-18 11:38:29 +10:00
bjarnef 21a4dfe33e Fix changes in user section labels
Fixed translation in da.xml according to change in en.xml  from 7.2.4 to
7.2.5
2015-05-17 22:16:39 +02:00
Stephan 8121fc42e5 U4-6626 - fix log level 2015-05-17 21:47:31 +02:00
Stephan c356ed1df8 Logger - add AppDomain.Id to log 2015-05-17 18:48:26 +02:00
Stephan 92f56ccedd U4-6626 - XmlCache, bugfix locks 2015-05-17 18:48:25 +02:00
Stephan 7cbe2410e4 Do not flood the log when installing a new version 2015-05-17 18:48:21 +02:00
Arjan Woldring 1dda3ce45d Updating Dutch Translations
Missing keys added, deleted keys deleted, reorderded some keys based on
the english one and corrected couple of wrong translations.
2015-05-16 19:06:04 +02:00
Shannon Deminick 1e29a4a8ca Merge pull request #688 from sebastian-claesson/dev-v7
Swedish was using the wrong format for variables
2015-05-15 15:46:17 +10:00
Sebastian Claesson Hoffback 01de0bd6a1 Swedish was using the wrong format for variables
The swedish translation was using {0} instead of %0%. Leading to alot of
texts being weirdly formated.
2015-05-15 07:22:11 +02:00
Shannon fbb46c9ffe Allows Courier core to see internals 2015-05-14 14:42:53 +10:00
Shannon 628f5b283f Merge branch 'michaeljfarr-dev-v7' into 7.3.0 2015-05-14 08:39:19 +10:00
Shannon 73c34fda9c Merge branch 'dev-v7' of https://github.com/michaeljfarr/Umbraco-CMS into michaeljfarr-dev-v7
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Core/packages.config
	src/Umbraco.Web/Umbraco.Web.csproj
2015-05-14 08:38:51 +10:00
Shannon b442fecca7 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0 2015-05-14 08:33:25 +10:00
Shannon Deminick 4d0d29c004 Merge pull request #686 from Aaen/dev-v7
Change translation for add row for fix issue U4-6564
2015-05-14 07:57:12 +10:00
Shannon Deminick 741c2bb085 Merge pull request #687 from sebastian-claesson/dev-v7
Swedish translation for the grid-editor
2015-05-14 07:54:16 +10:00
Sebastian Claesson Hoffback 2c809857af Swedish translation for the grid-editor
Swedish translation was completly missing for the grid-editor
2015-05-13 14:59:27 +02:00
Dennis Aaen 236d6ee302 Change translation for add row for fix issue U4-6564 2015-05-13 13:27:37 +02:00
Gavin Faux 3094dea5d4 Back office insecure content warning loading Google Web Fonts when running over HTTPS
Amend to use https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js
2015-05-13 09:45:20 +01:00
Shannon 9e1d3220c2 Ensures all correct security columns exist on user table and ensures they are updated. 2015-05-13 18:19:23 +10:00
Shannon de7294335f Adds nicer extensions for the Localize methods to not pass in a Culture and take the Culture from the current thread. Adds GUID Id display to the content/media/members editor 2015-05-13 17:33:59 +10:00
Shannon 416dcdf90f Updates NotFoundHandlerHelper to use IDomainService and fixes IDomainRepository with the Exists and GetByName methods (with tests) 2015-05-13 16:45:08 +10:00
Shannon 2cd5b252d5 fixes merge issues 2015-05-13 12:24:16 +10:00
Shannon 64cbeb4c9d Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Services/EntityService.cs
	src/Umbraco.Core/Services/ServiceContext.cs
	src/Umbraco.Web/Cache/DataTypeCacheRefresher.cs
	src/Umbraco.Web/Cache/TemplateCacheRefresher.cs
	src/umbraco.cms/businesslogic/template/Template.cs
2015-05-13 12:20:43 +10:00
Shannon f829b0b16c Fixes text not overlayed on top of icon for folders in folder browser 2015-05-13 10:56:25 +10:00
Shannon 5d1340e864 Merge branch 'dev-v7' into master-v7 2015-05-13 10:15:11 +10:00
Sebastiaan Janssen a42526b890 This file just keeps being marked as "changed" by git, committing it so I don't have to discard changes all the time 2015-05-12 11:15:02 +02:00
Shannon 3a36513307 Fixes: U4-6609 SQL Exception when trying to delete a template that isn't assigned to any doc type 2015-05-12 17:59:06 +10:00
Shannon 0548a32405 adds some simple docs to umb settings 2015-05-12 17:32:26 +10:00
Shannon 433950dd59 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-05-12 12:39:57 +10:00
Shannon ad8926668e Fixes: U4-6588 UmbracoSettings Error404 support Guids and Xpath - To achieve this, had to create an Id -> Key and Key -> Id method on EntityService including a cache for it which means updating all relavent cache refreshers to clear this cache when things are removed. Moved the logic for parsing an Umbraco XPath query (with tokens) to a stand-alone testable class (though haven't written tests), move the logic for looking up a not found page to the NotFoundHandlerHelper (instead of legacy 'library'). Fixes the $root query, since I don't think that ever worked. I've tested $root now for both MNTP and for the not found handler and it works. 2015-05-12 12:39:46 +10:00
Sebastiaan Janssen 4ebc0fe4cf U4-6383 Download all translation tasks as XML Error
#U4-6383 Fixed Due in version 7.2.5
2015-05-11 21:33:52 +02:00
Shannon 1b1455067e Fixes: U4-6606 maxInvalidPasswordAttempts work for the UsersMembershipProvider doesn't work any more 2015-05-11 19:44:59 +10:00
Shannon 795de94a5f Fixes: U4-6102 After renaming Grid row configurations all data is lost for renames. So now we have warnings for both deletes and renames. 2015-05-11 18:46:26 +10:00
Shannon d6699ab3b3 Fixes: U4-6102 After renaming Grid row configurations all data is lost, also ensures that all events are unsubscribed on destroy 2015-05-11 16:18:35 +10:00
Shannon d2deaf0375 Fixes MVC references and updates to 4.0.0.1 2015-05-11 12:43:45 +10:00
Shannon 95ff94c532 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/packages.config
	src/Umbraco.Web.UI/packages.config
	src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
	src/Umbraco.Web/Editors/AuthenticationController.cs
	src/Umbraco.Web/packages.config
2015-05-11 12:26:53 +10:00
Shannon d94b334375 Moves login logging to the provider level 2015-05-11 12:22:56 +10:00
Shannon a4a49b1466 Revert "Fixes MVC 4.0.0.1 problem once and for all." - All MVC ref's are 4.0.0.0, no web config transforms (also there was never a 4.0.0.1 version of System.Net.Http). Everything works on my machine now, even with 4.0.0.1 installed in the GAC. 2015-05-11 11:45:13 +10:00
Shannon 9f82ae1db7 unspec to mvc 4.0.0.1 2015-05-11 10:52:38 +10:00
Shannon Deminick 2c92cd9ca9 Merge pull request #683 from umbraco/U4-6603
U4-6603 Log failed login attempts
2015-05-11 09:07:24 +10:00
Sebastiaan Janssen c34605937c U4-6603 Log failed login attempts
#U4-6603 Fixed
2015-05-10 17:47:32 +02:00
Shannon 11b5123bbb fixes datatokens dictionary check and ensures that webapi is initialized at the very end of the boot cycle. 2015-05-08 19:13:58 +10:00
Shannon Deminick 2a9d3df822 Merge pull request #682 from hfloyd/dev-v7
English Language file updates (Umbraco/config/lang)
2015-05-08 08:48:38 +10:00
Heather Floyd 3b849987bf Small fixes to 'en' language file. Update of 'en-us' language file to match 'en' language file. 2015-05-07 16:41:12 -04:00
Shannon d0dc5406cc fixes package merging 2015-05-07 16:39:00 +10:00
Shannon 3be1cd8b0d Merge branch 'dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/SolutionInfo.cs
	src/Umbraco.Core/packages.config
	src/Umbraco.Web.UI.Client/src/views/common/dialogs/user.controller.js
	src/Umbraco.Web.UI/packages.config
	src/Umbraco.Web/packages.config
2015-05-07 16:24:29 +10:00
Shannon 8443513b2b fixes sorting with multipletextbox 2015-05-07 13:39:28 +10:00
Shannon fec9d066f0 Merge branch 'property-editor-fixes' of https://github.com/pynej/Umbraco-CMS into pynej-property-editor-fixes
Conflicts:
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/markdowneditor/markdowneditor.controller.js
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/multipletextbox/multipletextbox.html
	src/Umbraco.Web/PropertyEditors/ContentPickerPropertyEditor.cs
2015-05-07 13:24:59 +10:00
Shannon a69c7dd1fc Manually merges PR: 564 2015-05-07 13:09:29 +10:00
Shannon 4e6a3458d0 Fixes: U4-6600 Label on files not just folders in file browser (media) and fixes up the last image rendered in the photo browser, as well as the overlays, whitespace and overflow and vertical alignment. 2015-05-07 12:57:23 +10:00
Shannon a5bb8ba8ee Merge branch 'iamphill-media-label' into dev-v7 2015-05-07 12:01:44 +10:00
Shannon d4f3dbcfc0 Merge branch 'media-label' of https://github.com/iamphill/Umbraco-CMS into iamphill-media-label 2015-05-07 12:01:31 +10:00
Shannon 6a0656fbb0 fixes spacing for radio/check boxes (U4-6036) tested in ie, ff and chrome 2015-05-07 11:59:10 +10:00
Shannon Deminick 9dc0999ebd Merge pull request #595 from redmorello/U4-6036
U4 6036 - Checkbox and Radio button styling incorrect in backend
2015-05-07 11:49:30 +10:00
Shannon 813f1a1f2d Fixes: U4-6035 Properrty.WasDirty() always returns false 2015-05-07 11:43:53 +10:00
Shannon e45b0a53b8 Merge branch 'aaronpowell-master-v7' into dev-v7 2015-05-07 11:07:16 +10:00
Shannon 685635c568 Merge branch 'master-v7' of https://github.com/aaronpowell/Umbraco-CMS into aaronpowell-master-v7 2015-05-07 11:06:55 +10:00
Shannon Deminick a3e37de1ad Merge pull request #633 from bjarnef/dev-v7-U4-4507
U4-4507 - Make expand arrow in sections as a toggle
2015-05-07 11:02:08 +10:00
Shannon Deminick 692a8f807e Merge pull request #638 from bjarnef/dev-v7-U4-6276
Fix for U4-6276 - Keep headline at same position
2015-05-07 10:51:32 +10:00
Shannon f4bdcae411 Fixes: U4-6236 umbraco 7 macro parameters saving "null" 2015-05-07 10:47:36 +10:00
Shannon Deminick 3a726348d2 Merge pull request #673 from kgiszewski/dev-v7
Fix for U4-6530
2015-05-07 10:21:42 +10:00
Shannon Deminick d8b029eba6 Merge pull request #680 from WebCentrum/dev-v7-gridsort
U4-6593 - After sort, reset the TinyMCE editors with previous settings
2015-05-07 10:13:29 +10:00
Shannon 7c01670caf fixes mem leaks by not unsubscribing from events 2015-05-07 09:11:39 +10:00
Shannon 3ce5ff882e Fixes U4-5213 in a better way using a query string so it's clear where it redirects to 2015-05-07 09:11:25 +10:00
Shannon 6e7aa19073 Fixes U4-5213 in a better way using a query string so it's clear where it redirects to 2015-05-07 09:00:43 +10:00
Shannon 1cac4ed075 Fixes MVC 4.0.0.1 problem once and for all. 2015-05-07 08:10:45 +10:00
Stephan e358390211 Bugfix Xml cache - bad, bad Stephan 2015-05-06 11:10:04 +02:00
Sebastiaan Janssen 2e6c643dde Bump version 2015-05-06 11:08:25 +02:00
Sebastiaan Janssen d84b8aa675 Fix duplication of the mysql DbProviderFactory when using NuGet 2015-05-06 11:04:09 +02:00
Shannon Deminick 41a0c1f491 Merge pull request #679 from WebCentrum/dev-v7-loginredir
U4-5213 - Login redirect to originally requested URL
2015-05-06 17:46:07 +10:00
Shannon e8d4777d74 re-formatted some of the PR 2015-05-06 17:36:46 +10:00
Shannon e03ef76fcd Merge branch 'Jeavon-U4-5480' into dev-v7 2015-05-06 17:35:13 +10:00
Shannon 781ca34e34 Merge branch 'U4-5480' of https://github.com/Jeavon/Umbraco-CMS into Jeavon-U4-5480 2015-05-06 17:34:59 +10:00
Shannon d01e963365 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7
Conflicts:
	src/Umbraco.Web.UI/packages.config
2015-05-06 17:28:05 +10:00
Shannon 821daa82c4 Fixes: U4-6474 Update to latest examine v0.1.63 2015-05-06 17:14:10 +10:00
Sebastiaan Janssen a51dd93ffe Expressed version range was wrong 2015-05-06 08:58:45 +02:00
Shannon 7134373933 Fixes: U4-6484 Don't cast to specific Examine types - only interfaces like ISearcher/IIndexer 2015-05-06 13:25:24 +10:00
Allyen 8299243129 U4-6593 - After sort, reset the TinyMCE editors with previous settings 2015-05-05 22:07:18 +02:00
Sebastiaan Janssen 4144590189 Upgrade to latest MySql.Data and loosen up NuGet dependency 2015-05-05 12:15:28 +02:00
Shannon e2a821c257 Fixes and simplifies migration tests 2015-05-05 13:37:33 +10:00
Shannon ed54301914 Fixes unit test and updates all migration classes to use the correct ctor that get's it's required services 'injected' 2015-05-05 13:22:36 +10:00
Shannon 6849274b98 reverts umb version 2015-05-05 13:03:05 +10:00
Shannon 8fa838e8fb Fixes merge and re-code's the XmlCacheFilePersister to use ILogger 2015-05-05 12:44:19 +10:00
Shannon 2f9753cc12 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/SolutionInfo.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web.UI/packages.config
	src/Umbraco.Web/Editors/BackOfficeController.cs
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlCacheFilePersister.cs
	src/Umbraco.Web/umbraco.presentation/content.cs
	src/umbraco.macroRenderings/app.config
2015-05-05 12:27:01 +10:00
Shannon 66263a44a5 updates nuget.exe ... we should really use the methodolgy that we've got in the new identity projects where we don't commit this file, instead we go get the latest from the web during build (but that would probably mean moving to powershell) 2015-05-05 11:58:33 +10:00
Allyen 2f4ff6aaae Login redirect to originally requested URL 2015-05-04 11:49:07 +02:00
Shannon 425df19c5c adds long overloads to interfaces 2015-05-04 14:36:46 +10:00
Shannon f9babe1882 Converts paged results to use 'long' params instead of ints and obsoletes the old ones. 2015-05-04 11:58:00 +10:00
Shannon cd2f512284 moves auth server classes to the identity extensions sln 2015-05-04 11:02:23 +10:00
Sebastiaan Janssen ab0e549c70 We got rid of macroRenderings project ages ago, why is this file still here? 2015-05-01 14:27:49 +02:00
Sebastiaan Janssen be065b2fa3 Generate symbols nupkg (apparently you can create it from an existing NuSpec file, very cool)
Making sure that all pdbs ARE actually generated in Release mode (the AllBinaries file was missing loads of files)
Generate all and include all xml doc files too
Corrects WebPI zip, also shouldn't include dotLess.Core.dll
2015-05-01 14:27:26 +02:00
Shannon 624975b4c9 Updates to WebApi2, fixes nuspec to include the correct dependencies (and simplifies them) 2015-05-01 14:03:59 +10:00
Shannon 85cdc79fd2 Need to publicize some things for the REST service to work 2015-04-30 16:39:41 +10:00
Shannon 374bbc0973 Need to publicize some things for the REST service to work 2015-04-30 15:39:03 +10:00
Sebastiaan Janssen f0dfd0dce2 U4-6568 NuGet 7.2.4 missing Microsoft.Threading.Tasks.dll and Microsoft.Threading.Tasks.Extensions.dll
#U4-6568 Fixed Due in version 7.2.5
2015-04-29 16:15:24 +02:00
Shannon da579c91e1 Fixes: U4-6460 7.2.2 -> 7.2.4 update fails with "an item with the same key has already been added" error 2015-04-27 13:40:41 +10:00
Shannon 550d690a31 Fixes: U4-6559 ServerVariables parsing - An Item with the same key has already been added 2015-04-27 12:41:19 +10:00
Shannon Deminick 40b75b7cf5 Merge pull request #672 from alecrt/dev-v7
U4-6295 - Fix for BusinessLogic.Log.CleanLogs task error
2015-04-27 10:56:33 +10:00
Shannon Deminick 0b28a68678 Merge pull request #675 from abjerner/patch-6
listview.html: the arrows for symbolizing ascending and descending are wrong
2015-04-27 10:53:52 +10:00
Anders Bjerner 5f27355247 listview.html: the arrows for symbolizing ascending and descending are wrong 2015-04-26 14:44:25 +02:00
Sebastiaan Janssen 356ea6824f U4-6547 Re: U4-6096 German Translator file broken again in V7.2.4
#U4-6547 Fixed Due in version 7.2.5
2015-04-23 16:59:57 +02:00
Sebastiaan Janssen 7ffb73e467 Updates Examine dependency 2015-04-23 16:45:24 +02:00
Sebastiaan Janssen 57c3665d0f Show different ReadMe for fresh install vs. upgrade installs 2015-04-23 16:01:23 +02:00
Sebastiaan Janssen 8037f929aa Ignore more slow tests 2015-04-23 15:35:42 +02:00
Sebastiaan Janssen fec3e57ed6 Ignore tests that don't run to completion on slower build server 2015-04-23 15:19:18 +02:00
Sebastiaan Janssen 5106ffab97 Mark as Release Candidate 2015-04-23 15:00:12 +02:00
Sebastiaan Janssen 9f569171c3 Suppress error (it's useless information) 2015-04-23 14:59:13 +02:00
Sebastiaan Janssen d607041ca4 U4-6450 Creating Partial View Macro without 'Create Macro' selected still tries to create a macro
#U4-6450 Fixed
2015-04-23 14:55:57 +02:00
Sebastiaan Janssen b3daf7f55d Merge branch 'dev-v7-xmllock' into dev-v7 2015-04-23 14:23:23 +02:00
Sebastiaan Janssen a77d3bc4ac Adds some more defaults tests 2015-04-23 14:22:42 +02:00
kgiszewski dc3e144493 Fix for U4-6530 2015-04-20 10:28:35 -04:00
alecrt f20fed3ce8 Fix for U4-6295 - BusinessLogic.Log.CleanLogs task error 2015-04-18 19:00:03 +02:00
Shannon 5a3b97c669 puts the claim validation back in (needs to be there, took it out for testing) 2015-04-15 20:38:04 +10:00
Shannon 570b71820f publicizes a couple things to make it easier for tests 2015-04-15 17:06:08 +10:00
Shannon 442160bb7a fixes identity conversion when it's just a generic identity and not auth'd, we can never convert to back office identity if it's not auth'd 2015-04-15 17:03:12 +10:00
Stephan c4aa87d73d Backport Xml concurrency fixes 2015-04-13 19:12:03 +02:00
Stephan 57909489cb AsyncLock - import 2015-04-13 19:12:00 +02:00
Shannon f87764f9d5 a bit better support for unit testing controllers with ctor overloads 2015-04-13 20:13:57 +10:00
Shannon 9d4e0f1e3d Changes UmbracoApiControllerBase to lazily create properties which helps with unit testing 2015-04-13 16:08:34 +10:00
Shannon 800b8b5f7e updates nuspec, creates new UmbracoApiControllerBase which is not auto-routed but contains the base services 2015-04-13 15:06:40 +10:00
Shannon c10c1f8fac publicizes a global setting (which still needs to be moved to config) 2015-04-13 13:33:13 +10:00
Shannon dbd9240142 adds a token constant auth type 2015-04-10 17:03:07 +10:00
Shannon c3ca651e4a Renames a few things to shorten names 2015-04-10 16:55:04 +10:00
Shannon f2e319a01f Updates the UmbracoBackOfficeIdentity to have better support for claims and adds unit tests for it. Creates OwinLogger's and methods to apply them. Updates security methods to ensure that a UmbracoBackOfficeIdentity is returned even from a normal ClaimsIdentity which will be the case with bearer tokens. Updates the angular anti-forgery checker to be ignore if the auth type is not cookie based. Adds a simple token server provider that people can use if they want. Now token authentication is working. 2015-04-10 14:22:09 +10:00
Shannon d6589960f2 re-organizes a bit of cache tests into one folder 2015-04-10 10:36:21 +10:00
Shannon 2847a28e74 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
	src/Umbraco.Web/Scheduling/BackgroundTaskRunnerAwaiter.cs
2015-04-09 18:01:05 +10:00
Shannon c78b371965 updates the BackgroundTaskRunnerAwaiter so that it exits if the runner is not running when it is ctor'd, adds diags. 2015-04-09 17:59:34 +10:00
Shannon e29668a01b Changes DebugDiagnosticsLogger to not output Fail since that launches a debug entry window, adds some diagnostics to the background task runner stuff since the awaiter is waiting for every in very random cases. 2015-04-09 17:49:17 +10:00
Shannon 757108446d fixes tests 2015-04-09 17:18:47 +10:00
Shannon 19715ef45f Fixes build, updated BackgroundTaskRunner to get an ILogger injected 2015-04-09 17:12:52 +10:00
Shannon a1c7352da1 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Tests/Integration/GetCultureTests.cs
	src/Umbraco.Tests/Models/ContentTests.cs
	src/Umbraco.Tests/Models/ContentTypeTests.cs
	src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs
	src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs
	src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
	src/Umbraco.Tests/Services/ContentTypeServiceTests.cs
	src/Umbraco.Web/Models/ContentExtensions.cs
	src/Umbraco.Web/Mvc/SurfaceController.cs
2015-04-09 16:50:07 +10:00
Shannon c525be3e44 Completes: U4-6474 Update to latest examine v0.1.62 2015-04-09 15:33:58 +10:00
Shannon cc804bd3bd removes duplicate test 2015-04-08 17:57:00 +10:00
Shannon 24dc8309f1 sets ConfigureAwait(false) for XmlCacheFilePersister await calls and BackgroundTaskRunner await calls since these are always on background threads, no synchronizing with any context. 2015-04-08 17:15:21 +10:00
Shannon ce81f9b1b1 we'll try these tests again 2015-04-08 17:08:06 +10:00
Shannon 3f70761d49 this should fix one of the tests 2015-04-08 17:01:38 +10:00
Shannon dee45146a4 applies a max timout for BackgroundTaskRunnerTests 2015-04-08 16:55:34 +10:00
Shannon b35397b464 uses property type ctor overload to accept an alias which prob should have been there all along since in most cases you need an alias to create one (same prob goes for property groups, etc... but oh well). Adds a couple tests for case insensitive comparisons in PropertyCollection 2015-04-08 16:33:16 +10:00
Shannon 147cc92ac5 Updates BackgroundTaskRunner & tests: removes the need for most Thread.Sleep which is error prone, this is done by updating the GetAwaiter() method to be a custom awaiter so we can await the entire background task running operations. We then add a property called CurrentThraedingTask which then allows awaiting the current Task instance. Adds error handling to all event handlers for the task runner. Changes events to be TypedEventHandlers 2015-04-08 16:28:42 +10:00
Shannon 3230fce76a fixes lock on PropertyCollection, should just be a normal lock 2015-04-08 11:47:16 +10:00
Shannon 1d22c1e81e fixes get hash code on Entity base class 2015-04-08 11:47:00 +10:00
Shannon ece2e2359e Updates PropertyGroup's equality comparisons to: check the base comparison, then check for a case insensitive comparison with name, fixes GetHashCode to be consistent with the Equals method. 2015-04-08 11:31:14 +10:00
Shannon 8cbe53f49d Updates PropertyType to have a ctor overload accepting an alias when one already exists. Updates it's equality comparisons to: check the base comparison, then check for a case insensitive comparison with alias, fixes GetHashCode to be consistent with the Equals method. 2015-04-08 11:30:35 +10:00
Shannon Deminick cac3ddc3c8 Merge pull request #666 from JimBobSquarePants/dev-v7
Remove Content Service Setter case sensitivity
2015-04-08 10:07:34 +10:00
Shannon 0eac50ceba Fixes: U4-6506 Grid config in package.manifest doesn't allow for multiple grid editors and adds tests 2015-04-07 17:24:35 +10:00
Shannon d5e735ac14 Fixes singleton accessors and adds ctor which would allow unit testability. 2015-04-07 12:07:54 +10:00
Shannon Deminick 8d841d3537 Merge pull request #667 from AndyButland/u4-1733
U4-1733 - Added overloads to RedirectToUmbracoPage methods to allow passing of a querystring
2015-04-07 11:05:05 +10:00
michael ae3c17073b Move MVC dependencies from Umbraco.Core to Umbraco.Web
note:MvcHandler.DisableMvcResponseHeader = true was removed from UmbracoApplicationBase.StartApplication.
This was the only breaking change, it can be put back in at a higher level if necessary.
2015-04-06 16:48:55 +12:00
Sebastiaan Janssen 5f175874b2 Fixes tests and adds a few 2015-04-02 17:52:59 +02:00
Sebastiaan Janssen fa053426c3 Don't disableFindContentByIdPath when in preview mode 2015-04-02 17:16:56 +02:00
Shannon 59dd6e0941 updates repo config 2015-04-02 14:59:03 +11:00
Shannon a321d4d1b8 Allows the ability to use external logins to login to authorize upgrades, this means being able to add reserved paths at startup dynamically which is now built in as part of the AuthenticationOptionsExtensions for registering external logins for the back office. 2015-04-02 14:46:53 +11:00
AndyButland 437e7f0ffc Removed unused usings from previous commit 2015-04-01 23:29:43 +02:00
AndyButland afa6c35bb5 Added overloads to RedirectToUmbracoPage methods to allow passing of a querystring 2015-04-01 23:27:20 +02:00
Stephan 22ac571c7d U4-6479 - fix GetCulture for unpublished content + add tests 2015-04-01 15:40:34 +02:00
James South 8d00dbf648 Remove Content Service Setter case sensitivity
Makes property alias key checking case-insensitive bringing behaviour in
line with IPublishedContent getters.
2015-04-01 12:37:28 +01:00
Stephan cd26a1ad21 U4-6479 - fix GetCulture for unpublished content + add tests 2015-04-01 12:59:01 +02:00
Shannon 40d3f2ffb9 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
2015-04-01 17:45:38 +11:00
Shannon 437ab4aaf1 Fixes installer permission steps - this cannot just arbitrarily write to the umbraco xml cache file 2015-04-01 17:44:27 +11:00
Shannon 0c0802e964 updates the migrations to use the correct ctor (not empty), this is more for v8 but have created a crappy activator that passes in the right args. 2015-04-01 17:43:27 +11:00
Shannon 2a6d5846d1 Fixes installer permission steps - this cannot just arbitrarily write to the umbraco xml cache file 2015-04-01 16:57:32 +11:00
Shannon a43847bc8b Adds IsUpgrading method to ApplicationContext and fixes AppBuilderExtensions checks since we need a user manager when upgrading 2015-04-01 16:12:32 +11:00
Shannon df6bb36876 moves notification logic to umbnotifications.directive instead of in main (not sure why it was there). Updates the AuthorizeUpgrade screen to be able to show YSOD or alert messages when there are server errors. Adds htmlhelper extensions to share between Default.cshtml and AuthorizeUpgrade.cshtml. Adds null check for BackOfficeUserManager. 2015-04-01 16:04:19 +11:00
Shannon d185f93c35 Fixes unit tests 2015-04-01 14:29:35 +11:00
Shannon df2ce2c133 fix merge 2015-04-01 14:05:29 +11:00
Shannon 5e90e74969 Merge branch '7.3.0' of https://github.com/umbraco/Umbraco-CMS into 7.3.0
Conflicts:
	src/Umbraco.Core/Persistence/Migrations/Initial/DatabaseSchemaCreation.cs
2015-04-01 14:03:05 +11:00
Shannon 924ee5c413 fixes merge 2015-04-01 14:02:14 +11:00
Shannon bceed10bd8 Merge branch 'dev-v7-distcache' into 7.3.0 2015-04-01 14:00:13 +11:00
Shannon Deminick dec7ef8f3f Merge pull request #663 from Shazwazza/dev-v7-7.30-AspNetIdentity
ASP.Net Identity for back office users
2015-04-01 13:57:37 +11:00
Shannon f019900619 oops, not sure how the LICENSE got deleted, removed AD identity nuspec since that is in a diff repo now. Removes commented out code in umb module for auth - this is done by cookie middleware now. 2015-04-01 13:55:33 +11:00
Shannon ad92006f54 Removes the extensibility files and build for identity stuff - that now exists in a separate github repo. 2015-04-01 13:42:43 +11:00
Shannon 439935430a Simple update adding nuspec for Identity AD 2015-04-01 13:42:40 +11:00
Shannon 1de9dbf18c Updates build process to include building a nuget Identity package to provide extensibility points in Umbraco. 2015-04-01 13:42:36 +11:00
Shannon 394cab5ab4 Updates the owin startup classes - we now have a default one shipped as a DLL which will always execute based on the appSettings, then we can ship with 2 optional ones that people can learn and use from which just requires them to update the appSetting. Now to decide on how to ship these .cs files 2015-04-01 13:42:34 +11:00
Shannon 6efd14eff3 Updates the startup auth code extension methods to better support extensibility so people could override the default user store or manager in order to implement some interfaces that we currently don't. 2015-04-01 13:42:31 +11:00
Shannon e468492064 Updates back office ext methods to include the CallbackPath which is key to make multi-tenanted work and ensures that the back office providers are linked with the umbraco back office external cookie provider. Adds some docs about it too. Updates the web.config templates to ensure the correct assembly redirects. 2015-04-01 13:42:29 +11:00
Shannon 140d3c0268 Update to latest Identity. Moves startup code to App_Start like VS templates have, this will be better for our nuget packages (like i do in UmbracoIdentity which works for both web apps and websites). Updates web.config to explicitly declare the owin startup otherwise we'll end up with conflicts (YSODs) and now people can configure it properly. 2015-04-01 13:42:26 +11:00
Shannon 349cb91e3a updates expires logic 2015-04-01 13:42:24 +11:00
Shannon abf70cd302 filters external login providers in the back office to only show the ones configured for umbraco back office 2015-04-01 13:42:21 +11:00
Shannon 880c9cf679 Updates back office extensions to use AuthenticationDescriptionOptionsExtension to configure the options for umb back office 2015-04-01 13:42:19 +11:00
Shannon bf59510c68 Removes setting the default sign in auth type - this is a user setting, we cannot modify that. 2015-04-01 13:42:16 +11:00
Shannon b67250c3d5 Updates back office auth extension methods to be explicit with specifying that it's for back office because we need to explicitly tell each provider the SignInAsAuthenticationType so that it uses the back office auth provider and not a user's own front-end one. 2015-04-01 13:42:14 +11:00
Shannon 86833aa8bf Updates the back office external cookie name to be consistently cased with the other back office cookie names 2015-04-01 13:42:11 +11:00
Shannon 4dcc4807ed Implements IUserSecurityStore and ensures there is a security stamp token in place, have updated the repository layer to manual update this if ASPNet Identity APIs are not used to update users. 2015-04-01 13:42:09 +11:00
Shannon 90b562a0a1 Update the PostLogin method to write the auth ticket the way that webapi is supposed to, not sure how this was actually working before because writing cookies directly with HttpContext and then also using WebApi normally doesn't work (maybe in very specific circumstances), so now the cookie writing is done consistently and it is working, prior to this i was getting lots of issues with the xsrf tokens. Updated some user model mappings for convenience and update naming conventions for some properties of the BackOfficeIdentityUser for consistency. 2015-04-01 13:42:07 +11:00
Shannon fc2b3d7fc7 fixes merge issues 2015-04-01 13:42:04 +11:00
Shannon 4d50dcea61 adds the auth extensions and removes all 3rd party packages 2015-04-01 13:42:02 +11:00
Shannon 1f9594eef4 updates notes in OwinStartup 2015-04-01 13:41:59 +11:00
Shannon 5a88ff774c adds overload to specify custom backoffice user store for custom implementations (i.e. 2 factor auth, etc...) 2015-04-01 13:41:57 +11:00
Shannon b269760b21 removes the BackOfficeRoleManager since we don't use roles in the back office (sections i suppose) and we can't dynamically just create them, that doesn't make sense. 2015-04-01 13:41:55 +11:00
Shannon 3efd038906 implements IUserRoleStore for sections for users 2015-04-01 13:41:52 +11:00
Shannon 2d72a66879 Updates OwinStartup and split the methods into an extension methods file complete with documentation on how to implement the providers. Tested the microsoft provider. Now to clean things up: remove the 3rd party package installs to be ready for shipping, ensure that the user parts are extensible enough for people to plugin their own interfaces. 2015-04-01 13:41:50 +11:00
Shannon 7dc50fda26 moves NaiveSessionCache to web proj 2015-04-01 13:41:48 +11:00
Shannon ff602da0fa Updates owin packages and updates the web.config tempate for owin redirects 2015-04-01 13:41:45 +11:00
Shannon 4b156ba27e Starts stubbing out role manager code 2015-04-01 13:41:43 +11:00
Shannon d9cf9cee88 Includes nice social buttons, updates styling on login and user panel, updates logic to un-link accounts 2015-04-01 13:41:40 +11:00
Shannon afa4c7b697 open id connect is working with azure ad 2015-04-01 13:41:38 +11:00
Shannon a2a8c8fbd7 updated to latest owin 2015-04-01 13:41:36 +11:00
Shannon 52c4d80cfc more identity awesome 2015-04-01 13:41:33 +11:00
Shannon 5d4d209030 Gets external cookies working with a custom auth type (so we don't interfere with the 'default') 2015-04-01 13:41:31 +11:00
Shannon d9f453d860 Gets the user store up to date with the correct queries. 2015-04-01 13:41:28 +11:00
Shannon 8c51e8bad8 Implements IExternalLoginService and the db table, implements more logic to start enabling this to work in the back office, need to implement the rest of the userstore and then implement a way once logged in to the back office to allow users to link their accounts with external logins. Currently if an external login is detected during startup and it has not been linked we'll throw an exception. Very very close to making this all work nicely. 2015-04-01 13:41:26 +11:00
Shannon d4b21243ca Allows external logins to be listed on login page, updates BackOfficeController with actions for invoking them. 2015-04-01 13:41:24 +11:00
Shannon 927add6f44 Updates UmbracoBackOfficeIdentity to add claims and adds a new ctor so people can create an identity manually - this is really the key, by doing this we'd already be able to have 3rd party authentication happening. Ensures our custom secure data format persists the user data 2015-04-01 13:41:21 +11:00
Shannon 48317d7e61 massively simplifies the cookie handling, we don't use our own and just use the defaults, the trick to not validating everything is to use the cookie path. This does mean that each clientside request will also be validated but there's no way to override this behavior in identity currently, the cookie handler is internal so unless we copy/paste all of it's code can't do much about that. 2015-04-01 13:41:18 +11:00
Shannon 93df2edec2 Initial install which now uses Identity middleware to perform the back office auth (no longer done in our module). Created custom data secure classes that use the legacy Forms auth logic for backwards compat. This means that the cookie can still be written the old way and still auth the new way if required. Now need to clean a lot of this up. 2015-04-01 13:41:16 +11:00
Shannon 028ddfe290 Starts adding asp.net identity 2015-04-01 13:41:13 +11:00
Shannon 051e9366e5 updates js undefined check 2015-04-01 13:39:54 +11:00
Shannon Deminick 46c6503320 Merge pull request #665 from magnuskragelund/dev-v7-U4-6469-mntp-referencing-deleted-nodes
fixes bug when trying to render a deleted node in multinode tree picker
2015-04-01 13:36:18 +11:00
Shannon 39a4f141d7 Merge branch 'dev-v7' into 7.3.0 2015-04-01 12:57:08 +11:00
Shannon 1cf2fc7870 updates sln docs and removes pdf test bits 2015-04-01 11:22:10 +11:00
Shannon c350904219 removes umb examine pdf test files 2015-03-31 17:07:35 +11:00
Shannon 3d09157091 fixes build 2015-03-31 17:06:13 +11:00
Shannon 040486c32b Merge branch 'dev-v7' into 7.3.0 2015-03-31 17:04:52 +11:00
Shannon cf1c38dcaa fixes build 2015-03-31 17:04:32 +11:00
Shannon 3b6d557dd4 Merge branch 'dev-v7' into 7.3.0 2015-03-31 14:28:20 +11:00
Shannon 73d7cd4856 updates sln file to remove the PDF proj and removes the sln folder containing umbraco examine libs 2015-03-31 14:27:18 +11:00
Shannon 74f4b60a21 Merge branch 'dev-v7' into 7.3.0 2015-03-31 14:04:49 +11:00
Shannon 1b87fd074c Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-03-31 13:49:39 +11:00
Shannon 33f21e0528 Updates build and solution to exclude UmbracoExamine.PDF, removes files for UmbracoExamine.PDF, updates links to license in nuspec files 2015-03-31 13:49:28 +11:00
Sebastiaan Janssen 0b5a2452c2 U4-6476 Examine Issue: The CancellationTokenSource has been disposed.
#U4-6476 Fixed Due in version 7.2.5
2015-03-30 14:38:59 +02:00
Shannon cc8962f090 Removes the old umbracoexamine.azure libs 2015-03-30 20:07:26 +11:00
Shannon f6b9fdba72 Removes old docs folder 2015-03-30 20:06:51 +11:00
Shannon e0effec3b4 fixes pdf build to only have it's required files in the zip 2015-03-30 19:13:13 +11:00
Shannon 76a2f433d9 simplifies build since we don't have the examine azure stuff 2015-03-30 18:42:47 +11:00
Shannon a2bfca4d3a Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-03-30 17:40:46 +11:00
Shannon fb24becd0d completes: U4-6468 Move all 'Strategies' in the Web project that performs Core data operations to the Core project 2015-03-30 17:40:36 +11:00
Shannon 58857c5d83 Moves publishing strategies into CacheRefresherEventHandler where the event handlers are supposed to exist. 2015-03-30 17:36:54 +11:00
Shannon 7a31d6cae3 better exception logging for examine 2015-03-30 17:23:28 +11:00
Shannon Deminick 021bb6d367 Merge pull request #661 from kgiszewski/dev-v7
Fix for U4-6462
2015-03-30 16:27:19 +11:00
Shannon Deminick 0742108ec1 Merge pull request #662 from AndyButland/u4-6412
U4-6412 - Ensures footer breadcrumb in content and media returned in correct order
2015-03-30 10:44:08 +11:00
Magnus Kragelund 1c3a7b95fc fixes bug when trying to render a deleted node in multinode tree picker 2015-03-27 11:02:35 +01:00
Shannon 5464107a9a replaces all LogHelper calls with to use ILogger in XmlCacheFilePersister 2015-03-27 15:21:12 +11:00
Shannon 84345a7e37 Merge branch 'dev-v7' into 7.3.0 2015-03-27 15:19:45 +11:00
Shannon fda72b2acc changes the MaxWaitMilliseconds tp 30000 to be consistent with the 7.3 branch 2015-03-27 15:19:31 +11:00
Shannon cd3191012f Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlCacheFilePersister.cs
	src/Umbraco.Web/Scheduling/LogScrubber.cs
	src/Umbraco.Web/Umbraco.Web.csproj
	src/Umbraco.Web/umbraco.presentation/content.cs
2015-03-27 15:15:49 +11:00
Shannon ec742d1f66 removes the usages of ILogger and ProfilerLogger since this is not for 7.3.0, will need to re-fix for 7.3 branch. 2015-03-27 14:56:12 +11:00
Shannon 4bdac1475f fixes log scrub interval with ms with updated background tasks 2015-03-27 14:52:38 +11:00
Stephan 58ce04e26b cleanup 2015-03-27 14:49:31 +11:00
Shannon 4c3de920c6 Removes the 'else' so that 'wait' is always checked. 2015-03-27 14:49:31 +11:00
Stephan be37026587 refactor latched background tasks, now use a task for xml
Conflicts:
	src/Umbraco.Web.UI/config/ClientDependency.config
2015-03-27 14:49:25 +11:00
Stephan a73b7a5849 refactor Scheduler to use new BackgroundTaskRunner capabilities
Conflicts:
	src/Umbraco.Web/Scheduling/Scheduler.cs
2015-03-27 14:48:47 +11:00
Stephan b7436dc55f refactor BackgroundTaskRunner 2015-03-27 14:47:42 +11:00
Shannon bc068b201d Updates BackgroundTaskRunner to ensure canceled or skipped tasks are disposed, updated tests to reflect 2015-03-27 14:47:42 +11:00
Shannon 912b01c9aa Updates BackgroundTaskRunner to support more complex options including the ability to only execute the last/final task in the queue. Added tests to support, updated the 'content' object to use this option so that only the last task in the queue will execute so that file persisting doesn't get queued but the correctly queued data will be written. 2015-03-27 14:47:42 +11:00
Shannon a82035061c Updates BackgroundTaskRunner to support async operations. Updates the content xml cache file persisting to use a IBackgroundTask instead of the strange queuing for persistence - which was super strange because in many cases another request thread will actually be the thread that is persisting the xml file than the request thread that requested it created. This implementation is far better, the xml file will be persisted on a non request thread and will handle multiple documents being published at the same time guaranteeing that the latest published version is the one persisted. The file persistence is also web aware (due to how BackgroundTaskRunner works) so during app shutdown the file will still be written if it's currently being processed. 2015-03-27 14:47:41 +11:00
Shannon ef9cc2da3a removes WebServerUtility since that original code was only for azure website dist cache when using web services and server registrars (POC) so we also don't need the extra nuget ref either. 2015-03-27 12:58:04 +11:00
Shannon 12fd5c642d Fixes a copy local and specific version ref for a webapi assembly 2015-03-27 12:47:48 +11:00
Shannon a9b71f8533 adds docs 2015-03-27 12:37:03 +11:00
Shannon c73749ea54 Removes ctor's accepting delegates and instead makes them abstract methods, adds some docs 2015-03-27 10:25:25 +11:00
Shannon e001ed93c1 Updates BatchedDatabaseServerMessenger to have an abstract GetBatch method instead of having a delegate in the ctor 2015-03-27 10:16:49 +11:00
AndyButland 0c107fd869 Ensures footer breadcrumb in content and media returned in correct order 2015-03-25 21:52:39 +01:00
kgiszewski 6419f301f7 Fix for U4-6462 2015-03-25 16:30:47 -04:00
Sebastiaan Janssen e775471013 Set disableFindContentByIdPath=false for local debugging of Umb source (the release config was already correct) 2015-03-25 17:08:53 +01:00
Shannon Deminick cc109d1ed0 Merge pull request #660 from perosb/U4-6444
Fix for U4-6444
2015-03-25 09:16:49 +11:00
Sebastiaan Janssen 9dfccd86fd U4-2499 Remove the possibility for accessing pages with nodeid's or give a redirect option
#U4-2499 Fixed Due in version 7.2.5
2015-03-24 20:09:48 +01:00
Per Osbeck ffaf1f96b9 Fix for U4-6444 2015-03-24 09:28:53 +01:00
Shannon 4e195543ea fixes null ref with component renderer in UmbracoHelper 2015-03-24 15:12:58 +11:00
Shannon 2c918a2015 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2015-03-24 15:10:45 +11:00
Shannon Deminick aa3c1d645b Merge pull request #659 from robertjf/dev-v7
Issue#U4-6448 typo fix in pageIndex Mandate checks
2015-03-24 12:45:35 +11:00
Robert Foster c6b393f2e8 typo fix in pageIndex Mandate checks 2015-03-24 12:30:28 +11:00
Shannon Deminick 344d909e6b Merge pull request #657 from webprofijt/packageinstaller-spelling
Fix some spelling mistakes in package installer
2015-03-23 09:45:56 +11:00
Arnoud de Vries e3925f18ef Fix some spelling mistakes in package installer 2015-03-22 16:29:53 +01:00
Sebastiaan Janssen 53a4d063e0 U4-464 The embedded passwordStrength.js file is GPL-licensed
#U4-464 Fixed Due in version 7.2.5
2015-03-22 13:13:51 +01:00
Sebastiaan Janssen 907e5e7ca4 Bump version 2015-03-20 11:25:59 +01:00
Sebastiaan Janssen 94e281e951 Merge branch '7.2.4' into dev-v7 2015-03-20 11:23:30 +01:00
Sebastiaan Janssen c867f609f1 Merge branch '7.2.4' into master-v7 2015-03-20 11:05:00 +01:00
Sebastiaan Janssen 03b60d4923 "It's simple until you make it complicated"
- So now this logic has been un-complicated: look for the web.config file, if it exists and has a umbracoConfigurationStatus appSetting then don't overwrite the web.config, the user is upgrading umbraco and config transforms can do their thing. Otherwise, copy in a fresh web.config with all the required Umbraco bits.
2015-03-20 10:35:41 +01:00
Shannon 27e96d6d5b Fixes: U4-6436 Localization in the back office doesn't work immediately after app restart 2015-03-20 10:35:34 +01:00
Shannon d2b4345773 Fixes: U4-6433 Usercontrol loaded after package installation not executing 2015-03-20 10:35:23 +01:00
Sebastiaan Janssen c5bbf97921 Bump version 2015-03-20 10:35:14 +01:00
Sebastiaan Janssen 8c4eba7837 "It's simple until you make it complicated"
- So now this logic has been un-complicated: look for the web.config file, if it exists and has a umbracoConfigurationStatus appSetting then don't overwrite the web.config, the user is upgrading umbraco and config transforms can do their thing. Otherwise, copy in a fresh web.config with all the required Umbraco bits.
2015-03-20 10:16:53 +01:00
Shannon 08a2ec6883 Fixes: U4-6436 Localization in the back office doesn't work immediately after app restart 2015-03-20 18:15:31 +11:00
Shannon b02e0c0232 Fixes: U4-6433 Usercontrol loaded after package installation not executing 2015-03-20 17:47:33 +11:00
Shannon 182d671e31 Merge branch 'dev-v7' into 7.3.0 2015-03-20 16:42:34 +11:00
Shannon fff0151b62 Updates build process to: Ensure the AssemblyFileVersion is set to the real umbraco version, AssemblyInformationalVersion is set to the real umbraco version including the pre-release name if there is one, AssemblyCopyright has the correct year. 2015-03-20 09:31:14 +11:00
Shannon f15301a7a0 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2015-03-20 08:26:16 +11:00
Sebastiaan Janssen 69879dc8f8 Merge branch 'dev-v7' into master-v7 2015-03-19 15:10:59 +01:00
Sebastiaan Janssen 90fdbb007e Bump version 2015-03-19 14:45:00 +01:00
Per Ploug 19e4fe5059 Grid labels header colors for delete and move actions 2015-03-19 14:33:12 +01:00
Sebastiaan Janssen 311d503d8b Updates CDF dependency to latest version 2015-03-19 12:54:00 +01:00
Per Ploug f0fc3313e4 Tweaked borders a tiny bit 2015-03-19 12:46:29 +01:00
Per Ploug dc7cb08824 Styling for grid editors + row labels 2015-03-19 12:29:05 +01:00
Stephan 3b2ae6bc4a Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Web/Models/ContentExtensions.cs
2015-03-19 09:39:31 +01:00
Stephan 5ddcf42bc3 U4-3753 - keep some things internal 2015-03-19 09:37:39 +01:00
Stephan b714cbbd72 U4-6320 - fix log scrubbing intervals (from dev-v7) 2015-03-19 09:30:16 +01:00
Shannon 09afb93ec3 fixes test 2015-03-19 18:04:26 +11:00
Shannon ab4cb08c7d removed notes after checking 2015-03-19 17:48:40 +11:00
Shannon 2e877aa446 fixes build errors 2015-03-19 17:42:57 +11:00
Shannon d3eff734aa Merge branch 'dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Core/CoreBootManager.cs
	src/Umbraco.Core/Models/Template.cs
	src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs
	src/Umbraco.Core/PropertyEditors/ParameterEditorResolver.cs
	src/Umbraco.Core/PropertyEditors/PropertyEditorResolver.cs
	src/Umbraco.Core/Services/LocalizedTextService.cs
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Tests/Plugins/TypeFinderTests.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web/Editors/BackOfficeController.cs
	src/Umbraco.Web/Models/ContentExtensions.cs
	src/Umbraco.Web/PublishedContentExtensions.cs
	src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs
	src/Umbraco.Web/Scheduling/Scheduler.cs
	src/Umbraco.Web/Umbraco.Web.csproj
2015-03-19 17:37:00 +11:00
Shannon af112f6b20 Adds nicer grid editor labels on hover 2015-03-19 17:08:14 +11:00
Shannon cbef51eaf0 Fixes: U4-6294 Feature Request 7.2.1 Grid - UX - labeling the grid editors - but will see if we can do a better job of the labeling 2015-03-19 16:10:46 +11:00
Shannon 85ba41dd06 Fixes: U4-5435 Dropdown list multiple, publish keys - single item 2015-03-19 15:50:58 +11:00
Shannon e5cf7b089c oops, added timeouts where they cannot exist for request cache, fixes build 2015-03-19 14:47:08 +11:00
Shannon 5fae61b196 Merge branch 'mattbrailsford-7.2.1-configurablemacrogrideditor' into dev-v7 2015-03-19 14:34:00 +11:00
Shannon db5c204d8c Merge branch '7.2.1-configurablemacrogrideditor' of https://github.com/mattbrailsford/Umbraco-CMS into mattbrailsford-7.2.1-configurablemacrogrideditor 2015-03-19 14:33:36 +11:00
Shannon b9082cf390 Fixes our usages of GetCacheItem so that there is a timeout, this is needed otherwise memory won't be given back unless memory gets too high where in fact for most of these we want to give it back as soon as possible if it isn't being used. 2015-03-19 14:00:48 +11:00
Shannon 9469b0b844 Fixes: U4-6402 Grid config file should be merged with package.manifests & U4-6427 Grid config file has caching problems because it's downloaded as a static file
This also fixes up the OutputCaching params on the BackOfficeController since OutputCache is bypassed when an action requires authentication, so now we manually do some caching when not in debug mode for authorized actions (of course auth happens before any cached response can occur). This also fixes up the static caching that was happening with the ManifestBuilder so now when that is not in use it gives back it's memory. This also fixes up any client side caching that was happening on BackOfficeController - before we were allowing client cache to happen for a few actions on that controller which is incorrect, we need to disable all client cache for all actions on that controller.
2015-03-19 13:53:15 +11:00
Shannon 5737cdfbe2 Fixes the way HttpResponseMessages are created - they should always be created with Request.CreateReponse! 2015-03-19 12:03:55 +11:00
Shannon 1a082464e9 Fixes: U4-5127 AssetService does not support virtual paths (~/) - and fixes up some formatting 2015-03-19 11:44:37 +11:00
Shannon e004ad31b5 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7
Conflicts:
	src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.controller.js
2015-03-19 11:36:05 +11:00
Shannon 6cf25f0043 Fixes: U4-6428 Grid configuration does not support virtual paths - and therefore is not compatible with virtual directories 2015-03-19 11:35:04 +11:00
Shannon Deminick c0f50a4c1b Merge pull request #656 from ProfessorFarnsworth/U4-6419
fixed issue U4-6419 by removing that character
2015-03-19 10:05:25 +11:00
Sebastiaan Janssen 00fbc6dfcb Revert "Fixes broken bower jquery reference"
This reverts commit c2cfd26ee6.
2015-03-18 13:05:21 +01:00
Per Ploug 3a9ad91f8f Adds better error handling to missing grid editors 2015-03-18 11:45:22 +01:00
Per Ploug c2cfd26ee6 Fixes broken bower jquery reference 2015-03-18 11:45:04 +01:00
Per Ploug c5f26c7c15 Fixes: U4-6331 The grid tools overlay disable the links/buttons on smaller screens 2015-03-18 11:44:49 +01:00
Helmuth Bederna f742c0a958 fixed issue U4-6419 by removing that character 2015-03-18 10:41:15 +01:00
Shannon Deminick 8cefe22bee Merge pull request #649 from protherj/grid-rendering-quote-fix
Changed the surrounding quotes for Grid custom settings/styles to be double quotes
2015-03-18 19:55:32 +11:00
Shannon fad3599f50 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-03-18 19:52:56 +11:00
Shannon 37b219f6e1 Fixes: U4-4942 Widget disappears in RTE when there is a space in the macro alias 2015-03-18 19:52:45 +11:00
Sebastiaan Janssen 4e9667a067 Don't forcibly remove System.Web.Helpers.dll during upgrades in case people have it already and packages rely on it 2015-03-18 09:49:18 +01:00
Shannon Deminick 300a46f1b2 Merge pull request #613 from gildebrand/patch-4
parseMacroSyntax accepts other characters than a-z
2015-03-18 19:17:33 +11:00
Shannon 9aa5df43bf Fixes: U4-5956 Feature request: Enhance the preview mode with labels clearly explaining the current view 2015-03-18 19:14:47 +11:00
Shannon 02b0e4dd6a Fixes: U4-6380 ClientDependency Bug on server - Can't Access Backoffice 2015-03-18 19:06:41 +11:00
Shannon 9c1d3fabb8 Fixes: U4-6418 Loading back office with ClientDependency does not respect the configured value for the compositeFileHandlerPath 2015-03-18 19:04:49 +11:00
Shannon e9e84a7faa Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-03-18 19:03:57 +11:00
Shannon 137d8553de Fixes: U4-6417 When including a $schema element in package.manifest with a url schema, the regex will incorrectly strip required characters 2015-03-18 19:03:46 +11:00
Sebastiaan Janssen 7210c6cd95 U4-6384 Incorrect Error Message When Uploading Large File
#U4-6384 Fixed Due in version 7.2.3
2015-03-17 17:59:24 +01:00
Stephan 6856f9f341 Merge pull request #654 from umbraco/U4-274-disable-alttemplate
U4-274 - Adds config option to disable alternative templates
2015-03-17 14:32:08 +01:00
Sebastiaan Janssen d24ef3650e U4-274 - Adds config option to disable alternative templates 2015-03-17 13:50:33 +01:00
Shannon 2feef247ed Fixes: U4-3562 Cannot preview when no template is assigned 2015-03-17 19:31:46 +11:00
Stephan 4974e2a2ce U4-6306 - hostname validation issue 2015-03-16 10:52:54 +01:00
Stephan 3eb0dac48a U4-3753 - fix the build 2015-03-16 09:28:24 +01:00
Stephan a44b19da18 U4-6320 - fix default scrubbing interval, set to 4hrs 2015-03-16 09:16:28 +01:00
Shannon Deminick 3ee4234968 Merge pull request #653 from kgiszewski/dev-v7
Fix for U4-6395, U4-6117
2015-03-16 09:50:52 +11:00
kgiszewski f06a468fb4 Fix for U4-6395, U4-6117 2015-03-13 11:40:04 -04:00
Stephan 420c334af4 U4-3753 - refactor
Conflicts:
	src/Umbraco.Web/Umbraco.Web.csproj
2015-03-12 15:03:46 +01:00
Stephan 20b21c86ea U4-3753 - add a way to get the rendering culture of a content 2015-03-12 15:02:18 +01:00
Stephan b52f234c02 U4-3753 - refactor 2015-03-12 15:01:25 +01:00
Shannon d2083673be Fixes: U4-3420 Firefox v25.0 - Right click context menu doesn't work - this felt like being a web dev 10 years ago when you had to code totally differently for each browser. Firefox unfortunatley treats 'a' tags differently than anything else and combined with angular saying you can have empty 'href' tags doesn't work. In the end, the fix was easy, just remove the empty (supposed to be supported) href attributes from the 'a' tags in the tree, then the contextmenu starts working in firefox and the events can be canceled as per normal. This commit also moves the angular localization library to use bower. 2015-03-10 13:02:34 +11:00
hartvig f663a13391 Updates installer with a new number of tattoos
Kudos to Mike Perry for being #3: https://twitter.com/nvmy13t/status/574733012904099840
2015-03-09 08:52:21 +01:00
Shannon fe40b8fe99 ok, fixes the null check for real this time. 2015-03-09 17:53:58 +11:00
Shannon dd477a0cbe whoops, fixes comparison on lazy val 2015-03-09 17:37:25 +11:00
Shannon 2834ccdc2b Fixes: U4-6344 TinyMCE RTE style_formats configuration changes 2015-03-09 17:31:29 +11:00
Shannon b3f6f48834 fixes ugly null check on ContentTypeSort comparison 2015-03-09 16:42:30 +11:00
Shannon 4544520b66 Fixes: U4-6303 SaveAndPublishWithStatus error - updates to latest Examine with the fix. 2015-03-09 15:06:32 +11:00
Stephan 5baaed19d0 Fix tests 2015-03-06 14:24:08 +01:00
Stephan 183e7e5910 Merge branch '7.3.0' into dev-v7-distcache 2015-03-06 14:06:52 +01:00
Stephan 173392f26e Fix environment issues with tests 2015-03-06 14:06:32 +01:00
Shannon 017663833a Missing a fairly critical log entry 2015-03-06 16:54:55 +11:00
Shannon 9a5923771d fixes changing the underscore of a user language to culture. 2015-03-06 16:05:37 +11:00
Shannon 0932c980e9 Fixes: U4-6307 Incorrect culture assigned to user (missing region code) 2015-03-06 16:01:49 +11:00
Shannon 7e9261d4bc Updates member indexer to consume less memory on rebuild, iterates over collection already in memory and just adds nodes as the are iterated, before was re-adding to memory in order to do counts, now we iteratively count. 2015-03-06 13:36:52 +11:00
Shannon 0ce503b369 Fixes: U4-6349 Optimizing indexes says that the index is not optimized 2015-03-06 13:34:09 +11:00
Stephan be26527b27 Merge branch '7.3.0' into dev-v7-distcache 2015-03-05 19:57:56 +01:00
Stephan 414374498f Edit tests so they pass (ah well...) 2015-03-05 19:49:36 +01:00
Stephan 1443618857 Merge branch '7.3.0' into dev-v7-distcache 2015-03-05 12:29:38 +01:00
Stephan a7075422dc Fix build 2015-03-05 12:29:04 +01:00
Stephan 9213304161 Bugfix distributed cache 2015-03-05 10:49:22 +01:00
Stephan 46fdd605ae Refactor distributed cache & merge Shazwazza's DataBaseServerMessenger 2015-03-05 10:49:21 +01:00
Stephan 99598ec060 U4-3753 - add a way to get the rendering culture of a content 2015-03-05 10:47:02 +01:00
Shannon Deminick 6d5d8fb39c Merge pull request #647 from hAmpzter/U4-6304
U4-6304 ContentTypeBaseRepository.MapContentTypes throws exception with ...
2015-03-05 17:49:48 +11:00
Shannon Deminick 9613772036 Merge pull request #648 from Jeavon/U4-6336
Fixes U4-6336 GetCropUrl - preferFocalPoint is ignored if focal point is...
2015-03-05 17:22:23 +11:00
Shannon Deminick 604779667d Merge pull request #650 from mikkelhm/dev-v7
U4-4080 Missing icons in context menu
2015-03-05 17:18:47 +11:00
Shannon 46212904ef Changes the SetPropertyValueAndDetectChanges to throw an exception if an Enumerable is passed in without using the overload the specifies an IEqualityComparer. Updates all entities that use this method with IEnumerables to specify the correct Equality comparer which now uses the new UnsortedSequenceEqual method. Added unit tests for new EnumerableExtensions and makes the ContainsAll work faster. 2015-03-05 17:08:58 +11:00
Shannon b7bb98d824 fixes localized text request when an invalid cookie is present 2015-03-05 17:04:02 +11:00
Shannon f31d2ca7cf Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-03-05 16:44:34 +11:00
Shannon 88ae95150e Fixes: U4-6342 UmbracoEnsuredPage doesn't work in 7.2.2 2015-03-05 16:36:06 +11:00
Sebastiaan Janssen 97a085d12b Bump version 2015-03-03 20:19:41 +01:00
Sebastiaan Janssen 74d0ec949d Delete bower_components folder before build else missing packages will sometimes not be downloaded 2015-03-03 19:43:19 +01:00
Shannon 9a042fbbdf Removes the assignment of the DefaultPermissions property since this is auto assigned in the ctor (and should be assignable) 2015-03-03 19:40:37 +11:00
Shannon 834b780d8e Removes change tracking for User.DefaultPermissions since it is entirely not necessary (and in fact shouldn't be settable). Also ensures that the cloning of the default permissions is a new list, wasn't doing this before... which might have been the culprit for strange thread issues. 2015-03-03 19:37:13 +11:00
Shannon 8905878a87 Adds some methods to TracksChangesEntityBase to enable/disable change tracking and to reset the change tracking dictionaries, this is then used for DeepCloning so that change tracking is turned off for the cloning process. 2015-03-03 18:33:04 +11:00
Shannon 36bed40db0 typo 2015-03-03 17:37:42 +11:00
Shannon f708a24401 fixes U4-6333, U4-6348 2015-03-03 17:36:53 +11:00
Shannon d32cf12c6f Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-03-02 17:02:35 +11:00
Shannon 100485f748 Fixes: U4-6005 Please add a public constructor to InstallApiController 2015-03-02 17:02:25 +11:00
Shannon 56017a340c makes PropertyEditorResolver faster by not having to re-union every time its accessed 2015-03-02 16:59:40 +11:00
Shannon 21c70462c9 publicizes cache extensions 2015-03-02 16:59:05 +11:00
Sebastiaan Janssen 9b254f8bf9 Previous commit added a IApplicationStartupHandler which broke the count in this unit test 2015-03-01 14:09:35 +01:00
Sebastiaan Janssen 6dd63e8a01 U4-6341 Relate document on copy doesn't create a relation record in umbracoRelations table
#U4-6341 Fixed Due in version 7.2.3
2015-03-01 13:52:02 +01:00
mikkelhm bac940d4ed U4-4080 Missing icons in context menu for relation types, update comments aswell 2015-02-28 22:19:17 +01:00
mikkelhm c1c090faab U4-4080 Missing icons in context menu for relation types 2015-02-28 22:16:07 +01:00
Jason Prothero 32bedfaa6a Changed the surrounding quotes for Grid custom settings/styles to be double quotes 2015-02-27 10:06:45 -08:00
Jeavon Leopold b003c027e5 Removed unused "using" references in cropper extension methods 2015-02-27 14:49:36 +00:00
Jeavon Leopold 0295aaba3b Added test for U4-6336 GetCropUrl - preferFocalPoint is ignored if focal point is in the center 2015-02-27 14:42:00 +00:00
Jeavon Leopold bb04f83a49 Fixes U4-6336 GetCropUrl - preferFocalPoint is ignored if focal point is in the center 2015-02-27 12:15:28 +00:00
hAmpzter 793ba42f9e U4-6304 ContentTypeBaseRepository.MapContentTypes throws exception with SByte / Bool type with Mysql.
Force it with Convert.ToBoolean()
2015-02-27 12:42:55 +01:00
Shannon ded1def8e2 Fixes: U4-6333 - but should fix this better (i.e. centralize the code to clean for xss in JS like we have in c#) 2015-02-27 16:50:33 +11:00
Shannon 5a2a3c3b1e removes duplicate attribute 2015-02-27 01:04:53 +01:00
Sebastiaan Janssen 6f2fa2ed4d Makes sure that the version comment gets cleared when there is no comment. 2015-02-26 12:38:03 +01:00
Shannon 0ae1453fb1 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/umbraco.cms/businesslogic/Dictionary.cs
2015-02-23 13:18:01 +01:00
Shannon 7dad078af4 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-02-20 09:43:28 +01:00
Shannon 9a89b6048a Merge branch '7.2.0_U4-5236' of https://github.com/bjarnef/Umbraco-CMS into bjarnef-7.2.0_U4-5236
Conflicts:
	src/Umbraco.Web.UI.Client/src/less/tree.less
2015-02-20 09:43:21 +01:00
Shannon Deminick 8c13b89c79 Merge pull request #637 from xumix/6.2.5
Fix dictionary key access
2015-02-20 09:36:20 +01:00
Shannon d54e09c40b fixes jjj - no idea what happened there 2015-02-20 09:12:30 +01:00
Shannon c0d6c511e4 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-02-19 14:55:08 +01:00
Shannon 2da3ec27db fixes punycode reference 2015-02-19 14:55:00 +01:00
Sebastiaan Janssen 5f10ed99aa Revert "U4-4565 Add margin to bottom bar"
This reverts commit c1cc8a3824.
2015-02-19 14:14:30 +01:00
Shannon Deminick 48fa60039b Merge pull request #641 from AussieInSeattle/U4-6288
U4-6288 Changes
2015-02-19 11:56:23 +01:00
Shannon 20ceceffe0 Fixes: U4-5932 Grid editor has JS errors 2015-02-19 11:43:08 +01:00
Shannon b73c7fbb16 Fixes: U4-6284 UmbracoCms.7.2.2-build.26 - missing feedback when file is too large 2015-02-19 11:34:43 +01:00
Shannon c96b866f1d Fixes bower config for jquery 2015-02-19 10:35:06 +01:00
Sebastiaan Janssen b724a185b7 Pushes the ascii art down one line as it looked a bit weird because the cursor is on the first line by default after installing 2015-02-19 09:37:56 +01:00
Sebastiaan Janssen f94d280e27 Removes unnecessary dummy files. Some directories are old and not needed, plus they all get created on app startup anyway. 2015-02-19 09:23:07 +01:00
Shannon f63e8d7aed Adds unit test to show how to configure a test to mock the CurrentPage of a SurfaceController with public APIs 2015-02-18 18:05:37 +01:00
Shannon 5342d819d9 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
2015-02-18 17:40:29 +01:00
Shannon b2399e97cc updates cdf refs 2015-02-18 17:39:33 +01:00
Shannon 5580523c08 Merge remote-tracking branch 'origin/dev-v6' into dev-v7
Conflicts:
	build/NuSpecs/UmbracoCms.Core.nuspec
	src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
	src/Umbraco.Core/Persistence/Repositories/MediaRepository.cs
	src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
	src/Umbraco.Web.UI/packages.config
	src/Umbraco.Web/Umbraco.Web.csproj
	src/Umbraco.Web/packages.config
	src/umbraco.cms/packages.config
	src/umbraco.cms/umbraco.cms.csproj
	src/umbraco.controls/packages.config
	src/umbraco.controls/umbraco.controls.csproj
	src/umbraco.editorControls/packages.config
	src/umbraco.editorControls/umbraco.editorControls.csproj
	src/umbraco.macroRenderings/packages.config
	src/umbraco.macroRenderings/umbraco.macroRenderings.csproj
2015-02-18 17:34:35 +01:00
Shannon 6670f7036b publicizes RouteDefinition 2015-02-18 17:30:44 +01:00
Shannon ca20fb799d publicizes RouteDefinition 2015-02-18 17:28:21 +01:00
Shannon c760a7c50d Merge branch 'dev-v7-7.3.0-UmbHelperInterfaces' of https://github.com/Shazwazza/Umbraco-CMS into Shazwazza-dev-v7-7.3.0-UmbHelperInterfaces
Conflicts:
	src/Umbraco.Web/Umbraco.Web.csproj
2015-02-18 17:14:55 +01:00
Shannon 2a3019f1b4 Fixes query that broke the list view 2015-02-18 17:12:46 +01:00
Stephan 896d7aa788 Bugfix IContent.HasPublishedVersion 2015-02-18 10:18:01 +01:00
Stephan b7eb81dc76 Bugfix IContentService.GetPublishedVersion 2015-02-18 10:17:46 +01:00
Shannon a59dd32dd1 Updates cdf refs 2015-02-18 09:15:07 +01:00
AussieInSeattle ee78e3815b U4-6288 Changes 2015-02-17 19:32:25 -08:00
Shannon 2acfd64706 Updates exif reader to an MIT licensed reader from https://code.google.com/p/exiflibrary 2015-02-17 16:47:29 +01:00
Stephan a72fae333a change XmlCacheFilePersister timeouts 2015-02-17 15:19:20 +01:00
Shannon 4eef90fe25 Merge remote-tracking branch 'origin/dev-v7-7.1.3-BetterXmlCacheFilePersisting' into 7.3.0 2015-02-17 15:15:29 +01:00
Shannon 428df7ae4a Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Web.UI/packages.config
	src/Umbraco.Web/Umbraco.Web.csproj
2015-02-17 15:11:10 +01:00
Stephan 1fd4995edc cleanup 2015-02-17 15:10:51 +01:00
Shannon 667a731164 Removes the 'else' so that 'wait' is always checked. 2015-02-17 15:05:42 +01:00
Shannon df3d8d3757 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-02-17 14:37:52 +01:00
Shannon a6f6a321f9 Fixes extension method finder and TypeHelper with Stephen's awesome code 2015-02-17 14:37:44 +01:00
Sebastiaan Janssen 03b0133b58 Merge branch 'Shazwazza-dev-v7-upgradablemvc5webapi2' into dev-v7 2015-02-17 10:46:58 +01:00
Sebastiaan Janssen 25cfceadc0 Merge branch 'dev-v7-upgradablemvc5webapi2' of https://github.com/Shazwazza/Umbraco-CMS into Shazwazza-dev-v7-upgradablemvc5webapi2
Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
2015-02-17 10:46:36 +01:00
bjarnef df5c5e78ff Headline was cuttet off in Firefox
In Firefox 35.0.1 the headline was cuttet off. The 1.4 line-height in
commit 824212f6c9 ensure the headline
isn't cuttet off. However line-height: normal act as fallback as 1em it
too little and cause the text might be cuttet off.
2015-02-16 20:58:40 +01:00
bjarnef 5579823b2d Remove padding-left from h1 in modal-left
Removed left-padding from h1 in umb-modal-left to align it with the
other text in the modal.
2015-02-16 00:11:41 +01:00
bjarnef 824212f6c9 Keep headline at same position
I made a small change to make sure the headline is in same position
regardless it is editable or readonly.
2015-02-15 22:20:34 +01:00
Vilen Tambovtsev 03969fd687 Fix dictionary key access
Looks like someone does not know how to use a dictionary
2015-02-13 12:21:16 +03:00
Sebastiaan Janssen 7788452fb7 U4-6219 Visual Studio 2013 Crashes When Opening umbraco.sln
#U4-6219 Fixed
2015-02-13 10:04:35 +01:00
Shannon c7778467e3 Updates to latest examine version which internally supports tokenized paths in config so we don't need to do this in the umbraco core. 2015-02-13 15:34:54 +11:00
Shannon 0600d5c463 backports some updates made in the dist load balancing branch that allows for examine path storage by machinename and appdomainappid 2015-02-13 14:50:16 +11:00
Shannon 15c36a63d3 Fixes: U4-6168 Custom Section is not showing correctly in 7.2 if custom tree is empty 2015-02-13 12:35:57 +11:00
Shannon bcba12abc8 Fixes: U4-6268 TreeController cannot exist in App_Code 2015-02-13 11:50:42 +11:00
Shannon Deminick c0dd32d1f9 Merge pull request #625 from bjarnef/dev-v7-U4-4418
U4-4418 - fix issue with tab sorting
2015-02-13 11:13:46 +11:00
Shannon 2411271ae0 removes cancel button from related links as it is not needed and doesn't actually cancel due to two way binding. 2015-02-13 11:11:43 +11:00
Shannon Deminick c87d0a6430 Merge pull request #634 from andycyberian/U4-4198
U4 4198
2015-02-13 11:06:48 +11:00
Shannon c0051ba8cd fixes jshint warnings 2015-02-13 10:38:53 +11:00
Shannon 2cf590d9c9 Merge branch '7.2.1' of https://github.com/markusdrake/Umbraco-CMS into dev-v7 2015-02-13 10:36:41 +11:00
Shannon Deminick 2729da2c08 Merge pull request #630 from SorenA/SorenA-patch-1-rteformatting
RTE composite block and class formatting
2015-02-13 10:05:06 +11:00
Shannon 9046319dc9 fixes grid are you sure button style 2015-02-13 09:45:25 +11:00
Shannon Deminick fa27a37207 Merge pull request #636 from robbaman/u4-6208
Auto hide the 'Are you sure you want to delete' message on columns of a grid
2015-02-13 09:34:02 +11:00
Shannon 80f81ce379 fixes: U4-6255 Add configurable option in base membership providers to toggle AllowManuallyChangingPassword 2015-02-12 15:58:11 +11:00
Shannon 3022293565 re-wires up the input file fields 2015-02-12 15:43:41 +11:00
Shannon 34889c147a Updates the media picker dialog to use the new directives, fixes: U4-6257 for it's drop zone, adds a drag over ui indicator, shows progress bar for uploading. 2015-02-12 15:25:49 +11:00
Shannon 7d17aef953 Streamlines image upload directives for more re-use, creates umbImageUpload directive which is a wrapper for the blueimp file-upload directive which allows us to have a directive that exposes an API (which the blue imp does not do), creates new upload progress directive so that can easily be re-used inside of any umbimageupload directive. 2015-02-12 14:40:15 +11:00
Shannon 8af8a6d411 Makes a new umbImageFolder directive which can be easily shared and is now used by the dashboard and the folder browser. 2015-02-12 11:59:19 +11:00
Robert Mulder dd736dce3a Hide the 'Are you sure you want to delete' message on columns of a grid when mouse-leaving them just like it does on the similar message on the row level. This way they messages work the same for both rows and columns. 2015-02-11 10:18:51 +01:00
Shannon cd4c738c04 Moves jquery and blueimp files to be included with bower, removes all unnecessary jquery files that are committed to the repo. Jquery and jquery ui versions remain the same, however the canvas designer was using a jquery ui version one patch version ahead so need to test that it works with the bower version, otherwise we'll have to re-include it. 2015-02-11 18:39:53 +11:00
Shannon ed383bdaeb Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-02-11 18:24:01 +11:00
Shannon 4874a71e72 fixes publish button so it saves properly without causing js errors 2015-02-11 18:23:49 +11:00
Sebastiaan Janssen 58b8aacff1 Fixes U4-6052 Umbraco 7.2.1 web app installed with Nuget fails at start with error :"Cannot create an MVC Area path without the umbracoPath specified"
#U4-6052 Fixed Due in version 7.2.2
2015-02-10 17:38:19 +01:00
Stephan 0c5acb7f32 Implement IContent.HasPublishedVersion
Conflicts:
	src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs
2015-02-10 15:39:12 +01:00
Sebastiaan Janssen d4d5a355e3 Update CDF dependency 2015-02-10 15:08:27 +01:00
Shannon 24ef0dd961 fixes small issue with the image layout when viewing media folder, in some cases when there are consecutive small images that when placed beside each other cannot fit the width, they'll end up individually on a row due to their small size, this fix allows for a leniency when fitting to the width so in these cases they'll get rendered together on the row even though they won't actually fit. 2015-02-10 17:31:31 +11:00
Shannon 0efb9b72e7 Adds small exif library to read meta data from jpg's so we can attempt to read width/height from exif instead of loading the file into mem with GDI, makes for much faster and far less memory processing.U4-6246 Uploading specific images causes GDI+ Errors 2015-02-10 16:33:59 +11:00
Shannon Deminick dd680b6fd1 Merge pull request #635 from NathalieLarsson/dev-v7
Changes to lang config, notifications area - Sv
2015-02-10 10:54:03 +11:00
Nathalie Larsson 788ed68b5b Changes to lang config, notifications area - Sv 2015-02-09 15:47:16 +01:00
Stephan 470ccd1ffc Merge branch 'dev-v7' into 7.3.0 2015-02-09 08:59:23 +01:00
Stephan e12984af4c refactor latched background tasks, now use a task for xml 2015-02-08 16:25:30 +01:00
Stephan 7a6a6409c4 refactor Scheduler to use new BackgroundTaskRunner capabilities 2015-02-06 18:10:19 +01:00
Stephan 7c0f8db31b refactor BackgroundTaskRunner 2015-02-06 16:10:34 +01:00
Shannon 89606d3a05 Goes brute force to try to resolve: U4-4049 Some images fail when uploading multiple media files 2015-02-06 11:19:52 +11:00
bjarnef 7091cb6012 Change code for help videos
Change code for in help.controller.js as it was.
2015-02-05 10:52:55 +01:00
Andy Rose 77319301c6 U4-4198, adding a specific save event to ensure that the related links title property is updated with its caption property 2015-02-05 09:19:47 +00:00
Andy Rose 227bd1cd7e Revert "U4-4198, adding a hidden field in the related links property editor to maintain the title property when editing. This will be mapped directly to the caption property value."
This reverts commit 68ac167ec3.
2015-02-05 09:18:48 +00:00
Sebastiaan Janssen 4790dc59a9 Update CDF dependency 2015-02-05 09:01:42 +01:00
bjarnef a721f6836f Pointer cursor for sections in IE10
IE10 displayed a text cursor for tray and help section. Added cursor:
pointer; to make sure a pointer cursor is displayed.
2015-02-05 03:31:41 +01:00
bjarnef 83840ba6dd U4-4507 - Make expand arrow in sections as a toggle
I have made some suggestions, so the right arrow act as a toggle button,
so you easily can collapse the extra overflow-sections. Furthermore I
have made some changes, so when you click userDialog or helpDialog other
open dialogs close and also sections. When you click a section or expand
it also close dialogs, so you don't have to close those dialogs first.
2015-02-04 21:55:19 +01:00
Stephan de53dbffd1 U4-6129 - fix order of EntityService.GetByIds items 2015-02-04 19:07:51 +01:00
Andy Rose 68ac167ec3 U4-4198, adding a hidden field in the related links property editor to maintain the title property when editing. This will be mapped directly to the caption property value. 2015-02-04 16:30:14 +00:00
Stephan c8087d1f68 Cleanup TypeHelper, add tests - IsAssignableFromGeneric may have issues? 2015-02-04 17:05:18 +01:00
Stephan f87ba4f0d5 Cleanup TypeHelper, add tests - IsAssignableFromGeneric may have issues? 2015-02-04 17:04:40 +01:00
Shannon fed5a14e1b Updates BackgroundTaskRunner to ensure canceled or skipped tasks are disposed, updated tests to reflect 2015-02-04 15:12:37 +11:00
Shannon b681ca5e17 Updates BackgroundTaskRunner to support more complex options including the ability to only execute the last/final task in the queue. Added tests to support, updated the 'content' object to use this option so that only the last task in the queue will execute so that file persisting doesn't get queued but the correctly queued data will be written. 2015-02-04 14:59:33 +11:00
Shannon cb853168c6 Merge branch 'dev-v7' into 7.3.0 2015-02-04 13:38:14 +11:00
Shannon c4c21b8b6e fixes: U4-6151 Datatype PreValues not updated in Datatype Saved Event 2015-02-04 13:35:22 +11:00
Shannon c3640f2a3d Merge branch 'dev-v7' into 7.3.0 2015-02-04 12:14:45 +11:00
Shannon a7c134a375 fixes last failing test 2015-02-04 12:11:10 +11:00
Shannon 9cdea752e8 Updates ExtensionMethodFinder to use new TypeFinder methods, all tests are passing now. Moved Stephen's MatchType methods to TypeHelper and moved those tests to TypeHelperTests. Now, need to compare notes with Stephen and add more tests to validate/invalidate the aproaches taken to see what might not be supported between either approaches and should probably look into benchmarks too. 2015-02-04 10:24:09 +11:00
Shannon de3c836ac1 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7
Conflicts:
	src/Umbraco.Core/Dynamics/ExtensionMethodFinder.cs
	src/Umbraco.Tests/DynamicsAndReflection/ExtensionMethodFinderTests.cs
2015-02-04 09:58:48 +11:00
Stephan 70b325a189 fix tests 2015-02-03 20:58:13 +01:00
Stephan 80b23f8fa7 fix PetaPocoExtensions merge 2015-02-03 20:58:05 +01:00
Stephan 6d08d9b7b0 Merge branch 'dev-v7' into 7.3.0 2015-02-03 20:08:46 +01:00
Stephan 2cdc89297f U4-6210 - fix failing tests, improve extension methods support on dynamics 2015-02-03 19:38:14 +01:00
Shannon 839a5b13b0 updates extension method finder with tests to better support finding generic equivialents, adds tests for TypeHelper as well. 2015-02-03 20:23:05 +11:00
Shannon 40cc4b90fc updates a test 2015-02-03 14:41:43 +11:00
Shannon ba54f96efd updates nuspec 2015-02-03 13:16:30 +11:00
Shannon f4a0bcfc96 updates nuspec 2015-02-03 13:15:15 +11:00
Stephan 6b0292db64 cache clearing by object type (fix) 2015-02-02 09:39:58 +01:00
Shannon Deminick b5696de71e Merge pull request #629 from AndyButland/u4-6183
U4 6183 - Only allow change document type to types that would allow the existing children to be created under them
2015-02-02 18:16:37 +11:00
Stephan a4d4cbd99f U4-6034 - issue when renaming tabs 2015-01-30 15:02:21 +01:00
Stephan 08a2c0d082 U4-6184 - pipeline falls back from example.com:666 to example.com 2015-01-30 14:44:47 +01:00
Stephan 1d80fc66af Merge branch 'dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
2015-01-30 14:03:01 +01:00
Stephan 010e4edc83 U4-6202 - cache clearing by object type 2015-01-30 10:51:50 +01:00
Shannon f037f8541c Fixes: U4-6210 ExtensionMethodFinder doesn't work with overloaded extensions - this means overloaded extension methods for dynamic content won't work. and finalizes: U4-6209 GetGridHtml needs to be an extension on HtmlHelper not IPublishedContent so that ViewData and ModelState are inherited 2015-01-30 19:04:39 +11:00
Shannon 10990e50e6 Fixes: U4-6209 GetGridHtml needs to be an extension on HtmlHelper not IPublishedContent so that ViewData and ModelState are inherited 2015-01-30 15:48:55 +11:00
Shannon 9dad4c9573 Fixes: U4-6111 GetGridHtml throws an exception if no grid value is available 2015-01-30 15:42:12 +11:00
Shannon 6318b85449 Fixes: U4-6208 Cannot cancel grid 'Are you sure' button when deleting a cell, U4-5942 Issue with placing cursor in right part of richtext editor in Grid 2015-01-30 15:17:13 +11:00
Shannon Deminick 9d313898d0 Merge pull request #624 from bjarnef/dev-v7-U4-5942
U4-5942 - change width of grid cell tools
2015-01-30 11:09:33 +11:00
Shannon 0380b04b03 fixes breadcrumb on content/media, ensures a request to load it doesn't happen if there is no parent, ensures that the full breadcrumb is shown and in the right order and ensures that the breadcrumb class is not added if there isn't one so the margins on the buttons work better. 2015-01-30 11:07:47 +11:00
Shannon f32e47a363 fixes exception when rendering macros in rte in back office. 2015-01-30 10:59:11 +11:00
Shannon Deminick 3ea7f8a226 Merge pull request #628 from sparkalyn/dev-v7
Fixes: U4-4565 Add margin to bottom bar
2015-01-30 10:37:12 +11:00
Shannon 2617016e3b Merge branch 'umbUkFest-U4-4400' of https://github.com/ja0b/Umbraco-CMS into dev-v7 2015-01-30 10:33:07 +11:00
Shannon 90b3bf59e0 Fixes: U4-2038 Violation of PRIMARY KEY constraint 'PK_cmsContentPreviewXml' YSOD occurs when publishing content
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
2015-01-30 10:32:46 +11:00
Shannon b7f2152535 fixes a test, adds a null check 2015-01-30 10:18:19 +11:00
Shannon aadae6334b Fixes: U4-2038 Violation of PRIMARY KEY constraint 'PK_cmsContentPreviewXml' YSOD occurs when publishing content
Conflicts:
	src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
	src/Umbraco.Core/Umbraco.Core.csproj
2015-01-30 10:13:04 +11:00
Shannon 5f0dc4a58e Fixes: U4-2038 Violation of PRIMARY KEY constraint 'PK_cmsContentPreviewXml' YSOD occurs when publishing content 2015-01-30 10:01:25 +11:00
Shannon 5667256d2c Merge branch 'dev-v7' into 7.3.0 2015-01-29 17:50:45 +11:00
Shannon 0f7b902bba Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-01-29 17:50:18 +11:00
Shannon b899ab6557 Fixes: U4-5834 Change password description text is confusing 2015-01-29 17:49:58 +11:00
Shannon c092d871c1 Fixes: U4-5834 Change password description text is confusing 2015-01-29 17:48:41 +11:00
Shannon e1e73f5e5f completes: U4-6174 Remove cmsPropertyType.helpText column 2015-01-29 17:21:44 +11:00
Shannon Deminick 7c3ff7d746 Fixes: U4-6165 Make Enum<T> public 2015-01-29 17:09:04 +11:00
Shannon 23a8777cde oops fixes a stupid thing that i changed 2015-01-29 17:07:07 +11:00
Shannon 0e2e47d4ee Fixes: U4-6202 Cache not clearing by object type properly 2015-01-29 16:40:52 +11:00
Shannon dc8a37b489 updates template repo cache options 2015-01-29 16:08:37 +11:00
Shannon 47ec2572f5 IMplements RepositoryCacheOptions to be able to have a more granular approach to how the base repository caches entities. Allows for a zero count caching as well which by default currently will be false since that's how it's inadvertently been until now, however have enabled a zero count cache for public access since this is queried very heavily on GetAll. Going to look at what other repositories do the same - Templates definitely does. 2015-01-29 15:39:41 +11:00
Shannon bff9dfedcc Updates BackgroundTaskRunner to support async operations. Updates the content xml cache file persisting to use a IBackgroundTask instead of the strange queuing for persistence - which was super strange because in many cases another request thread will actually be the thread that is persisting the xml file than the request thread that requested it created. This implementation is far better, the xml file will be persisted on a non request thread and will handle multiple documents being published at the same time guaranteeing that the latest published version is the one persisted. The file persistence is also web aware (due to how BackgroundTaskRunner works) so during app shutdown the file will still be written if it's currently being processed. 2015-01-29 12:45:44 +11:00
SorenA 332a95a27a Support for multiple RTE classes
Added support for multiple RTE classes, "p.someclass.otherclass" would give a paragraph element with the classes "someclass" and "otherclass".
2015-01-28 11:42:08 +01:00
SorenA 4482879fc6 Added RTE composite block and class formatting
Added "block.class" and "block#id" formatting to the Rich Text Editor.

Example use include following formats:
"p.lead"
"h1#title"

Without this only "p" or ".lead" will work, not composites.
2015-01-28 11:38:11 +01:00
Shannon 1b161c8dbe Removes more usages of legacy Access class to use new IPublicAccessService 2015-01-28 19:46:05 +11:00
Shannon 5a76e380de Adds some extension methods, updates the PCR to not use the legacy access class... this actually also reduces a db lookup, made it not depenent on singletons. 2015-01-28 19:27:08 +11:00
AndyButland 199bf0ff6e Minor code tidy of change content type 2015-01-28 09:22:33 +01:00
AndyButland 24915163ff Improved validation label for why a change of document type isn't available for a given node 2015-01-28 09:10:22 +01:00
Shannon 6a4966136d more testing, got the protect page dialog all working now and ensuring the data is going to the right places 2015-01-28 18:24:12 +11:00
Shannon 0a0e34d806 Ensures that the cache is updated properly with cache refreshers, ensures that the GetAll method for public access repo doesn't make any db calls and uses a non validating cache since it gets called a ton. 2015-01-28 16:15:34 +11:00
Shannon 214db84f9d fixes up column names and error checks during upgrade 2015-01-28 13:51:07 +11:00
Shannon 61fd3fc505 Implements IPublicAccessService and wraps legacy Access class to use the new service, updates the public access data to use int's since using GUIDs atm is a little too complex, that will need to wait. 2015-01-28 13:16:50 +11:00
AndyButland 1289d3255c Presentation improvements for confirmation page of change document type 2015-01-27 22:35:17 +01:00
AndyButland dc40b73fef When changing document type, added filter on populating list of available document types to include only those types that would permit the existing children to be created under them 2015-01-27 22:34:57 +01:00
Sunshine Lewis c1cc8a3824 U4-4565 Add margin to bottom bar 2015-01-27 09:57:51 -05:00
Shannon 70789e3676 Ensures that the public access xml migration is not run if there's already data in the db. 2015-01-27 20:34:30 +11:00
Shannon a7de549e4f Got xml public access structure being migrated to db now - need to do a check it hasn't already been migrated now. 2015-01-27 20:32:45 +11:00
Shannon efab275c99 Fixes: U4-6188 umbracoNode.uniqueId needs to be changed to not allow nulls, U4-6187 umbracoNode.uniqueID needs a Unique index - currently it is a non-unique index, Gets the public access repository built and started testing 2015-01-27 19:47:30 +11:00
Shannon f8600725b2 Fixes service context ctor to allow IMacroService 2015-01-27 14:58:59 +11:00
Shannon a5c1b0b2f2 Fixes tests, decouples the UrlSegmentProviderResolver a little bit 2015-01-27 14:52:24 +11:00
mattbrailsford 9c8e6ab864 Add "config" support to the macro grid property editor to allow predefining the macro to use 2015-01-26 12:35:01 +00:00
Shannon bd5833ec5f adds tests 2015-01-23 16:40:17 +11:00
Shannon 070fc368b2 Adds new public access db tables, removes refs to languagelocale col, fixes the migration script to create a table with a PK 2015-01-23 16:34:57 +11:00
Shannon 50ed207211 error check during stylesheet upgrade 2015-01-23 14:32:09 +11:00
Shannon 4ea0fa0a19 Fixes: U4-6163 Remove LanguageLocale column from cmsContentVersion 2015-01-23 12:34:51 +11:00
Shannon b5dd742257 fixes issue with task query 2015-01-23 12:19:09 +11:00
Shannon 0f4185b6a5 Gets legacy tasks apis wrapping new apis, added more tests and got the new tasks apis up to speed with all required methods. 2015-01-22 19:19:21 +11:00
Shannon ccea64f0fa fixes: U4-3170 Proxy legacy relations API through the new RelationService 2015-01-22 17:43:43 +11:00
Shannon b892f98834 Fixes up remaining routing tests, all tests passing (apart from arbitrary plugin mgr ones) 2015-01-22 15:42:29 +11:00
Shannon 2f86813a21 Migrating usages of old domain object to new IDomainService, this also involves updated quite a lot of unit tests. I've updated quite a few of the routing tests to be pure mocking tests which works much nicer than before so there's no db access, this also means they run a million times faster (need to clean them up further still though). Still more tests failing which need fixing. 2015-01-22 15:16:10 +11:00
Shannon 2cd92353ec Removes listening on legacy events for the CacheRefresherEventHandler 2015-01-22 12:17:36 +11:00
Shannon 42ad3af48b Updates legacy classes to be serialized with the EntityXmlSerializer 2015-01-22 11:48:13 +11:00
Shannon afb0aa8099 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0 2015-01-22 11:21:50 +11:00
Stephan 9695ccea0a Merge pull request #623 from zpqrtbnk/dev-v7-6154
U4-6154 - fix unpublishing a document with changes
2015-01-21 16:03:33 +01:00
Shannon e13e86b25f Gets the legacy domain stuff wrapping the new apis, updates the DomainHelper to use the new apis without any statics and thus updates everything else referencing that, updates the pcr engine to have the propery ctor params with all required services instead of using statics. 2015-01-21 19:49:22 +11:00
Shannon 6b9930df6a removed commented out code 2015-01-21 18:36:57 +11:00
Shannon ae92c8219d Gets legacy domain api wrapping new api, updates DomainService with required methods. 2015-01-21 18:35:08 +11:00
Shannon 512e59871e Fixed issues relating to domain repository and added more tests, starts creating DomainService 2015-01-21 17:43:03 +11:00
Shannon 7545c0c1da Adds the DomainRepository with tests 2015-01-21 17:03:56 +11:00
Shannon 3f8df66385 Merge branch 'dev-v7' into 7.3.0 2015-01-21 13:28:10 +11:00
Shannon bbcca7f3e5 fixes test 2015-01-21 13:26:09 +11:00
Shannon 44257e361a Fixes refs to Microsoft.Net.Http 2015-01-21 10:41:01 +11:00
Stephan 7b4a82eb8d U4-6154 - bugfix 2015-01-20 19:58:57 +01:00
bjarnef 8393465e8a Ensure first tablerow is header after save too
After the document type, media type or member type is saved, this will
ensure first tablerow is a tableheader, so sorting is limited to <tbody>
2015-01-20 02:10:20 +01:00
bjarnef 9ced66f208 U4-4418 - fix issue with tab sorting
Fixed issue with tab sorting, where you are able to drag the rows above
the table header. Ensured that <thead> / <th> is added, so the class
"ui-sortable" is added to <tbody> and only <tbody> will be the
drag-area.
I also added styling for delete button so it's more consistent with
other "delete"-buttons, e.g. for in settings for dropdown lists,
checkbox lists and radionbutton lists. Furthermore the delete-button is
moved inside the ItemTemplate, so the classes easily could be added to
the button and also make the button stay close to the fields.
2015-01-19 21:49:27 +01:00
bjarnef 633f56a7aa U4-5942 - change width of grid cell tools
Change width of grid cell tools, so it doesn't overlap the input
fields/texteditors.
2015-01-19 16:55:02 +01:00
Stephan 12d51b292c U4-6154 - fix unpublishing a document with changes
Conflicts:
	src/Umbraco.Core/Services/ContentService.cs
2015-01-19 14:03:58 +01:00
Shannon e94b6fa3a8 fixes tests 2015-01-19 19:10:26 +11:00
Shannon 3621c20f80 Adds Save method and another test 2015-01-19 19:03:28 +11:00
Shannon ef4d28299a few more tests for TaskRepository 2015-01-19 18:50:17 +11:00
Shannon d4b718d615 Creates common base class for services, this streamlines all ctors and exposes correct services. Gets the TaskRepository working with a test, now to get it fully implemented. 2015-01-19 18:37:48 +11:00
Shannon Deminick e85ef38218 Merge pull request #621 from AndyButland/u4-6135
Fixes U4-6135 (node name disappears in certain situations when tree is synched
2015-01-19 18:20:47 +11:00
AndyButland 4775b638a4 Reverted previous commit and changed anchor removal to target the correct tag (the elipsis) 2015-01-19 08:05:32 +01:00
Shannon 280826f3e8 Fixes: U4-6110 Cleanup the Audit trail code - this should be a service, remove all internal statics 2015-01-19 15:12:34 +11:00
Shannon 0a0d845173 Merge branch 'dev-v7' into 7.3.0 2015-01-19 13:26:30 +11:00
Shannon db3b8a1acd Merge remote-tracking branch 'origin/dev-v6' into dev-v7
Conflicts:
	src/Umbraco.Tests/TreesAndSections/ApplicationTreeTest.cs
2015-01-19 12:53:54 +11:00
Shannon a999fca349 finalizes stylesheet editor, all is working nicely now 2015-01-19 12:50:26 +11:00
AndyButland 17906b505d Removed code in tree synchronisation that removes anchor tag containing node name for certain nodes 2015-01-18 21:13:24 +01:00
Shannon c853263894 Ensures that any instances created with the ManyObjectsResolverBase that have an HTTP lifetime are disposed of at the end of the request 2015-01-16 17:24:47 +11:00
Shannon 16f63b7fd9 Creates migration to remove stylesheet tables! and cleans up the singleton usage of sql syntax in the migrations. 2015-01-16 17:18:07 +11:00
Shannon d41035cb2d fixes tests and DebugDiagnosticsLogger 2015-01-16 16:57:32 +11:00
Shannon 1cb0cd296c Decoupling more things, mostly to do with the PluginManager and logging which now requires an IServiceProvider so have created a simple instance of that. 2015-01-16 15:47:44 +11:00
Shannon 8f100a7e9f decouples more of LogHelper and DisposableTimer 2015-01-16 12:29:27 +11:00
Shannon ed95ccc18e Creates ProfilingLogger in order to decouple the DisposableTimer from LogHelper and ProfilerResolver 2015-01-16 12:07:29 +11:00
Shannon e88264d0f7 Decouples more LogHelper 2015-01-16 11:08:00 +11:00
Shannon d9d8bae376 ensures that the html form attribute is set to POST if for some very strange reason someone visited that html page and tries to submit it with a real password 2015-01-16 10:58:22 +11:00
Shannon 6f76377a9e Gets the stylesheet migrations all working, updates other post migrations to use a common base class, adds ILogger to the MigrationContext 2015-01-16 10:57:49 +11:00
Sebastiaan Janssen 7a644b6681 U4-6133 Update builtin razor snippets to follow Query Builder conventions
#U4-6133 Fixed
2015-01-15 10:38:07 +01:00
Shannon 3fdf13a8b1 Removes database support from legacy stylesheet apis 2015-01-15 15:11:52 +11:00
Shannon 23ea9e71fd Removes db support from the StylesheetRepository 2015-01-15 15:02:29 +11:00
Shannon 19037ee1ba Ensures all stylesheet usages in RTE are working as expected 2015-01-15 12:40:09 +11:00
Shannon 8abf6fc2b5 Cleans up legacy stylesheet code to wrap the new APIs better, creates a new OriginalPath property on IFile to track if the path has changed, updates FileRepository to deal with path's changing and automatically deal with renaming files. Adds new methods to IFileService: GetStylesheetsAtPath. Fixes up the stylesheet and stylesheet property editors to use the file names, gets tree syncing working nicely for them both even with files or properties are renamed. Updates stylesheet editors and controllers to use the new APIs 2015-01-15 11:49:32 +11:00
Shannon Deminick 48c127fefd Merge pull request #619 from arknu/U4-6103
U4-6103: Replace style with ng-style (again)
2015-01-14 19:08:18 +11:00
Asbjørn Riis-Knudsen 778d8e0afa Added missing apostrophes 2015-01-14 09:00:12 +01:00
Shannon 5a6e63e8d4 Fixes up errors with the legacy stylesheet api wrapping the new one, the UI is now all working and even tree syncing is working. 2015-01-14 16:38:54 +11:00
Shannon 23341d8c76 fixes test 2015-01-14 15:22:19 +11:00
Shannon 5cbfa7bd91 Updates how the stylesheet file works, uses v5 style logic for naming a stylesheet rule, adds plenty of tests to support, fixes validation methods on the file service, removes the css parser library stuff as it's overkill for what we want. 2015-01-14 14:10:55 +11:00
Shannon b3a93e369a WIP - bit of a refactor on the IFile stuff, moves all validation to the service level and obsoletes the IFile.IsValid methods. Adds v5 style CSS property parsing, but might integrate that with this zany css parser in the core for 'safer' parsing. 2015-01-14 12:09:30 +11:00
Shannon 5d7902a9a7 Merge remote-tracking branch 'origin/dev-v7' into 7.3.0
Conflicts:
	src/Umbraco.Core/Persistence/Repositories/PartialViewMacroRepository.cs
	src/Umbraco.Core/Umbraco.Core.csproj
2015-01-14 09:10:11 +11:00
Sebastiaan Janssen 59aa28bf3b Update Installer.cs 2015-01-13 17:34:40 +01:00
Niels Hartvig cea002fd61 Typos in regards to previous commit (U4-6115) 2015-01-13 17:19:11 +01:00
Niels Hartvig f8c1cc684b U4-6115 Add which user installs/uninstalls packages to the audit trail 2015-01-13 17:14:54 +01:00
Shannon c41c727e06 WIP - working on getting the legacy StyleSheet business logic class wrapping the new services. 2015-01-13 20:18:02 +11:00
Shannon 3663fd9f99 Fixes: U4-6106 Threading/Performance issue with MappingResolver and LazyManyObjectsResolverbase/ManyObjectsResolverBase 2015-01-13 19:39:46 +11:00
Shannon 10aad7e048 More decoupling from the SqlSyntaxContext singleton, repositories now all use an injected SqlSyntaxProvider, the respository factory, service context, etc... is now much more streamlined with classes created with a propery dependency chain. 2015-01-13 19:38:23 +11:00
Shannon cc396c8b96 Removes more unecessary singletons and simplifies/refactors some internal parts like the ctors for the ServiceContext, DatabaseContext. No more RepositoryResolver or SqlSyntaxProvidersResolver these are entirely uncessary and complicate things. 2015-01-13 18:19:52 +11:00
Shannon 1a7fbf5927 Also part of: U4-6106 Threading/Performance issue with MappingResolver and LazyManyObjectsResolverbase/ManyObjectsResolverBase 2015-01-13 18:11:01 +11:00
Shannon b28d719ee6 Fixes: U4-6106 Threading/Performance issue with MappingResolver and LazyManyObjectsResolverbase/ManyObjectsResolverBase 2015-01-13 18:09:52 +11:00
Shannon d5c8430cd2 Removes all IRepositoryCacheProvider's, we are just using a single cache construct to which is much easier to manage. 2015-01-13 13:33:39 +11:00
Shannon e3acdbe85b Fixes up dictionary and language repositories to have underlying simple get repositories since they support getting by id, unique id and string variations but we want to have native repository enabled caching for these items so these get methods now use private repositories based on these keys. Adds more tests, removes N+1 queries for languages and dictionary items. Removes RuntimeCacheProvider, we only want one type of cache, this simplifies things a lot. 2015-01-13 13:25:36 +11:00
arknu f8ed9e60f6 U4-6103: Replace style with ng-style (again) 2015-01-12 22:13:01 +01:00
Shannon 00895ff7a9 Fixes: U4-6096 Links in Translator emails incorrect - germain and danish were still incorrect. 2015-01-12 22:10:15 +11:00
Shannon da778e277f Fixes: U4-6093 ContentService.SaveAndPublishDo changes Culture 2015-01-12 21:45:52 +11:00
Shannon ef2c46b6ab WIP - removes all the commented out code, now we need to ensure that the DictionaryRepository/Service performs well, there's a bunch of N+1 queries in there and caching will be ignored for several of the get methods when loading with a GUID which we need to have in there if we want it to perform just as well as before. 2015-01-12 20:14:12 +11:00
Shannon 6fcfd49cf0 Merge branch 'U4-5658' of https://github.com/leekelleher/Umbraco-CMS into leekelleher-U4-5658 2015-01-12 19:43:20 +11:00
Shannon b9398375f1 Merge branch 'leekelleher-U4-5658' into 7.3.0 2015-01-12 19:40:33 +11:00
Shannon 274819f75f Merge branch 'U4-5658' of https://github.com/leekelleher/Umbraco-CMS into leekelleher-U4-5658 2015-01-12 19:40:16 +11:00
Shannon fb3b99a49a Fixes up a left join with dictionary -> language items, adds another couple of unit tests adds another method to the ILocalizationService 2015-01-12 19:39:30 +11:00
Shannon ffd4e9507b WIP Gets legacy dictionary, language classes to wrap the Core services implementation properly. Obsoletes a bunch of stuff, creates a few more tests, need to test UI now. 2015-01-12 18:52:30 +11:00
Shannon 6457a1a2ca Fixes: U4-6088 Publicize all partial view methods on IFileService & U4-6087 Fix Partial View macro repository usage so that when a macro is created from the FileService, the MacroService events are raised
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
2015-01-09 19:15:01 +11:00
Shannon 7212015127 obsoletes all of the service ctor's that don't specify all required dependencies, none of these are used in the core. 2015-01-09 18:53:08 +11:00
Shannon 31a1ee9145 Fixes: U4-6088 Publicize all partial view methods on IFileService & U4-6087 Fix Partial View macro repository usage so that when a macro is created from the FileService, the MacroService events are raised 2015-01-09 18:39:44 +11:00
Shannon 53fbb18f1c removes unneeded commented out code in old template class 2015-01-09 17:32:10 +11:00
Shannon 43cfabe9e7 adds unit tests for File service for templates 2015-01-09 17:10:42 +11:00
Shannon caf972cd0f Ensures virtual path is set on the template, updates the tree controller to render the correct editor if it's webforms, updates the rest service to return the updated contents if the server changes it and updates the UI 2015-01-09 17:01:38 +11:00
Shannon 5bef3593dd More dependency cleanup, less singleton usages, better testing implementations 2015-01-09 15:27:47 +11:00
Shannon 3f233ad4a4 test fixed 2015-01-09 13:38:43 +11:00
Shannon 9252dc222a still unweaving more of this singleton mess, makes unit testing much easier 2015-01-09 13:35:32 +11:00
Shannon fafe056db0 More refactoring with ILogger and reducing the dependencies on all of these singletons. Created new DatabaseSchemaHelper to be used instead of the extension methods that require singletons to be set. 2015-01-09 13:00:26 +11:00
Shannon 9f30a9b0fc Removes more singletons and reliance on singletons/statics 2015-01-09 12:04:33 +11:00
Shannon 86f6c4a39d another test fixed 2015-01-09 11:56:43 +11:00
Shannon 32470e9bd2 fixes more tests 2015-01-09 11:23:40 +11:00
Shannon 97c18980d8 fixes some tests 2015-01-09 11:07:38 +11:00
Shannon defc9d3bc2 Updated all repo's to have their correct ctor's with their correct dependencies. Updated them all to accept ILogger updated all other dependencies with the same without breaking anything since all is internal, or obsoleted other public methods. Updates lots of the tests with mock instances instead, now more tests have less singleton dependencies, easier to test, much clearer and more IoC driven. Updated unit tests to supply the ILogger for required objects, tests should run faster now since most things are just mocked. 2015-01-09 10:51:15 +11:00
Shannon Deminick 4bbd278007 Merge pull request #618 from devinbost/dev-v7
Fixed a syntax error in the spelling of the name of a method.
2015-01-08 15:27:57 +11:00
devinbost f6677aa19e Merge pull request #1 from devinbost/master
Fixed a syntax error in the spelling of the name of a method.
2015-01-07 19:40:23 -08:00
unknown a1bca2eba1 Fixed a syntax error in the spelling of the name of the method GetAllManifestFileContents(..). 2015-01-07 19:25:09 -08:00
Sebastiaan Janssen 4c5cc93a67 U4-6052 Umbraco 7.2.1 web app installed with Nuget fails at start with error :"Cannot create an MVC Area path without the umbracoPath specified"
#U4-6052 In Progress
2015-01-07 11:28:23 +01:00
Shannon 77e672aec1 Exposes an ILogger property called Logger on all relevant base classes 2015-01-07 17:38:25 +11:00
Shannon 519b06fe30 Moves logging interface to Logging namespace called ILogger, creates a resolver for it, updates the boot process to ensure it exists first and anything during the boot process that is logging ensures that if it is not resolved that it logs elsewhere. Wraps LogHelper to use the ILogger based on the resolver. Updates all services that used LogHelper to have an ILogger injected into them. This is really only the start, there's a ton of places that use LogHelper (508) other places so we'll need to start looking at changing those over. All base classes will need to expose an Ilogger so people can use that. 2015-01-07 17:23:24 +11:00
Shannon 7e1b20e600 Merge branch 'umbUKFest-U4-5231' of https://github.com/AnthonyCogworks/Umbraco-CMS into 7.3.0
Conflicts:
	src/Umbraco.Core/Services/ServiceContext.cs
	src/Umbraco.Core/Umbraco.Core.csproj
	src/Umbraco.Tests/MockTests.cs
2015-01-07 16:13:47 +11:00
Shannon 023c7f3fe7 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2015-01-07 15:54:08 +11:00
Shannon 7590bd86dd Merge branch 'dev-v6' of https://github.com/umbraco/Umbraco-CMS into dev-v6 2015-01-07 15:44:05 +11:00
Shannon 6b25e5299f fixes unit test 2015-01-07 15:43:47 +11:00
Shannon 76ab09bfc8 Fixes remaining tests 2015-01-07 15:36:17 +11:00
Shannon d6f47366d4 fixes how bytes are read with utf8 BOM for templates and master pages, fixes unit test 2015-01-07 15:11:27 +11:00
Shannon dc846e7ff6 Fixes installer email validation. Ensures all validation directives are registered under the correct module: umbraco.directives.validation, then we load this module in the installer so we can use the correct email validation directive. 2015-01-07 15:02:58 +11:00
Shannon 322bd4e41e Fixes: U4-5717 Member email validation does not allow valid domains (Umbraco 7.1.4) 2015-01-07 14:32:39 +11:00
Shannon 282550f402 Fixes: U4-6080 Server side email validation doesn't occur on existing members when they are saved 2015-01-07 13:17:44 +11:00
Shannon 699713346c Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-01-07 10:39:11 +11:00
Shannon d4f28fcd85 fixes a couple of tests 2015-01-07 10:39:00 +11:00
Shannon Deminick 11e946d61c Merge pull request #614 from Alain-es/patch-2
Fix bug U4-6071: Feature request - Add a specific section to all users
2015-01-07 10:24:54 +11:00
Shannon 341239648d bumps version 2015-01-07 09:17:22 +11:00
Alain f3b23a15c9 Update UserServiceTests.cs 2015-01-06 12:18:08 +00:00
Alain cc61c34cdf Update UserService.cs 2015-01-06 12:15:32 +00:00
Alain 91b599b213 Update IUserService.cs 2015-01-06 12:14:13 +00:00
Shannon ce6eb3d939 Merge branch 'dev-v7-upgradablemvc5webapi2' of https://github.com/Shazwazza/Umbraco-CMS into dev-v7-upgradablemvc5webapi2
Conflicts:
	src/Umbraco.Web/Trees/ApplicationTreeExtensions.cs
2015-01-06 18:25:42 +11:00
Shannon ec5ca9087e Removes all references of Microsoft.Web.Helpers - we don't need to ship this, we don't reference it and it has compatibility problems. Also updates the version to 7.3.0 2015-01-06 18:24:27 +11:00
Shannon 8cfdcbdd05 Updates how the webapi reflection works to ensure the property info's are cached 2015-01-06 18:23:47 +11:00
Shannon 4a72e8c3df Creates ReflectedFixedRazorViewEngine and version checkers to dynamically update code depending on the major versions of MVC and WebApi 2015-01-06 17:40:28 +11:00
Shannon d747d16b75 Creates ReflectedFixedRazorViewEngine and version checkers to dynamically update code depending on the major versions of MVC and WebApi 2015-01-06 17:39:07 +11:00
Shannon Deminick 106873732c Merge pull request #615 from AndyButland/u4-6044
U4-6044 - prevent search engines from indexing login page
2015-01-06 15:48:40 +11:00
Shannon Deminick 462467a7d8 Merge pull request #616 from AndyButland/u4-6061
U4-6061 - NodeCount for tags is not populated
2015-01-06 15:44:47 +11:00
Shannon 89b8fe93b7 Updes more code for U4-337 2015-01-06 15:36:14 +11:00
Shannon f6cd597841 Fixes up some things from PR 610 and fixes up quoted values when using the Insert.IntoTable migration. 2015-01-06 13:44:42 +11:00
Shannon fa48af02a1 Merge branch 'leekelleher-U4-337' into 7.3.0
Conflicts:
	src/Umbraco.Core/Umbraco.Core.csproj
2015-01-06 12:24:29 +11:00
Shannon 8509aef99a Merge branch 'U4-337' of https://github.com/leekelleher/Umbraco-CMS into leekelleher-U4-337 2015-01-06 12:23:31 +11:00
Shannon 46e939715a Merge branch 'dev-v7' into 7.3.0 2015-01-06 12:22:54 +11:00
Shannon ea12da99ea moves RelateOnCopyHandler to Core and changes from ApplicationStarting to ApplicationStarted 2015-01-06 12:22:11 +11:00
Shannon 97a05008b3 Makes the umbProperty directive check optional since these validators can exist outside of an umbProperty directive (i.e. like in a dialog for a parameter editor) 2015-01-06 12:03:19 +11:00
Shannon Deminick 69e1dd1c73 Merge pull request #612 from gildebrand/patch-3
Fix for macrocontainer making it possible to edit
2015-01-06 11:50:31 +11:00
Shannon 95f68b8bde Another attempt at fixing: U4-4049 Some images fail when uploading multiple media files 2015-01-06 11:45:08 +11:00
Shannon 485621b03a Revert "Merge branch '7.2.0-U4-4049' into dev-v7"
This reverts commit 2ad86ec83d, reversing
changes made to 70ddf646be.
2015-01-06 11:22:40 +11:00
Shannon 3f1b031789 fixes OverridableAuthorizationAttribute to ensure that the class level filter is applied if there are no child filters 2015-01-06 11:19:44 +11:00
Shannon d0f125a51b moves file cleanup to outside of the loop 2015-01-06 11:19:19 +11:00
Shannon a4f7c49f50 Merge branch 'Alain-es-Fix_for_U4-5875' into dev-v7 - And updates quite a lot: changes directive name to valPropertyValidator and changes how it works to be ultra flexible for custom validation of property data. Updates umbProperty directive to expose an API for other directives to utilize (like the new set setPropertyError method). Updates valServer to use the better way to access the current property object from the umbProperty directive API. Updates both valServer and valPropertyMsg to only perform a watch when necessary when there has been server side errors, this will speed up client side performance quite a bit. Now the tags, color picker and upload property editors performs correct client side and server side validation for the required validation flag. 2015-01-06 10:55:38 +11:00
Alain a378d0c202 Update UserServiceTests.cs 2015-01-05 21:30:22 +00:00
AndyButland d235340ec6 Populated NodeCount property for tag queries retrieving tags across all types 2015-01-05 22:23:05 +01:00
AndyButland 93ca536b14 Added noindex, nofollow to default page to discourage search engines indexing the back-office 2015-01-05 21:20:50 +01:00
Alain dea78c5d13 Update UserServiceTests.cs 2015-01-05 19:04:59 +00:00
Alain d06ff5f108 Update IUserService.cs 2015-01-05 19:02:32 +00:00
Alain d94fe7df68 Update UserService.cs 2015-01-05 18:55:31 +00:00
Anton Gildebrand fec70fcf47 parseMacroSyntax accepts other characters than a-z
I had problems with parseMacroSyntax when `syntax` included Swedish characters. Now it works with other characters than a-z as well.
2015-01-05 17:13:50 +01:00
Anton Gildebrand 11b53a5dcc Fix for macrocontainer making it possible to edit 2015-01-05 15:17:50 +01:00
Shannon d4c0ea9c48 working on U4-5875 - Updated RequiredManifestValueValidator to automatically check for empty json strings if the value type is JSON. Updates the TagsPropertyEditor to check for empty json in it's required validator. Updated the tags JS to always update the model value so if there's a server side validation, it gets cleared on change. 2015-01-05 14:25:16 +11:00
Shannon 459d9b34e7 Fixes: U4-5974 User which is not administrator getting logged out when clicking recycle bin 2015-01-05 12:22:49 +11:00
Shannon 2ad86ec83d Merge branch '7.2.0-U4-4049' into dev-v7
Conflicts:
	src/Umbraco.Web/Umbraco.Web.csproj
2015-01-05 10:26:27 +11:00
Shannon 70ddf646be Changed the DefaultUrlProvider's warnings to Debug statements since this can get logged very often when there are unpublished pages and a URL is requested for them which can occur a ton, especially when searching in the back office since a URL is attempted to be created on each search for each result. 2015-01-05 10:08:36 +11:00
Shannon 4de31249fd removes some usages of singletons 2015-01-05 10:01:58 +11:00
Shannon 26c3bb05d6 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2015-01-05 09:48:08 +11:00
Shannon b1fe15ed56 fixes a null ref 2015-01-05 09:46:54 +11:00
Shannon Deminick 83f1613eb8 Merge pull request #611 from leekelleher/lk-contentservice-constants
ContentService - Replaced the hardcoded -1 and -20 values with Constants
2015-01-05 08:55:34 +11:00
leekelleher e8e6f5f807 Replaced the hardcoded integer values for -1 and -20 in ContentService with the Constants values.
I did this whilst working on PR #610 (U4-337), but separated out to its own branch so not to clutter the other PR.
2015-01-04 21:02:20 +00:00
leekelleher 8a32f02781 Added custom event handler to create the relation for trashed nodes.
Removed the additional (AJAX) resource call from the Angular controller, as the relation removal is handled in server-side code during the move.
2015-01-04 20:46:00 +00:00
leekelleher 573192c33f Amends based @sitereactor's feedback. 2015-01-04 17:09:05 +00:00
leekelleher 56f5789976 Added "restore" language key/value for English (+US).
Will aim to do other languages in due course.
2015-01-03 22:24:10 +00:00
leekelleher f21265c7ae Added "DeleteById" method to the Relation Resource/Service. 2015-01-03 22:22:54 +00:00
leekelleher eace046342 Moved the SQL insert (to create the new relation type) to a separate DB migration for v7.3.0.
(This may need to be reviewed by Core team?)
2015-01-03 22:20:19 +00:00
leekelleher 0a6a41e4c2 Swapped the Action letter to be 'V', as it appeared to be available. 2015-01-03 22:19:03 +00:00
leekelleher b449973403 Added the relationship between the trashed node and its former parent node 2015-01-03 20:10:42 +00:00
leekelleher 911e81e4af Added constants for the relation-type aliases. 2015-01-03 20:10:41 +00:00
leekelleher 458e7dde94 Created "relationResource" to expose methods from RelationService to angular controllers.
Added view for the "restore" menu option.
2015-01-03 20:10:39 +00:00
leekelleher 0c7826b250 Added 'Restore' action class
+ menu option for items in the recycle bin.
2015-01-03 19:52:06 +00:00
leekelleher ef0ad41c8e New relation type: "Relate Parent Document On Delete" 2015-01-03 19:52:04 +00:00
Shannon fff1da2a12 Merge branch 'dev-v7' into 7.3.0 2015-01-02 16:25:52 +11:00
Shannon 920084b7c3 Merge branch 'sitereactor-ascii-art' into dev-v7 2015-01-02 16:21:12 +11:00
Shannon ff2c71367f adds tests 2015-01-02 16:19:51 +11:00
Shannon Deminick 428efed7c3 Merge pull request #597 from chrisjsherm/issue-u4-4158
Fix for Truncate function stripping out content between tags. This issue...
2015-01-02 16:03:46 +11:00
Shannon 7c59c71261 updates PR for U4-6054 to just read directly from the file stream, no need to copy it first. 2015-01-02 15:58:31 +11:00
Shannon Deminick a0c2914ce6 Merge pull request #604 from csharpforevermore/dev-v7
Fixed: U4-6054 "Unit test 'Umbraco.Tests.IO.AbstractFileSystemTests.Can_...
2015-01-02 15:54:11 +11:00
Shannon Deminick dbb70a8646 Merge pull request #607 from gertdc/U4-6060
Added dutch translations for the grid layout
2015-01-02 15:49:50 +11:00
Shannon 6a423dd032 Fixes: U4-5940 Feature Request - Disable partial/macro caching when in debug mode 2015-01-02 15:45:33 +11:00
Shannon 73e9ff04e8 Fixes: U4-5943 Cannot render a macro on a virtual page when using UmbracoVirtualNodeRouteHandler and assigning virtual Ids 2015-01-02 15:34:51 +11:00
Shannon 201464cb44 Fixes: U4-5918 Update Underscore.js and also updates our usage of bower with the correct grunt-bower plugin, this massively simplifies bower usage and paves the way to start using bower for all JS components. 2015-01-02 14:25:11 +11:00
Shannon a68fed42ad Merge branch 'madsoulswe-7.2.1' into dev-v7 2015-01-02 11:58:56 +11:00
Shannon a427427564 fixes sql for sqlce for data integrity controller 2015-01-02 11:56:27 +11:00
Shannon 2286c0899c reverts UseTempStorage sync from examine settings on dev branch. 2015-01-02 11:55:18 +11:00
Shannon 55eea6e44f Merge branch '7.2.0' into 7.2.0-U4-4049 2015-01-02 11:44:29 +11:00
Shannon f91f25e5c0 Fixes issue with template model and package installation 2015-01-02 11:04:12 +11:00
gertdc ae257d0f50 Added dutch translations for the grid layout 2014-12-30 10:18:54 +01:00
Shannon 3f35ca1e77 Fixes merge and file encoding for master pages and templates to have BOM 2014-12-29 14:35:54 +11:00
Shannon 8c619e92d9 Merge branch 'dev-v7' into 7.3.0
Conflicts:
	build/UmbracoVersion.txt
	src/Umbraco.Core/Configuration/UmbracoVersion.cs
	src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs
	src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
2014-12-29 14:30:01 +11:00
Shannon 28a01d61a6 Fixes: U4-5981 Umbraco 7.2 Text encoding when saving partial view template 2014-12-29 13:50:33 +11:00
Chris Randle bc776d787e Fixed: U4-6054 "Unit test 'Umbraco.Tests.IO.AbstractFileSystemTests.Can_Get_Size()' fails" by looking at the size of the string not the file which can vary - possibly dependent on encoding. 2014-12-27 00:11:59 +00:00
Shannon 2f74dfe5cb fixes missing using statement 2014-12-24 17:01:41 +11:00
Shannon 84d2caf5d8 Merge branch '21robin12-7.2.0-U4-6004' into dev-v7 2014-12-24 12:34:10 +11:00
Shannon 456e7d9fdf Merge branch '7.2.0-U4-6004' of https://github.com/21robin12/Umbraco-CMS into 21robin12-7.2.0-U4-6004 2014-12-24 12:33:35 +11:00
Shannon dae66ad2d0 Merge remote-tracking branch 'origin/dev-v6' into dev-v7
Conflicts:
	src/Umbraco.Web/PublishedCache/XmlPublishedCache/PublishedMediaCache.cs
	src/Umbraco.Web/umbraco.presentation/library.cs
	src/umbraco.businesslogic/Application.cs
	src/umbraco.businesslogic/ApplicationRegistrar.cs
	src/umbraco.businesslogic/ApplicationTree.cs
	src/umbraco.businesslogic/ApplicationTreeRegistrar.cs
2014-12-24 11:56:28 +11:00
Stephan 69d254a198 Merge pull request #600 from solutionmania/dev-v7
Resolved U4-5193 and U4-6051
2014-12-23 17:44:39 +01:00
Stephan b30555f5a4 Merge pull request #599 from solutionmania/dev-v6
Merge into dev v6
2014-12-23 17:44:25 +01:00
Chris Roberts d5b6428cdc Fixed: U4-6051 HasAccces method tests the roles of the wrong user 2014-12-23 16:32:24 +00:00
Chris Roberts 7d5bce76c2 Fixed: U4-5193 HasAccess override method name error 2014-12-23 16:30:11 +00:00
Chris Roberts d4d77611eb Fixed: U4-5193 HasAccess override method name error 2014-12-23 16:27:51 +00:00
Chris Roberts 662ed03f0a Fixed: U4-6051 HasAccces method tests the roles of the wrong user 2014-12-23 16:23:47 +00:00
Shannon fdac0ede45 Merge branch 'dev-v7' of https://github.com/umbraco/Umbraco-CMS into dev-v7 2014-12-22 15:14:57 +11:00
Shannon 83aa30d2c5 Adds a VirtualPath property to IFile which is the relative path of the file to the root of the website. 2014-12-22 15:14:44 +11:00
Aaron Powell b8097219fb Implementing a test for U4-6035 2014-12-21 17:56:33 +11:00
chrisjsherm 34b524aabb Fix for Truncate function stripping out content between tags. This issue is referenced at issues.umbraco.org/issue/U4-4158. 2014-12-19 17:47:12 -05:00
per ploug 2e2ea57ba6 Fixes grid editor always rending 12 columns
When a user change grid cols, the editor keeps rendering 12 column
layouts - this fixes the 12 cols issue and falls back to 12 in case of
invalid/missing information
2014-12-19 16:11:33 +01:00
Sebastiaan Janssen 72004768cf U4-5981 Umbraco 7.2 Text encoding when saving partial view template
#U4-5981 In Progress Assignee Shandem
2014-12-18 13:56:50 +01:00
Sebastiaan Janssen b8e98ae017 No need to start a webserver for the Umbraco.Web.UI.Client project (correct me if I'm wrong) 2014-12-18 13:55:50 +01:00
redmorello e5ec935128 Update forms.less
Removed negative left margin from checkbox and radio button inputs.
2014-12-18 11:08:44 +00:00
redmorello 3ea16e66d4 Update forms.less
Removed negative left margin from input and radio button inputs.
2014-12-18 11:07:08 +00:00
Shannon 3c01dcb30c Fixes: U4-6030 2014-12-18 15:16:29 +11:00
Shannon 938b236f54 fixes initialized flag on section service 2014-12-18 15:12:22 +11:00
Shannon aa439cacda working on U4-6030 2014-12-18 14:58:49 +11:00
Shannon e643f2a0ba working on U4-6030 2014-12-18 14:20:41 +11:00
Shannon 5b9a98ad6a Simplifies the ILocalizedTextService to not have an extension method for null tokens, adds another extension method to accept an array of tokens, adds null checks. 2014-12-18 12:45:04 +11:00
Shannon 3323138232 Fixes up js localization service so that it doesn't make a ton of requests on first load, Fixes: U4-2675 Create new controller service to output the json for localization for use in angular service 2014-12-18 12:35:38 +11:00
Shannon cd0aa5e342 Fixed null checks and error checking for duplicates in the xml file store, added test 2014-12-18 12:33:34 +11:00
Shannon f63ec81c47 cleans up commented out code 2014-12-18 10:58:41 +11:00
Dennis Öhman 5b63a8e9d9 Colspan change
Changed colspan from fixed 5 to includeProperties.length + 3
2014-12-17 17:10:22 +01:00
Morten Christensen 71244b9bcd Smaller variation so text isn't pushed down 2014-12-17 16:17:49 +01:00
Morten Christensen fd1e369b2a Makes readme.txt for nuget packages awesome! 2014-12-17 15:59:37 +01:00
Robin Herd c256266432 isResized now determined by regex 2014-12-17 13:06:46 +00:00
Shannon db087a9e78 pretty much got 5966 working just need to do some more tests. 2014-12-17 17:08:12 +11:00
Shannon 4e33552a5c wip - working on U4-5966 2014-12-17 16:19:42 +11:00
Shannon da25970f79 wip - working on U4-5966 2014-12-17 15:19:03 +11:00
Phil Hughes 562367e9a2 Label on files not just folders 2014-12-16 15:25:13 +00:00
Shannon 0807597a3c Fixes: U4-5977 The debounce timeout on the main search is too big which produces a lag in searching & U4-5994 Global search needs to only show results for the 'last' search request made and ignore previous ones 2014-12-16 15:50:54 +11:00
Shannon d564866b07 Merge branch 'Aaen-7.2.0' into dev-v7 2014-12-16 14:34:13 +11:00
Shannon 99a45d26ae Merge branch '7.2.0' of https://github.com/Aaen/Umbraco-CMS into Aaen-7.2.0 2014-12-16 14:33:21 +11:00
Shannon a32d38f7ea Fixes: U4-5992 Caching of XPathNodeIterator in umbraco.library is not thread safe and will cause media errors like valueDictionary exception 2014-12-16 14:26:53 +11:00
Shannon Deminick 5bf9362c92 Merge pull request #586 from Alain-es/Fix-for-U4-5852
Fix for U4-5852
2014-12-16 11:24:56 +11:00
Shannon Deminick d9925e3453 Merge pull request #589 from teeto/patch-1
Update es.xml
2014-12-16 11:08:16 +11:00
Shannon e1106a9d67 Merge branch '7.2.1-doctype-fixes' into 7.2.1
Conflicts:
	src/Umbraco.Core/Models/PropertyGroupCollection.cs
	src/Umbraco.Core/Persistence/Repositories/ContentTypeBaseRepository.cs
	src/Umbraco.Core/Services/ContentTypeService.cs
	src/Umbraco.Tests/PublishedContent/PublishedContentExtensionTests.cs
	src/Umbraco.Tests/Services/ContentTypeServiceTests.cs
	src/Umbraco.Web/umbraco.presentation/umbraco/controls/ContentTypeControlNew.ascx.cs
2014-12-16 09:47:53 +11:00
Sebastiaan Janssen a8d7a1d01d Makes the test green: don't add the passed in composition as a dependency to itself.. also added another invariant check 2014-12-15 19:52:28 +01:00
Sebastiaan Janssen e62597521e Remove the renaming to 'title' which would cause a duplicate and make the next test fail 2014-12-15 19:51:37 +01:00
Sebastiaan Janssen fa91321299 Adds test for adding properties to a composition that has been saved and now doesn't allow a new property to be added 2014-12-15 18:56:58 +01:00
Morten Christensen 2d81691407 Adding new test case for renaming PropertyType aliases on indirect references 2014-12-15 16:34:41 +01:00
Morten Christensen 21f08ca491 Refactoring validation and adding new test case for renaming PropertyTypes 2014-12-15 15:33:05 +01:00
Morten Christensen e202f21934 Adds new test, fix, refactoring for adding duplicate PropertyType aliases 2014-12-15 14:29:48 +01:00
Shannon 2936ff0bf9 Makes provider user key type for new membership provider configurable, by default it is int 2014-12-15 20:44:00 +11:00
Alain 55dbc82d75 no-dirty-check all lower case 2014-12-15 09:11:21 +00:00
Sebastiaan Janssen 8e4e575276 Makes sure messages are shown in the user's configured language 2014-12-15 09:30:04 +01:00
Sebastiaan Janssen 84752babc8 Moved both new sections to the bottom so it's easier for upgraders to merge them 2014-12-15 09:04:25 +01:00
Shannon Deminick e1ec49fd3c Merge pull request #592 from Bitmapped/7.2.1-U4-5564
Better fix for U4-5564
2014-12-15 13:24:24 +11:00
Shannon 60a1116acd Fixes: U4-6009 Distributed calls not working in 7.2 2014-12-15 11:45:55 +11:00
Sebastiaan Janssen a480d7bbe6 U4-5959 Getting YSOD when wanting to create partial view in a subfolder in the backoffie
#U4-5959 Fixed Due in version 7.2.1
2014-12-14 17:22:10 +01:00
Sebastiaan Janssen 7316c5462a U4-5928 Umbraco 7.2 RC GetCurrentMemberProfileModel Null Ref
#U4-5928 Fixed Due in version 7.2.1
2014-12-14 16:50:11 +01:00
Morten Christensen 2a9960afb3 Adding UI feedback for invalid compositions 2014-12-12 17:04:53 +01:00
Morten Christensen ed899ec73d Adding additional test coverage for Compositions and updating PropertyTypes and PropertyGroups 2014-12-12 17:04:11 +01:00
Morten Christensen 8f26f9385d Refactoring the logic around saving updates to PropertyTypes and PropertyGroups 2014-12-12 17:02:03 +01:00
Robin Herd 599d367343 Fixed bug U4-6004, MediaService.GetMediaByPath now returns IMedia for paths containing 'x' and '_' 2014-12-11 17:59:52 +00:00
teeto 45241788b3 Update es.xml
I have updated the es.xml file adding the values for grid section and the values marked as version="7.2" which were not translated
2014-12-11 18:16:35 +01:00
Morten Christensen a446cc224d Refactoring the logic in the validation method for when ContentTypes are saved 2014-12-11 17:14:01 +01:00
Alain-es 8bfcd4ce3f using noDirtyCheck directive instead of removing valFormManager directive 2014-12-11 11:41:17 +00:00
Morten Christensen 07f9a9700d Ensures that inherited PropertyType aliases are also checked for indirect references 2014-12-11 12:22:49 +01:00
Sebastiaan Janssen 7e7acd0049 Correcting my mistakes to the unit test, using the wrong alias 2014-12-11 11:02:51 +01:00
Morten Christensen 57985c26a2 Updating the name of PropertyGroups in DB to ensure renaming is done properly 2014-12-11 10:55:33 +01:00
Morten Christensen 504c1f7254 Updating tests related to #U4-5986
Conflicts:
	src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs
2014-12-11 10:55:21 +01:00
Shannon 52ad36a6c2 removes commented out code form PR 2014-12-11 10:49:41 +01:00
Peter Gregory 01670e0832 Fixes issue U4-5925 GetMedia returning nothing
Removed the use of FromXElement that was only used by GetMedia.  The change introduced in commit f3f6504398 caused GetMedia to return nothing due to the introduction of the FromXElement method.
2014-12-11 10:49:30 +01:00
Shannon e1a93e9b3f updates the cdf mvc version to match the one in the nuspec 2014-12-11 19:57:59 +11:00
Shannon 2203db548a updates port 2014-12-11 19:01:32 +11:00
Shannon ff66c90855 doh, fixed nuspec, there's no mvc cdf 1.8.1. updates the port 2014-12-11 18:49:40 +11:00
Shannon b0779cb330 updates examine local storage logic for when there are no indexes and they need to be created 2014-12-11 18:43:39 +11:00
Shannon e3f043794b removes commented out code form PR 2014-12-11 18:42:51 +11:00
Shannon 25c021d0a9 Merge branch '7.2.1' of https://github.com/umbraco/Umbraco-CMS into 7.2.1 2014-12-11 17:56:04 +11:00
Shannon 8f35c8fb57 Fixes: U4-5996 CDF reference issue 2014-12-11 17:55:53 +11:00
Shannon Deminick 45e3b2acf4 Merge pull request #587 from pgregorynz/7.2.1
Fixes issue U4-5925 GetMedia returning nothing
2014-12-11 17:47:00 +11:00
Shannon 082d116924 updates nuspec with examine and cdf updates 2014-12-11 17:46:06 +11:00
Peter Gregory 85ccea60ab Fixes issue U4-5925 GetMedia returning nothing
Removed the use of FromXElement that was only used by GetMedia.  The change introduced in commit f3f6504398 caused GetMedia to return nothing due to the introduction of the FromXElement method.
2014-12-11 16:27:06 +10:00
Shannon 49e5493d52 Merge branch '7.2.1' of https://github.com/umbraco/Umbraco-CMS into 7.2.1 2014-12-11 15:59:06 +11:00
Shannon a700258d92 WIP - updates to latest examine which exposes some methods needed to get this syncing done. This will not build until i put that examine version on nuget (soon). Ensures all readers/writers uses the same deletion policy, ensure segments file is copied across on sync restore. Changes the config to use an enum instead of a boolean which will give us some more flexibility. 2014-12-11 15:58:54 +11:00
Morten Christensen 712fb9f11a Merge branch '7.2.1' of https://github.com/umbraco/Umbraco-CMS into 7.2.1
Conflicts:
	src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs
2014-12-10 22:22:29 +01:00
Morten Christensen c16a1c727d Updating the name of PropertyGroups in DB to ensure renaming is done properly 2014-12-10 22:20:00 +01:00
Morten Christensen 78bc12eb77 Updating tests related to #U4-5986 2014-12-10 22:19:17 +01:00
Alain-es 9c10145869 Fix for U4-5852 2014-12-10 15:18:41 +00:00
Stephan 99c96bce86 U4-5986 - reject ppty alias used by ancestor 2014-12-10 13:01:51 +01:00
Stephan 70424183fa U4-5986 - reject ppty alias used by ancestor 2014-12-10 13:00:56 +01:00
Sebastiaan Janssen da2bc6764b Version also updates in the csproj 2014-12-10 12:59:08 +01:00
Shannon d11a377f0f bump version 2014-12-10 12:28:06 +01:00
Stephan d445f7cb0d U4-5986 - reject ppty alias used by descendant 2014-12-10 12:27:55 +01:00
Stephan d02235b997 U4-5986 - reject ppty alias used by descendant 2014-12-10 12:04:13 +01:00
Sebastiaan Janssen 899d325ca1 Updates unit tests to use the newer new ContentType method and obsoletes the old one 2014-12-10 11:52:03 +01:00
Sebastiaan Janssen f1107b7a91 Fixes U4-5986 Compositions: Possible to get stuck in document type ysod's
#U4-5986 Fixed Due in version 7.2.1
2014-12-10 11:51:53 +01:00
Stephan a3f171e7b3 U4-5931 - fix DocType inheritance issue 2014-12-10 11:51:42 +01:00
Sebastiaan Janssen 8b3e80a001 Updates unit tests to use the newer new ContentType method and obsoletes the old one 2014-12-10 11:42:45 +01:00
Brian Powell 13a2d845c6 Clean up comments. 2014-12-10 03:13:49 -05:00
Sebastiaan Janssen c20c93e648 Fixes merge issue 2014-12-09 21:14:22 +01:00
Brian Powell 2c212cb16a Better fix for U4-5564 - replaces reverted part of Pull #492 2014-12-09 13:38:59 -05:00
Sebastiaan Janssen 848e8a6248 Fixes U4-5986 Compositions: Possible to get stuck in document type ysod's
#U4-5986 Fixed Due in version 7.2.1
2014-12-09 19:30:48 +01:00
Stephan 9dcba6a679 U4-5931 - fix DocType inheritance issue 2014-12-09 17:58:54 +01:00
Mark Drake accded4dfc Resolves Bug #U4-5568 Allow 0 for numeric data type
Please see this bug for more detail:
http://issues.umbraco.org/issue/U4-5568
2014-12-09 11:51:27 -05:00
Stephan c8f80453b9 U4-5929 - support IDN in hostnames 2014-12-09 09:34:58 +01:00
Shannon d857743bf3 moves the local storage logic to the BaseUmbracoIndexer 2014-12-09 19:15:47 +11:00
Shannon 78bee017ca Updates nuspec to have a min examine version of 0.1.58 and prettifies their structure. 2014-12-09 19:10:57 +11:00
Shannon f08320bd81 Fixes: U4-5976 When no Examine indexes exist they are rebuilt at startup, however the rebuilding happens too soon before any Examine event handlers are actually wired up.
Updates examine version to facilitate this. Adds ability to tokenize the {machinename} in an examine index path.
2014-12-09 19:07:14 +11:00
Shannon a1fcdac896 Merge branch '7.2.1' of https://github.com/umbraco/Umbraco-CMS into 7.2.1 2014-12-09 19:05:11 +11:00
Shannon ae2d9e6c55 Fixes: U4-5977 The debounce timeout on the main search is too big which produces a lag in searching 2014-12-09 19:05:00 +11:00
Shannon 451be273a5 bump version 2014-12-09 18:55:54 +11:00
Shannon Deminick bf7473145f Merge pull request #577 from abjerner/patch-4
Moved the right click action for the tree header
2014-12-09 16:06:56 +11:00
Shannon Deminick 01a309ef42 Merge pull request #582 from arknu/propertyeditor-localization
U4-5101: Localize property editors (updated)
2014-12-09 13:08:19 +11:00
Shannon Deminick bf4d0a8d01 Merge pull request #581 from readingdancer/Fix_for_5364_Second_Version
Fix for issue U4-5364 without trying to fix the localization of error msg.
2014-12-09 12:54:37 +11:00
Dennis Aaen 3a919b67ea U4-5973 Fix casing of word XSLT when saving a XSLT file 2014-12-08 20:09:05 +01:00
arknu 77fd2c9444 Update translations for Grid 2014-12-08 18:36:51 +01:00
arknu 30042aae6d U4-5101: Localize Grid property editor 2014-12-08 17:46:32 +01:00
arknu 8bc9fb9242 U4-5101: Localize Image Cropper property editor 2014-12-08 17:41:03 +01:00
arknu 482e90dbc0 U4-5101: Localize Content Picker property editor 2014-12-08 17:41:02 +01:00
arknu 0b61546633 U4-5101: Localize Tags property editor 2014-12-08 17:41:01 +01:00
arknu ca69e64846 U4-5101: Localize Related Link property editor 2014-12-08 17:37:47 +01:00
Chris Houston 6e60aa17dc Fix for issue U4-5364 without trying to fix the localization of the error text. 2014-12-08 15:16:37 +00:00
Shannon f60884e796 reverts change to umbraco module to set the original URL when using SSL... there should be no need to specify anything differently here. If there's an explicity base path and url then use the basePath config option. 2014-12-08 17:34:54 +11:00
Shannon d2dbd91b17 Fixes merge issues 2014-12-08 17:19:48 +11:00
Shannon 0a7bbfb1ca Merge remote-tracking branch 'origin/6.2.5' into 7.2.1
Conflicts:
	src/Umbraco.Core/Configuration/UmbracoSettings.cs
	src/Umbraco.Core/Sync/ServerEnvironmentHelper.cs
	src/Umbraco.Tests/Scheduling/BackgroundTaskRunnerTests.cs
	src/Umbraco.Tests/Umbraco.Tests.csproj
	src/Umbraco.Web.UI/install/steps/defaultUser.ascx
	src/Umbraco.Web.UI/web.Template.Debug.config
	src/Umbraco.Web/Scheduling/BackgroundTaskRunner.cs
	src/Umbraco.Web/Scheduling/IBackgroundTask.cs
	src/Umbraco.Web/Scheduling/KeepAlive.cs
	src/Umbraco.Web/Scheduling/LogScrubber.cs
	src/Umbraco.Web/Scheduling/ScheduledPublishing.cs
	src/Umbraco.Web/Scheduling/ScheduledTasks.cs
	src/Umbraco.Web/Scheduling/Scheduler.cs
	src/Umbraco.Web/Scheduling/TaskEventArgs.cs
	src/Umbraco.Web/Umbraco.Web.csproj
2014-12-08 17:16:16 +11:00
Shannon 864994a56e updates error msgs when sending requests to the same server pointing to docs on baseUrl 2014-12-08 17:04:22 +11:00
Shannon 3405c5001b working on U4-5964, U4-5907, U4-5965 2014-12-08 15:18:32 +11:00
Shannon 4d8732d925 The only way i could get this project to build and run was to change the transform to explicitly target 4.0.0.1 for mvc and webapi, otherwise nothing works and horribly cryptic build errors. Added the tests for the BackgroundTaskRunner 2014-12-08 14:59:32 +11:00
Mark Drake 6751f108f0 Resolves bug U4-5944
This change resolves an issue with the media picker / RTE where an image
inserted with no alt title provided is inserted with it equal to
"undefined". See: http://issues.umbraco.org/issue/U4-5944
2014-12-07 21:55:06 -05:00
Anders Bjerner 0feb65c455 Moved the right click action for the tree header
See http://issues.umbraco.org/issue/U4-5961
2014-12-07 17:21:30 +01:00
Sebastiaan Janssen 4eb9a54fa5 Ports v7 changes for U4-5728 - OriginalRequestUrl not initialized, KeepAlive or ScheduledPublishing run too soon
#U4-5728
2014-12-07 16:16:29 +01:00
Shannon d4fd58e038 Completes: U4-5846 Remove cmsTemplate.master column and transfer those values over to umbracoNode.parentId, U4-5847 Ensure the path is set correctly for templates in the db, almost done the other template service tasks too. 2014-12-05 17:29:47 +11:00
Shannon 2961370b83 Adds some more tests, the legacy template object should now be wrapping the new one completely in regards with business logic (db) 2014-12-05 14:34:34 +11:00
Shannon c71e00b3dc Merge branch '7.2.1' into 7.3.0 2014-12-05 13:57:23 +11:00
Shannon 3b2a27dfb2 Merge branch '7.2.1' of https://github.com/umbraco/Umbraco-CMS into 7.2.1 2014-12-05 10:29:35 +11:00
Shannon ad66613011 Updates ValidateCurrentUser so that it doesn't re-decrypt the cookie since that is already done, it just needs to check if the current user is authenticated and if it is a back office identity. Added lots of notes for extension points when we start looking at extending how the back office auth works. 2014-12-05 10:29:18 +11:00
Shannon Deminick a1de100a93 Merge pull request #575 from greystate/typo-buster
Just a teeny-tiny typo change ("differnt" -> "different")
2014-12-05 10:02:18 +11:00
Chriztian Steinmeier cbcbc128ff Typo change "differnt" -> "different" 2014-12-04 23:40:28 +01:00
Shannon 6555fd5791 Updated U4-4049 - we now use media formatters instead of IModelBinder (this is actually the preferred way anyways). The validation is then moved to just a filter instead of done in the model binder. This way a media formatter is pure async, so we can ReadFromStreamAsync in a completely native async operation which should hopefuly fix this issue. 2014-12-03 21:06:01 +11:00
Shannon 641c7dfa04 WIP - more work on templates repository/service 2014-12-02 11:30:30 +11:00
Shannon 95845c8f2e Almost completed U4-5847 Ensure the path is set correctly for templates in the db but needs a db migration script as well, more unit tests 2014-12-01 17:34:22 +11:00
Shannon c656bb632e WIP more template repo work and more unit tests 2014-12-01 16:22:18 +11:00
Shannon bf82a70744 WIP - still working on getting the template repository and models working correctly and adding some more tests. 2014-12-01 14:14:44 +11:00
Shannon 520955a8db WIP - ported over viewhelper and MasterpageHelper to the Core lib, still wrapping new file service from old template class. 2014-12-01 12:59:36 +11:00
Shannon 2b25815eee Merge branch '7.2.0' into 7.3.0
Conflicts:
	src/Umbraco.Web/Umbraco.Web.csproj
2014-12-01 12:22:19 +11:00
Shannon 7cfcab4011 WIP working on getting the template services up to par and wrapping the new ones from old ones. 2014-11-25 18:48:19 +11:00
Shannon 787e10bbe1 ensures the templates are sorted by name 2014-11-25 18:02:17 +11:00
Shannon 8328f09d6b Works on U4-2866 - converted template tree to new tree structure. 2014-11-25 17:59:59 +11:00
Shannon 04823c23a0 Merge branch '7.2.0' into 7.3.0 2014-11-25 17:46:51 +11:00
Shannon 5af67facad Removes non-completed/tested/used code for templates which was during a WIP of the grid some time ago. 2014-11-25 17:36:02 +11:00
Shannon be9e4c9623 Merge branch '7.2.0' into 7.3.0 2014-11-25 17:07:35 +11:00
Anthony Dang e03988dd81 Removed regions from LoggingService to expose code. 2014-11-21 12:38:56 +00:00
Anthony Dang 79990b6a6c Cleaned up interface as per Shannons comments https://github.com/umbraco/Umbraco-CMS/pull/559/files#r20683448 2014-11-21 12:38:27 +00:00
Shannon 71ca90d74b Merge remote-tracking branch 'origin/6.2.2' into 6.2.4 2014-11-21 09:14:22 +11:00
Shannon Deminick fb42472f31 Merge pull request #554 from cloud46limited/umbUKFest-3556
Fixed type in Step 4 install wizard - U4-3556.
2014-11-21 09:13:10 +11:00
Anthony Dang 7f78aef05f Issue U4-5231 - Created an interface based on the LogHelper, and created a service, exposed through Application.Services. 2014-11-20 16:11:04 +00:00
Gareth Evans - Cloud46 Limited b6695b6953 Fixed type in Step 4 install wizard - U4-3556. 2014-11-20 14:48:26 +00:00
Alejandro Ocampo 8820fa1fdf U4-4400 Make upload new media item button bit clearer 2014-11-20 14:27:33 +00:00
Shannon df3d427c0b WIP - Updates templates service and repo with some extra methods, creates new template tree, updates template model with some more properties, still need to finish the template tree, it's missing some menu actions. 2014-11-20 19:51:42 +11:00
Shannon e558918432 Completes migrating the lang tree to the new format, a good starting place to convert the other ones even with having the legacy dialogs in place. 2014-11-20 17:54:30 +11:00
Shannon e6d1eb0ba0 Converts languages tree to new structure 2014-11-20 16:28:50 +11:00
Shannon f32a46c546 Working on U4-1979 - language service 2014-11-20 13:41:34 +11:00
leekelleher a4de37efb9 Fixes U4-5658 - Dictionary tree JS: 'openDictionary' defined in Languages tree 2014-10-20 11:30:46 +01:00
Jeavon Leopold ee386d06da Fix for U4-5480 "Bad value for attribute rel on element img in Richtext editor" by removing the attributes in the RTE value converter so they don't render on the front end site but still exist in the Umbraco UI 2014-10-01 18:48:23 +01:00
1867 changed files with 65225 additions and 72972 deletions
+1
View File
@@ -129,3 +129,4 @@ src/*.boltdata/
/src/Umbraco.Web.UI/Umbraco/Js/canvasdesigner.front.js
src/umbraco.sln.ide/*
build/UmbracoCms.*/
src/.vs/
+9 -9
View File
@@ -1,9 +1,9 @@
# The MIT License (MIT) #
Copyright (c) 2013 Umbraco
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# The MIT License (MIT) #
Copyright (c) 2013 Umbraco
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+13 -22
View File
@@ -23,14 +23,15 @@ ReplaceIISExpressPortNumber.exe ..\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj %rel
ECHO Installing the Microsoft.Bcl.Build package before anything else, otherwise you'd have to run build.cmd twice
SET nuGetFolder=%CD%\..\src\packages\
..\src\.nuget\NuGet.exe sources Remove -Name MyGetUmbracoCore
..\src\.nuget\NuGet.exe sources Remove -Name MyGetUmbracoCore >NUL
..\src\.nuget\NuGet.exe sources Add -Name MyGetUmbracoCore -Source https://www.myget.org/F/umbracocore/api/v2/ >NUL
..\src\.nuget\NuGet.exe install ..\src\Umbraco.Web.UI\packages.config -OutputDirectory %nuGetFolder%
..\src\.nuget\NuGet.exe install ..\src\umbraco.businesslogic\packages.config -OutputDirectory %nuGetFolder%
..\src\.nuget\NuGet.exe install ..\src\Umbraco.Core\packages.config -OutputDirectory %nuGetFolder%
..\src\.nuget\NuGet.exe install ..\src\Umbraco.Web.UI\packages.config -OutputDirectory %nuGetFolder% -Verbosity quiet
..\src\.nuget\NuGet.exe install ..\src\umbraco.businesslogic\packages.config -OutputDirectory %nuGetFolder% -Verbosity quiet
..\src\.nuget\NuGet.exe install ..\src\Umbraco.Core\packages.config -OutputDirectory %nuGetFolder% -Verbosity quiet
ECHO Removing the belle build folder to make sure everything is clean as a whistle
ECHO Removing the belle build folder and bower_components folder to make sure everything is clean as a whistle
RD ..\src\Umbraco.Web.UI.Client\build /Q /S
RD ..\src\Umbraco.Web.UI.Client\bower_components /Q /S
ECHO Removing existing built files to make sure everything is clean as a whistle
RMDIR /Q /S _BuildOutput
@@ -42,33 +43,23 @@ DEL /F /Q webpihash.txt
ECHO Making sure Git is in the path so that the build can succeed
CALL InstallGit.cmd
ECHO Performing MSBuild and producing Umbraco binaries zip files
%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "Build.proj" /p:BUILD_RELEASE=%release% /p:BUILD_COMMENT=%comment%
%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "Build.proj" /p:BUILD_RELEASE=%release% /p:BUILD_COMMENT=%comment% /verbosity:minimal
ECHO Adding dummy files to include in the NuGet package so that empty folders actually get created
SET dummytext=This file is only here so that the containing folder will be included in the NuGet package, it is safe to delete.
ECHO %dummytext% > .\_BuildOutput\WebApp\App_Code\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\App_Data\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\App_Plugins\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\css\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\masterpages\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\media\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\scripts\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\usercontrols\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\Views\Partials\dummy.txt
ECHO %dummytext% > .\_BuildOutput\WebApp\Views\MacroPartials\dummy.txt
ECHO Setting node_modules folder to hidden to prevent VS13 from crashing on it while loading the websites project
attrib +h ..\src\Umbraco.Web.UI.Client\node_modules
ECHO Adding Web.config transform files to the NuGet package
REN .\_BuildOutput\WebApp\MacroScripts\Web.config Web.config.transform
REN .\_BuildOutput\WebApp\Views\Web.config Web.config.transform
REN .\_BuildOutput\WebApp\Xslt\Web.config Web.config.transform
ECHO Packing the NuGet release files
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.Core.nuspec -Version %version%
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.nuspec -Version %version%
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoExamine.PDF.nuspec
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.Core.nuspec -Version %version% -Symbols -Verbosity quiet
..\src\.nuget\NuGet.exe Pack NuSpecs\UmbracoCms.nuspec -Version %version% -Verbosity quiet
IF ERRORLEVEL 1 GOTO :showerror
ECHO No errors were detected but you still may see some in the output, then it's time to investigate.
ECHO You might see some warnings but that is completely normal.
GOTO :EOF
:showerror
+133 -124
View File
@@ -1,4 +1,3 @@
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
@@ -14,18 +13,18 @@
<Import Project="..\tools\UmbracoMSBuildTasks\Umbraco.MSBuild.Tasks.Targets" />
<Import Project="..\tools\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<UsingTask TaskName="GenerateHash" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<UsingTask TaskName="GenerateHash" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<InputFiles ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<OutputFile ParameterType="System.String" Required="true" />
<InputFiles ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<OutputFile ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Using Namespace="System.IO" />
<Using Namespace="System.Linq" />
<Using Namespace="System.Security.Cryptography" />
<Code Type="Fragment" Language="cs">
<![CDATA[
<Using Namespace="System.IO" />
<Using Namespace="System.Linq" />
<Using Namespace="System.Security.Cryptography" />
<Code Type="Fragment" Language="cs">
<![CDATA[
using (var ms = new MemoryStream())
{
foreach (var item in InputFiles)
@@ -48,11 +47,11 @@
}
}
]]>
</Code>
</Code>
</Task>
</UsingTask>
</UsingTask>
<!--
****************************************************
VARIABLES
@@ -69,6 +68,12 @@
<PropertyGroup Condition="'$(BUILD_RELEASE)'!='' AND '$(BUILD_COMMENT)'!=''">
<DECIMAL_BUILD_NUMBER>.$(BUILD_RELEASE)-$(BUILD_COMMENT)</DECIMAL_BUILD_NUMBER>
</PropertyGroup>
<PropertyGroup Condition="'$(BUILD_RELEASE)'!='' AND '$(BUILD_NIGHTLY)'!=''">
<DECIMAL_BUILD_NUMBER>.$(BUILD_RELEASE)-$(BUILD_NIGHTLY)</DECIMAL_BUILD_NUMBER>
</PropertyGroup>
<PropertyGroup Condition="'$(BUILD_RELEASE)'!='' AND '$(BUILD_COMMENT)'!='' AND '$(BUILD_NIGHTLY)'!=''">
<DECIMAL_BUILD_NUMBER>.$(BUILD_RELEASE)-$(BUILD_COMMENT)-$(BUILD_NIGHTLY)</DECIMAL_BUILD_NUMBER>
</PropertyGroup>
<PropertyGroup>
<BuildConfiguration>Release</BuildConfiguration>
@@ -76,35 +81,24 @@
<BuildZipFileName>UmbracoCms$(DECIMAL_BUILD_NUMBER).zip</BuildZipFileName>
<BuildZipFileNameBin>UmbracoCms.AllBinaries$(DECIMAL_BUILD_NUMBER).zip</BuildZipFileNameBin>
<BuildZipFileNameWebPi>UmbracoCms.WebPI$(DECIMAL_BUILD_NUMBER).zip</BuildZipFileNameWebPi>
<BuildZipExaminePDFName>UmbracoExamine.PDF.0.6.0.zip</BuildZipExaminePDFName>
<IncludeSymbols>False</IncludeSymbols>
<BuildFolderRelativeToProjects>..\..\build\$(BuildFolder)</BuildFolderRelativeToProjects>
<BuildFolderAbsolutePath>$(MSBuildProjectDirectory)\$(BuildFolder)</BuildFolderAbsolutePath>
<SolutionBinFolder>$(BuildFolder)bin\</SolutionBinFolder>
<WebAppFolder>$(BuildFolder)WebApp\</WebAppFolder>
<WebPiFolder>$(BuildFolder)WebPi\</WebPiFolder>
<ConfigsFolder>$(BuildFolder)Configs\</ConfigsFolder>
<ConfigsFolder>$(BuildFolder)Configs\</ConfigsFolder>
<SolutionBinFolderRelativeToProjects>$(BuildFolderRelativeToProjects)bin\</SolutionBinFolderRelativeToProjects>
<SolutionBinFolderAbsolutePath>$(BuildFolderAbsolutePath)bin\</SolutionBinFolderAbsolutePath>
<WebAppFolderRelativeToProjects>$(BuildFolderRelativeToProjects)WebApp\</WebAppFolderRelativeToProjects>
<WebAppFolderAbsolutePath>$(BuildFolderAbsolutePath)WebApp\</WebAppFolderAbsolutePath>
<WebPiFolderRelativeToProjects>$(BuildFolderRelativeToProjects)WebPi\</WebPiFolderRelativeToProjects>
<WebPiFolderAbsolutePath>$(BuildFolderAbsolutePath)WebPi\</WebPiFolderAbsolutePath>
<ExaminePDFPath>$(BuildFolderAbsolutePath)UmbracoExamine.PDF\</ExaminePDFPath>
<ExamineAzurePath>$(BuildFolderAbsolutePath)UmbracoExamine.Azure\</ExamineAzurePath>
<ExaminePDFAzurePath>$(BuildFolderAbsolutePath)UmbracoExamine.PDF.Azure\</ExaminePDFAzurePath>
</PropertyGroup>
<ItemGroup>
<SystemFolders Include="$(WebAppFolder)App_Plugins" />
<SystemFolders Include="$(WebAppFolder)App_Code" />
<SystemFolders Include="$(WebAppFolder)App_Data" />
<SystemFolders Include="$(WebAppFolder)Media" />
<SystemFolders Include="$(WebAppFolder)Masterpages" />
<SystemFolders Include="$(WebAppFolder)Scripts" />
<SystemFolders Include="$(WebAppFolder)Css" />
<SystemFolders Include="$(WebAppFolder)Xslt" />
<SystemFolders Include="$(WebAppFolder)UserControls" />
<SystemFolders Include="$(WebAppFolder)Views" />
</ItemGroup>
@@ -114,16 +108,16 @@
*****************************************************
-->
<Target Name="Build" DependsOnTargets="GenerateWebPiHash">
<Target Name="Build" DependsOnTargets="GenerateWebPiHash">
<Message Text="Build finished" />
</Target>
<Target Name="GenerateWebPiHash" DependsOnTargets="ZipWebPiApp">
<ItemGroup>
</Target>
<Target Name="GenerateWebPiHash" DependsOnTargets="ZipWebPiApp">
<ItemGroup>
<WebPiFile Include="$(BuildZipFileNameWebPi)" />
</ItemGroup>
<Message Text="Calculating hash for $(BuildZipFileNameWebPi)" />
<GenerateHash InputFiles="@(WebPiFile)" OutputFile="webpihash.txt" />
</ItemGroup>
<Message Text="Calculating hash for $(BuildZipFileNameWebPi)" />
<GenerateHash InputFiles="@(WebPiFile)" OutputFile="webpihash.txt" />
</Target>
<Target Name="CleanUp" DependsOnTargets="ZipWebPiApp">
@@ -150,26 +144,18 @@
DestinationFiles="@(WebPiFiles->'$(WebPiFolder)%(RecursiveDir)%(Filename)%(Extension)')" />
<!-- Zip the files -->
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameWebPi)%22 %22$(WebPiFolderAbsolutePath)*%22" />
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameWebPi)%22 %22$(WebPiFolderAbsolutePath)*%22 -x!dotLess.Core.dll -x![Content_Types].xml >NUL" />
</Target>
<Target Name="ZipWebApp" DependsOnTargets="ZipUmbracoExaminePDF" >
<Target Name="ZipWebApp" DependsOnTargets="CreateSystemFolders" >
<Message Text="Starting to zip to $(buildDate)-$(BuildZipFileName)" Importance="high" />
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameBin)%22 %22$(SolutionBinFolderAbsolutePath)*%22 -x!dotLess.Core.dll" />
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileName)%22 %22$(WebAppFolderAbsolutePath)*%22 -x!dotLess.Core.dll" />
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileNameBin)%22 %22$(SolutionBinFolderAbsolutePath)*%22 -x!dotLess.Core.dll >NUL" />
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipFileName)%22 %22$(WebAppFolderAbsolutePath)*%22 -x!dotLess.Core.dll -x![Content_Types].xml >NUL" />
<Message Text="Finished zipping to build\$(BuildFolder)\$(buildDate)-$(BuildZipFileName)" Importance="high" />
</Target>
<Target Name="ZipUmbracoExaminePDF" DependsOnTargets="CreateSystemFolders" >
<Message Text="Starting to zip to $(buildDate)-$(BuildZipExaminePDFName)" Importance="high" />
<Exec Command="..\tools\7zip\7za.exe a -r %22$(BuildZipExaminePDFName)%22 %22$(ExaminePDFPath)*%22" />
<Message Text="Finished zipping to build\$(BuildFolder)\$(buildDate)-$(BuildZipExaminePDFName)" Importance="high" />
</Target>
<Target Name="CreateSystemFolders" DependsOnTargets="CopyBelleBuild" Inputs="@(SystemFolders)" Outputs="%(Identity).Dummy">
<MakeDir Directories="@(SystemFolders)" />
</Target>
@@ -177,14 +163,14 @@
<Target Name="CopyBelleBuild" DependsOnTargets="CopyLibraries" >
<ItemGroup>
<BelleFiles Include="..\src\Umbraco.Web.UI.Client\build\belle\**\*.*" Exclude="..\src\Umbraco.Web.UI.Client\build\belle\index.html" />
</ItemGroup>
<Copy SourceFiles="@(BelleFiles)"
DestinationFiles="@(BelleFiles->'$(WebAppFolder)umbraco\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</ItemGroup>
<Copy SourceFiles="@(BelleFiles)"
DestinationFiles="@(BelleFiles->'$(WebAppFolder)umbraco\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>
<Target Name="CopyLibraries" DependsOnTargets="OffsetTimestamps" >
<!-- Copy SQL CE -->
<ItemGroup>
@@ -217,7 +203,7 @@
</Target>
<!-- Copy the transformed web.config file to the root -->
<Target Name="CopyTransformedWebConfig" DependsOnTargets="CopyTransformedConfig">
<Target Name="CopyTransformedWebConfig" DependsOnTargets="CopyTransformedConfig">
<ItemGroup>
<WebConfigFile Include="..\src\Umbraco.Web.UI\web.$(BuildConfiguration).Config.transformed" />
</ItemGroup>
@@ -226,24 +212,30 @@
DestinationFiles="$(WebAppFolder)Web.config"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>
<!-- Copy the config files and rename them to *.config.transform -->
<Target Name="CopyTransformedConfig" DependsOnTargets="CopyXmlDocumentation">
</Target>
<!-- Copy the config files and rename them to *.config.transform -->
<Target Name="CopyTransformedConfig" DependsOnTargets="CopyXmlDocumentation">
<ItemGroup>
<ConfigFiles Include="$(WebAppFolder)config\*.config;$(WebAppFolder)config\*.js" />
<WebConfigTransformFile Include="$(WebAppFolder)Web.config" />
</ItemGroup>
<Copy SourceFiles="@(ConfigFiles)"
DestinationFiles="@(ConfigFiles->'$(ConfigsFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<Copy SourceFiles="@(WebConfigTransformFile)"
DestinationFiles="$(ConfigsFolder)Web.config.transform"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<ConfigFiles Include="$(WebAppFolder)config\*.config;$(WebAppFolder)config\*.js" />
<CustomLanguageFiles Include="$(WebAppFolder)config\lang\*.xml" />
<WebConfigTransformFile Include="$(WebAppFolder)Web.config" />
</ItemGroup>
<Copy SourceFiles="@(ConfigFiles)"
DestinationFiles="@(ConfigFiles->'$(ConfigsFolder)\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<Copy SourceFiles="@(CustomLanguageFiles)"
DestinationFiles="@(CustomLanguageFiles->'$(ConfigsFolder)Lang\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<Copy SourceFiles="@(WebConfigTransformFile)"
DestinationFiles="$(ConfigsFolder)Web.config.transform"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>
<!-- Copy the xml documentation to the bin folder -->
@@ -261,78 +253,95 @@
<!-- Unlike 2010, the VS2012 build targets file doesn't clean up the umbraco.presentation dir, do it manually -->
<Target Name="CleanupPresentation" DependsOnTargets="CompileProjects">
<ItemGroup>
<PresentationFolderToDelete Include="$(WebAppFolder)umbraco.presentation" />
<ItemGroup>
<PresentationFolderToDelete Include="$(WebAppFolder)umbraco.presentation" />
</ItemGroup>
<RemoveDir Directories="@(PresentationFolderToDelete)" />
<RemoveDir Directories="@(PresentationFolderToDelete)" />
</Target>
<Target Name="CompileProjects" DependsOnTargets="CompileExternalExamineProjects">
<Target Name="CompileProjects" DependsOnTargets="SetVersionNumber">
<Message Text="Compiling web project to build\$(BuildFolder)" Importance="high" />
<!-- For UseWPP_CopyWebApplication=True see http://stackoverflow.com/questions/1983575/copywebapplication-with-web-config-transformations -->
<!-- Build the Umbraco.Web.UI project -->
<MSBuild Projects="..\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj" Properties="WarningLevel=0;Configuration=$(BuildConfiguration);UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False;OutDir=$(SolutionBinFolderAbsolutePath);WebProjectOutputDir=$(WebAppFolderAbsolutePath)" Targets="Clean;Rebuild;" BuildInParallel="False" ToolsVersion="4.0" UnloadProjectsOnCompletion="False">
<MSBuild Projects="..\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj" Properties="WarningLevel=0;Configuration=$(BuildConfiguration);UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False;OutDir=$(SolutionBinFolderAbsolutePath);WebProjectOutputDir=$(WebAppFolderAbsolutePath);Verbosity=minimal" Targets="Clean;Rebuild;" BuildInParallel="False" ToolsVersion="4.0" UnloadProjectsOnCompletion="False">
</MSBuild>
<!-- DONE -->
<Message Text="Finished compiling projects" Importance="high" />
</Target>
<Target Name="CompileExternalExamineProjects" DependsOnTargets="SetVersionNumber">
<Message Text="Building externally shipped examine projects" Importance="high" />
<!-- First remove old files from the examine builds -->
<ItemGroup>
<FilesToDeleteBeforeBuild Include="$(ExaminePDFPath)*;$(ExamineAzurePath)*"/>
</ItemGroup>
<Delete Files="@(FilesToDeleteBeforeBuild)" />
<!--
Build the UmbracoExamine.PDF.Azure library ... this builds the 3 projects that we want to bundle separately so no need to build each one separately .
We'll just build this one and then manually copy the DLLs to where we want them.
-->
<MSBuild Projects="..\src\UmbracoExamine.PDF.Azure\UmbracoExamine.PDF.Azure.csproj" Properties="WarningLevel=0;Configuration=$(BuildConfiguration);PipelineDependsOnBuild=False;OutDir=$(ExaminePDFAzurePath);" Targets="Clean;Build;" BuildInParallel="False" ToolsVersion="4.0" UnloadProjectsOnCompletion="False">
</MSBuild>
<ItemGroup>
<ExaminePDFFiles Include="$(ExaminePDFAzurePath)**\UmbracoExamine.PDF.dll;$(ExaminePDFAzurePath)**\UmbracoExamine.PDF.pdf;$(ExaminePDFAzurePath)**\UmbracoExamine.PDF.xml;$(ExaminePDFAzurePath)**\itextsharp.dll" />
<ExamineAzureFiles Include="$(ExaminePDFAzurePath)**\UmbracoExamine.Azure.dll;$(ExaminePDFAzurePath)**\UmbracoExamine.Azure.pdb;$(ExaminePDFAzurePath)**\UmbracoExamine.Azure.xml" />
<ExaminePDFAzureFiles Include="$(ExaminePDFAzurePath)**\UmbracoExamine.Azure.PDF.dll;$(ExaminePDFAzurePath)**\UmbracoExamine.Azure.PDF.pdb;$(ExaminePDFAzurePath)**\UmbracoExamine.Azure.PDF.xml" />
</ItemGroup>
<!-- Now copy the built files to their correct deployment folders-->
<Copy SourceFiles="@(ExaminePDFFiles)"
DestinationFolder="$(ExaminePDFPath)"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<Copy SourceFiles="@(ExamineAzureFiles)"
DestinationFolder="$(ExamineAzurePath)"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
<!-- Then just delete the files we don't want to ship in the UmbracoExamine.Azure.PDF folder -->
<ItemGroup>
<FilesToDeleteAfterBuild Include="$(ExaminePDFAzurePath)*" Exclude="$(ExaminePDFAzurePath)UmbracoExamine.PDF.Azure.dll;$(ExaminePDFAzurePath)UmbracoExamine.PDF.Azure.pdb;$(ExaminePDFAzurePath)UmbracoExamine.PDF.Azure.xml"/>
</ItemGroup>
<Delete Files="@(FilesToDeleteAfterBuild)" />
</Target>
<Target Name="SetVersionNumber" Condition="'$(BUILD_RELEASE)'!=''">
<PropertyGroup>
<NewVersion>$(BUILD_RELEASE)</NewVersion>
<NewVersion Condition="'$(BUILD_COMMENT)'!=''">$(BUILD_RELEASE)-$(BUILD_COMMENT)</NewVersion>
</PropertyGroup>
<!-- Match & replace 3 and 4 digit version numbers and -beta (if it's there) -->
<PropertyGroup>
<NewVersion>$(BUILD_RELEASE)</NewVersion>
<NewVersion Condition="'$(BUILD_COMMENT)'!=''">$(BUILD_RELEASE)-$(BUILD_COMMENT)</NewVersion>
<NewVersion Condition="'$(BUILD_NIGHTLY)'!=''">$(BUILD_RELEASE)-$(BUILD_NIGHTLY)</NewVersion>
<NewVersion Condition="'$(BUILD_COMMENT)'!='' And '$(BUILD_NIGHTLY)'!=''">$(BUILD_RELEASE)-$(BUILD_COMMENT)-$(BUILD_NIGHTLY)</NewVersion>
</PropertyGroup>
<!-- Match & replace 3 and 4 digit version numbers and -beta and +nightly (if they're there) -->
<FileUpdate
Files="..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
Regex="(\d+)\.(\d+)\.(\d+)(.(\d+))?"
ReplacementText="$(BUILD_RELEASE)"/>
<FileUpdate Files="..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
Regex="CurrentComment { get { return &quot;([a-zA-Z]+)?&quot;"
Regex="CurrentComment { get { return &quot;(.+)?&quot;"
ReplacementText="CurrentComment { get { return &quot;$(BUILD_COMMENT)&quot;"/>
<XmlPoke XmlInputPath=".\NuSpecs\build\UmbracoCms.props"
Namespaces="&lt;Namespace Prefix='x' Uri='http://schemas.microsoft.com/developer/msbuild/2003' /&gt;"
Query="//x:UmbracoVersion"
Value="$(NewVersion)" />
<FileUpdate Files="..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
Condition="'$(BUILD_NIGHTLY)'!=''"
Regex="CurrentComment { get { return &quot;(.+)?&quot;"
ReplacementText="CurrentComment { get { return &quot;$(BUILD_NIGHTLY)&quot;"/>
<FileUpdate Files="..\src\Umbraco.Core\Configuration\UmbracoVersion.cs"
Condition="'$(BUILD_COMMENT)'!='' AND '$(BUILD_NIGHTLY)'!=''"
Regex="CurrentComment { get { return &quot;(.+)?&quot;"
ReplacementText="CurrentComment { get { return &quot;$(BUILD_COMMENT)-$(BUILD_NIGHTLY)&quot;"/>
<!--This updates the AssemblyFileVersion for the solution to the umbraco version-->
<FileUpdate
Files="..\src\SolutionInfo.cs"
Regex="AssemblyFileVersion\(&quot;(.+)?&quot;\)"
ReplacementText="AssemblyFileVersion(&quot;$(BUILD_RELEASE)&quot;)"/>
<!--This updates the AssemblyInformationalVersion for the solution to the umbraco version and comment-->
<FileUpdate
Condition="'$(BUILD_COMMENT)'!=''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\(&quot;(.+)?&quot;\)"
ReplacementText="AssemblyInformationalVersion(&quot;$(BUILD_RELEASE)-$(BUILD_COMMENT)&quot;)"/>
<FileUpdate
Condition="'$(BUILD_COMMENT)'==''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\(&quot;(.+)?&quot;\)"
ReplacementText="AssemblyInformationalVersion(&quot;$(BUILD_RELEASE)&quot;)"/>
<FileUpdate
Condition="'$(BUILD_NIGHTLY)'!=''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\(&quot;(.+)?&quot;\)"
ReplacementText="AssemblyInformationalVersion(&quot;$(BUILD_RELEASE)-$(BUILD_NIGHTLY)&quot;)"/>
<FileUpdate
Condition="'$(BUILD_COMMENT)'!='' AND '$(BUILD_NIGHTLY)'!=''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\(&quot;(.+)?&quot;\)"
ReplacementText="AssemblyInformationalVersion(&quot;$(BUILD_RELEASE)-$(BUILD_COMMENT)-$(BUILD_NIGHTLY)&quot;)"/>
<FileUpdate
Condition="'$(BUILD_COMMENT)'=='' AND '$(BUILD_NIGHTLY)'==''"
Files="..\src\SolutionInfo.cs"
Regex="AssemblyInformationalVersion\(&quot;(.+)?&quot;\)"
ReplacementText="AssemblyInformationalVersion(&quot;$(BUILD_RELEASE)&quot;)"/>
<!--This updates the copyright year-->
<FileUpdate
Files="..\src\SolutionInfo.cs"
Regex="AssemblyCopyright\(&quot;Copyright © Umbraco (\d{4})&quot;\)"
ReplacementText="AssemblyCopyright(&quot;Copyright © Umbraco $([System.DateTime]::Now.ToString(`yyyy`))&quot;)"/>
<XmlPoke XmlInputPath=".\NuSpecs\build\UmbracoCms.props"
Namespaces="&lt;Namespace Prefix='x' Uri='http://schemas.microsoft.com/developer/msbuild/2003' /&gt;"
Query="//x:UmbracoVersion"
Value="$(NewVersion)" />
</Target>
</Project>
+4 -4
View File
@@ -6,7 +6,7 @@ SET nuGetFolder=%CD%\..\src\packages\
ECHO Configured packages folder: %nuGetFolder%
ECHO Current folder: %CD%
%CD%\..\src\.nuget\NuGet.exe install Npm.js -OutputDirectory %nuGetFolder%
%CD%\..\src\.nuget\NuGet.exe install Npm.js -OutputDirectory %nuGetFolder% -Verbosity quiet
for /f "delims=" %%A in ('dir %nuGetFolder%node.js.* /b') do set "nodePath=%nuGetFolder%%%A\"
for /f "delims=" %%A in ('dir %nuGetFolder%npm.js.* /b') do set "npmPath=%nuGetFolder%%%A\tools\"
@@ -24,9 +24,9 @@ ECHO Change directory to %CD%\..\src\Umbraco.Web.UI.Client\
CD %CD%\..\src\Umbraco.Web.UI.Client\
ECHO Do npm install and the grunt build of Belle
call npm install
call npm install -g grunt-cli
call npm install -g bower
call npm install --quiet
call npm install -g grunt-cli --quiet
call npm install -g bower --quiet
call grunt build --buildversion=%release%
ECHO Reset path to what it was before
@@ -1,74 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>UmbracoCms.Core.AllBinaries</id>
<version>6.1.2</version>
<title>Umbraco Cms Core All Binaries</title>
<authors>Morten Christensen</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://umbraco.codeplex.com/license</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the core assemblies and all of the dependant assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms-package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies and all of the dependant assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
</metadata>
<files>
<file src="..\_BuildOutput\bin\businesslogic.dll" target="lib\businesslogic.dll" />
<file src="..\_BuildOutput\bin\AutoMapper.dll" target="lib\AutoMapper.dll" />
<file src="..\_BuildOutput\bin\AutoMapper.Net4.dll" target="lib\AutoMapper.Net4.dll" />
<file src="..\_BuildOutput\bin\businesslogic.dll" target="lib\businesslogic.dll" />
<file src="..\_BuildOutput\bin\ClientDependency.Core.dll" target="lib\ClientDependency.Core.dll" />
<file src="..\_BuildOutput\bin\ClientDependency.Core.Mvc.dll" target="lib\ClientDependency.Core.Mvc.dll" />
<file src="..\_BuildOutput\bin\cms.dll" target="lib\cms.dll" />
<file src="..\_BuildOutput\bin\controls.dll" target="lib\controls.dll" />
<file src="..\_BuildOutput\bin\CookComputing.XmlRpcV2.dll" target="lib\CookComputing.XmlRpcV2.dll" />
<file src="..\_BuildOutput\bin\Examine.dll" target="lib\Examine.dll" />
<file src="..\_BuildOutput\bin\HtmlAgilityPack.dll" target="lib\HtmlAgilityPack.dll" />
<file src="..\_BuildOutput\bin\ICSharpCode.SharpZipLib.dll" target="lib\ICSharpCode.SharpZipLib.dll" />
<file src="..\_BuildOutput\bin\ImageProcessor.dll" target="lib\ImageProcessor.dll" />
<file src="..\_BuildOutput\bin\ImageProcessor.Web.dll" target="lib\ImageProcessor.Web.dll" />
<file src="..\_BuildOutput\bin\interfaces.dll" target="lib\interfaces.dll" />
<file src="..\_BuildOutput\bin\log4net.dll" target="lib\log4net.dll" />
<file src="..\_BuildOutput\bin\Lucene.Net.dll" target="lib\Lucene.Net.dll" />
<file src="..\_BuildOutput\bin\Microsoft.ApplicationBlocks.Data.dll" target="lib\Microsoft.ApplicationBlocks.Data.dll" />
<file src="..\_BuildOutput\bin\Microsoft.Threading.Tasks.dll" target="lib\Microsoft.Threading.Tasks.dll" />
<file src="..\_BuildOutput\bin\Microsoft.Threading.Tasks.Extensions.dll" target="lib\Microsoft.Threading.Tasks.Extensions.dll" />
<file src="..\_BuildOutput\bin\Microsoft.Web.Helpers.dll" target="lib\Microsoft.Web.Helpers.dll" />
<file src="..\_BuildOutput\bin\Microsoft.Web.Infrastructure.dll" target="lib\Microsoft.Web.Infrastructure.dll" />
<file src="..\_BuildOutput\bin\Microsoft.Web.Mvc.FixedDisplayModes.dll" target="lib\Microsoft.Web.Mvc.FixedDisplayModes.dll" />
<file src="..\_BuildOutput\bin\MiniProfiler.dll" target="lib\MiniProfiler.dll" />
<file src="..\_BuildOutput\bin\MySql.Data.dll" target="lib\MySql.Data.dll" />
<file src="..\_BuildOutput\bin\Newtonsoft.Json.dll" target="lib\Newtonsoft.Json.dll" />
<file src="..\_BuildOutput\bin\NuGet.Core.dll" target="lib\NuGet.Core.dll" />
<file src="..\_BuildOutput\bin\SQLCE4Umbraco.dll" target="lib\SQLCE4Umbraco.dll" />
<file src="..\_BuildOutput\bin\System.Data.SqlServerCe.dll" target="lib\System.Data.SqlServerCe.dll" />
<file src="..\_BuildOutput\bin\System.Data.SqlServerCe.Entity.dll" target="lib\System.Data.SqlServerCe.Entity.dll" />
<file src="..\_BuildOutput\bin\System.Net.Http.dll" target="lib\System.Net.Http.dll" />
<file src="..\_BuildOutput\bin\System.Net.Http.Extensions.dll" target="lib\System.Net.Http.Extensions.dll" />
<file src="..\_BuildOutput\bin\System.Net.Http.Formatting.dll" target="lib\System.Net.Http.Formatting.dll" />
<file src="..\_BuildOutput\bin\System.Net.Http.Primitives.dll" target="lib\System.Net.Http.Primitives.dll" />
<file src="..\_BuildOutput\bin\System.Net.Http.WebRequest.dll" target="lib\System.Net.Http.WebRequest.dll" />
<file src="..\_BuildOutput\bin\System.Web.Helpers.dll" target="lib\System.Web.Helpers.dll" />
<file src="..\_BuildOutput\bin\System.Web.Http.dll" target="lib\System.Web.Http.dll" />
<file src="..\_BuildOutput\bin\System.Web.Http.WebHost.dll" target="lib\System.Web.Http.WebHost.dll" />
<file src="..\_BuildOutput\bin\System.Web.Mvc.dll" target="lib\System.Web.Mvc.dll" />
<file src="..\_BuildOutput\bin\System.Web.Razor.dll" target="lib\System.Web.Razor.dll" />
<file src="..\_BuildOutput\bin\System.Web.WebPages.Administration.dll" target="lib\System.Web.WebPages.Administration.dll" />
<file src="..\_BuildOutput\bin\System.Web.WebPages.Deployment.dll" target="lib\System.Web.WebPages.Deployment.dll" />
<file src="..\_BuildOutput\bin\System.Web.WebPages.dll" target="lib\System.Web.WebPages.dll" />
<file src="..\_BuildOutput\bin\System.Web.WebPages.Razor.dll" target="lib\System.Web.WebPages.Razor.dll" />
<file src="..\_BuildOutput\bin\TidyNet.dll" target="lib\TidyNet.dll" />
<file src="..\_BuildOutput\bin\Umbraco.Core.dll" target="lib\Umbraco.Core.dll" />
<file src="..\_BuildOutput\bin\umbraco.DataLayer.dll" target="lib\umbraco.DataLayer.dll" />
<file src="..\_BuildOutput\bin\umbraco.dll" target="lib\umbraco.dll" />
<file src="..\_BuildOutput\bin\umbraco.editorControls.dll" target="lib\umbraco.editorControls.dll" />
<file src="..\_BuildOutput\bin\umbraco.MacroEngines.dll" target="lib\umbraco.MacroEngines.dll" />
<file src="..\_BuildOutput\bin\umbraco.providers.dll" target="lib\umbraco.providers.dll" />
<file src="..\_BuildOutput\bin\Umbraco.Web.UI.dll" target="lib\Umbraco.Web.UI.dll" />
<file src="..\_BuildOutput\bin\UmbracoExamine.dll" target="lib\UmbracoExamine.dll" />
<file src="..\_BuildOutput\bin\UrlRewritingNet.UrlRewriter.dll" target="lib\UrlRewritingNet.UrlRewriter.dll" />
</files>
</package>
@@ -1,71 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>UmbracoCms.Core</id>
<version>7.0.0</version>
<title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://umbraco.codeplex.com/license</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the core assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms-package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
</metadata>
<files>
<file src="..\..\src\SQLCE4Umbraco\obj\Debug\SQLCE4Umbraco.dll" target="lib" />
<file src="..\..\src\SQLCE4Umbraco\obj\Debug\SQLCE4Umbraco.pdb" target="lib" />
<file src="..\..\src\SQLCE4Umbraco\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\SQLCE4Umbraco" />
<file src="..\..\src\umbraco.businesslogic\obj\Debug\businesslogic.dll" target="lib" />
<file src="..\..\src\umbraco.businesslogic\obj\Debug\businesslogic.pdb" target="lib" />
<file src="..\..\src\umbraco.businesslogic\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.businesslogic" />
<file src="..\..\src\umbraco.cms\obj\Debug\cms.dll" target="lib" />
<file src="..\..\src\umbraco.cms\obj\Debug\cms.pdb" target="lib" />
<file src="..\..\src\umbraco.cms\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.cms" />
<file src="..\..\src\umbraco.controls\obj\Debug\controls.dll" target="lib" />
<file src="..\..\src\umbraco.controls\obj\Debug\controls.pdb" target="lib" />
<file src="..\..\src\umbraco.controls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.controls" />
<file src="..\..\src\umbraco.interfaces\obj\Debug\interfaces.dll" target="lib" />
<file src="..\..\src\umbraco.interfaces\obj\Debug\interfaces.pdb" target="lib" />
<file src="..\..\src\umbraco.interfaces\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.interfaces" />
<file src="..\..\src\Umbraco.Core\obj\Debug\Umbraco.Core.dll" target="lib" />
<file src="..\..\src\Umbraco.Core\obj\Debug\Umbraco.Core.pdb" target="lib" />
<file src="..\..\src\Umbraco.Core\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Core" />
<file src="..\..\src\umbraco.datalayer\obj\Debug\umbraco.DataLayer.dll" target="lib" />
<file src="..\..\src\umbraco.datalayer\obj\Debug\umbraco.DataLayer.pdb" target="lib" />
<file src="..\..\src\umbraco.datalayer\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.datalayer" />
<file src="..\..\src\umbraco.editorControls\obj\Debug\umbraco.editorControls.dll" target="lib" />
<file src="..\..\src\umbraco.editorControls\obj\Debug\umbraco.editorControls.pdb" target="lib" />
<file src="..\..\src\umbraco.editorControls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.editorControls" />
<file src="..\..\src\umbraco.MacroEngines\obj\Debug\umbraco.MacroEngines.dll" target="lib" />
<file src="..\..\src\umbraco.MacroEngines\obj\Debug\umbraco.MacroEngines.pdb" target="lib" />
<file src="..\..\src\umbraco.MacroEngines\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.MacroEngines" />
<file src="..\..\src\umbraco.providers\obj\Debug\umbraco.providers.dll" target="lib" />
<file src="..\..\src\umbraco.providers\obj\Debug\umbraco.providers.pdb" target="lib" />
<file src="..\..\src\umbraco.providers\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.providers" />
<file src="..\..\src\Umbraco.Web\obj\Debug\umbraco.dll" target="lib" />
<file src="..\..\src\Umbraco.Web\obj\Debug\umbraco.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web" />
<file src="..\..\src\bin\Debug\Umbraco.Web.UI.dll" target="lib" />
<file src="..\..\src\bin\Debug\Umbraco.Web.UI.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web.UI\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web.UI" />
<file src="..\..\src\UmbracoExamine\obj\Debug\UmbracoExamine.dll" target="lib" />
<file src="..\..\src\UmbracoExamine\obj\Debug\UmbracoExamine.pdb" target="lib" />
<file src="..\..\src\UmbracoExamine\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\UmbracoExamine" />
</files>
</package>
+103 -70
View File
@@ -1,73 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>UmbracoCms.Core</id>
<version>7.0.0</version>
<title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://umbraco.codeplex.com/license</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the core assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms-package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<dependency id="Microsoft.AspNet.Mvc" version="[4.0.30506.0,5.0.0)" />
<dependency id="Microsoft.AspNet.WebApi" version="[4.0.30506,5.0.0)" />
<dependency id="Microsoft.AspNet.WebApi.WebHost" version="[4.0.30506, 5.0.0)" />
<dependency id="Microsoft.AspNet.WebApi.Core" version="[4.0.30506, 5.0.0)" />
<dependency id="Microsoft.AspNet.WebApi.Client" version="[4.0.30506, 5.0.0)" />
<dependency id="Microsoft.AspNet.Mvc.FixedDisplayModes" version="1.0.1" />
<dependency id="Microsoft.Net.Http" version="[2.0.20710.0, 3.0.0)" />
<dependency id="MiniProfiler" version="[2.1.0, 3.0.0)" />
<dependency id="HtmlAgilityPack" version="[1.4.6, 2.0.0)" />
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
<dependency id="SharpZipLib" version="[0.86.0, 1.0.0)" />
<dependency id="MySql.Data" version="[6.6.5]" />
<dependency id="xmlrpcnet" version="[2.5.0, 3.0.0)" />
<dependency id="ClientDependency" version="[1.8.0, 2.0.0)" />
<dependency id="ClientDependency-Mvc" version="[1.8.0, 2.0.0)" />
<dependency id="AutoMapper" version="[3.0.0, 4.0.0)" />
<dependency id="Newtonsoft.Json" version="[6.0.5, 7.0.0)" />
<dependency id="Examine" version="[0.1.57, 1.0.0)" />
<dependency id="ImageProcessor" version="[1.9.5, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[3.3.1, 5.0.0)" />
</dependencies>
</metadata>
<files>
<file src="..\_BuildOutput\WebApp\bin\businesslogic.dll" target="lib\businesslogic.dll" />
<file src="..\_BuildOutput\WebApp\bin\businesslogic.xml" target="lib\businesslogic.xml" />
<file src="..\_BuildOutput\WebApp\bin\cms.dll" target="lib\cms.dll" />
<file src="..\_BuildOutput\WebApp\bin\cms.xml" target="lib\cms.xml" />
<file src="..\_BuildOutput\WebApp\bin\controls.dll" target="lib\controls.dll" />
<file src="..\_BuildOutput\WebApp\bin\controls.xml" target="lib\controls.xml" />
<file src="..\_BuildOutput\WebApp\bin\interfaces.dll" target="lib\interfaces.dll" />
<file src="..\_BuildOutput\WebApp\bin\interfaces.xml" target="lib\interfaces.xml" />
<file src="..\_BuildOutput\WebApp\bin\log4net.dll" target="lib\log4net.dll" />
<file src="..\_BuildOutput\WebApp\bin\Microsoft.ApplicationBlocks.Data.dll" target="lib\Microsoft.ApplicationBlocks.Data.dll" />
<file src="..\_BuildOutput\WebApp\bin\Microsoft.Web.Helpers.dll" target="lib\Microsoft.Web.Helpers.dll" />
<file src="..\_BuildOutput\WebApp\bin\SQLCE4Umbraco.dll" target="lib\SQLCE4Umbraco.dll" />
<file src="..\_BuildOutput\WebApp\bin\System.Data.SqlServerCe.dll" target="lib\System.Data.SqlServerCe.dll" />
<file src="..\_BuildOutput\WebApp\bin\System.Data.SqlServerCe.Entity.dll" target="lib\System.Data.SqlServerCe.Entity.dll" />
<file src="..\_BuildOutput\WebApp\bin\TidyNet.dll" target="lib\TidyNet.dll" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Core.dll" target="lib\Umbraco.Core.dll" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Core.xml" target="lib\Umbraco.Core.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.DataLayer.dll" target="lib\umbraco.DataLayer.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.DataLayer.xml" target="lib\umbraco.DataLayer.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.dll" target="lib\umbraco.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.xml" target="lib\umbraco.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.editorControls.dll" target="lib\umbraco.editorControls.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.editorControls.xml" target="lib\umbraco.editorControls.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.MacroEngines.dll" target="lib\umbraco.MacroEngines.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.MacroEngines.xml" target="lib\umbraco.MacroEngines.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.providers.dll" target="lib\umbraco.providers.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.providers.xml" target="lib\umbraco.providers.xml" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Web.UI.dll" target="lib\Umbraco.Web.UI.dll" />
<file src="..\_BuildOutput\WebApp\bin\UmbracoExamine.dll" target="lib\UmbracoExamine.dll" />
<file src="..\_BuildOutput\WebApp\bin\UrlRewritingNet.UrlRewriter.dll" target="lib\UrlRewritingNet.UrlRewriter.dll" />
<file src="tools\install.core.ps1" target="tools\install.ps1" />
</files>
<metadata>
<id>UmbracoCms.Core</id>
<version>7.0.0</version>
<title>Umbraco Cms Core Binaries</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Contains the core assemblies needed to run Umbraco Cms. This package only contains assemblies and can be used for package development. Use the UmbracoCms-package to setup Umbraco in Visual Studio as an ASP.NET project.</description>
<summary>Contains the core assemblies needed to run Umbraco Cms</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<dependency id="Microsoft.AspNet.Mvc" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.AspNet.WebApi" version="[5.2.3,6.0.0)" />
<dependency id="Microsoft.Net.Http" version="[2.2.29, 3.0.0)" />
<dependency id="Microsoft.AspNet.Identity.Owin" version="[2.2.1, 3.0.0)" />
<dependency id="Microsoft.Owin.Security.Cookies" version="[3.0.1, 4.0.0)" />
<dependency id="Microsoft.Owin.Security.OAuth" version="[3.0.1, 4.0.0)" />
<dependency id="Microsoft.Owin.Host.SystemWeb" version="[3.0.1, 4.0.0)" />
<dependency id="MiniProfiler" version="[2.1.0, 3.0.0)" />
<dependency id="HtmlAgilityPack" version="[1.4.9, 2.0.0)" />
<dependency id="Lucene.Net" version="[2.9.4.1, 3.0.0.0)" />
<dependency id="SharpZipLib" version="[0.86.0, 1.0.0)" />
<dependency id="MySql.Data" version="[6.9.7, 7.0.0)" />
<dependency id="xmlrpcnet" version="[2.5.0, 3.0.0)" />
<dependency id="ClientDependency" version="[1.8.4, 2.0.0)" />
<dependency id="ClientDependency-Mvc5" version="[1.8.0, 2.0.0)" />
<dependency id="AutoMapper" version="[3.3.1, 4.0.0)" />
<dependency id="Newtonsoft.Json" version="[6.0.8, 7.0.0)" />
<dependency id="Examine" version="[0.1.66, 1.0.0)" />
<dependency id="ImageProcessor" version="[1.9.5, 3.0.0)" />
<dependency id="ImageProcessor.Web" version="[3.3.1, 5.0.0)" />
<dependency id="semver" version="[1.1.2, 2.0.0)" />
<dependency id="Microsoft.AspNet.WebHelpers" version="[3.2.3, 4.0.0)" />
<dependency id="Microsoft.AspNet.WebPages.Data" version="[3.2.3, 4.0.0)" />
</dependencies>
</metadata>
<files>
<file src="..\_BuildOutput\WebApp\bin\businesslogic.dll" target="lib\businesslogic.dll" />
<file src="..\_BuildOutput\WebApp\bin\businesslogic.xml" target="lib\businesslogic.xml" />
<file src="..\_BuildOutput\WebApp\bin\cms.dll" target="lib\cms.dll" />
<file src="..\_BuildOutput\WebApp\bin\cms.xml" target="lib\cms.xml" />
<file src="..\_BuildOutput\WebApp\bin\controls.dll" target="lib\controls.dll" />
<file src="..\_BuildOutput\WebApp\bin\controls.xml" target="lib\controls.xml" />
<file src="..\_BuildOutput\WebApp\bin\interfaces.dll" target="lib\interfaces.dll" />
<file src="..\_BuildOutput\WebApp\bin\interfaces.xml" target="lib\interfaces.xml" />
<file src="..\_BuildOutput\WebApp\bin\log4net.dll" target="lib\log4net.dll" />
<file src="..\_BuildOutput\WebApp\bin\Microsoft.ApplicationBlocks.Data.dll" target="lib\Microsoft.ApplicationBlocks.Data.dll" />
<file src="..\_BuildOutput\WebApp\bin\SQLCE4Umbraco.dll" target="lib\SQLCE4Umbraco.dll" />
<file src="..\_BuildOutput\WebApp\bin\SQLCE4Umbraco.xml" target="lib\SQLCE4Umbraco.xml" />
<file src="..\_BuildOutput\WebApp\bin\System.Data.SqlServerCe.dll" target="lib\System.Data.SqlServerCe.dll" />
<file src="..\_BuildOutput\WebApp\bin\System.Data.SqlServerCe.Entity.dll" target="lib\System.Data.SqlServerCe.Entity.dll" />
<file src="..\_BuildOutput\WebApp\bin\TidyNet.dll" target="lib\TidyNet.dll" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Core.dll" target="lib\Umbraco.Core.dll" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Core.xml" target="lib\Umbraco.Core.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.DataLayer.dll" target="lib\umbraco.DataLayer.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.DataLayer.xml" target="lib\umbraco.DataLayer.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.dll" target="lib\umbraco.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.xml" target="lib\umbraco.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.editorControls.dll" target="lib\umbraco.editorControls.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.editorControls.xml" target="lib\umbraco.editorControls.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.MacroEngines.dll" target="lib\umbraco.MacroEngines.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.MacroEngines.xml" target="lib\umbraco.MacroEngines.xml" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.providers.dll" target="lib\umbraco.providers.dll" />
<file src="..\_BuildOutput\WebApp\bin\umbraco.providers.xml" target="lib\umbraco.providers.xml" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Web.UI.dll" target="lib\Umbraco.Web.UI.dll" />
<file src="..\_BuildOutput\WebApp\bin\Umbraco.Web.UI.xml" target="lib\Umbraco.Web.UI.xml" />
<file src="..\_BuildOutput\WebApp\bin\UmbracoExamine.dll" target="lib\UmbracoExamine.dll" />
<file src="..\_BuildOutput\WebApp\bin\UmbracoExamine.xml" target="lib\UmbracoExamine.xml" />
<file src="..\_BuildOutput\WebApp\bin\UrlRewritingNet.UrlRewriter.dll" target="lib\UrlRewritingNet.UrlRewriter.dll" />
<file src="tools\install.core.ps1" target="tools\install.ps1" />
<!-- Added to be able to produce a symbols package -->
<file src="..\_BuildOutput\bin\SQLCE4Umbraco.pdb" target="lib" />
<file src="..\..\src\SQLCE4Umbraco\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\SQLCE4Umbraco" />
<file src="..\_BuildOutput\bin\businesslogic.pdb" target="lib" />
<file src="..\..\src\umbraco.businesslogic\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.businesslogic" />
<file src="..\_BuildOutput\bin\cms.pdb" target="lib" />
<file src="..\..\src\umbraco.cms\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.cms" />
<file src="..\_BuildOutput\bin\controls.pdb" target="lib" />
<file src="..\..\src\umbraco.controls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.controls" />
<file src="..\_BuildOutput\bin\interfaces.pdb" target="lib" />
<file src="..\..\src\umbraco.interfaces\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.interfaces" />
<file src="..\_BuildOutput\bin\Umbraco.Core.pdb" target="lib" />
<file src="..\..\src\Umbraco.Core\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Core" />
<file src="..\_BuildOutput\bin\umbraco.DataLayer.pdb" target="lib" />
<file src="..\..\src\umbraco.datalayer\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.datalayer" />
<file src="..\_BuildOutput\bin\umbraco.editorControls.pdb" target="lib" />
<file src="..\..\src\umbraco.editorControls\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.editorControls" />
<file src="..\_BuildOutput\bin\umbraco.MacroEngines.pdb" target="lib" />
<file src="..\..\src\umbraco.MacroEngines\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.MacroEngines" />
<file src="..\_BuildOutput\bin\umbraco.providers.pdb" target="lib" />
<file src="..\..\src\umbraco.providers\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\umbraco.providers" />
<file src="..\_BuildOutput\bin\umbraco.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web" />
<file src="..\_BuildOutput\bin\Umbraco.Web.UI.pdb" target="lib" />
<file src="..\..\src\Umbraco.Web.UI\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\Umbraco.Web.UI" />
<file src="..\_BuildOutput\bin\UmbracoExamine.pdb" target="lib" />
<file src="..\..\src\UmbracoExamine\**\*.cs" exclude="..\..\src\**\TemporaryGeneratedFile*.cs" target="src\UmbracoExamine" />
</files>
</package>
+32 -37
View File
@@ -1,51 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="2.8">
<id>UmbracoCms</id>
<version>7.0.0</version>
<title>Umbraco Cms</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://umbraco.codeplex.com/license</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Installs Umbraco Cms in your Visual Studio ASP.NET project</description>
<summary>Installs Umbraco Cms in your Visual Studio ASP.NET project</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="Newtonsoft.Json" version="[6.0.5, 7.0.0)" />
</dependencies>
</metadata>
<metadata minClientVersion="2.8">
<id>UmbracoCms</id>
<version>7.0.0</version>
<title>Umbraco Cms</title>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://opensource.org/licenses/MIT</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Installs Umbraco Cms in your Visual Studio ASP.NET project</description>
<summary>Installs Umbraco Cms in your Visual Studio ASP.NET project</summary>
<language>en-US</language>
<tags>umbraco</tags>
<dependencies>
<dependency id="UmbracoCms.Core" version="[$version$]" />
<dependency id="Newtonsoft.Json" version="[6.0.5, 7.0.0)" />
</dependencies>
</metadata>
<files>
<file src="..\_BuildOutput\Configs\**" target="Content\config" exclude="..\_BuildOutput\Configs\Web.config.transform" />
<file src="..\_BuildOutput\WebApp\css\**" target="Content\css" />
<file src="..\_BuildOutput\WebApp\masterpages\**" target="Content\masterpages" />
<file src="..\_BuildOutput\WebApp\media\**" target="Content\media" />
<file src="..\_BuildOutput\WebApp\scripts\**" target="Content\scripts" />
<file src="..\_BuildOutput\WebApp\usercontrols\**" target="Content\usercontrols" />
<file src="..\_BuildOutput\WebApp\Views\**" target="Content\Views" exclude="..\_BuildOutput\WebApp\Views\Web.config" />
<file src="..\_BuildOutput\WebApp\xslt\**" target="Content\xslt" />
<file src="..\_BuildOutput\WebApp\default.aspx" target="Content\default.aspx" />
<file src="..\_BuildOutput\WebApp\Global.asax" target="Content\Global.asax" />
<file src="..\_BuildOutput\WebApp\Web.config" target="UmbracoFiles\Web.config" />
<file src="..\_BuildOutput\WebApp\App_Browsers\**" target="UmbracoFiles\App_Browsers" />
<file src="..\_BuildOutput\WebApp\App_Plugins\**" target="UmbracoFiles\App_Plugins" />
<file src="..\_BuildOutput\WebApp\bin\amd64\**" target="UmbracoFiles\bin\amd64" />
<file src="..\_BuildOutput\WebApp\bin\x86\**" target="UmbracoFiles\bin\x86" />
<file src="..\_BuildOutput\WebApp\config\splashes\**" target="UmbracoFiles\config\splashes" />
<file src="..\_BuildOutput\WebApp\umbraco\**" target="UmbracoFiles\umbraco" />
<file src="..\_BuildOutput\WebApp\umbraco_client\**" target="UmbracoFiles\umbraco_client" />
<file src="..\_BuildOutput\Configs\**" target="Content\Config" exclude="..\_BuildOutput\Configs\Web.config.transform" />
<file src="..\_BuildOutput\WebApp\Views\**" target="Content\Views" exclude="..\_BuildOutput\WebApp\Views\Web.config" />
<file src="..\_BuildOutput\WebApp\default.aspx" target="Content\default.aspx" />
<file src="..\_BuildOutput\WebApp\Global.asax" target="Content\Global.asax" />
<file src="..\_BuildOutput\WebApp\Web.config" target="UmbracoFiles\Web.config" />
<file src="..\_BuildOutput\WebApp\App_Browsers\**" target="UmbracoFiles\App_Browsers" />
<file src="..\_BuildOutput\WebApp\bin\amd64\**" target="UmbracoFiles\bin\amd64" />
<file src="..\_BuildOutput\WebApp\bin\x86\**" target="UmbracoFiles\bin\x86" />
<file src="..\_BuildOutput\WebApp\config\splashes\**" target="UmbracoFiles\Config\splashes" />
<file src="..\_BuildOutput\WebApp\umbraco\**" target="UmbracoFiles\umbraco" />
<file src="..\_BuildOutput\WebApp\umbraco_client\**" target="UmbracoFiles\umbraco_client" />
<file src="tools\install.ps1" target="tools\install.ps1" />
<file src="tools\Readme.txt" target="tools\Readme.txt" />
<file src="tools\ReadmeUpgrade.txt" target="tools\ReadmeUpgrade.txt" />
<file src="tools\Web.config.install.xdt" target="Content\Web.config.install.xdt" />
<file src="tools\applications.config.install.xdt" target="Content\config\applications.config.install.xdt" />
<file src="tools\ClientDependency.config.install.xdt" target="Content\config\ClientDependency.config.install.xdt" />
<file src="tools\Dashboard.config.install.xdt" target="Content\config\Dashboard.config.install.xdt" />
<file src="tools\trees.config.install.xdt" target="Content\config\trees.config.install.xdt" />
<file src="tools\umbracoSettings.config.install.xdt" target="Content\config\umbracoSettings.config.install.xdt" />
<file src="tools\Views.Web.config.install.xdt" target="Views\Web.config.install.xdt" />
<file src="build\**" target="build" />
</files>
</package>
-23
View File
@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>UmbracoExamine.PDF</id>
<version>0.7.0</version>
<authors>Umbraco HQ</authors>
<owners>Umbraco HQ</owners>
<licenseUrl>http://umbraco.codeplex.com/license</licenseUrl>
<projectUrl>http://umbraco.com/</projectUrl>
<iconUrl>http://umbraco.com/media/357769/100px_transparent.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>UmbracoExmine.PDF</description>
<tags>umbraco</tags>
<dependencies>
<dependency id="UmbracoCms.Core" version="[7.0.0, 8.0.0)" />
<dependency id="iTextSharp" version="[5.5.3, 6.0.0)" />
</dependencies>
</metadata>
<files>
<file src="..\_BuildOutput\UmbracoExamine.PDF\UmbracoExamine.PDF.dll" target="lib\UmbracoExamine.PDF.dll" />
<file src="..\_BuildOutput\UmbracoExamine.PDF\UmbracoExamine.PDF.XML" target="lib\UmbracoExamine.PDF.XML" />
</files>
</package>
@@ -35,6 +35,11 @@
views/dashboard/developer/examinemanagement.html
</control>
</tab>
<tab caption="Xml Data Integrity Report" xdt:Transform="InsertIfMissing">
<control>
views/dashboard/developer/xmldataintegrityreport.html
</control>
</tab>
</section>
<section alias="StartupMediaDashboardSection" xdt:Locator="Match(alias)">
+9 -9
View File
@@ -1,18 +1,18 @@
A note about running Umbraco from Visual Studio.
_ _ __ __ ____ _____ _____ ____
| | | | \/ | _ \| __ \ /\ / ____/ __ \
| | | | \ / | |_) | |__) | / \ | | | | | |
| | | | |\/| | _ <| _ / / /\ \| | | | | |
| |__| | | | | |_) | | \ \ / ____ | |___| |__| |
\____/|_| |_|____/|_| \_/_/ \_\_____\____/
----------------------------------------------------
Don't forget to build!
When upgrading your website using NuGet you should answer "No" to the questions to overwrite the Web.config
file (and config files in the config folder).
We've done our best to transform your configuration files but in case something is not quite right: remember we
backed up your files in App_Data\NuGetBackup so you can find the original files before they were transformed.
We've overwritten all the files in the Umbraco and Umbraco_Client folder, these have been backed up in
App_Data\NuGetBackup. We didn't overwrite the UI.xml file nor did we remove any files or folders that you or
a package might have added. Only the existing files were overwritten. If you customized anything then make
sure to do a compare and merge with the NuGetBackup folder.
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use
Publish this won't affect you.
+33
View File
@@ -0,0 +1,33 @@
_ _ __ __ ____ _____ _____ ____
| | | | \/ | _ \| __ \ /\ / ____/ __ \
| | | | \ / | |_) | |__) | / \ | | | | | |
| | | | |\/| | _ <| _ / / /\ \| | | | | |
| |__| | | | | |_) | | \ \ / ____ | |___| |__| |
\____/|_| |_|____/|_| \_/_/ \_\_____\____/
----------------------------------------------------
Don't forget to build!
When upgrading your website using NuGet you should answer "No" to the questions to overwrite the Web.config
file (and config files in the config folder).
We've done our best to transform your configuration files but in case something is not quite right: remember we
backed up your files in App_Data\NuGetBackup so you can find the original files before they were transformed.
We've overwritten all the files in the Umbraco and Umbraco_Client folder, these have been backed up in
App_Data\NuGetBackup. We didn't overwrite the UI.xml file nor did we remove any files or folders that you or
a package might have added. Only the existing files were overwritten. If you customized anything then make
sure to do a compare and merge with the NuGetBackup folder.
This NuGet package includes build targets that extend the creation of a deploy package, which is generated by
Publishing from Visual Studio. The targets will only work once Publishing is configured, so if you don't use
Publish this won't affect you.
The following items will now be automatically included when creating a deploy package or publishing to the file
system: umbraco, umbraco_client, config\splashes and global.asax.
Please read the release notes on our.umbraco.org:
http://our.umbraco.org/contribute/releases
- Umbraco
@@ -0,0 +1,37 @@
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
xdt:Locator="Match(name)"
xdt:Transform="SetAttributes(type)">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
xdt:Locator="Match(name)"
xdt:Transform="SetAttributes(type)" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
xdt:Locator="Match(name)"
xdt:Transform="SetAttributes(type)" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
xdt:Locator="Match(factoryType)"
xdt:Transform="SetAttributes(factoryType)" />
</system.web.webPages.razor>
<system.web>
<pages
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
xdt:Locator="Match(pageParserFilterType,pageBaseType,userControlBaseType)"
xdt:Transform="SetAttributes(pageParserFilterType,pageBaseType,userControlBaseType)">
<controls>
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc"
xdt:Locator="Match(namespace)"
xdt:Transform="SetAttributes(assembly)" />
</controls>
</pages>
</system.web>
</configuration>
+39 -4
View File
@@ -20,7 +20,10 @@
<appSettings xdt:Transform="InsertIfMissing" />
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
<add key="owin:appStartup" value="UmbracoDefaultOwinStartup" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
</appSettings>
<appSettings>
<add key="owin:appStartup" value="UmbracoDefaultOwinStartup" xdt:Locator="Match(key)" xdt:Transform="SetAttributes" />
</appSettings>
<umbracoConfiguration xdt:Transform="InsertIfMissing">
@@ -37,8 +40,10 @@
<DbProviderFactories xdt:Transform="InsertIfMissing">
<remove invariant="System.Data.SqlServerCe.4.0" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(invariant,description,type)" />
<remove invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(invariant,description,type)" />
<remove invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add invariant="MySql.Data.MySqlClient" xdt:Locator="Match(invariant)" xdt:Transform="Remove" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="InsertIfMissing" />
<add invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" xdt:Locator="Match(invariant)" xdt:Transform="SetAttributes(type)" />
</DbProviderFactories>
</system.data>
<clientDependency xdt:Transform="RemoveAttributes(version)" />
@@ -141,6 +146,12 @@
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Newtonsoft.Json')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Mvc')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Web.Http')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.OAuth')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.Owin.Security.Cookies')" xdt:Transform="Remove" />
<dependentAssembly xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='System.Net.Http.Formatting')" xdt:Transform="Remove" />
</assemblyBinding>
</runtime>
@@ -156,7 +167,31 @@
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
</dependentAssembly>
<dependentAssembly xdt:Transform="Insert">
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
+1 -2
View File
@@ -27,7 +27,6 @@ if ($project) {
if(Test-Path $umbracoBinFolder\interfaces.dll) { Remove-Item $umbracoBinFolder\interfaces.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\log4net.dll) { Remove-Item $umbracoBinFolder\log4net.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll) { Remove-Item $umbracoBinFolder\Microsoft.ApplicationBlocks.Data.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Microsoft.Web.Helpers.dll) { Remove-Item $umbracoBinFolder\Microsoft.Web.Helpers.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\SQLCE4Umbraco.dll) { Remove-Item $umbracoBinFolder\SQLCE4Umbraco.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Data.SqlServerCe.dll) { Remove-Item $umbracoBinFolder\System.Data.SqlServerCe.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Data.SqlServerCe.Entity.dll) { Remove-Item $umbracoBinFolder\System.Data.SqlServerCe.Entity.dll -Force -Confirm:$false }
@@ -59,12 +58,12 @@ if ($project) {
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.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\MySql.Data.dll) { Remove-Item $umbracoBinFolder\MySql.Data.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\Newtonsoft.Json.dll) { Remove-Item $umbracoBinFolder\Newtonsoft.Json.dll -Force -Confirm:$false }
if(Test-Path $umbracoBinFolder\System.Net.Http.Formatting.dll) { Remove-Item $umbracoBinFolder\System.Net.Http.Formatting.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 }
+31 -93
View File
@@ -47,108 +47,46 @@ if ($project) {
robocopy $umbracoClientFolder $umbracoClientBackupPath /e /LOG:$copyLogsPath\UmbracoClientBackup.log
robocopy $umbracoClientFolderSource $umbracoClientFolder /is /it /e /LOG:$copyLogsPath\UmbracoClientCopy.log
}
$copyWebconfig = $false
try
{
# SJ - What can I say: big up for James Newton King for teaching us a hack for detecting if this is a new install vs. an upgrade!
# https://github.com/JamesNK/Newtonsoft.Json/pull/387 - would never have seen this without the controversial pull request..
$dte2 = Get-Interface $dte ([EnvDTE80.DTE2])
if ($dte2.ActiveWindow.Caption -eq "Package Manager Console")
{
# user is installing from VS NuGet console
# get reference to the window, the console host and the input history
# copy web.config if "install-package UmbracoCms" was last input
$consoleWindow = $(Get-VSComponentModel).GetService([NuGetConsole.IPowerConsoleWindow])
$props = $consoleWindow.GetType().GetProperties([System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::NonPublic)
$prop = $props | ? { $_.Name -eq "ActiveHostInfo" } | select -first 1
if ($prop -eq $null) { return }
$hostInfo = $prop.GetValue($consoleWindow)
if ($hostInfo -eq $null) { return }
$history = $hostInfo.WpfConsole.InputHistory.History
$lastCommand = $history | select -last 1
if ($lastCommand)
{
$lastCommand = $lastCommand.Trim().ToLower()
if ($lastCommand.StartsWith("install-package") -and $lastCommand.Contains("umbracocms"))
{
$copyWebconfig = $true
}
}
}
else
{
# user is installing from VS NuGet dialog
# get reference to the window, then smart output console provider
# copy web.config if messages in buffered console contains "installing...UmbracoCms" in last operation
$instanceField = [NuGet.Dialog.PackageManagerWindow].GetField("CurrentInstance", [System.Reflection.BindingFlags]::Static -bor [System.Reflection.BindingFlags]::NonPublic)
$consoleField = [NuGet.Dialog.PackageManagerWindow].GetField("_smartOutputConsoleProvider", [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::NonPublic)
if ($instanceField -eq $null -or $consoleField -eq $null) { return }
$instance = $instanceField.GetValue($null)
if ($instance -eq $null) { return }
$consoleProvider = $consoleField.GetValue($instance)
if ($consoleProvider -eq $null) { return }
$console = $consoleProvider.CreateOutputConsole($false)
$messagesField = $console.GetType().GetField("_messages", [System.Reflection.BindingFlags]::Instance -bor [System.Reflection.BindingFlags]::NonPublic)
if ($messagesField -eq $null) { return }
$messages = $messagesField.GetValue($console)
if ($messages -eq $null) { return }
$operations = $messages -split "=============================="
$lastOperation = $operations | select -last 1
if ($lastOperation)
{
$lastOperation = $lastOperation.ToLower()
$lines = $lastOperation -split "`r`n"
$installMatch = $lines | ? { $_.StartsWith("------- installing...umbracocms ") } | select -first 1
if ($installMatch)
{
$copyWebconfig = $true
}
}
}
}
catch
{
# stop potential errors from bubbling up
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
$installLogFile = Join-Path $projectDestinationPath "NuGetInstallError.log"
$text = "Error occurred: " + $ErrorMessage + " failure: " + $FailedItem
$text | Out-File $installLogFile
}
$copyWebconfig = $true
$destinationWebConfig = Join-Path $projectDestinationPath "Web.config"
if(Test-Path $destinationWebConfig)
{
Try
{
[xml]$config = Get-Content $destinationWebConfig
$config.configuration.appSettings.ChildNodes | ForEach-Object {
if($_.key -eq "umbracoConfigurationStatus")
{
# The web.config has an umbraco-specific appSetting in it
# don't overwrite it and let config transforms do their thing
$copyWebconfig = $false
}
}
}
Catch { }
}
if($copyWebconfig -eq $true)
{
$packageWebConfigSource = Join-Path $rootPath "UmbracoFiles\Web.config"
$destinationWebConfig = Join-Path $projectDestinationPath "Web.config"
Copy-Item $packageWebConfigSource $destinationWebConfig -Force
}
}
$installFolder = Join-Path $projectDestinationPath "Install"
if(Test-Path $installFolder) {
Remove-Item $installFolder -Force -Recurse -Confirm:$false
}
# Open readme.txt file
$DTE.ItemOperations.OpenFile($toolsPath + '\Readme.txt')
# Open appropriate readme
if($copyWebconfig -eq $true)
{
$DTE.ItemOperations.OpenFile($toolsPath + '\Readme.txt')
}
else
{
$DTE.ItemOperations.OpenFile($toolsPath + '\ReadmeUpgrade.txt')
}
}
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<log4net xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appender name="AsynchronousLog4NetAppender" xdt:Transform="Remove" xdt:Locator="Match(name)" />
<appender name="AsynchronousLog4NetAppender" type="Umbraco.Core.Logging.ParallelForwardingAppender,Umbraco.Core" xdt:Transform="Insert" >
<appender-ref ref="rollingFile" />
</appender>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender" xdt:Transform="InsertIfMissing">
<file value="App_Data\Logs\UmbracoTraceLog.txt" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value=" %date [P%property{processId}/D%property{appDomainId}/T%thread] %-5level %logger - %message%newline" />
</layout>
<encoding value="utf-8" />
</appender>
</log4net>
+2 -2
View File
@@ -7,12 +7,12 @@
<add initialize="false" sortOrder="0" alias="mediaRecycleBin" application="media" title="Recycle Bin" iconClosed="icon-folder" iconOpen="icon-folder" type="umbraco.cms.presentation.Trees.MediaRecycleBin, umbraco" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="stylesheets" title="Stylesheets" type="umbraco.loadStylesheets, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="0" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="stylesheetProperty" title="Stylesheet Property" type="umbraco.loadStylesheetProperty, umbraco" iconClosed="" iconOpen="" initialize="false" sortOrder="0" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="templates" title="Templates" type="umbraco.loadTemplates, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="1" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="templates" title="Templates" type="Umbraco.Web.Trees.TemplatesTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder-open" sortOrder="1" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="partialViews" title="Partial Views" silent="false" initialize="true" iconClosed="icon-folder" iconOpen="icon-folder" type="Umbraco.Web.Trees.PartialViewsTree, umbraco" sortOrder="2" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="scripts" title="Scripts" type="umbraco.loadScripts, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="3" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="dictionary" title="Dictionary" type="umbraco.loadDictionary, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="4" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add alias="dictionary" xdt:Locator="Match(alias)" xdt:Transform="RemoveAttributes(action)" />
<add application="settings" alias="languages" title="Languages" type="umbraco.loadLanguages, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="5" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="languages" title="Languages" type="Umbraco.Web.Trees.LanguageTreeController, umbraco" iconClosed="icon-folder" iconOpen="icon-folder-open" sortOrder="5" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="mediaTypes" title="Media Types" type="umbraco.loadMediaTypes, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="6" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add application="settings" alias="nodeTypes" title="Document Types" type="umbraco.loadNodeTypes, umbraco" iconClosed="icon-folder" iconOpen="icon-folder" sortOrder="7" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
<add initialize="true" sortOrder="0" alias="datatype" application="developer" title="Data Types" iconClosed="icon-folder" iconOpen="icon-folder" type="Umbraco.Web.Trees.DataTypeTreeController, umbraco" xdt:Locator="Match(alias)" xdt:Transform="SetAttributes()" />
+2 -1
View File
@@ -1,2 +1,3 @@
# Usage: on line 2 put the release version, on line 3 put the version comment (example: beta)
7.2.0
7.3.0
beta3
-13
View File
@@ -1,13 +0,0 @@
Umbraco CMS version 4.5 is licensed under the OSI approved MIT License:
Copyright (c) 2007-2010 umbraco I/S.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Umbraco versions prior to 4.5 were licensed under a combination of MIT and a propriatary UI license. The license history can be found here:
http://umbraco.codeplex.com/license
-33
View File
@@ -1,33 +0,0 @@
Umbraco - the simple, flexible and friendly ASP.NET CMS
=======================================================
For the first time on the Microsoft platform a free user and developer friendly cms that makes it quick and easy to create websites - or a breeze to build complex web applications. umbraco got award-winning integration capabilities and supports your ASP.NET User and Custom Controls out of the box. It's a developers dream and your users will love it too. Used by more than 57.000 active websites including Heinz.com, Peugeot.com, NAIAS.com and Microsofts documentinteropinitiative.org website you can be sure that the technology is proven, stable and scales.
More info at http://umbraco.com
Exploring the repository
========================
Most contributors will work on their own fork and should pick the branch in which they need their fix. For more information see:
http://our.umbraco.org/contribute/guidelines-for-core-contribution
Exploring the source
====================
The Umbraco source code is never required for you to start building sites. If you are not using the source code for debugging purposes or to contribute to the source then please download the binaries listed at http://umbraco.codeplex.com
With that said, the Umbraco solution can be opened in Visual Studio 2010 with SP1 installed or Visual Studio 2012.
Contributing
============
Umbraco is Open Source which means you can contribute to make it great!
Read all about it at http://our.umbraco.org/contribute
Forums
======
We have a forum running on http://our.umbraco.org for friendly community support.
Documentation
=============
Our documentation section provides help on installing and using Umbraco including API reference documentation: http://our.umbraco.org/documentation
Submitting Issues
=================
Another way you can contribute to Umbraco is by providing issue reports, for information on how to submit an issue report refer to our online guide at http://our.umbraco.org/contribute/report-an-issue-or-request-a-feature
Binary file not shown.
+3 -2
View File
@@ -77,8 +77,9 @@
<Compile Include="SqlCEUtility.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="app.config" />
<None Include="app.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
@@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String></wpf:ResourceDictionary>
+16
View File
@@ -14,6 +14,22 @@
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+6 -3
View File
@@ -1,8 +1,8 @@
using System.Reflection;
using System.Reflection;
using System.Resources;
[assembly: AssemblyCompany("umbraco")]
[assembly: AssemblyCopyright("Copyright © Umbraco 2012")]
[assembly: AssemblyCompany("Umbraco")]
[assembly: AssemblyCopyright("Copyright © Umbraco 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -10,3 +10,6 @@ using System.Resources;
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("7.3.0")]
[assembly: AssemblyInformationalVersion("7.3.0-beta3")]
+10 -8
View File
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using umbraco.interfaces;
@@ -12,13 +13,14 @@ namespace Umbraco.Core
/// </summary>
internal sealed class ActionsResolver : LazyManyObjectsResolverBase<ActionsResolver, IAction>
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="packageActions"></param>
internal ActionsResolver(Func<IEnumerable<Type>> packageActions)
: base(packageActions)
/// <summary>
/// Constructor
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="logger"></param>
/// <param name="packageActions"></param>
internal ActionsResolver(IServiceProvider serviceProvider, ILogger logger, Func<IEnumerable<Type>> packageActions)
: base(serviceProvider, logger, packageActions)
{
}
@@ -55,7 +57,7 @@ namespace Umbraco.Core
var instance = type.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static);
//if the singletone initializer is not found, try simply creating an instance of the IAction if it supports public constructors
if (instance == null)
typeInstance = PluginManager.Current.CreateInstance<IAction>(type);
typeInstance = ServiceProvider.GetService(type) as IAction;
else
typeInstance = instance.GetValue(null, null) as IAction;
+4 -4
View File
@@ -1,8 +1,6 @@
using System;
namespace Umbraco.Core
{
/// <summary>
/// <summary>
/// Helper methods for Activation
/// </summary>
internal static class ActivatorHelper
@@ -14,7 +12,9 @@ namespace Umbraco.Core
/// <returns></returns>
public static T CreateInstance<T>() where T : class, new()
{
return Activator.CreateInstance(typeof(T)) as T;
return new ActivatorServiceProvider().GetService(typeof (T)) as T;
}
}
}
@@ -0,0 +1,12 @@
using System;
namespace Umbraco.Core
{
internal class ActivatorServiceProvider : IServiceProvider
{
public object GetService(Type serviceType)
{
return Activator.CreateInstance(serviceType);
}
}
}
+187 -62
View File
@@ -1,15 +1,13 @@
using System;
using System.Configuration;
using System.Threading;
using System.Web;
using System.Web.Caching;
using Umbraco.Core.Cache;
using System.Threading.Tasks;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using Umbraco.Core.Profiling;
using Umbraco.Core.Services;
using Umbraco.Core.Sync;
namespace Umbraco.Core
{
@@ -21,30 +19,65 @@ namespace Umbraco.Core
/// </remarks>
public class ApplicationContext : IDisposable
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <param name="cache"></param>
public ApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache)
{
/// <param name="logger"></param>
public ApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, ProfilingLogger logger)
{
if (dbContext == null) throw new ArgumentNullException("dbContext");
if (serviceContext == null) throw new ArgumentNullException("serviceContext");
if (cache == null) throw new ArgumentNullException("cache");
if (logger == null) throw new ArgumentNullException("logger");
_databaseContext = dbContext;
_services = serviceContext;
ApplicationCache = cache;
ProfilingLogger = logger;
Init();
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <param name="cache"></param>
[Obsolete("Use the other constructor specifying a ProfilingLogger instead")]
public ApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache)
: this(dbContext, serviceContext, cache,
new ProfilingLogger(LoggerResolver.Current.Logger, ProfilerResolver.Current.Profiler))
{
}
/// <summary>
/// Creates a basic app context
/// </summary>
/// <param name="cache"></param>
[Obsolete("Use the other constructor specifying a ProfilingLogger instead")]
public ApplicationContext(CacheHelper cache)
{
if (cache == null) throw new ArgumentNullException("cache");
ApplicationCache = cache;
ProfilingLogger = new ProfilingLogger(LoggerResolver.Current.Logger, ProfilerResolver.Current.Profiler);
Init();
}
/// <summary>
/// Creates a basic app context
/// </summary>
/// <param name="cache"></param>
/// <param name="logger"></param>
public ApplicationContext(CacheHelper cache, ProfilingLogger logger)
{
if (cache == null) throw new ArgumentNullException("cache");
if (logger == null) throw new ArgumentNullException("logger");
ApplicationCache = cache;
ProfilingLogger = logger;
Init();
}
/// <summary>
@@ -60,13 +93,13 @@ namespace Umbraco.Core
/// </remarks>
public static ApplicationContext EnsureContext(ApplicationContext appContext, bool replaceContext)
{
if (ApplicationContext.Current != null)
if (Current != null)
{
if (!replaceContext)
return ApplicationContext.Current;
return Current;
}
ApplicationContext.Current = appContext;
return ApplicationContext.Current;
Current = appContext;
return Current;
}
/// <summary>
@@ -83,16 +116,44 @@ namespace Umbraco.Core
/// <remarks>
/// This is NOT thread safe
/// </remarks>
[Obsolete("Use the other method specifying an ProfilingLogger instead")]
public static ApplicationContext EnsureContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, bool replaceContext)
{
if (ApplicationContext.Current != null)
if (Current != null)
{
if (!replaceContext)
return ApplicationContext.Current;
return Current;
}
var ctx = new ApplicationContext(dbContext, serviceContext, cache);
ApplicationContext.Current = ctx;
return ApplicationContext.Current;
Current = ctx;
return Current;
}
/// <summary>
/// A method used to create and ensure that a global ApplicationContext singleton is created.
/// </summary>
/// <param name="cache"></param>
/// <param name="logger"></param>
/// <param name="replaceContext">
/// If set to true will replace the current singleton instance - This should only be used for unit tests or on app
/// startup if for some reason the boot manager is not the umbraco boot manager.
/// </param>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
/// <returns></returns>
/// <remarks>
/// This is NOT thread safe
/// </remarks>
public static ApplicationContext EnsureContext(DatabaseContext dbContext, ServiceContext serviceContext, CacheHelper cache, ProfilingLogger logger, bool replaceContext)
{
if (Current != null)
{
if (!replaceContext)
return Current;
}
var ctx = new ApplicationContext(dbContext, serviceContext, cache, logger);
Current = ctx;
return Current;
}
/// <summary>
@@ -108,7 +169,13 @@ namespace Umbraco.Core
/// </remarks>
public CacheHelper ApplicationCache { get; private set; }
// IsReady is set to true by the boot manager once it has successfully booted
/// <summary>
/// Exposes the global ProfilingLogger - this should generally not be accessed via the UmbracoContext and should normally just be exposed
/// on most base classes or injected with IoC
/// </summary>
public ProfilingLogger ProfilingLogger { get; private set; }
// IsReady is set to true by the boot manager once it has successfully booted
// note - the original umbraco module checks on content.Instance in umbraco.dll
// now, the boot task that setup the content store ensures that it is ready
bool _isReady = false;
@@ -141,56 +208,120 @@ namespace Umbraco.Core
// GlobalSettings.CurrentVersion returns the hard-coded "current version"
// the system is configured if they match
// if they don't, install runs, updates web.config (presumably) and updates GlobalSettings.ConfiguredStatus
//
// then there is Application["umbracoNeedConfiguration"] which makes no sense... getting rid of it... SD: I have actually remove that now!
//
public bool IsConfigured
{
// todo - we should not do this - ok for now
get { return _configured.Value; }
}
/// <summary>
/// If the db is configured, there is a database context and there is an umbraco schema, but we are not 'configured' , then it means we are upgrading
/// </summary>
public bool IsUpgrading
{
get
{
return Configured;
if (IsConfigured == false
&& DatabaseContext != null
&& DatabaseContext.IsDatabaseConfigured)
{
var schemaresult = DatabaseContext.ValidateDatabaseSchema();
if (schemaresult.ValidTables.Count > 0) return true;
}
return false;
}
}
/// <summary>
/// The application url.
/// </summary>
/// <remarks>
/// The application url is the url that should be used by services to talk to the application,
/// eg keep alive or scheduled publishing services. It must exist on a global context because
/// some of these services may not run within a web context.
/// The format of the application url is:
/// - has a scheme (http or https)
/// - has the SystemDirectories.Umbraco path
/// - does not end with a slash
/// It is initialized on the first request made to the server, by UmbracoModule.EnsureApplicationUrl:
/// - if umbracoSettings:settings/web.routing/@umbracoApplicationUrl is set, use the value (new setting)
/// - if umbracoSettings:settings/scheduledTasks/@baseUrl is set, use the value (backward compatibility)
/// - otherwise, use the url of the (first) request.
/// Not locking, does not matter if several threads write to this.
/// See also issues:
/// - http://issues.umbraco.org/issue/U4-2059
/// - http://issues.umbraco.org/issue/U4-6788
/// - http://issues.umbraco.org/issue/U4-5728
/// - http://issues.umbraco.org/issue/U4-5391
/// </remarks>
internal string UmbracoApplicationUrl
{
get
{
// if initialized, return
if (_umbracoApplicationUrl != null) return _umbracoApplicationUrl;
// try settings
ServerEnvironmentHelper.TrySetApplicationUrlFromSettings(this, ProfilingLogger.Logger, UmbracoConfig.For.UmbracoSettings());
// and return what we have, may be null
return _umbracoApplicationUrl;
}
set
{
_umbracoApplicationUrl = value;
}
}
/// <summary>
/// The original/first url that the web application executes
/// </summary>
/// <remarks>
/// we need to set the initial url in our ApplicationContext, this is so our keep alive service works and this must
/// exist on a global context because the keep alive service doesn't run in a web context.
/// we are NOT going to put a lock on this because locking will slow down the application and we don't really care
/// if two threads write to this at the exact same time during first page hit.
/// see: http://issues.umbraco.org/issue/U4-2059
/// </remarks>
internal string OriginalRequestUrl { get; set; }
internal string _umbracoApplicationUrl; // internal for tests
/// <summary>
/// Checks if the version configured matches the assembly version
/// </summary>
private bool Configured
private Lazy<bool> _configured;
internal MainDom MainDom { get; private set; }
private void Init()
{
get
{
try
{
string configStatus = ConfigurationStatus;
string currentVersion = UmbracoVersion.Current.ToString(3);
MainDom = new MainDom(ProfilingLogger.Logger);
MainDom.Acquire();
//Create the lazy value to resolve whether or not the application is 'configured'
_configured = new Lazy<bool>(() =>
{
try
{
var configStatus = ConfigurationStatus;
var currentVersion = UmbracoVersion.GetSemanticVersion();
var ok = configStatus == currentVersion;
if (ok)
{
//The versions are the same in config, but are they the same in the database. We can only check this
// if we have a db context available, if we don't then we are not installed anyways
if (DatabaseContext.IsDatabaseConfigured && DatabaseContext.CanConnect)
{
var found = Services.MigrationEntryService.FindEntry(GlobalSettings.UmbracoMigrationName, UmbracoVersion.GetSemanticVersion());
if (found == null)
{
//we haven't executed this migration in this environment, so even though the config versions match,
// this db has not been updated.
ProfilingLogger.Logger.Debug<ApplicationContext>(string.Format("The migration for version: '{0} has not been executed, there is no record in the database", currentVersion.ToSemanticString()));
ok = false;
}
}
}
else
{
ProfilingLogger.Logger.Debug<ApplicationContext>(string.Format("CurrentVersion different from configStatus: '{0}','{1}'", currentVersion.ToSemanticString(), configStatus));
}
if (currentVersion != configStatus)
{
LogHelper.Info<ApplicationContext>("CurrentVersion different from configStatus: '" + currentVersion + "','" + configStatus + "'");
}
return ok;
}
catch
{
return false;
}
return (configStatus == currentVersion);
}
catch
{
return false;
}
}
});
}
private string ConfigurationStatus
@@ -208,12 +339,6 @@ namespace Umbraco.Core
}
}
private void AssertIsReady()
{
if (!this.IsReady)
throw new Exception("ApplicationContext is not ready yet.");
}
private void AssertIsNotReady()
{
if (this.IsReady)
@@ -289,7 +414,7 @@ namespace Umbraco.Core
this.ApplicationCache = null;
if (_databaseContext != null) //need to check the internal field here
{
if (DatabaseContext.IsDatabaseConfigured)
if (DatabaseContext.IsDatabaseConfigured && DatabaseContext.Database != null)
{
DatabaseContext.Database.Dispose();
}
+2 -2
View File
@@ -74,7 +74,7 @@ namespace Umbraco.Core
/// <returns></returns>
private bool ShouldExecute(ApplicationContext applicationContext)
{
if (applicationContext.IsConfigured && applicationContext.DatabaseContext.CanConnect)
if (applicationContext.IsConfigured && applicationContext.DatabaseContext.IsDatabaseConfigured)
{
return true;
}
@@ -84,7 +84,7 @@ namespace Umbraco.Core
return true;
}
if (!applicationContext.DatabaseContext.CanConnect && ExecuteWhenDatabaseNotConfigured)
if (!applicationContext.DatabaseContext.IsDatabaseConfigured && ExecuteWhenDatabaseNotConfigured)
{
return true;
}
+185
View File
@@ -0,0 +1,185 @@
using System;
using System.Runtime.ConstrainedExecution;
using System.Threading;
using System.Threading.Tasks;
namespace Umbraco.Core
{
// http://blogs.msdn.com/b/pfxteam/archive/2012/02/12/10266988.aspx
//
// notes:
// - this is NOT a reader/writer lock
// - this is NOT a recursive lock
//
// using a named Semaphore here and not a Mutex because mutexes have thread
// affinity which does not work with async situations
//
// it is important that managed code properly release the Semaphore before
// going down else it will maintain the lock - however note that when the
// whole process (w3wp.exe) goes down and all handles to the Semaphore have
// been closed, the Semaphore system object is destroyed - so in any case
// an iisreset should clean up everything
//
internal class AsyncLock
{
private readonly SemaphoreSlim _semaphore;
private readonly Semaphore _semaphore2;
private readonly IDisposable _releaser;
private readonly Task<IDisposable> _releaserTask;
public AsyncLock()
: this (null)
{ }
public AsyncLock(string name)
{
// WaitOne() waits until count > 0 then decrements count
// Release() increments count
// initial count: the initial count value
// maximum count: the max value of count, and then Release() throws
if (string.IsNullOrWhiteSpace(name))
{
// anonymous semaphore
// use one unique releaser, that will not release the semaphore when finalized
// because the semaphore is destroyed anyway if the app goes down
_semaphore = new SemaphoreSlim(1, 1); // create a local (to the app domain) semaphore
_releaser = new SemaphoreSlimReleaser(_semaphore);
_releaserTask = Task.FromResult(_releaser);
}
else
{
// named semaphore
// use dedicated releasers, that will release the semaphore when finalized
// because the semaphore is system-wide and we cannot leak counts
_semaphore2 = new Semaphore(1, 1, name); // create a system-wide named semaphore
}
}
private IDisposable CreateReleaser()
{
// for anonymous semaphore, use the unique releaser, else create a new one
return _semaphore != null
? _releaser // (IDisposable)new SemaphoreSlimReleaser(_semaphore)
: new NamedSemaphoreReleaser(_semaphore2);
}
public Task<IDisposable> LockAsync()
{
var wait = _semaphore != null
? _semaphore.WaitAsync()
: _semaphore2.WaitOneAsync();
return wait.IsCompleted
? _releaserTask ?? Task.FromResult(CreateReleaser()) // anonymous vs named
: wait.ContinueWith((_, state) => (((AsyncLock) state).CreateReleaser()),
this, CancellationToken.None,
TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);
}
public Task<IDisposable> LockAsync(int millisecondsTimeout)
{
var wait = _semaphore != null
? _semaphore.WaitAsync(millisecondsTimeout)
: _semaphore2.WaitOneAsync(millisecondsTimeout);
return wait.IsCompleted
? _releaserTask ?? Task.FromResult(CreateReleaser()) // anonymous vs named
: wait.ContinueWith((_, state) => (((AsyncLock)state).CreateReleaser()),
this, CancellationToken.None,
TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);
}
public IDisposable Lock()
{
if (_semaphore != null)
_semaphore.Wait();
else
_semaphore2.WaitOne();
return _releaser ?? CreateReleaser(); // anonymous vs named
}
public IDisposable Lock(int millisecondsTimeout)
{
var entered = _semaphore != null
? _semaphore.Wait(millisecondsTimeout)
: _semaphore2.WaitOne(millisecondsTimeout);
if (entered == false)
throw new TimeoutException("Failed to enter the lock within timeout.");
return _releaser ?? CreateReleaser(); // anonymous vs named
}
// note - before making those classes some structs, read
// about "impure methods" and mutating readonly structs...
private class NamedSemaphoreReleaser : CriticalFinalizerObject, IDisposable
{
private readonly Semaphore _semaphore;
internal NamedSemaphoreReleaser(Semaphore semaphore)
{
_semaphore = semaphore;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
// critical
_semaphore.Release();
}
// we WANT to release the semaphore because it's a system object
// ie a critical non-managed resource - so we inherit from CriticalFinalizerObject
// which means that the finalizer "should" run in all situations
// however... that can fail with System.ObjectDisposedException because the
// underlying handle was closed... because we cannot guarantee that the semaphore
// is not gone already... unless we get a GCHandle = GCHandle.Alloc(_semaphore);
// which should keep it around and then we free the handle?
// so... I'm not sure this is safe really...
~NamedSemaphoreReleaser()
{
Dispose(false);
}
}
private class SemaphoreSlimReleaser : IDisposable
{
private readonly SemaphoreSlim _semaphore;
internal SemaphoreSlimReleaser(SemaphoreSlim semaphore)
{
_semaphore = semaphore;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (disposing)
{
// normal
_semaphore.Release();
}
}
~SemaphoreSlimReleaser()
{
Dispose(false);
}
}
}
}
+10 -6
View File
@@ -1,13 +1,17 @@
namespace Umbraco.Core.Auditing
using System;
using System.ComponentModel;
namespace Umbraco.Core.Auditing
{
/// <summary>
/// Public method to create new audit trail
/// </summary>
[Obsolete("Use Umbraco.Core.Services.IAuditService instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static class Audit
{
public static void Add(AuditTypes type, string comment, int userId, int objectId)
public static void Add(Umbraco.Core.Auditing.AuditTypes type, string comment, int userId, int objectId)
{
AuditTrail.Current.AddEntry(type, comment, userId, objectId);
ApplicationContext.Current.Services.AuditService.Add(
Enum<Umbraco.Core.Models.AuditType>.Parse(type.ToString()),
comment, userId, objectId);
}
}
}
-30
View File
@@ -1,30 +0,0 @@
using System;
namespace Umbraco.Core.Auditing
{
/// <summary>
/// Represents the Audit implementation
/// </summary>
internal class AuditTrail
{
#region Singleton
private static readonly Lazy<AuditTrail> lazy = new Lazy<AuditTrail>(() => new AuditTrail());
public static AuditTrail Current { get { return lazy.Value; } }
private AuditTrail()
{
WriteProvider = new DataAuditWriteProvider();
}
#endregion
private IAuditWriteProvider WriteProvider { get; set; }
public void AddEntry(AuditTypes type, string comment, int userId, int objectId)
{
WriteProvider.WriteEntry(objectId, userId, DateTime.Now, type.ToString(), comment);
}
}
}
+6 -4
View File
@@ -1,8 +1,10 @@
namespace Umbraco.Core.Auditing
using System;
using System.ComponentModel;
namespace Umbraco.Core.Auditing
{
/// <summary>
/// Enums for vailable types of auditing
/// </summary>
[Obsolete("Use Umbraco.Core.Models.AuditType instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public enum AuditTypes
{
/// <summary>
@@ -1,29 +0,0 @@
using System;
using Umbraco.Core.Models.Rdbms;
using Umbraco.Core.Persistence;
namespace Umbraco.Core.Auditing
{
internal class DataAuditWriteProvider : IAuditWriteProvider
{
/// <summary>
/// Writes an audit entry to the underlaying datastore.
/// </summary>
/// <param name="objectId">Id of the object (Content, ContentType, Media, etc.)</param>
/// <param name="userId">Id of the user</param>
/// <param name="date">Datestamp</param>
/// <param name="header">Audit header</param>
/// <param name="comment">Audit comment</param>
public void WriteEntry(int objectId, int userId, DateTime date, string header, string comment)
{
ApplicationContext.Current.DatabaseContext.Database.Insert(new LogDto
{
Comment = comment,
Datestamp = date,
Header = header,
NodeId = objectId,
UserId = userId
});
}
}
}
@@ -1,17 +0,0 @@
using System;
namespace Umbraco.Core.Auditing
{
internal interface IAuditWriteProvider
{
/// <summary>
/// Writes an audit entry to the underlaying datastore.
/// </summary>
/// <param name="objectId">Id of the object (Content, ContentType, Media, etc.)</param>
/// <param name="userId">Id of the user</param>
/// <param name="date">Datestamp</param>
/// <param name="header">Audit header</param>
/// <param name="comment">Audit comment</param>
void WriteEntry(int objectId, int userId, DateTime date, string header, string comment);
}
}
+9
View File
@@ -29,6 +29,8 @@ namespace Umbraco.Core.Cache
public const string MemberBusinessLogicCacheKey = "MemberCacheItem_";
public const string TemplateFrontEndCacheKey = "template";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
public const string TemplateBusinessLogicCacheKey = "UmbracoTemplateCache";
public const string UserContextCacheKey = "UmbracoUserContext";
@@ -45,14 +47,21 @@ namespace Umbraco.Core.Cache
public const string PropertyTypeCacheKey = "UmbracoPropertyTypeCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
public const string LanguageCacheKey = "UmbracoLanguageCache";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
public const string DomainCacheKey = "UmbracoDomainList";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
public const string StylesheetCacheKey = "UmbracoStylesheet";
[Obsolete("This is no longer used and will be removed from the codebase in the future")]
public const string StylesheetPropertyCacheKey = "UmbracoStylesheetProperty";
public const string DataTypeCacheKey = "UmbracoDataTypeDefinition";
public const string DataTypePreValuesCacheKey = "UmbracoPreVal";
public const string IdToKeyCacheKey = "UI2K";
public const string KeyToIdCacheKey = "UK2I";
}
}
@@ -8,7 +8,7 @@ namespace Umbraco.Core.Cache
/// <summary>
/// Extensions for strongly typed access
/// </summary>
internal static class CacheProviderExtensions
public static class CacheProviderExtensions
{
public static T GetCacheItem<T>(this IRuntimeCacheProvider provider,
string cacheKey,
@@ -12,7 +12,7 @@ namespace Umbraco.Core.Cache
protected const string CacheItemPrefix = "umbrtmche";
// an object that represent a value that has not been created yet
protected readonly object ValueNotCreated = new object();
protected internal static readonly object ValueNotCreated = new object();
// manupulate the underlying cache entries
// these *must* be called from within the appropriate locks
@@ -30,21 +30,58 @@ namespace Umbraco.Core.Cache
return string.Format("{0}-{1}", CacheItemPrefix, key);
}
protected object GetSafeLazyValue(Lazy<object> lazy, bool onlyIfValueIsCreated = false)
protected internal static Lazy<object> GetSafeLazy(Func<object> getCacheItem)
{
// try to generate the value and if it fails,
// wrap in an ExceptionHolder - would be much simpler
// to just use lazy.IsValueFaulted alas that field is
// internal
return new Lazy<object>(() =>
{
try
{
return getCacheItem();
}
catch (Exception e)
{
return new ExceptionHolder(e);
}
});
}
protected internal static object GetSafeLazyValue(Lazy<object> lazy, bool onlyIfValueIsCreated = false)
{
// if onlyIfValueIsCreated, do not trigger value creation
// must return something, though, to differenciate from null values
if (onlyIfValueIsCreated && lazy.IsValueCreated == false) return ValueNotCreated;
// if execution has thrown then lazy.IsValueCreated is false
// and lazy.IsValueFaulted is true (but internal) so we use our
// own exception holder (see Lazy<T> source code) to return null
if (lazy.Value is ExceptionHolder) return null;
// we have a value and execution has not thrown so returning
// here does not throw - unless we're re-entering, take care of it
try
{
// if onlyIfValueIsCreated, do not trigger value creation
// must return something, though, to differenciate from null values
if (onlyIfValueIsCreated && lazy.IsValueCreated == false) return ValueNotCreated;
return lazy.Value;
}
catch
catch (InvalidOperationException e)
{
return null;
throw new InvalidOperationException("The method that computes a value for the cache has tried to read that value from the cache.", e);
}
}
internal class ExceptionHolder
{
public ExceptionHolder(Exception e)
{
Exception = e;
}
public Exception Exception { get; private set; }
}
#region Clear
public virtual void ClearAllCache()
@@ -68,6 +105,9 @@ namespace Umbraco.Core.Cache
public virtual void ClearCacheObjectTypes(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
var isInterface = type.IsInterface;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
@@ -77,7 +117,10 @@ namespace Umbraco.Core.Cache
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = GetSafeLazyValue((Lazy<object>)x.Value, true);
return value == null || value.GetType().ToString().InvariantEquals(typeName);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return value == null || (isInterface ? (type.IsInstanceOfType(value)) : (value.GetType() == type));
})
.ToArray())
RemoveEntry((string) entry.Key);
@@ -87,6 +130,7 @@ namespace Umbraco.Core.Cache
public virtual void ClearCacheObjectTypes<T>()
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
using (WriteLock)
{
foreach (var entry in GetDictionaryEntries()
@@ -97,7 +141,10 @@ namespace Umbraco.Core.Cache
// compare on exact type, don't use "is"
// get non-created as NonCreatedValue & exceptions as null
var value = GetSafeLazyValue((Lazy<object>)x.Value, true);
return value == null || value.GetType() == typeOfT;
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return value == null || (isInterface ? (value is T) : (value.GetType() == typeOfT));
})
.ToArray())
RemoveEntry((string) entry.Key);
@@ -107,6 +154,7 @@ namespace Umbraco.Core.Cache
public virtual void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate)
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
var plen = CacheItemPrefix.Length + 1;
using (WriteLock)
{
@@ -119,9 +167,12 @@ namespace Umbraco.Core.Cache
// get non-created as NonCreatedValue & exceptions as null
var value = GetSafeLazyValue((Lazy<object>)x.Value, true);
if (value == null) return true;
return value.GetType() == typeOfT
// run predicate on the 'public key' part only, ie without prefix
&& predicate(((string)x.Key).Substring(plen), (T)value);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return (isInterface ? (value is T) : (value.GetType() == typeOfT))
// run predicate on the 'public key' part only, ie without prefix
&& predicate(((string) x.Key).Substring(plen), (T) value);
}))
RemoveEntry((string) entry.Key);
}
@@ -102,20 +102,27 @@ namespace Umbraco.Core.Cache
// cannot create value within the lock, so if result.IsValueCreated is false, just
// do nothing here - means that if creation throws, a race condition could cause
// more than one thread to reach the return statement below and throw - accepted.
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = new Lazy<object>(getCacheItem);
result = GetSafeLazy(getCacheItem);
ContextItems[cacheKey] = result;
}
}
// this may throw if getCacheItem throws, but this is the only place where
// it would throw as everywhere else we use GetLazySaveValue() to hide exceptions
// and pretend exceptions were never inserted into cache to begin with.
return result.Value;
// using GetSafeLazy and GetSafeLazyValue ensures that we don't cache
// exceptions (but try again and again) and silently eat them - however at
// some point we have to report them - so need to re-throw here
// this does not throw anymore
//return result.Value;
var value = result.Value; // will not throw (safe lazy)
var eh = value as ExceptionHolder;
if (eh != null) throw eh.Exception; // throw once!
return value;
}
#endregion
#region Insert
@@ -20,16 +20,22 @@ namespace Umbraco.Core.Cache
private readonly System.Web.Caching.Cache _cache;
/// <summary>
/// Used for debugging
/// </summary>
internal Guid InstanceId { get; private set; }
public HttpRuntimeCacheProvider(System.Web.Caching.Cache cache)
{
_cache = cache;
InstanceId = Guid.NewGuid();
}
protected override IEnumerable<DictionaryEntry> GetDictionaryEntries()
{
const string prefix = CacheItemPrefix + "-";
return _cache.Cast<DictionaryEntry>()
.Where(x => x.Key is string && ((string) x.Key).StartsWith(prefix));
.Where(x => x.Key is string && ((string)x.Key).StartsWith(prefix));
}
protected override void RemoveEntry(string key)
@@ -129,19 +135,27 @@ namespace Umbraco.Core.Cache
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = new Lazy<object>(getCacheItem);
result = GetSafeLazy(getCacheItem);
var absolute = isSliding ? System.Web.Caching.Cache.NoAbsoluteExpiration : (timeout == null ? System.Web.Caching.Cache.NoAbsoluteExpiration : DateTime.Now.Add(timeout.Value));
var sliding = isSliding == false ? System.Web.Caching.Cache.NoSlidingExpiration : (timeout ?? System.Web.Caching.Cache.NoSlidingExpiration);
lck.UpgradeToWriteLock();
//NOTE: 'Insert' on System.Web.Caching.Cache actually does an add or update!
_cache.Insert(cacheKey, result, dependency, absolute, sliding, priority, removedCallback);
}
}
// this may throw if getCacheItem throws, but this is the only place where
// it would throw as everywhere else we use GetLazySaveValue() to hide exceptions
// and pretend exceptions were never inserted into cache to begin with.
return result.Value;
// using GetSafeLazy and GetSafeLazyValue ensures that we don't cache
// exceptions (but try again and again) and silently eat them - however at
// some point we have to report them - so need to re-throw here
// this does not throw anymore
//return result.Value;
value = result.Value; // will not throw (safe lazy)
var eh = value as ExceptionHolder;
if (eh != null) throw eh.Exception; // throw once!
return value;
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
@@ -173,17 +187,18 @@ namespace Umbraco.Core.Cache
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
var result = new Lazy<object>(getCacheItem);
var result = GetSafeLazy(getCacheItem);
var value = result.Value; // force evaluation now - this may throw if cacheItem throws, and then nothing goes into cache
if (value == null) return; // do not store null values (backward compat)
cacheKey = GetCacheKey(cacheKey);
cacheKey = GetCacheKey(cacheKey);
var absolute = isSliding ? System.Web.Caching.Cache.NoAbsoluteExpiration : (timeout == null ? System.Web.Caching.Cache.NoAbsoluteExpiration : DateTime.Now.Add(timeout.Value));
var sliding = isSliding == false ? System.Web.Caching.Cache.NoSlidingExpiration : (timeout ?? System.Web.Caching.Cache.NoSlidingExpiration);
using (new WriteLock(_locker))
{
//NOTE: 'Insert' on System.Web.Caching.Cache actually does an add or update!
_cache.Insert(cacheKey, result, dependency, absolute, sliding, priority, removedCallback);
}
}
+38
View File
@@ -8,13 +8,51 @@ namespace Umbraco.Core.Cache
/// </summary>
public interface ICacheProvider
{
/// <summary>
/// Removes all items from the cache.
/// </summary>
void ClearAllCache();
/// <summary>
/// Removes an item from the cache, identified by its key.
/// </summary>
/// <param name="key">The key of the item.</param>
void ClearCacheItem(string key);
/// <summary>
/// Removes items from the cache, of a specified type.
/// </summary>
/// <param name="typeName">The name of the type to remove.</param>
/// <remarks>
/// <para>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</para>
/// <para>Performs a case-sensitive search.</para>
/// </remarks>
void ClearCacheObjectTypes(string typeName);
/// <summary>
/// Removes items from the cache, of a specified type.
/// </summary>
/// <typeparam name="T">The type of the items to remove.</typeparam>
/// <remarks>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</remarks>
void ClearCacheObjectTypes<T>();
/// <summary>
/// Removes items from the cache, of a specified type, satisfying a predicate.
/// </summary>
/// <typeparam name="T">The type of the items to remove.</typeparam>
/// <param name="predicate">The predicate to satisfy.</param>
/// <remarks>If the type is an interface, then all items of a type implementing that interface are
/// removed. Otherwise, only items of that exact type are removed (items of type inheriting from
/// the specified type are not removed).</remarks>
void ClearCacheObjectTypes<T>(Func<string, T, bool> predicate);
void ClearCacheByKeySearch(string keyStartsWith);
void ClearCacheByKeyExpression(string regexString);
IEnumerable<object> GetCacheItemsByKeySearch(string keyStartsWith);
IEnumerable<object> GetCacheItemsByKeyExpression(string regexString);
@@ -0,0 +1,16 @@
using umbraco.interfaces;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A cache refresher that supports refreshing cache based on a custom payload
/// </summary>
interface IPayloadCacheRefresher : IJsonCacheRefresher
{
/// <summary>
/// Refreshes, clears, etc... any cache based on the information provided in the payload
/// </summary>
/// <param name="payload"></param>
void Refresh(object payload);
}
}
@@ -4,17 +4,16 @@ using umbraco.interfaces;
namespace Umbraco.Core.Cache
{
/// <summary>
/// A base class for json cache refreshers that ensures the correct events are raised when
/// cache refreshing occurs.
/// Provides a base class for "json" cache refreshers.
/// </summary>
/// <typeparam name="TInstanceType">The real cache refresher type, this is used for raising strongly typed events</typeparam>
public abstract class JsonCacheRefresherBase<TInstanceType> : CacheRefresherBase<TInstanceType>, IJsonCacheRefresher
where TInstanceType : ICacheRefresher
/// <typeparam name="TInstance">The actual cache refresher type.</typeparam>
/// <remarks>Ensures that the correct events are raised when cache refreshing occurs.</remarks>
public abstract class JsonCacheRefresherBase<TInstance> : CacheRefresherBase<TInstance>, IJsonCacheRefresher
where TInstance : ICacheRefresher
{
public virtual void Refresh(string jsonPayload)
public virtual void Refresh(string json)
{
OnCacheUpdated(Instance, new CacheRefresherEventArgs(jsonPayload, MessageType.RefreshByJson));
OnCacheUpdated(Instance, new CacheRefresherEventArgs(json, MessageType.RefreshByJson));
}
}
}
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Runtime.Caching;
using System.Text.RegularExpressions;
using System.Threading;
@@ -16,30 +17,19 @@ namespace Umbraco.Core.Cache
/// </summary>
internal class ObjectCacheRuntimeCacheProvider : IRuntimeCacheProvider
{
private readonly ReaderWriterLockSlim _locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
internal ObjectCache MemoryCache;
// an object that represent a value that has not been created yet
protected readonly object ValueNotCreated = new object();
/// <summary>
/// Used for debugging
/// </summary>
internal Guid InstanceId { get; private set; }
public ObjectCacheRuntimeCacheProvider()
{
MemoryCache = new MemoryCache("in-memory");
}
protected object GetSafeLazyValue(Lazy<object> lazy, bool onlyIfValueIsCreated = false)
{
try
{
// if onlyIfValueIsCreated, do not trigger value creation
// must return something, though, to differenciate from null values
if (onlyIfValueIsCreated && lazy.IsValueCreated == false) return ValueNotCreated;
return lazy.Value;
}
catch
{
return null;
}
InstanceId = Guid.NewGuid();
}
#region Clear
@@ -59,11 +49,14 @@ namespace Umbraco.Core.Cache
{
if (MemoryCache[key] == null) return;
MemoryCache.Remove(key);
}
}
}
public virtual void ClearCacheObjectTypes(string typeName)
{
var type = TypeFinder.GetTypeByName(typeName);
if (type == null) return;
var isInterface = type.IsInterface;
using (new WriteLock(_locker))
{
foreach (var key in MemoryCache
@@ -72,8 +65,11 @@ namespace Umbraco.Core.Cache
// x.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = GetSafeLazyValue((Lazy<object>)x.Value, true);
return value == null || value.GetType().ToString().InvariantEquals(typeName);
var value = DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return value == null || (isInterface ? (type.IsInstanceOfType(value)) : (value.GetType() == type));
})
.Select(x => x.Key)
.ToArray()) // ToArray required to remove
@@ -86,14 +82,19 @@ namespace Umbraco.Core.Cache
using (new WriteLock(_locker))
{
var typeOfT = typeof (T);
var isInterface = typeOfT.IsInterface;
foreach (var key in MemoryCache
.Where(x =>
{
// x.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = GetSafeLazyValue((Lazy<object>)x.Value, true);
return value == null || value.GetType() == typeOfT;
var value = DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return value == null || (isInterface ? (value is T) : (value.GetType() == typeOfT));
})
.Select(x => x.Key)
.ToArray()) // ToArray required to remove
@@ -106,16 +107,20 @@ namespace Umbraco.Core.Cache
using (new WriteLock(_locker))
{
var typeOfT = typeof(T);
var isInterface = typeOfT.IsInterface;
foreach (var key in MemoryCache
.Where(x =>
{
// x.Value is Lazy<object> and not null, its value may be null
// remove null values as well, does not hurt
// get non-created as NonCreatedValue & exceptions as null
var value = GetSafeLazyValue((Lazy<object>)x.Value, true);
var value = DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value, true);
if (value == null) return true;
return value.GetType() == typeOfT
&& predicate(x.Key, (T) value);
// if T is an interface remove anything that implements that interface
// otherwise remove exact types (not inherited types)
return (isInterface ? (value is T) : (value.GetType() == typeOfT))
&& predicate(x.Key, (T)value);
})
.Select(x => x.Key)
.ToArray()) // ToArray required to remove
@@ -132,7 +137,7 @@ namespace Umbraco.Core.Cache
.Select(x => x.Key)
.ToArray()) // ToArray required to remove
MemoryCache.Remove(key);
}
}
}
public virtual void ClearCacheByKeyExpression(string regexString)
@@ -144,7 +149,7 @@ namespace Umbraco.Core.Cache
.Select(x => x.Key)
.ToArray()) // ToArray required to remove
MemoryCache.Remove(key);
}
}
}
#endregion
@@ -161,7 +166,7 @@ namespace Umbraco.Core.Cache
.ToArray(); // evaluate while locked
}
return entries
.Select(x => GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Select(x => DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null) // backward compat, don't store null values in the cache
.ToList();
}
@@ -176,7 +181,7 @@ namespace Umbraco.Core.Cache
.ToArray(); // evaluate while locked
}
return entries
.Select(x => GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Select(x => DictionaryCacheProviderBase.GetSafeLazyValue((Lazy<object>)x.Value)) // return exceptions as null
.Where(x => x != null) // backward compat, don't store null values in the cache
.ToList();
}
@@ -188,7 +193,7 @@ namespace Umbraco.Core.Cache
{
result = MemoryCache.Get(cacheKey) as Lazy<object>; // null if key not found
}
return result == null ? null : GetSafeLazyValue(result); // return exceptions as null
return result == null ? null : DictionaryCacheProviderBase.GetSafeLazyValue(result); // return exceptions as null
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem)
@@ -196,7 +201,7 @@ namespace Umbraco.Core.Cache
return GetCacheItem(cacheKey, getCacheItem, null);
}
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal,CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
public object GetCacheItem(string cacheKey, Func<object> getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null)
{
// see notes in HttpRuntimeCacheProvider
@@ -205,17 +210,23 @@ namespace Umbraco.Core.Cache
using (var lck = new UpgradeableReadLock(_locker))
{
result = MemoryCache.Get(cacheKey) as Lazy<object>;
if (result == null || GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
if (result == null || DictionaryCacheProviderBase.GetSafeLazyValue(result, true) == null) // get non-created as NonCreatedValue & exceptions as null
{
result = new Lazy<object>(getCacheItem);
result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
lck.UpgradeToWriteLock();
//NOTE: This does an add or update
MemoryCache.Set(cacheKey, result, policy);
}
}
return result.Value;
//return result.Value;
var value = result.Value; // will not throw (safe lazy)
var eh = value as DictionaryCacheProviderBase.ExceptionHolder;
if (eh != null) throw eh.Exception; // throw once!
return value;
}
#endregion
@@ -227,11 +238,12 @@ namespace Umbraco.Core.Cache
// NOTE - here also we must insert a Lazy<object> but we can evaluate it right now
// and make sure we don't store a null value.
var result = new Lazy<object>(getCacheItem);
var result = DictionaryCacheProviderBase.GetSafeLazy(getCacheItem);
var value = result.Value; // force evaluation now
if (value == null) return; // do not store null values (backward compat)
var policy = GetPolicy(timeout, isSliding, removedCallback, dependentFiles);
//NOTE: This does an add or update
MemoryCache.Set(cacheKey, result, policy);
}
@@ -252,7 +264,7 @@ namespace Umbraco.Core.Cache
{
policy.ChangeMonitors.Add(new HostFileChangeMonitor(dependentFiles.ToList()));
}
if (removedCallback != null)
{
policy.RemovedCallback = arguments =>
@@ -283,6 +295,5 @@ namespace Umbraco.Core.Cache
}
return policy;
}
}
}
@@ -0,0 +1,27 @@
using Umbraco.Core.Sync;
using umbraco.interfaces;
namespace Umbraco.Core.Cache
{
/// <summary>
/// Provides a base class for "payload" cache refreshers.
/// </summary>
/// <typeparam name="TInstance">The actual cache refresher type.</typeparam>
/// <remarks>Ensures that the correct events are raised when cache refreshing occurs.</remarks>
public abstract class PayloadCacheRefresherBase<TInstance> : JsonCacheRefresherBase<TInstance>, IPayloadCacheRefresher
where TInstance : ICacheRefresher
{
protected abstract object Deserialize(string json);
public override void Refresh(string json)
{
var payload = Deserialize(json);
Refresh(payload);
}
public virtual void Refresh(object payload)
{
OnCacheUpdated(Instance, new CacheRefresherEventArgs(payload, MessageType.RefreshByPayload));
}
}
}
+9 -7
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using umbraco.interfaces;
@@ -12,13 +13,14 @@ namespace Umbraco.Core
/// </summary>
internal sealed class CacheRefreshersResolver : LegacyTransientObjectsResolver<CacheRefreshersResolver, ICacheRefresher>
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="refreshers"></param>
internal CacheRefreshersResolver(Func<IEnumerable<Type>> refreshers)
: base(refreshers)
/// <summary>
/// Constructor
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="logger"></param>
/// <param name="refreshers"></param>
internal CacheRefreshersResolver(IServiceProvider serviceProvider, ILogger logger, Func<IEnumerable<Type>> refreshers)
: base(serviceProvider, logger, refreshers)
{
}
@@ -8,10 +8,13 @@ namespace Umbraco.Core.Configuration
{
internal class ClientDependencyConfiguration
{
private readonly ILogger _logger;
private readonly string _fileName;
public ClientDependencyConfiguration()
public ClientDependencyConfiguration(ILogger logger)
{
if (logger == null) throw new ArgumentNullException("logger");
_logger = logger;
_fileName = IOHelper.MapPath(string.Format("{0}/ClientDependency.config", SystemDirectories.Config));
}
@@ -35,13 +38,13 @@ namespace Umbraco.Core.Configuration
versionAttribute.SetValue(newVersion);
clientDependencyConfigXml.Save(_fileName, SaveOptions.DisableFormatting);
LogHelper.Info<ClientDependencyConfiguration>(string.Format("Updated version number from {0} to {1}", oldVersion, newVersion));
_logger.Info<ClientDependencyConfiguration>(string.Format("Updated version number from {0} to {1}", oldVersion, newVersion));
return true;
}
}
catch (Exception ex)
{
LogHelper.Error<ClientDependencyConfiguration>("Couldn't update ClientDependency version number", ex);
_logger.Error<ClientDependencyConfiguration>("Couldn't update ClientDependency version number", ex);
}
return false;
@@ -174,7 +174,7 @@ namespace Umbraco.Core.Configuration
/// We also make sure that the virtual directory (SystemDirectories.Root) is stripped off first, otherwise we'd end up with something
/// like "MyVirtualDirectory-Umbraco" instead of just "Umbraco".
/// </remarks>
internal static string UmbracoMvcArea
public static string UmbracoMvcArea
{
get
{
@@ -242,6 +242,7 @@ namespace Umbraco.Core.Configuration
}
}
//TODO: Move these to constants!
public const string UmbracoConnectionName = "umbracoDbDSN";
public const string UmbracoMigrationName = "Umbraco";
@@ -420,14 +421,15 @@ namespace Umbraco.Core.Configuration
/// Gets a value indicating whether the current version of umbraco is configured.
/// </summary>
/// <value><c>true</c> if configured; otherwise, <c>false</c>.</value>
public static bool Configured
[Obsolete("Do not use this, it is no longer in use and will be removed from the codebase in future versions")]
internal static bool Configured
{
get
{
try
{
string configStatus = ConfigurationStatus;
string currentVersion = UmbracoVersion.Current.ToString(3);
string currentVersion = UmbracoVersion.GetSemanticVersion().ToSemanticString();
if (currentVersion != configStatus)
@@ -594,10 +596,7 @@ namespace Umbraco.Core.Configuration
[Obsolete("Use Umbraco.Core.Configuration.UmbracoVersion.Current instead", false)]
public static string CurrentVersion
{
get
{
return UmbracoVersion.Current.ToString(3);
}
get { return UmbracoVersion.GetSemanticVersion().ToSemanticString(); }
}
/// <summary>
@@ -0,0 +1,16 @@
using System.IO;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Configuration.Grid
{
class GridConfig : IGridConfig
{
public GridConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo appPlugins, DirectoryInfo configFolder, bool isDebug)
{
EditorsConfig = new GridEditorsConfig(logger, runtimeCache, appPlugins, configFolder, isDebug);
}
public IGridEditorsConfig EditorsConfig { get; private set; }
}
}
@@ -0,0 +1,78 @@
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json.Linq;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
using Umbraco.Core.Manifest;
using Umbraco.Core.PropertyEditors;
namespace Umbraco.Core.Configuration.Grid
{
class GridEditorsConfig : IGridEditorsConfig
{
private readonly ILogger _logger;
private readonly IRuntimeCacheProvider _runtimeCache;
private readonly DirectoryInfo _appPlugins;
private readonly DirectoryInfo _configFolder;
private readonly bool _isDebug;
public GridEditorsConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo appPlugins, DirectoryInfo configFolder, bool isDebug)
{
_logger = logger;
_runtimeCache = runtimeCache;
_appPlugins = appPlugins;
_configFolder = configFolder;
_isDebug = isDebug;
}
public IEnumerable<IGridEditorConfig> Editors
{
get
{
Func<List<GridEditor>> getResult = () =>
{
var editors = new List<GridEditor>();
var gridConfig = Path.Combine(_configFolder.FullName, "grid.editors.config.js");
if (File.Exists(gridConfig))
{
try
{
var arr = JArray.Parse(File.ReadAllText(gridConfig));
//ensure the contents parse correctly to objects
var parsed = ManifestParser.GetGridEditors(arr);
editors.AddRange(parsed);
}
catch (Exception ex)
{
_logger.Error<GridEditorsConfig>("Could not parse the contents of grid.editors.config.js into a JSON array", ex);
}
}
var parser = new ManifestParser(_appPlugins, _runtimeCache);
var builder = new ManifestBuilder(_runtimeCache, parser);
foreach (var gridEditor in builder.GridEditors)
{
//no duplicates! (based on alias)
if (editors.Contains(gridEditor) == false)
{
editors.Add(gridEditor);
}
}
return editors;
};
//cache the result if debugging is disabled
var result = _isDebug
? getResult()
: _runtimeCache.GetCacheItem<List<GridEditor>>(
typeof(GridEditorsConfig) + "Editors",
() => getResult(),
TimeSpan.FromMinutes(10));
return result;
}
}
}
}
@@ -0,0 +1,14 @@
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Umbraco.Core.Configuration.Grid
{
public interface IGridConfig
{
IGridEditorsConfig EditorsConfig { get; }
}
}
@@ -0,0 +1,15 @@
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace Umbraco.Core.Configuration.Grid
{
public interface IGridEditorConfig
{
string Name { get; }
string Alias { get; }
string View { get; }
string Render { get; }
string Icon { get; }
IDictionary<string, object> Config { get; }
}
}
@@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace Umbraco.Core.Configuration.Grid
{
public interface IGridEditorsConfig
{
IEnumerable<IGridEditorConfig> Editors { get; }
}
}
@@ -34,7 +34,7 @@ namespace Umbraco.Core.Configuration
{
get
{
var converted = ObjectExtensions.TryConvertTo<T>(RawValue);
var converted = RawValue.TryConvertTo<T>();
if (converted.Success == false)
throw new InvalidCastException("Could not convert value " + RawValue + " to type " + typeof(T));
return converted.Result;
@@ -2,10 +2,13 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Threading;
using Umbraco.Core.Cache;
using Umbraco.Core.Configuration.BaseRest;
using Umbraco.Core.Configuration.Dashboard;
using Umbraco.Core.Configuration.Grid;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Logging;
@@ -67,6 +70,7 @@ namespace Umbraco.Core.Configuration
private IDashboardSection _dashboardSection;
private IUmbracoSettingsSection _umbracoSettings;
private IBaseRestSection _baseRestExtensions;
private IGridConfig _gridConfig;
/// <summary>
/// Gets the IDashboardSection
@@ -83,14 +87,20 @@ namespace Umbraco.Core.Configuration
return _dashboardSection;
}
//ONLY for unit testing
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
internal void SetDashboardSettings(IDashboardSection value)
{
_dashboardSection = value;
}
//ONLY for unit testing
internal void SetUmbracoSettings(IUmbracoSettingsSection value)
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
public void SetUmbracoSettings(IUmbracoSettingsSection value)
{
_umbracoSettings = value;
}
@@ -110,7 +120,10 @@ namespace Umbraco.Core.Configuration
return _umbracoSettings;
}
//ONLY for unit testing
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
public void SetBaseRestExtensions(IBaseRestSection value)
{
_baseRestExtensions = value;
@@ -131,6 +144,28 @@ namespace Umbraco.Core.Configuration
return _baseRestExtensions;
}
/// <summary>
/// Only for testing
/// </summary>
/// <param name="value"></param>
public void SetGridConfig(IGridConfig value)
{
_gridConfig = value;
}
/// <summary>
/// Gets the IGridConfig
/// </summary>
public IGridConfig GridConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo appPlugins, DirectoryInfo configFolder, bool isDebug)
{
if (_gridConfig == null)
{
_gridConfig = new GridConfig(logger, runtimeCache, appPlugins, configFolder, isDebug);
}
return _gridConfig;
}
//TODO: Add other configurations here !
}
}
@@ -1,8 +1,9 @@
using System.Xml.Linq;
using System;
using System.Xml.Linq;
namespace Umbraco.Core.Configuration.UmbracoSettings
{
internal class ContentErrorPageElement : InnerTextConfigurationElement<int>, IContentErrorPage
internal class ContentErrorPageElement : InnerTextConfigurationElement<string>, IContentErrorPage
{
public ContentErrorPageElement(XElement rawXml)
: base(rawXml)
@@ -14,7 +15,43 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
}
public bool HasContentId
{
get { return ContentId != int.MinValue; }
}
public bool HasContentKey
{
get { return ContentKey != Guid.Empty; }
}
public int ContentId
{
get
{
int parsed;
if (int.TryParse(Value, out parsed))
{
return parsed;
}
return int.MinValue;
}
}
public Guid ContentKey
{
get
{
Guid parsed;
if (Guid.TryParse(Value, out parsed))
{
return parsed;
}
return Guid.Empty;
}
}
public string ContentXPath
{
get { return Value; }
}
@@ -1,8 +1,14 @@
namespace Umbraco.Core.Configuration.UmbracoSettings
using System;
namespace Umbraco.Core.Configuration.UmbracoSettings
{
public interface IContentErrorPage
{
int ContentId { get; }
Guid ContentKey { get; }
string ContentXPath { get; }
bool HasContentId { get; }
bool HasContentKey { get; }
string Culture { get; set; }
}
}
@@ -1,4 +1,6 @@
namespace Umbraco.Core.Configuration.UmbracoSettings
using System;
namespace Umbraco.Core.Configuration.UmbracoSettings
{
public interface ITemplatesSection : IUmbracoConfigurationSection
{
@@ -8,6 +10,7 @@
RenderingEngine DefaultRenderingEngine { get; }
[Obsolete("This has no affect and will be removed in future versions")]
bool EnableTemplateFolders { get; }
}
}
@@ -6,7 +6,13 @@
bool InternalRedirectPreservesTemplate { get; }
bool DisableAlternativeTemplates { get; }
bool DisableFindContentByIdPath { get; }
string UrlProviderMode { get; }
string UmbracoApplicationUrl { get; }
}
}
@@ -1,4 +1,5 @@
using System.Configuration;
using System;
using System.Configuration;
namespace Umbraco.Core.Configuration.UmbracoSettings
{
@@ -40,6 +41,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
}
}
[Obsolete("This has no affect and will be removed in future versions")]
[ConfigurationProperty("enableTemplateFolders")]
internal InnerTextConfigurationElement<bool> EnableTemplateFolders
{
@@ -67,6 +69,7 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get { return DefaultRenderingEngine; }
}
[Obsolete("This has no affect and will be removed in future versions")]
bool ITemplatesSection.EnableTemplateFolders
{
get { return EnableTemplateFolders; }
@@ -16,11 +16,27 @@ namespace Umbraco.Core.Configuration.UmbracoSettings
get { return (bool) base["internalRedirectPreservesTemplate"]; }
}
[ConfigurationProperty("disableAlternativeTemplates", DefaultValue = "false")]
public bool DisableAlternativeTemplates
{
get { return (bool) base["disableAlternativeTemplates"]; }
}
[ConfigurationProperty("disableFindContentByIdPath", DefaultValue = "false")]
public bool DisableFindContentByIdPath
{
get { return (bool) base["disableFindContentByIdPath"]; }
}
[ConfigurationProperty("urlProviderMode", DefaultValue = "AutoLegacy")]
public string UrlProviderMode
{
get { return (string)base["urlProviderMode"]; }
get { return (string) base["urlProviderMode"]; }
}
[ConfigurationProperty("umbracoApplicationUrl", DefaultValue = null)]
public string UmbracoApplicationUrl
{
get { return (string)base["umbracoApplicationUrl"]; }
}
}
}
@@ -1,11 +1,12 @@
using System;
using System.Reflection;
using Semver;
namespace Umbraco.Core.Configuration
{
public class UmbracoVersion
{
private static readonly Version Version = new Version("7.2.0");
private static readonly Version Version = new Version("7.3.0");
/// <summary>
/// Gets the current version of Umbraco.
@@ -23,10 +24,20 @@ namespace Umbraco.Core.Configuration
/// Gets the version comment (like beta or RC).
/// </summary>
/// <value>The version comment.</value>
public static string CurrentComment { get { return ""; } }
public static string CurrentComment { get { return "beta3"; } }
// Get the version of the umbraco.dll by looking at a class in that dll
// Had to do it like this due to medium trust issues, see: http://haacked.com/archive/2010/11/04/assembly-location-and-medium-trust.aspx
public static string AssemblyVersion { get { return new AssemblyName(typeof(ActionsResolver).Assembly.FullName).Version.ToString(); } }
public static SemVersion GetSemanticVersion()
{
return new SemVersion(
Current.Major,
Current.Minor,
Current.Build,
CurrentComment.IsNullOrWhiteSpace() ? null : CurrentComment,
Current.Revision > 0 ? Current.Revision.ToInvariantString() : null);
}
}
}
+4 -3
View File
@@ -78,12 +78,12 @@
/// </summary>
public const string Dictionary = "dictionary";
//TODO: Fill in the rest!
public const string Stylesheets = "stylesheets";
/// <summary>
/// alias for the media tree.
/// alias for the template tree.
/// </summary>
public const string Templates = "template";
public const string Templates = "templates";
public const string RelationTypes = "relationTypes";
@@ -91,6 +91,7 @@
public const string Languages = "languages";
//TODO: Fill in the rest!
}
}
+40 -19
View File
@@ -11,6 +11,26 @@ namespace Umbraco.Core
/// </summary>
public static class Conventions
{
public static class PublicAccess
{
public const string MemberUsernameRuleType = "MemberUsername";
public const string MemberRoleRuleType = "MemberRole";
[Obsolete("No longer supported, this is here for backwards compatibility only")]
public const string MemberIdRuleType = "MemberId";
[Obsolete("No longer supported, this is here for backwards compatibility only")]
public const string MemberGroupIdRuleType = "MemberGroupId";
}
public static class Localization
{
/// <summary>
/// The root id for all top level dictionary items
/// </summary>
[Obsolete("There is no dictionary root item id anymore, it is simply null")]
public const string DictionaryItemRootId = "41c7638d-f529-4bff-853e-59a0c2fb1bde";
}
public static class DataTypes
{
public const string ListViewPrefix = "List View - ";
@@ -192,73 +212,64 @@ namespace Umbraco.Core
{
{
Comments,
new PropertyType(PropertyEditors.TextboxMultipleAlias, DataTypeDatabaseType.Ntext, true)
new PropertyType(PropertyEditors.TextboxMultipleAlias, DataTypeDatabaseType.Ntext, true, Comments)
{
Alias = Comments,
Name = CommentsLabel
}
},
{
FailedPasswordAttempts,
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer, true)
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Integer, true, FailedPasswordAttempts)
{
Alias = FailedPasswordAttempts,
Name = FailedPasswordAttemptsLabel
}
},
{
IsApproved,
new PropertyType(PropertyEditors.TrueFalseAlias, DataTypeDatabaseType.Integer, true)
new PropertyType(PropertyEditors.TrueFalseAlias, DataTypeDatabaseType.Integer, true, IsApproved)
{
Alias = IsApproved,
Name = IsApprovedLabel
}
},
{
IsLockedOut,
new PropertyType(PropertyEditors.TrueFalseAlias, DataTypeDatabaseType.Integer, true)
new PropertyType(PropertyEditors.TrueFalseAlias, DataTypeDatabaseType.Integer, true, IsLockedOut)
{
Alias = IsLockedOut,
Name = IsLockedOutLabel
}
},
{
LastLockoutDate,
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date, true)
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date, true, LastLockoutDate)
{
Alias = LastLockoutDate,
Name = LastLockoutDateLabel
}
},
{
LastLoginDate,
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date, true)
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date, true, LastLoginDate)
{
Alias = LastLoginDate,
Name = LastLoginDateLabel
}
},
{
LastPasswordChangeDate,
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date, true)
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Date, true, LastPasswordChangeDate)
{
Alias = LastPasswordChangeDate,
Name = LastPasswordChangeDateLabel
}
},
{
PasswordAnswer,
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar, true)
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar, true, PasswordAnswer)
{
Alias = PasswordAnswer,
Name = PasswordAnswerLabel
}
},
{
PasswordQuestion,
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar, true)
new PropertyType(PropertyEditors.NoEditAlias, DataTypeDatabaseType.Nvarchar, true, PasswordQuestion)
{
Alias = PasswordQuestion,
Name = PasswordQuestionLabel
}
}
@@ -293,7 +304,7 @@ namespace Umbraco.Core
}
/// <summary>
/// Defines the alias identifiers for Umbraco relation types.
/// Defines the alias identifiers for built-in Umbraco relation types.
/// </summary>
public static class RelationTypes
{
@@ -306,6 +317,16 @@ namespace Umbraco.Core
/// ContentType alias for default relation type "Relate Document On Copy".
/// </summary>
public const string RelateDocumentOnCopyAlias = "relateDocumentOnCopy";
/// <summary>
/// ContentType name for default relation type "Relate Parent Document On Delete".
/// </summary>
public const string RelateParentDocumentOnDeleteName = "Relate Parent Document On Delete";
/// <summary>
/// ContentType alias for default relation type "Relate Parent Document On Delete".
/// </summary>
public const string RelateParentDocumentOnDeleteAlias = "relateParentDocumentOnDelete";
}
}
}
+8 -2
View File
@@ -1,4 +1,6 @@
namespace Umbraco.Core
using System;
namespace Umbraco.Core
{
public static partial class Constants
{
@@ -70,7 +72,11 @@
/// <summary>
/// Guid for a Stylesheet object.
/// </summary>
public const string Stylesheet = "9F68DA4F-A3A8-44C2-8226-DCBD125E4840";
[Obsolete("This no longer exists in the database")]
public const string Stylesheet = "9F68DA4F-A3A8-44C2-8226-DCBD125E4840";
[Obsolete("This no longer exists in the database")]
internal const string StylesheetProperty = "5555da4f-a123-42b2-4488-dcdfb25e4111";
/// <summary>
/// Guid for the System Root.
+25
View File
@@ -18,5 +18,30 @@
public const string AuthCookieName = "UMB_UCONTEXT";
}
public static class Security
{
public const string BackOfficeAuthenticationType = "UmbracoBackOffice";
public const string BackOfficeExternalAuthenticationType = "UmbracoExternalCookie";
public const string BackOfficeExternalCookieName = "UMB_EXTLOGIN";
public const string BackOfficeTokenAuthenticationType = "UmbracoBackOfficeToken";
public const string BackOfficeTwoFactorAuthenticationType = "UmbracoTwoFactorCookie";
/// <summary>
/// The prefix used for external identity providers for their authentication type
/// </summary>
/// <remarks>
/// By default we don't want to interfere with front-end external providers and their default setup, for back office the
/// providers need to be setup differently and each auth type for the back office will be prefixed with this value
/// </remarks>
public const string BackOfficeExternalAuthenticationTypePrefix = "Umbraco.";
public const string StartContentNodeIdClaimType = "http://umbraco.org/2015/02/identity/claims/backoffice/startcontentnode";
public const string StartMediaNodeIdClaimType = "http://umbraco.org/2015/02/identity/claims/backoffice/startmedianode";
public const string AllowedApplicationsClaimType = "http://umbraco.org/2015/02/identity/claims/backoffice/allowedapp";
public const string SessionIdClaimType = "http://umbraco.org/2015/02/identity/claims/backoffice/sessionid";
}
}
}
+323 -151
View File
@@ -1,10 +1,15 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web;
using AutoMapper;
using Umbraco.Core.Cache;
using Umbraco.Core.Configuration;
using Umbraco.Core.Events;
using Umbraco.Core.Exceptions;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.Mapping;
using Umbraco.Core.Models.PublishedContent;
@@ -21,6 +26,7 @@ using Umbraco.Core.PropertyEditors;
using Umbraco.Core.PropertyEditors.ValueConverters;
using Umbraco.Core.Publishing;
using Umbraco.Core.Macros;
using Umbraco.Core.Manifest;
using Umbraco.Core.Services;
using Umbraco.Core.Sync;
using Umbraco.Core.Strings;
@@ -29,101 +35,165 @@ using MigrationsVersionFourNineZero = Umbraco.Core.Persistence.Migrations.Upgrad
namespace Umbraco.Core
{
/// <summary>
/// A bootstrapper for the Umbraco application which initializes all objects for the Core of the application
/// </summary>
/// <remarks>
/// This does not provide any startup functionality relating to web objects
/// </remarks>
public class CoreBootManager : IBootManager
{
private DisposableTimer _timer;
private bool _isInitialized = false;
private bool _isStarted = false;
private bool _isComplete = false;
/// A bootstrapper for the Umbraco application which initializes all objects for the Core of the application
/// </summary>
/// <remarks>
/// This does not provide any startup functionality relating to web objects
/// </remarks>
public class CoreBootManager : IBootManager
{
protected ProfilingLogger ProfilingLogger { get; private set; }
private DisposableTimer _timer;
private bool _isInitialized = false;
private bool _isStarted = false;
private bool _isComplete = false;
private readonly IServiceProvider _serviceProvider = new ActivatorServiceProvider();
private readonly UmbracoApplicationBase _umbracoApplication;
protected ApplicationContext ApplicationContext { get; set; }
protected CacheHelper ApplicationCache { get; set; }
protected ApplicationContext ApplicationContext { get; private set; }
protected CacheHelper ApplicationCache { get; private set; }
protected PluginManager PluginManager { get; private set; }
protected UmbracoApplicationBase UmbracoApplication
{
get { return _umbracoApplication; }
}
protected UmbracoApplicationBase UmbracoApplication
{
get { return _umbracoApplication; }
}
public CoreBootManager(UmbracoApplicationBase umbracoApplication)
{
protected IServiceProvider ServiceProvider
{
get { return _serviceProvider; }
}
public CoreBootManager(UmbracoApplicationBase umbracoApplication)
{
if (umbracoApplication == null) throw new ArgumentNullException("umbracoApplication");
_umbracoApplication = umbracoApplication;
}
public virtual IBootManager Initialize()
{
if (_isInitialized)
throw new InvalidOperationException("The boot manager has already been initialized");
internal CoreBootManager(UmbracoApplicationBase umbracoApplication, ProfilingLogger logger)
{
if (umbracoApplication == null) throw new ArgumentNullException("umbracoApplication");
if (logger == null) throw new ArgumentNullException("logger");
_umbracoApplication = umbracoApplication;
ProfilingLogger = logger;
}
InitializeProfilerResolver();
public virtual IBootManager Initialize()
{
if (_isInitialized)
throw new InvalidOperationException("The boot manager has already been initialized");
_timer = DisposableTimer.DebugDuration<CoreBootManager>("Umbraco application starting", "Umbraco application startup complete");
CreateApplicationCache();
InitializeLoggerResolver();
InitializeProfilerResolver();
ProfilingLogger = ProfilingLogger?? new ProfilingLogger(LoggerResolver.Current.Logger, ProfilerResolver.Current.Profiler);
_timer = ProfilingLogger.TraceDuration<CoreBootManager>(
string.Format("Umbraco {0} application starting on {1}", UmbracoVersion.GetSemanticVersion().ToSemanticString(), NetworkHelper.MachineName),
"Umbraco application startup complete");
ApplicationCache = CreateApplicationCache();
//create and set the plugin manager (I'd much prefer to not use this singleton anymore but many things are using it unfortunately and
// the way that it is setup, there must only ever be one per app so without IoC it would be hard to make this not a singleton)
PluginManager = new PluginManager(ServiceProvider, ApplicationCache.RuntimeCache, ProfilingLogger);
PluginManager.Current = PluginManager;
//Create the legacy prop-eds mapping
LegacyPropertyEditorIdToAliasConverter.CreateMappingsForCoreEditors();
LegacyParameterEditorAliasConverter.CreateMappingsForCoreEditors();
//create database and service contexts for the app context
var dbFactory = new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName);
Database.Mapper = new PetaPocoMapper();
var dbContext = new DatabaseContext(dbFactory);
var serviceContext = new ServiceContext(
new PetaPocoUnitOfWorkProvider(dbFactory),
new FileUnitOfWorkProvider(),
new PublishingStrategy(),
ApplicationCache);
//create database and service contexts for the app context
var dbFactory = new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, ProfilingLogger.Logger);
Database.Mapper = new PetaPocoMapper();
CreateApplicationContext(dbContext, serviceContext);
InitializeApplicationEventsResolver();
InitializeResolvers();
var dbContext = new DatabaseContext(
dbFactory,
ProfilingLogger.Logger,
SqlSyntaxProviders.CreateDefault(ProfilingLogger.Logger));
//initialize the DatabaseContext
dbContext.Initialize();
//get the service context
var serviceContext = CreateServiceContext(dbContext, dbFactory);
//set property and singleton from response
ApplicationContext.Current = ApplicationContext = CreateApplicationContext(dbContext, serviceContext);
InitializeApplicationEventsResolver();
InitializeResolvers();
InitializeModelMappers();
//now we need to call the initialize methods
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x => x.OnApplicationInitialized(UmbracoApplication, ApplicationContext));
using (ProfilingLogger.DebugDuration<CoreBootManager>(
string.Format("Executing {0} IApplicationEventHandler.OnApplicationInitialized", ApplicationEventsResolver.Current.ApplicationEventHandlers.Count()),
"Finished executing IApplicationEventHandler.OnApplicationInitialized"))
{
//now we need to call the initialize methods
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x =>
{
try
{
x.OnApplicationInitialized(UmbracoApplication, ApplicationContext);
}
catch (Exception ex)
{
ProfilingLogger.Logger.Error<CoreBootManager>("An error occurred running OnApplicationInitialized for handler " + x.GetType(), ex);
throw;
}
});
}
_isInitialized = true;
_isInitialized = true;
return this;
}
/// <summary>
/// Creates and assigns the application context singleton
/// </summary>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
protected virtual void CreateApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext)
{
//create the ApplicationContext
ApplicationContext = ApplicationContext.Current = new ApplicationContext(dbContext, serviceContext, ApplicationCache);
return this;
}
/// <summary>
/// Creates and assigns the ApplicationCache based on a new instance of System.Web.Caching.Cache
/// Creates and returns the service context for the app
/// </summary>
protected virtual void CreateApplicationCache()
/// <param name="dbContext"></param>
/// <param name="dbFactory"></param>
/// <returns></returns>
protected virtual ServiceContext CreateServiceContext(DatabaseContext dbContext, IDatabaseFactory dbFactory)
{
//default transient factory
var msgFactory = new TransientMessagesFactory();
return new ServiceContext(
new RepositoryFactory(ApplicationCache, ProfilingLogger.Logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()),
new PetaPocoUnitOfWorkProvider(dbFactory),
new FileUnitOfWorkProvider(),
new PublishingStrategy(msgFactory, ProfilingLogger.Logger),
ApplicationCache,
ProfilingLogger.Logger,
msgFactory);
}
/// <summary>
/// Creates and returns the application context for the app
/// </summary>
/// <param name="dbContext"></param>
/// <param name="serviceContext"></param>
protected virtual ApplicationContext CreateApplicationContext(DatabaseContext dbContext, ServiceContext serviceContext)
{
//create the ApplicationContext
return new ApplicationContext(dbContext, serviceContext, ApplicationCache, ProfilingLogger);
}
/// <summary>
/// Creates and returns the CacheHelper for the app
/// </summary>
protected virtual CacheHelper CreateApplicationCache()
{
var cacheHelper = new CacheHelper(
new ObjectCacheRuntimeCacheProvider(),
new StaticCacheProvider(),
//we have no request based cache when not running in web-based context
new NullCacheProvider());
new ObjectCacheRuntimeCacheProvider(),
new StaticCacheProvider(),
//we have no request based cache when not running in web-based context
new NullCacheProvider());
ApplicationCache = cacheHelper;
return cacheHelper;
}
/// <summary>
@@ -144,18 +214,31 @@ namespace Umbraco.Core
});
}
/// <summary>
/// Special method to initialize the LoggerResolver
/// </summary>
protected virtual void InitializeLoggerResolver()
{
LoggerResolver.Current = new LoggerResolver(ProfilingLogger == null ? Logger.CreateWithDefaultLog4NetConfiguration() : ProfilingLogger.Logger)
{
//This is another special resolver that needs to be resolvable before resolution is frozen
//since it is used for profiling the application startup
CanResolveBeforeFrozen = true
};
}
/// <summary>
/// Special method to initialize the ProfilerResolver
/// </summary>
protected virtual void InitializeProfilerResolver()
{
//By default we'll initialize the Log profiler (in the web project, we'll override with the web profiler)
ProfilerResolver.Current = new ProfilerResolver(new LogProfiler())
{
//This is another special resolver that needs to be resolvable before resolution is frozen
//since it is used for profiling the application startup
CanResolveBeforeFrozen = true
};
ProfilerResolver.Current = new ProfilerResolver(ProfilingLogger == null ? new LogProfiler(LoggerResolver.Current.Logger) : ProfilingLogger.Profiler)
{
//This is another special resolver that needs to be resolvable before resolution is frozen
//since it is used for profiling the application startup
CanResolveBeforeFrozen = true
};
}
/// <summary>
@@ -170,7 +253,9 @@ namespace Umbraco.Core
//ApplicationStartupHandler.RegisterHandlers();
//... and set the special flag to let us resolve before frozen resolution
ApplicationEventsResolver.Current = new ApplicationEventsResolver(
PluginManager.Current.ResolveApplicationStartupHandlers())
ServiceProvider,
ProfilingLogger.Logger,
PluginManager.ResolveApplicationStartupHandlers())
{
CanResolveBeforeFrozen = true
};
@@ -184,49 +269,90 @@ namespace Umbraco.Core
/// <param name="rootPath">Absolute</param>
protected virtual void InitializeApplicationRootPath(string rootPath)
{
Umbraco.Core.IO.IOHelper.SetRootDirectory(rootPath);
IOHelper.SetRootDirectory(rootPath);
}
/// <summary>
/// Fires after initialization and calls the callback to allow for customizations to occur &
/// <summary>
/// Fires after initialization and calls the callback to allow for customizations to occur &
/// Ensure that the OnApplicationStarting methods of the IApplicationEvents are called
/// </summary>
/// <param name="afterStartup"></param>
/// <returns></returns>
public virtual IBootManager Startup(Action<ApplicationContext> afterStartup)
{
if (_isStarted)
throw new InvalidOperationException("The boot manager has already been initialized");
/// </summary>
/// <param name="afterStartup"></param>
/// <returns></returns>
public virtual IBootManager Startup(Action<ApplicationContext> afterStartup)
{
if (_isStarted)
throw new InvalidOperationException("The boot manager has already been initialized");
//call OnApplicationStarting of each application events handler
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x => x.OnApplicationStarting(UmbracoApplication, ApplicationContext));
using (ProfilingLogger.DebugDuration<CoreBootManager>(
string.Format("Executing {0} IApplicationEventHandler.OnApplicationStarting", ApplicationEventsResolver.Current.ApplicationEventHandlers.Count()),
"Finished executing IApplicationEventHandler.OnApplicationStarting"))
{
//call OnApplicationStarting of each application events handler
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x =>
{
try
{
x.OnApplicationStarting(UmbracoApplication, ApplicationContext);
}
catch (Exception ex)
{
ProfilingLogger.Logger.Error<CoreBootManager>("An error occurred running OnApplicationStarting for handler " + x.GetType(), ex);
throw;
}
});
}
if (afterStartup != null)
if (afterStartup != null)
{
afterStartup(ApplicationContext.Current);
}
_isStarted = true;
_isStarted = true;
return this;
}
return this;
}
/// <summary>
/// Fires after startup and calls the callback once customizations are locked
/// </summary>
/// <param name="afterComplete"></param>
/// <returns></returns>
public virtual IBootManager Complete(Action<ApplicationContext> afterComplete)
{
if (_isComplete)
throw new InvalidOperationException("The boot manager has already been completed");
FreezeResolution();
/// <summary>
/// Fires after startup and calls the callback once customizations are locked
/// </summary>
/// <param name="afterComplete"></param>
/// <returns></returns>
public virtual IBootManager Complete(Action<ApplicationContext> afterComplete)
{
if (_isComplete)
throw new InvalidOperationException("The boot manager has already been completed");
//call OnApplicationStarting of each application events handler
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x => x.OnApplicationStarted(UmbracoApplication, ApplicationContext));
FreezeResolution();
//Here we need to make sure the db can be connected to
EnsureDatabaseConnection();
//This is a special case for the user service, we need to tell it if it's an upgrade, if so we need to ensure that
// exceptions are bubbled up if a user is attempted to be persisted during an upgrade (i.e. when they auth to login)
((UserService) ApplicationContext.Services.UserService).IsUpgrading = true;
using (ProfilingLogger.DebugDuration<CoreBootManager>(
string.Format("Executing {0} IApplicationEventHandler.OnApplicationStarted", ApplicationEventsResolver.Current.ApplicationEventHandlers.Count()),
"Finished executing IApplicationEventHandler.OnApplicationStarted"))
{
//call OnApplicationStarting of each application events handler
ApplicationEventsResolver.Current.ApplicationEventHandlers
.ForEach(x =>
{
try
{
x.OnApplicationStarted(UmbracoApplication, ApplicationContext);
}
catch (Exception ex)
{
ProfilingLogger.Logger.Error<CoreBootManager>("An error occurred running OnApplicationStarted for handler " + x.GetType(), ex);
throw;
}
});
}
//Now, startup all of our legacy startup handler
ApplicationEventsResolver.Current.InstantiateLegacyStartupHandlers();
@@ -236,16 +362,42 @@ namespace Umbraco.Core
afterComplete(ApplicationContext.Current);
}
_isComplete = true;
_isComplete = true;
// we're ready to serve content!
ApplicationContext.IsReady = true;
//stop the timer and log the output
_timer.Dispose();
return this;
return this;
}
/// <summary>
/// We cannot continue if the db cannot be connected to
/// </summary>
private void EnsureDatabaseConnection()
{
if (ApplicationContext.IsConfigured == false) return;
if (ApplicationContext.DatabaseContext.IsDatabaseConfigured == false) return;
var currentTry = 0;
while (currentTry < 5)
{
if (ApplicationContext.DatabaseContext.CanConnect)
break;
//wait and retry
Thread.Sleep(1000);
currentTry++;
}
if (currentTry == 5)
{
throw new UmbracoStartupFailedException("Umbraco cannot start. A connection string is configured but the Umbraco cannot connect to the database.");
}
}
/// <summary>
/// Freeze resolution to not allow Resolvers to be modified
/// </summary>
@@ -253,17 +405,22 @@ namespace Umbraco.Core
{
Resolution.Freeze();
}
/// <summary>
/// Create the resolvers
/// </summary>
protected virtual void InitializeResolvers()
{
PropertyEditorResolver.Current = new PropertyEditorResolver(() => PluginManager.Current.ResolvePropertyEditors());
ParameterEditorResolver.Current = new ParameterEditorResolver(() => PluginManager.Current.ResolveParameterEditors());
/// <summary>
/// Create the resolvers
/// </summary>
protected virtual void InitializeResolvers()
{
var builder = new ManifestBuilder(
ApplicationCache.RuntimeCache,
new ManifestParser(new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), ApplicationCache.RuntimeCache));
PropertyEditorResolver.Current = new PropertyEditorResolver(ServiceProvider, ProfilingLogger.Logger, () => PluginManager.ResolvePropertyEditors(), builder);
ParameterEditorResolver.Current = new ParameterEditorResolver(ServiceProvider, ProfilingLogger.Logger, () => PluginManager.ResolveParameterEditors(), builder);
//setup the validators resolver with our predefined validators
ValidatorsResolver.Current = new ValidatorsResolver(new[]
ValidatorsResolver.Current = new ValidatorsResolver(
ServiceProvider, ProfilingLogger.Logger, new[]
{
new Lazy<Type>(() => typeof (RequiredManifestValueValidator)),
new Lazy<Type>(() => typeof (RegexValidator)),
@@ -272,65 +429,80 @@ namespace Umbraco.Core
new Lazy<Type>(() => typeof (IntegerValidator)),
});
//by default we'll use the standard configuration based sync
ServerRegistrarResolver.Current = new ServerRegistrarResolver(
new ConfigServerRegistrar());
//by default we'll use the db server registrar unless the developer has the legacy
// dist calls enabled, in which case we'll use the config server registrar
if (UmbracoConfig.For.UmbracoSettings().DistributedCall.Enabled)
{
ServerRegistrarResolver.Current = new ServerRegistrarResolver(new ConfigServerRegistrar());
}
else
{
ServerRegistrarResolver.Current = new ServerRegistrarResolver(
new DatabaseServerRegistrar(
new Lazy<IServerRegistrationService>(() => ApplicationContext.Services.ServerRegistrationService),
new DatabaseServerRegistrarOptions()));
}
//by default (outside of the web) we'll use the default server messenger without
//supplying a username/password, this will automatically disable distributed calls
// .. we'll override this in the WebBootManager
//by default we'll use the database server messenger with default options (no callbacks),
// this will be overridden in the web startup
ServerMessengerResolver.Current = new ServerMessengerResolver(
new DefaultServerMessenger());
new DatabaseServerMessenger(ApplicationContext, true, new DatabaseServerMessengerOptions()));
MappingResolver.Current = new MappingResolver(
() => PluginManager.Current.ResolveAssignedMapperTypes());
ServiceProvider, ProfilingLogger.Logger,
() => PluginManager.ResolveAssignedMapperTypes());
RepositoryResolver.Current = new RepositoryResolver(
new RepositoryFactory(ApplicationCache));
//RepositoryResolver.Current = new RepositoryResolver(
// new RepositoryFactory(ApplicationCache));
SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver(
new[] { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) })
{
CanResolveBeforeFrozen = true
};
CacheRefreshersResolver.Current = new CacheRefreshersResolver(
ServiceProvider, ProfilingLogger.Logger,
() => PluginManager.ResolveCacheRefreshers());
CacheRefreshersResolver.Current = new CacheRefreshersResolver(
() => PluginManager.Current.ResolveCacheRefreshers());
DataTypesResolver.Current = new DataTypesResolver(
ServiceProvider, ProfilingLogger.Logger,
() => PluginManager.ResolveDataTypes());
DataTypesResolver.Current = new DataTypesResolver(
() => PluginManager.Current.ResolveDataTypes());
MacroFieldEditorsResolver.Current = new MacroFieldEditorsResolver(
ServiceProvider, ProfilingLogger.Logger,
() => PluginManager.ResolveMacroRenderings());
MacroFieldEditorsResolver.Current = new MacroFieldEditorsResolver(
() => PluginManager.Current.ResolveMacroRenderings());
PackageActionsResolver.Current = new PackageActionsResolver(
ServiceProvider, ProfilingLogger.Logger,
() => PluginManager.ResolvePackageActions());
PackageActionsResolver.Current = new PackageActionsResolver(
() => PluginManager.Current.ResolvePackageActions());
ActionsResolver.Current = new ActionsResolver(
() => PluginManager.Current.ResolveActions());
ActionsResolver.Current = new ActionsResolver(
ServiceProvider, ProfilingLogger.Logger,
() => PluginManager.ResolveActions());
//the database migration objects
MigrationResolver.Current = new MigrationResolver(
() => PluginManager.Current.ResolveTypes<IMigration>());
ProfilingLogger.Logger,
() => PluginManager.ResolveTypes<IMigration>());
// todo: remove once we drop IPropertyEditorValueConverter support.
PropertyEditorValueConvertersResolver.Current = new PropertyEditorValueConvertersResolver(
PluginManager.Current.ResolvePropertyEditorValueConverters());
ServiceProvider, ProfilingLogger.Logger,
PluginManager.ResolvePropertyEditorValueConverters());
// need to filter out the ones we dont want!!
PropertyValueConvertersResolver.Current = new PropertyValueConvertersResolver(
PluginManager.Current.ResolveTypes<IPropertyValueConverter>());
// need to filter out the ones we dont want!!
PropertyValueConvertersResolver.Current = new PropertyValueConvertersResolver(
ServiceProvider, ProfilingLogger.Logger,
PluginManager.ResolveTypes<IPropertyValueConverter>());
// use the new DefaultShortStringHelper
ShortStringHelperResolver.Current = new ShortStringHelperResolver(
//new LegacyShortStringHelper());
new DefaultShortStringHelper().WithDefaultConfig());
new DefaultShortStringHelper(UmbracoConfig.For.UmbracoSettings()).WithDefaultConfig());
UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver(
typeof (DefaultUrlSegmentProvider));
UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver(
ServiceProvider, ProfilingLogger.Logger,
typeof(DefaultUrlSegmentProvider));
// by default, no factory is activated
PublishedContentModelFactoryResolver.Current = new PublishedContentModelFactoryResolver();
}
}
PublishedContentModelFactoryResolver.Current = new PublishedContentModelFactoryResolver();
}
}
}
+9 -6
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
using umbraco.interfaces;
@@ -11,12 +12,14 @@ namespace Umbraco.Core
[Obsolete("IDataType is obsolete and is no longer used, it will be removed from the codebase in future versions")]
internal sealed class DataTypesResolver : LegacyTransientObjectsResolver<DataTypesResolver, IDataType>
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="dataTypes"></param>
internal DataTypesResolver(Func<IEnumerable<Type>> dataTypes)
: base(dataTypes)
/// <summary>
/// Constructor
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="logger"></param>
/// <param name="dataTypes"></param>
internal DataTypesResolver(IServiceProvider serviceProvider, ILogger logger, Func<IEnumerable<Type>> dataTypes)
: base(serviceProvider, logger, dataTypes)
{
}
+143 -57
View File
@@ -6,6 +6,7 @@ using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Xml.Linq;
using Semver;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
@@ -13,6 +14,7 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Migrations;
using Umbraco.Core.Persistence.Migrations.Initial;
using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Services;
namespace Umbraco.Core
{
@@ -25,19 +27,61 @@ namespace Umbraco.Core
public class DatabaseContext
{
private readonly IDatabaseFactory _factory;
private readonly ILogger _logger;
private readonly SqlSyntaxProviders _syntaxProviders;
private bool _configured;
private bool _canConnect;
private volatile bool _connectCheck = false;
private readonly object _locker = new object();
private string _connectionString;
private string _providerName;
private DatabaseSchemaResult _result;
[Obsolete("Use the constructor specifying all dependencies instead")]
public DatabaseContext(IDatabaseFactory factory)
: this(factory, LoggerResolver.Current.Logger, new SqlSyntaxProviders(new ISqlSyntaxProvider[]
{
new MySqlSyntaxProvider(LoggerResolver.Current.Logger),
new SqlCeSyntaxProvider(),
new SqlServerSyntaxProvider()
}))
{
_factory = factory;
}
/// <summary>
/// Default constructor
/// </summary>
/// <param name="factory"></param>
/// <param name="logger"></param>
/// <param name="syntaxProviders"></param>
public DatabaseContext(IDatabaseFactory factory, ILogger logger, SqlSyntaxProviders syntaxProviders)
{
if (factory == null) throw new ArgumentNullException("factory");
if (logger == null) throw new ArgumentNullException("logger");
if (syntaxProviders == null) throw new ArgumentNullException("syntaxProviders");
_factory = factory;
_logger = logger;
_syntaxProviders = syntaxProviders;
}
/// <summary>
/// Create a configured DatabaseContext
/// </summary>
/// <param name="factory"></param>
/// <param name="logger"></param>
/// <param name="sqlSyntax"></param>
/// <param name="providerName"></param>
public DatabaseContext(IDatabaseFactory factory, ILogger logger, ISqlSyntaxProvider sqlSyntax, string providerName)
{
_providerName = providerName;
SqlSyntax = sqlSyntax;
SqlSyntaxContext.SqlSyntaxProvider = SqlSyntax;
_factory = factory;
_logger = logger;
_configured = true;
}
public ISqlSyntaxProvider SqlSyntax { get; private set; }
/// <summary>
/// Gets the <see cref="Database"/> object for doing CRUD operations
/// against custom tables that resides in the Umbraco database.
@@ -46,7 +90,7 @@ namespace Umbraco.Core
/// This should not be used for CRUD operations or queries against the
/// standard Umbraco tables! Use the Public services for that.
/// </remarks>
public UmbracoDatabase Database
public virtual UmbracoDatabase Database
{
get { return _factory.CreateDatabase(); }
}
@@ -54,7 +98,7 @@ namespace Umbraco.Core
/// <summary>
/// Boolean indicating whether the database has been configured
/// </summary>
public bool IsDatabaseConfigured
public virtual bool IsDatabaseConfigured
{
get { return _configured; }
}
@@ -62,33 +106,21 @@ namespace Umbraco.Core
/// <summary>
/// Determines if the db can be connected to
/// </summary>
public bool CanConnect
public virtual bool CanConnect
{
get
{
if (IsDatabaseConfigured == false) return false;
//double check lock so that it is only checked once and is fast
if (_connectCheck == false)
{
lock (_locker)
{
if (_canConnect == false)
{
_canConnect = DbConnectionExtensions.IsConnectionAvailable(ConnectionString, DatabaseProvider);
_connectCheck = true;
}
}
}
return _canConnect;
var canConnect = DbConnectionExtensions.IsConnectionAvailable(ConnectionString, DatabaseProvider);
LogHelper.Info<DatabaseContext>("CanConnect = " + canConnect);
return canConnect;
}
}
/// <summary>
/// Gets the configured umbraco db connection string.
/// </summary>
public string ConnectionString
public virtual string ConnectionString
{
get { return _connectionString; }
}
@@ -106,7 +138,7 @@ namespace Umbraco.Core
_providerName = "System.Data.SqlClient";
if (ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName] != null)
{
if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName].ProviderName))
if (string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName].ProviderName) == false)
_providerName = ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName].ProviderName;
}
else
@@ -120,7 +152,7 @@ namespace Umbraco.Core
/// <summary>
/// Returns the Type of DatabaseProvider used
/// </summary>
public DatabaseProviders DatabaseProvider
public virtual DatabaseProviders DatabaseProvider
{
get
{
@@ -324,7 +356,7 @@ namespace Umbraco.Core
xml.Save(fileName, SaveOptions.DisableFormatting);
LogHelper.Info<DatabaseContext>("Configured a new ConnectionString using the '" + providerName + "' provider.");
_logger.Info<DatabaseContext>("Configured a new ConnectionString using the '" + providerName + "' provider.");
}
/// <summary>
@@ -398,12 +430,23 @@ namespace Umbraco.Core
internal void Initialize(string providerName)
{
//only configure once!
if (_configured == true) return;
_providerName = providerName;
try
{
SqlSyntaxContext.SqlSyntaxProvider =
SqlSyntaxProvidersResolver.Current.GetByProviderNameOrDefault(providerName);
if (_syntaxProviders != null)
{
SqlSyntax = _syntaxProviders.GetByProviderNameOrDefault(providerName);
}
else if (SqlSyntax == null)
{
throw new InvalidOperationException("No " + typeof(ISqlSyntaxProvider) + " specified or no " + typeof(SqlSyntaxProviders) + " instance specified");
}
SqlSyntaxContext.SqlSyntaxProvider = SqlSyntax;
_configured = true;
}
@@ -411,8 +454,8 @@ namespace Umbraco.Core
{
_configured = false;
LogHelper.Info<DatabaseContext>("Initialization of the DatabaseContext failed with following error: " + e.Message);
LogHelper.Info<DatabaseContext>(e.StackTrace);
_logger.Info<DatabaseContext>("Initialization of the DatabaseContext failed with following error: " + e.Message);
_logger.Info<DatabaseContext>(e.StackTrace);
}
}
@@ -427,8 +470,8 @@ namespace Umbraco.Core
/// </summary>
private void DetermineSqlServerVersion()
{
var sqlServerSyntax = SqlSyntaxContext.SqlSyntaxProvider as SqlServerSyntaxProvider;
var sqlServerSyntax = SqlSyntax as SqlServerSyntaxProvider;
if (sqlServerSyntax != null)
{
//this will not execute now, it is lazy so will only execute when we need to actually know
@@ -479,14 +522,14 @@ namespace Umbraco.Core
throw new InvalidOperationException("Cannot use MySql in Medium Trust configuration");
}
var database = new UmbracoDatabase(_connectionString, ProviderName);
var dbSchema = new DatabaseSchemaCreation(database);
var database = new UmbracoDatabase(_connectionString, ProviderName, _logger);
var dbSchema = new DatabaseSchemaCreation(database, _logger, SqlSyntax);
_result = dbSchema.ValidateSchema();
}
return _result;
}
internal Result CreateDatabaseSchemaAndData()
internal Result CreateDatabaseSchemaAndData(ApplicationContext applicationContext)
{
try
{
@@ -496,17 +539,17 @@ namespace Umbraco.Core
return readyForInstall.Result;
}
LogHelper.Info<DatabaseContext>("Database configuration status: Started");
_logger.Info<DatabaseContext>("Database configuration status: Started");
string message;
var database = new UmbracoDatabase(_connectionString, ProviderName);
var database = new UmbracoDatabase(_connectionString, ProviderName, _logger);
// If MySQL, we're going to ensure that database calls are maintaining proper casing as to remove the necessity for checks
// for case insensitive queries. In an ideal situation (which is what we're striving for), all calls would be case sensitive.
/*
var supportsCaseInsensitiveQueries = SqlSyntaxContext.SqlSyntaxProvider.SupportsCaseInsensitiveQueries(database);
var supportsCaseInsensitiveQueries = SqlSyntax.SupportsCaseInsensitiveQueries(database);
if (supportsCaseInsensitiveQueries == false)
{
message = "<p>&nbsp;</p><p>The database you're trying to use does not support case insensitive queries. <br />We currently do not support these types of databases.</p>" +
@@ -523,21 +566,24 @@ namespace Umbraco.Core
message = GetResultMessageForMySql();
var schemaResult = ValidateDatabaseSchema();
var installedVersion = schemaResult.DetermineInstalledVersion();
var installedSchemaVersion = schemaResult.DetermineInstalledVersion();
//If Configuration Status is empty and the determined version is "empty" its a new install - otherwise upgrade the existing
if (string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus) && installedVersion.Equals(new Version(0, 0, 0)))
if (string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus) && installedSchemaVersion.Equals(new Version(0, 0, 0)))
{
database.CreateDatabaseSchema();
var helper = new DatabaseSchemaHelper(database, _logger, SqlSyntax);
helper.CreateDatabaseSchema(true, applicationContext);
message = message + "<p>Installation completed!</p>";
//now that everything is done, we need to determine the version of SQL server that is executing
LogHelper.Info<DatabaseContext>("Database configuration status: " + message);
_logger.Info<DatabaseContext>("Database configuration status: " + message);
return new Result { Message = message, Success = true, Percentage = "100" };
}
//we need to do an upgrade so return a new status message and it will need to be done during the next step
LogHelper.Info<DatabaseContext>("Database requires upgrade");
_logger.Info<DatabaseContext>("Database requires upgrade");
message = "<p>Upgrading database, this may take some time...</p>";
return new Result
{
@@ -557,7 +603,7 @@ namespace Umbraco.Core
/// This assumes all of the previous checks are done!
/// </summary>
/// <returns></returns>
internal Result UpgradeSchemaAndData()
internal Result UpgradeSchemaAndData(IMigrationEntryService migrationEntryService)
{
try
{
@@ -568,29 +614,69 @@ namespace Umbraco.Core
return readyForInstall.Result;
}
LogHelper.Info<DatabaseContext>("Database upgrade started");
_logger.Info<DatabaseContext>("Database upgrade started");
var database = new UmbracoDatabase(_connectionString, ProviderName);
//var supportsCaseInsensitiveQueries = SqlSyntaxContext.SqlSyntaxProvider.SupportsCaseInsensitiveQueries(database);
var database = new UmbracoDatabase(_connectionString, ProviderName, _logger);
//var supportsCaseInsensitiveQueries = SqlSyntax.SupportsCaseInsensitiveQueries(database);
var message = GetResultMessageForMySql();
var schemaResult = ValidateDatabaseSchema();
var installedVersion = schemaResult.DetermineInstalledVersion();
var installedSchemaVersion = new SemVersion(schemaResult.DetermineInstalledVersion());
var installedMigrationVersion = new SemVersion(0);
//we cannot check the migrations table if it doesn't exist, this will occur when upgrading to 7.3
if (schemaResult.ValidTables.Any(x => x.InvariantEquals("umbracoMigration")))
{
installedMigrationVersion = schemaResult.DetermineInstalledVersionByMigrations(migrationEntryService);
}
var targetVersion = UmbracoVersion.Current;
//In some cases - like upgrading from 7.2.6 -> 7.3, there will be no migration information in the database and therefore it will
// return a version of 0.0.0 and we don't necessarily want to run all migrations from 0 -> 7.3, so we'll just ensure that the
// migrations are run for the target version
if (installedMigrationVersion == new SemVersion(new Version(0, 0, 0)) && installedSchemaVersion > new SemVersion(new Version(0, 0, 0)))
{
//set the installedMigrationVersion to be one less than the target so the latest migrations are guaranteed to execute
installedMigrationVersion = new SemVersion(targetVersion.SubtractRevision());
}
//Figure out what our current installed version is. If the web.config doesn't have a version listed, then we'll use the minimum
// version detected between the schema installed and the migrations listed in the migration table.
// If there is a version in the web.config, we'll take the minimum between the listed migration in the db and what
// is declared in the web.config.
var currentInstalledVersion = string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus)
//Take the minimum version between the detected schema version and the installed migration version
? new[] {installedSchemaVersion, installedMigrationVersion}.Min()
//Take the minimum version between the installed migration version and the version specified in the config
: new[] { SemVersion.Parse(GlobalSettings.ConfigurationStatus), installedMigrationVersion }.Min();
//Ok, another edge case here. If the current version is a pre-release,
// then we want to ensure all migrations for the current release are executed.
if (currentInstalledVersion.Prerelease.IsNullOrWhiteSpace() == false)
{
currentInstalledVersion = new SemVersion(currentInstalledVersion.GetVersion().SubtractRevision());
}
//DO the upgrade!
var currentVersion = string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus)
? installedVersion
: new Version(GlobalSettings.ConfigurationStatus);
var targetVersion = UmbracoVersion.Current;
var runner = new MigrationRunner(currentVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var runner = new MigrationRunner(migrationEntryService, _logger, currentInstalledVersion, UmbracoVersion.GetSemanticVersion(), GlobalSettings.UmbracoMigrationName);
var upgraded = runner.Execute(database, true);
if (upgraded == false)
{
throw new ApplicationException("Upgrading failed, either an error occurred during the upgrade process or an event canceled the upgrade process, see log for full details");
}
message = message + "<p>Upgrade completed!</p>";
//now that everything is done, we need to determine the version of SQL server that is executing
LogHelper.Info<DatabaseContext>("Database configuration status: " + message);
_logger.Info<DatabaseContext>("Database configuration status: " + message);
return new Result { Message = message, Success = true, Percentage = "100" };
}
@@ -602,7 +688,7 @@ namespace Umbraco.Core
private string GetResultMessageForMySql()
{
if (SqlSyntaxContext.SqlSyntaxProvider.GetType() == typeof(MySqlSyntaxProvider))
if (SqlSyntax.GetType() == typeof(MySqlSyntaxProvider))
{
return "<p>&nbsp;</p><p>Congratulations, the database step ran successfully!</p>" +
"<p>Note: You're using MySQL and the database instance you're connecting to seems to support case insensitive queries.</p>" +
@@ -628,7 +714,7 @@ namespace Umbraco.Core
"<p>For more technical information on case sensitivity in MySQL, have a look at " +
"<a href='http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html'>the documentation on the subject</a></p>";
}
if (SqlSyntaxContext.SqlSyntaxProvider.GetType() == typeof(MySqlSyntaxProvider))
if (SqlSyntax.GetType() == typeof(MySqlSyntaxProvider))
{
return "<p>&nbsp;</p><p>Congratulations, the database step ran successfully!</p>" +
"<p>Note: You're using MySQL and the database instance you're connecting to seems to support case insensitive queries.</p>" +
@@ -665,11 +751,11 @@ namespace Umbraco.Core
private Result HandleInstallException(Exception ex)
{
LogHelper.Error<DatabaseContext>("Database configuration failed", ex);
_logger.Error<DatabaseContext>("Database configuration failed", ex);
if (_result != null)
{
LogHelper.Info<DatabaseContext>("The database schema validation produced the following summary: \n" + _result.GetSummary());
_logger.Info<DatabaseContext>("The database schema validation produced the following summary: \n" + _result.GetSummary());
}
return new Result
@@ -1,3 +1,5 @@
using System;
using System.ComponentModel;
using Umbraco.Core.ObjectResolution;
namespace Umbraco.Core.Dictionary
@@ -12,15 +14,22 @@ namespace Umbraco.Core.Dictionary
{
}
/// <summary>
/// Can be used by developers at runtime to set their ICultureDictionaryFactory at app startup
/// </summary>
/// <param name="factory"></param>
[Obsolete("Use SetDictionaryFactory instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public void SetContentStore(ICultureDictionaryFactory factory)
{
Value = factory;
}
/// <summary>
/// Can be used by developers at runtime to set their ICultureDictionaryFactory at app startup
/// </summary>
/// <param name="factory"></param>
public void SetDictionaryFactory(ICultureDictionaryFactory factory)
{
Value = factory;
}
/// <summary>
/// Returns the ICultureDictionaryFactory
/// </summary>
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Globalization;
namespace Umbraco.Core.Dictionary
@@ -19,5 +20,12 @@ namespace Umbraco.Core.Dictionary
/// Returns the current culture
/// </summary>
CultureInfo Culture { get; }
/// <summary>
/// Returns the child dictionary entries for a given key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
IDictionary<string, string> GetChildren(string key);
}
}
-15
View File
@@ -5,7 +5,6 @@ using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web;
namespace Umbraco.Core
@@ -135,20 +134,6 @@ namespace Umbraco.Core
return n;
}
/// <summary>
/// Converts a dictionary to a FormCollection
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
public static FormCollection ToFormCollection(this IDictionary<string, object> d)
{
var n = new FormCollection();
foreach (var i in d)
{
n.Add(i.Key, Convert.ToString(i.Value));
}
return n;
}
/// <summary>
/// Merges all key/values from the sources dictionaries into the destination dictionary
+28 -39
View File
@@ -4,69 +4,58 @@ using System.Threading;
namespace Umbraco.Core
{
/// <summary>
/// Abstract implementation of logic commonly required to safely handle disposable unmanaged resources.
/// Abstract implementation of IDisposable.
/// </summary>
/// <remarks>
/// 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 bool _disposed;
private readonly ReaderWriterLockSlim _disposalLocker = new ReaderWriterLockSlim();
private readonly object _locko = new object();
/// <summary>
/// Gets a value indicating whether this instance is disposed.
/// </summary>
/// <value>
/// <c>true</c> if this instance is disposed; otherwise, <c>false</c>.
/// </value>
public bool IsDisposed
{
get { return _disposed; }
}
// gets a value indicating whether this instance is disposed.
// for internal tests only (not thread safe)
//TODO make this internal + rename "Disposed" when we can break compatibility
public bool IsDisposed { get { return _disposed; } }
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
/// <filterpriority>2</filterpriority>
// implements IDisposable
public void Dispose()
{
Dispose(true);
// Use SupressFinalize in case a subclass of this type implements a finalizer.
GC.SuppressFinalize(this);
}
// finalizer
~DisposableObject()
{
// Run dispose but let the class know it was due to the finalizer running.
Dispose(false);
}
protected virtual void Dispose(bool disposing)
//TODO make this private, non-virtual when we can break compatibility
protected virtual void Dispose(bool disposing)
{
// Only operate if we haven't already disposed
if (IsDisposed || !disposing) return;
lock (_locko)
{
if (_disposed) return;
_disposed = true;
}
using (new WriteLock(_disposalLocker))
{
// Check again now we're inside the lock
if (IsDisposed) return;
DisposeUnmanagedResources();
// Call to actually release resources. This method is only
// kept separate so that the entire disposal logic can be used as a VS snippet
DisposeResources();
// Indicate that the instance has been disposed.
_disposed = true;
}
if (disposing)
DisposeResources();
}
/// <summary>
/// Handles the disposal of resources. Derived from abstract class <see cref="DisposableObject"/> which handles common required locking logic.
/// </summary>
protected abstract void DisposeResources();
protected virtual void DisposeUnmanagedResources()
{
}
{ }
}
}
+111 -94
View File
@@ -1,4 +1,5 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Web;
using Umbraco.Core.Logging;
@@ -9,32 +10,65 @@ namespace Umbraco.Core
/// <summary>
/// Starts the timer and invokes a callback upon disposal. Provides a simple way of timing an operation by wrapping it in a <code>using</code> (C#) statement.
/// </summary>
/// <example>
/// <code>
///
/// using (DisposableTimer.TraceDuration{MyType}("starting", "finished"))
/// {
/// Thread.Sleep(567);
/// }
///
/// Console.WriteLine("Testing Stopwatchdisposable, should be 567:");
/// using (var timer = new DisposableTimer(result => Console.WriteLine("Took {0}ms", result)))
/// {
/// Thread.Sleep(567);
/// }
/// </code>
/// </example>
public class DisposableTimer : DisposableObject
{
private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
private readonly Action<long> _callback;
protected DisposableTimer(Action<long> callback)
{
_callback = callback;
}
internal enum LogType
{
Debug, Info
}
public Stopwatch Stopwatch
internal DisposableTimer(ILogger logger, LogType logType, IProfiler profiler, Type loggerType, string startMessage, string endMessage)
{
if (logger == null) throw new ArgumentNullException("logger");
if (loggerType == null) throw new ArgumentNullException("loggerType");
_callback = x =>
{
if (profiler != null)
{
profiler.DisposeIfDisposable();
}
switch (logType)
{
case LogType.Debug:
logger.Debug(loggerType, () => endMessage + " (took " + x + "ms)");
break;
case LogType.Info:
logger.Info(loggerType, () => endMessage + " (took " + x + "ms)");
break;
default:
throw new ArgumentOutOfRangeException("logType");
}
};
switch (logType)
{
case LogType.Debug:
logger.Debug(loggerType, startMessage);
break;
case LogType.Info:
logger.Info(loggerType, startMessage);
break;
default:
throw new ArgumentOutOfRangeException("logType");
}
if (profiler != null)
{
profiler.Step(loggerType, startMessage);
}
}
protected internal DisposableTimer(Action<long> callback)
{
if (callback == null) throw new ArgumentNullException("callback");
_callback = callback;
}
public Stopwatch Stopwatch
{
get { return _stopwatch; }
}
@@ -51,25 +85,25 @@ namespace Umbraco.Core
}
#region TraceDuration
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use the other methods that specify strings instead of Func")]
public static DisposableTimer TraceDuration<T>(Func<string> startMessage, Func<string> completeMessage)
{
return TraceDuration(typeof(T), startMessage, completeMessage);
}
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use the other methods that specify strings instead of Func")]
public static DisposableTimer TraceDuration(Type loggerType, Func<string> startMessage, Func<string> completeMessage)
{
var startMsg = startMessage();
LogHelper.Info(loggerType, startMsg);
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("Start: " + startMsg);
var profiler = ActivateProfiler(loggerType, startMsg);
return new DisposableTimer(x =>
{
profiler.DisposeIfDisposable();
LogHelper.Info(loggerType, () => completeMessage() + " (took " + x + "ms)");
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("End: " + startMsg);
});
return new DisposableTimer(
LoggerResolver.Current.Logger,
LogType.Info,
ProfilerResolver.HasCurrent ? ProfilerResolver.Current.Profiler : null,
loggerType,
startMessage(),
completeMessage());
}
/// <summary>
@@ -79,11 +113,19 @@ namespace Umbraco.Core
/// <param name="startMessage"></param>
/// <param name="completeMessage"></param>
/// <returns></returns>
[Obsolete("Use the Umbraco.Core.Logging.ProfilingLogger to create instances of DisposableTimer")]
public static DisposableTimer TraceDuration<T>(string startMessage, string completeMessage)
{
return TraceDuration(typeof(T), startMessage, completeMessage);
}
/// <summary>
/// Adds a start and end log entry as Info and tracks how long it takes until disposed.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="startMessage"></param>
/// <returns></returns>
[Obsolete("Use the Umbraco.Core.Logging.ProfilingLogger to create instances of DisposableTimer")]
public static DisposableTimer TraceDuration<T>(string startMessage)
{
return TraceDuration(typeof(T), startMessage, "Complete");
@@ -96,20 +138,18 @@ namespace Umbraco.Core
/// <param name="startMessage"></param>
/// <param name="completeMessage"></param>
/// <returns></returns>
[Obsolete("Use the Umbraco.Core.Logging.ProfilingLogger to create instances of DisposableTimer")]
public static DisposableTimer TraceDuration(Type loggerType, string startMessage, string completeMessage)
{
LogHelper.Info(loggerType, startMessage);
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("Start: " + startMessage);
var profiler = ActivateProfiler(loggerType, startMessage);
return new DisposableTimer(x =>
{
profiler.DisposeIfDisposable();
LogHelper.Info(loggerType, () => completeMessage + " (took " + x + "ms)");
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("End: " + startMessage);
});
}
return new DisposableTimer(
LoggerResolver.Current.Logger,
LogType.Info,
ProfilerResolver.HasCurrent ? ProfilerResolver.Current.Profiler : null,
loggerType,
startMessage,
completeMessage);
}
#endregion
#region DebugDuration
@@ -120,23 +160,26 @@ namespace Umbraco.Core
/// <param name="startMessage"></param>
/// <param name="completeMessage"></param>
/// <returns></returns>
[Obsolete("Use the Umbraco.Core.Logging.ProfilingLogger to create instances of DisposableTimer")]
public static DisposableTimer DebugDuration<T>(string startMessage, string completeMessage)
{
return DebugDuration(typeof(T), startMessage, completeMessage);
}
public static DisposableTimer DebugDuration<T>(string startMessage)
{
return DebugDuration(typeof(T), startMessage, "Complete");
}
/// <summary>
/// Adds a start and end log entry as Debug and tracks how long it takes until disposed.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="startMessage"></param>
/// <param name="completeMessage"></param>
/// <returns></returns>
[Obsolete("Use the Umbraco.Core.Logging.ProfilingLogger to create instances of DisposableTimer")]
public static DisposableTimer DebugDuration<T>(string startMessage)
{
return DebugDuration(typeof(T), startMessage, "Complete");
}
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use the other methods that specify strings instead of Func")]
public static DisposableTimer DebugDuration<T>(Func<string> startMessage, Func<string> completeMessage)
{
return DebugDuration(typeof(T), startMessage, completeMessage);
@@ -149,42 +192,29 @@ namespace Umbraco.Core
/// <param name="startMessage"></param>
/// <param name="completeMessage"></param>
/// <returns></returns>
[Obsolete("Use the Umbraco.Core.Logging.ProfilingLogger to create instances of DisposableTimer")]
public static DisposableTimer DebugDuration(Type loggerType, string startMessage, string completeMessage)
{
LogHelper.Debug(loggerType, startMessage);
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("Start: " + startMessage);
var profiler = ActivateProfiler(loggerType, startMessage);
return new DisposableTimer(x =>
{
profiler.DisposeIfDisposable();
LogHelper.Debug(loggerType, () => completeMessage + " (took " + x + "ms)");
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("End: " + startMessage);
});
return new DisposableTimer(
LoggerResolver.Current.Logger,
LogType.Debug,
ProfilerResolver.HasCurrent ? ProfilerResolver.Current.Profiler : null,
loggerType,
startMessage,
completeMessage);
}
/// <summary>
/// Adds a start and end log entry as Debug and tracks how long it takes until disposed.
/// </summary>
/// <param name="loggerType"></param>
/// <param name="startMessage"></param>
/// <param name="completeMessage"></param>
/// <returns></returns>
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("Use the other methods that specify strings instead of Func")]
public static DisposableTimer DebugDuration(Type loggerType, Func<string> startMessage, Func<string> completeMessage)
{
var msg = startMessage();
LogHelper.Debug(loggerType, msg);
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("Start: " + startMessage);
var profiler = ActivateProfiler(loggerType, msg);
return new DisposableTimer(x =>
{
profiler.DisposeIfDisposable();
LogHelper.Debug(loggerType, () => completeMessage() + " (took " + x + "ms)");
if (HttpContext.Current != null)
HttpContext.Current.Trace.Write("End: " + startMessage);
});
return new DisposableTimer(
LoggerResolver.Current.Logger,
LogType.Debug,
ProfilerResolver.HasCurrent ? ProfilerResolver.Current.Profiler : null,
loggerType,
startMessage(),
completeMessage());
}
#endregion
@@ -196,18 +226,5 @@ namespace Umbraco.Core
_callback.Invoke(Stopwatch.ElapsedMilliseconds);
}
private static IDisposable ActivateProfiler(Type loggerType, string profileName)
{
try
{
return ProfilerResolver.Current.Profiler.Step(loggerType, profileName);
}
catch (InvalidOperationException)
{
//swallow this exception, it will occur if the ProfilerResolver is not initialized... generally only in
// unit tests.
}
return null;
}
}
}
@@ -5,6 +5,7 @@ using System.Dynamic;
using System.Linq;
using System.Reflection;
using System.Text;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
namespace Umbraco.Core.Dynamics
@@ -34,38 +35,42 @@ namespace Umbraco.Core.Dynamics
FoundExtensionMethod
}
/// <summary>
/// Attempts to invoke a member based on the dynamic instance
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="thisObject">The object instance to invoke the extension method for</param>
/// <param name="binder"></param>
/// <param name="args"></param>
/// <returns></returns>
/// <remarks>
/// First tries to find a property with the binder name, if that fails it will try to find a static or instance method
/// on the object that matches the binder name
/// </remarks>
public static Attempt<TryInvokeMemberResult> TryInvokeMember<T>(T thisObject, InvokeMemberBinder binder, object[] args)
/// <summary>
/// Attempts to invoke a member based on the dynamic instance
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="runtimeCache"></param>
/// <param name="thisObject">The object instance to invoke the extension method for</param>
/// <param name="binder"></param>
/// <param name="args"></param>
/// <returns></returns>
/// <remarks>
/// First tries to find a property with the binder name, if that fails it will try to find a static or instance method
/// on the object that matches the binder name
/// </remarks>
public static Attempt<TryInvokeMemberResult> TryInvokeMember<T>(IRuntimeCacheProvider runtimeCache, T thisObject, InvokeMemberBinder binder, object[] args)
{
return TryInvokeMember<T>(thisObject, binder, args, null);
return TryInvokeMember<T>(runtimeCache, thisObject, binder, args, null);
}
/// <summary>
/// Attempts to invoke a member based on the dynamic instance
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="thisObject">The object instance to invoke the extension method for</param>
/// <param name="binder"></param>
/// <param name="args"></param>
/// <param name="findExtensionMethodsOnTypes">The types to scan for extension methods </param>
/// <returns></returns>
/// <remarks>
/// First tries to find a property with the binder name, if that fails it will try to find a static or instance method
/// on the object that matches the binder name, if that fails it will then attempt to invoke an extension method
/// based on the binder name and the extension method types to scan.
/// </remarks>
public static Attempt<TryInvokeMemberResult> TryInvokeMember<T>(T thisObject,
/// <summary>
/// Attempts to invoke a member based on the dynamic instance
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="runtimeCache"></param>
/// <param name="thisObject">The object instance to invoke the extension method for</param>
/// <param name="binder"></param>
/// <param name="args"></param>
/// <param name="findExtensionMethodsOnTypes">The types to scan for extension methods </param>
/// <returns></returns>
/// <remarks>
/// First tries to find a property with the binder name, if that fails it will try to find a static or instance method
/// on the object that matches the binder name, if that fails it will then attempt to invoke an extension method
/// based on the binder name and the extension method types to scan.
/// </remarks>
public static Attempt<TryInvokeMemberResult> TryInvokeMember<T>(
IRuntimeCacheProvider runtimeCache,
T thisObject,
InvokeMemberBinder binder,
object[] args,
IEnumerable<Type> findExtensionMethodsOnTypes)
@@ -76,9 +81,9 @@ namespace Umbraco.Core.Dynamics
{
//Property?
result = typeof(T).InvokeMember(binder.Name,
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.GetProperty,
BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.GetProperty,
null,
thisObject,
args);
@@ -90,10 +95,10 @@ namespace Umbraco.Core.Dynamics
{
//Static or Instance Method?
result = typeof(T).InvokeMember(binder.Name,
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.InvokeMethod,
BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.Static |
BindingFlags.InvokeMethod,
null,
thisObject,
args);
@@ -105,7 +110,7 @@ namespace Umbraco.Core.Dynamics
{
try
{
result = FindAndExecuteExtensionMethod(thisObject, args, binder.Name, findExtensionMethodsOnTypes);
result = FindAndExecuteExtensionMethod(runtimeCache, thisObject, args, binder.Name, findExtensionMethodsOnTypes);
return Attempt.Succeed(new TryInvokeMemberResult(result, TryInvokeMemberSuccessReason.FoundExtensionMethod));
}
catch (TargetInvocationException ext)
@@ -138,16 +143,19 @@ namespace Umbraco.Core.Dynamics
}
}
/// <summary>
/// Attempts to find an extension method that matches the name and arguments based on scanning the Type's passed in
/// to the findMethodsOnTypes parameter
/// </summary>
/// <param name="thisObject">The instance object to execute the extension method for</param>
/// <param name="args"></param>
/// <param name="name"></param>
/// <param name="findMethodsOnTypes"></param>
/// <returns></returns>
internal static object FindAndExecuteExtensionMethod<T>(T thisObject,
/// <summary>
/// Attempts to find an extension method that matches the name and arguments based on scanning the Type's passed in
/// to the findMethodsOnTypes parameter
/// </summary>
/// <param name="runtimeCache"></param>
/// <param name="thisObject">The instance object to execute the extension method for</param>
/// <param name="args"></param>
/// <param name="name"></param>
/// <param name="findMethodsOnTypes"></param>
/// <returns></returns>
internal static object FindAndExecuteExtensionMethod<T>(
IRuntimeCacheProvider runtimeCache,
T thisObject,
object[] args,
string name,
IEnumerable<Type> findMethodsOnTypes)
@@ -158,7 +166,7 @@ namespace Umbraco.Core.Dynamics
MethodInfo toExecute = null;
foreach (var t in findMethodsOnTypes)
{
toExecute = ExtensionMethodFinder.FindExtensionMethod(t, args, name, false);
toExecute = ExtensionMethodFinder.FindExtensionMethod(runtimeCache, t, args, name, false);
if (toExecute != null)
break;
}
@@ -166,6 +174,13 @@ namespace Umbraco.Core.Dynamics
if (toExecute != null)
{
var genericArgs = (new[] { (object)thisObject }).Concat(args);
// else we'd get an exception w/ message "Late bound operations cannot
// be performed on types or methods for which ContainsGenericParameters is true."
// because MakeGenericMethod must be used to obtain an actual method that can run
if (toExecute.ContainsGenericParameters)
throw new InvalidOperationException("Method contains generic parameters, something's wrong.");
result = toExecute.Invoke(null, genericArgs.ToArray());
}
else
+4 -1
View File
@@ -10,6 +10,7 @@ using System.Collections;
using System.IO;
using System.Web;
using Umbraco.Core;
using Umbraco.Core.Cache;
namespace Umbraco.Core.Dynamics
{
@@ -162,8 +163,10 @@ namespace Umbraco.Core.Dynamics
return true; //anyway
}
var runtimeCache = ApplicationContext.Current != null ? ApplicationContext.Current.ApplicationCache.RuntimeCache : new NullCacheProvider();
//ok, now lets try to match by member, property, extensino method
var attempt = DynamicInstanceHelper.TryInvokeMember(this, binder, args, new[]
var attempt = DynamicInstanceHelper.TryInvokeMember(runtimeCache, this, binder, args, new[]
{
typeof (IEnumerable<DynamicXml>),
typeof (IEnumerable<XElement>),
+126 -252
View File
@@ -1,11 +1,12 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Compilation;
using System.Runtime.CompilerServices;
using System.Collections;
using System.Linq.Expressions;
using System.Web.Services.Description;
using Umbraco.Core.Cache;
namespace Umbraco.Core.Dynamics
{
@@ -14,279 +15,152 @@ namespace Umbraco.Core.Dynamics
/// </summary>
internal static class ExtensionMethodFinder
{
private static readonly MethodInfo[] AllExtensionMethods;
/// <summary>
/// The static cache for extension methods found that match the criteria that we are looking for
/// </summary>
private static readonly ConcurrentDictionary<Tuple<Type, string, int>, MethodInfo[]> MethodCache = new ConcurrentDictionary<Tuple<Type, string, int>, MethodInfo[]>();
static ExtensionMethodFinder()
{
AllExtensionMethods = TypeFinder.GetAssembliesWithKnownExclusions()
/// <summary>
/// Returns the enumerable of all extension method info's in the app domain = USE SPARINGLY!!!
/// </summary>
/// <returns></returns>
/// <remarks>
/// We cache this as a sliding 5 minute exiration, in unit tests there's over 1100 methods found, surely that will eat up a bit of memory so we want
/// to make sure we give it back.
/// </remarks>
private static IEnumerable<MethodInfo> GetAllExtensionMethodsInAppDomain(IRuntimeCacheProvider runtimeCacheProvider)
{
if (runtimeCacheProvider == null) throw new ArgumentNullException("runtimeCacheProvider");
return runtimeCacheProvider.GetCacheItem<MethodInfo[]>(typeof (ExtensionMethodFinder).Name, () => TypeFinder.GetAssembliesWithKnownExclusions()
// assemblies that contain extension methods
.Where(a => a.IsDefined(typeof(ExtensionAttribute), false))
.Where(a => a.IsDefined(typeof (ExtensionAttribute), false))
// types that contain extension methods
.SelectMany(a => a.GetTypes()
.Where(t => t.IsDefined(typeof(ExtensionAttribute), false) && t.IsSealed && t.IsGenericType == false && t.IsNested == false))
.Where(t => t.IsDefined(typeof (ExtensionAttribute), false) && t.IsSealed && t.IsGenericType == false && t.IsNested == false))
// actual extension methods
.SelectMany(t => t.GetMethods(BindingFlags.Static | BindingFlags.Public)
.Where(m => m.IsDefined(typeof(ExtensionAttribute), false)))
.Where(m => m.IsDefined(typeof (ExtensionAttribute), false)))
// and also IEnumerable<T> extension methods - because the assembly is excluded
.Concat(typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public))
.ToArray();
}
.Concat(typeof (Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public))
//If we don't do this then we'll be scanning all assemblies each time!
.ToArray(),
//only cache for 5 minutes
timeout: TimeSpan.FromMinutes(5),
// ORIGINAL CODE IS NOT COMPLETE, DOES NOT HANDLE GENERICS, ETC...
// so this is an attempt at fixing things, but it's not done yet
// and do we really want to do this? extension methods are not supported on dynamics, period
// we should use strongly typed content instead of dynamics.
/*
// get all extension methods for type thisType, with name name,
// accepting argsCount arguments (not counting the instance of thisType).
private static IEnumerable<MethodInfo> GetExtensionMethods(Type thisType, string name, int argsCount)
{
var key = string.Format("{0}.{1}::{2}", thisType.FullName, name, argsCount);
var types = thisType.GetBaseTypes(true); // either do this OR have MatchFirstParameter handle the stuff... F*XME
var methods = AllExtensionMethods
.Where(m => m.Name == name)
.Where(m => m.GetParameters().Length == argsCount)
.Where(m => MatchFirstParameter(thisType, m.GetParameters()[0].ParameterType));
// f*xme - is this what we should cache?
return methods;
//each time this is accessed it will be for 5 minutes longer
isSliding:true);
}
// find out whether the first parameter is a match for thisType
private static bool MatchFirstParameter(Type thisType, Type firstParameterType)
{
return MethodArgZeroHasCorrectTargetType(null, firstParameterType, thisType);
}
// get the single extension method for type thisType, with name name,
// that accepts the arguments in args (which does not contain the instance of thisType).
public static MethodInfo GetExtensionMethod(Type thisType, string name, object[] args)
{
MethodInfo result = null;
foreach (var method in GetExtensionMethods(thisType, name, args.Length).Where(m => MatchParameters(m, args)))
{
if (result == null)
result = method;
else
throw new AmbiguousMatchException("More than one matching extension method was found.");
}
return result;
}
// find out whether the method can accept the arguments
private static bool MatchParameters(MethodInfo method, IList<object> args)
{
var parameters = method.GetParameters();
var i = 0;
for (; i < parameters.Length; ++i)
{
if (MatchParameter(parameters[i].ParameterType, args[i].GetType()) == false)
break;
}
return (i == parameters.Length);
}
internal static bool MatchParameter(Type parameterType, Type argumentType)
{
// public static int DoSomething<T>(Foo foo, T t1, T t2)
// DoSomething(foo, t1, t2) => how can we match?!
return parameterType == argumentType; // f*xme of course!
}
*
*/
// BELOW IS THE ORIGINAL CODE...
/// <summary>
/// Returns all extension methods found matching the definition
/// </summary>
/// <param name="thisType"></param>
/// <param name="name"></param>
/// <param name="argumentCount"></param>
/// <param name="argsContainsThis"></param>
/// <returns></returns>
/// <remarks>
/// TODO: NOTE: This will be an intensive method to call!! Results should be cached!
/// </remarks>
private static IEnumerable<MethodInfo> GetAllExtensionMethods(Type thisType, string name, int argumentCount, bool argsContainsThis)
{
// at *least* we can cache the extension methods discovery
var candidates = AllExtensionMethods;
/*
//only scan assemblies we know to contain extension methods (user assemblies)
var assembliesToScan = TypeFinder.GetAssembliesWithKnownExclusions();
//get extension methods from runtime
var candidates = (
from assembly in assembliesToScan
where assembly.IsDefined(typeof(ExtensionAttribute), false)
from type in assembly.GetTypes()
where (type.IsDefined(typeof(ExtensionAttribute), false)
&& type.IsSealed && !type.IsGenericType && !type.IsNested)
from method in type.GetMethods(BindingFlags.Static | BindingFlags.Public)
// this filters extension methods
where method.IsDefined(typeof(ExtensionAttribute), false)
select method
);
//add the extension methods defined in IEnumerable
candidates = candidates.Concat(typeof(Enumerable).GetMethods(BindingFlags.Static | BindingFlags.Public));
*/
//filter by name
var methodsByName = candidates.Where(m => m.Name == name);
var isGenericAndRightParamCount = methodsByName.Where(m => m.GetParameters().Length == argumentCount + (argsContainsThis ? 0 : 1));
//find the right overload that can take genericParameterType
//which will be either DynamicNodeList or List<DynamicNode> which is IEnumerable`
var withGenericParameterType = isGenericAndRightParamCount.Select(m => new { m, t = FirstParameterType(m) });
var methodsWhereArgZeroIsTargetType = (from method in withGenericParameterType
where
method.t != null && MethodArgZeroHasCorrectTargetType(method.m, method.t, thisType)
select method);
return methodsWhereArgZeroIsTargetType.Select(mt => mt.m);
}
private static bool MethodArgZeroHasCorrectTargetType(MethodInfo method, Type firstArgumentType, Type thisType)
{
//This is done with seperate method calls because you can't debug/watch lamdas - if you're trying to figure
//out why the wrong method is returned, it helps to be able to see each boolean result
return
// is it defined on me?
MethodArgZeroHasCorrectTargetTypeTypeMatchesExactly(method, firstArgumentType, thisType) ||
// or on any of my interfaces?
MethodArgZeroHasCorrectTargetTypeAnInterfaceMatches(method, firstArgumentType, thisType) ||
// or on any of my base types?
MethodArgZeroHasCorrectTargetTypeIsASubclassOf(method, firstArgumentType, thisType) ||
//share a common interface (e.g. IEnumerable)
MethodArgZeroHasCorrectTargetTypeShareACommonInterface(method, firstArgumentType, thisType);
}
private static bool MethodArgZeroHasCorrectTargetTypeShareACommonInterface(MethodInfo method, Type firstArgumentType, Type thisType)
{
Type[] interfaces = firstArgumentType.GetInterfaces();
if (interfaces.Length == 0)
{
return false;
}
bool result = interfaces.All(i => thisType.GetInterfaces().Contains(i));
return result;
}
private static bool MethodArgZeroHasCorrectTargetTypeIsASubclassOf(MethodInfo method, Type firstArgumentType, Type thisType)
{
bool result = thisType.IsSubclassOf(firstArgumentType);
return result;
}
private static bool MethodArgZeroHasCorrectTargetTypeAnInterfaceMatches(MethodInfo method, Type firstArgumentType, Type thisType)
{
bool result = thisType.GetInterfaces().Contains(firstArgumentType);
return result;
}
private static bool MethodArgZeroHasCorrectTargetTypeTypeMatchesExactly(MethodInfo method, Type firstArgumentType, Type thisType)
{
bool result = (thisType == firstArgumentType);
return result;
}
private static Type FirstParameterType(MethodInfo m)
{
ParameterInfo[] p = m.GetParameters();
if (p.Any())
{
return p.First().ParameterType;
}
return null;
}
private static MethodInfo DetermineMethodFromParams(IEnumerable<MethodInfo> methods, Type genericType, IEnumerable<object> args)
/// <summary>
/// Returns all extension methods found matching the definition
/// </summary>
/// <param name="runtimeCache">
/// The runtime cache is used to temporarily cache all extension methods found in the app domain so that
/// while we search for individual extension methods, the process will be reasonably 'quick'. We then statically
/// cache the MethodInfo's that we are looking for and then the runtime cache will expire and give back all that memory.
/// </param>
/// <param name="thisType"></param>
/// <param name="name"></param>
/// <param name="argumentCount">
/// The arguments EXCLUDING the 'this' argument in an extension method
/// </param>
/// <returns></returns>
/// <remarks>
/// NOTE: This will be an intensive method to call! Results will be cached based on the key (args) of this method
/// </remarks>
internal static IEnumerable<MethodInfo> GetAllExtensionMethods(IRuntimeCacheProvider runtimeCache, Type thisType, string name, int argumentCount)
{
var key = new Tuple<Type, string, int>(thisType, name, argumentCount);
return MethodCache.GetOrAdd(key, tuple =>
{
var candidates = GetAllExtensionMethodsInAppDomain(runtimeCache);
// filter by name
var filtr1 = candidates.Where(m => m.Name == name);
// filter by args count
// ensure we add + 1 to the arg count because the 'this' arg is not included in the count above!
var filtr2 = filtr1.Where(m => m.GetParameters().Length == argumentCount + 1);
// filter by first parameter type (target of the extension method)
// ie find the right overload that can take genericParameterType
// (which will be either DynamicNodeList or List<DynamicNode> which is IEnumerable)
var filtr3 = filtr2.Select(x =>
{
var t = x.GetParameters()[0].ParameterType; // exists because of +1 above
var bindings = new Dictionary<string, Type>();
if (TypeHelper.MatchType(thisType, t, bindings) == false) return null;
// create the generic method if necessary
if (x.ContainsGenericParameters == false) return x;
var targs = t.GetGenericArguments().Select(y => bindings[y.Name]).ToArray();
return x.MakeGenericMethod(targs);
}).Where(x => x != null);
return filtr3.ToArray();
});
}
private static MethodInfo DetermineMethodFromParams(IEnumerable<MethodInfo> methods, Type genericType, IEnumerable<object> args)
{
if (!methods.Any())
{
return null;
}
MethodInfo methodToExecute = null;
if (methods.Count() > 1)
{
//Given the args, lets get the types and compare the type sequence to try and find the correct overload
var argTypes = args.ToList().ConvertAll(o =>
{
var oe = (o as Expression);
if (oe != null)
{
return oe.Type.FullName;
}
return o.GetType().FullName;
});
var methodsWithArgTypes = methods.Select(method => new { method, types = method.GetParameters().Select(pi => pi.ParameterType.FullName) });
var firstMatchingOverload = methodsWithArgTypes.FirstOrDefault(m => m.types.SequenceEqual(argTypes));
if (firstMatchingOverload != null)
{
methodToExecute = firstMatchingOverload.method;
}
}
if (methodToExecute == null)
{
var firstMethod = methods.FirstOrDefault();
// NH: this is to ensure that it's always the correct one being chosen when using the LINQ extension methods
if (methods.Count() > 1)
{
var firstGenericMethod = methods.FirstOrDefault(x => x.IsGenericMethodDefinition);
if (firstGenericMethod != null)
{
firstMethod = firstGenericMethod;
}
}
//Given the args, lets get the types and compare the type sequence to try and find the correct overload
var argTypes = args.Select(o =>
{
var oe = (o as Expression);
return oe != null ? oe.Type : o.GetType();
});
var methodsWithArgTypes = methods.Select(method => new
{
method,
//skip the first arg because that is the extension method type ('this') that we are looking for
types = method.GetParameters().Select(pi => pi.ParameterType).Skip(1)
});
//This type comparer will check
var typeComparer = new DelegateEqualityComparer<Type>(
//Checks if the argument type passed in can be assigned from the parameter type in the method. For
// example, if the argument type is HtmlHelper<MyModel> but the method parameter type is HtmlHelper then
// it will match because the argument is assignable to that parameter type and will be able to execute
TypeHelper.IsTypeAssignableFrom,
//This will not ever execute but if it does we need to get the hash code of the string because the hash
// code of a type is random
type => type.FullName.GetHashCode());
var firstMatchingOverload = methodsWithArgTypes
.FirstOrDefault(m => m.types.SequenceEqual(argTypes, typeComparer));
if (firstMatchingOverload != null)
{
methodToExecute = firstMatchingOverload.method;
}
if (firstMethod != null)
{
if (firstMethod.IsGenericMethodDefinition)
{
if (genericType != null)
{
methodToExecute = firstMethod.MakeGenericMethod(genericType);
}
}
else
{
methodToExecute = firstMethod;
}
}
}
return methodToExecute;
}
public static MethodInfo FindExtensionMethod(Type thisType, object[] args, string name, bool argsContainsThis)
public static MethodInfo FindExtensionMethod(IRuntimeCacheProvider runtimeCache, Type thisType, object[] args, string name, bool argsContainsThis)
{
Type genericType = null;
if (thisType.IsGenericType)
{
genericType = thisType.GetGenericArguments()[0];
}
}
var methods = GetAllExtensionMethods(thisType, name, args.Length, argsContainsThis).ToArray();
return DetermineMethodFromParams(methods, genericType, args);
args = args
//if the args contains 'this', remove the first one since that is 'this' and we don't want to use
//that in the method searching
.Skip(argsContainsThis ? 1 : 0)
.ToArray();
var methods = GetAllExtensionMethods(runtimeCache, thisType, name, args.Length).ToArray();
return DetermineMethodFromParams(methods, genericType, args);
}
}
}
+1 -1
View File
@@ -12,7 +12,7 @@ namespace Umbraco.Core
/// <remarks>
/// Taken from http://damieng.com/blog/2010/10/17/enums-better-syntax-improved-performance-and-tryparse-in-net-3-5
/// </remarks>
internal static class Enum<T> where T : struct
public static class Enum<T> where T : struct
{
private static readonly IEnumerable<T> All = Enum.GetValues(typeof(T)).Cast<T>();
private static readonly Dictionary<string, T> InsensitiveNames = All.ToDictionary(k => Enum.GetName(typeof(T), k).ToLowerInvariant());
+34 -10
View File
@@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
@@ -100,6 +101,7 @@ namespace Umbraco.Core
/// <param name="f">The select child.</param>
/// <typeparam name="T">Item type</typeparam>
/// <returns>list of TItem</returns>
[Obsolete("Do not use, use SelectRecursive instead which has far less potential of re-iterating an iterator which may cause significantly more SQL queries")]
public static IEnumerable<T> FlattenList<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f)
{
return e.SelectMany(c => f(c).FlattenList(f)).Concat(e);
@@ -114,13 +116,7 @@ namespace Umbraco.Core
/// <returns></returns>
public static bool ContainsAll<TSource>(this IEnumerable<TSource> source, IEnumerable<TSource> other)
{
var matches = true;
foreach (var i in other)
{
matches = source.Contains(i);
if (!matches) break;
}
return matches;
return other.Except(source).Any() == false;
}
/// <summary>
@@ -132,7 +128,7 @@ namespace Umbraco.Core
/// <returns></returns>
public static bool ContainsAny<TSource>(this IEnumerable<TSource> source, IEnumerable<TSource> other)
{
return other.Any(i => source.Contains(i));
return other.Any(source.Contains);
}
/// <summary>
@@ -224,7 +220,7 @@ namespace Umbraco.Core
return sequence.Select(
x =>
{
if (typeof(TActual).IsAssignableFrom(x.GetType()))
if (x is TActual)
{
var casted = x as TActual;
projection.Invoke(casted);
@@ -276,6 +272,34 @@ namespace Umbraco.Core
///<param name="items">The enumerable to search.</param>
///<param name="item">The item to find.</param>
///<returns>The index of the first matching item, or -1 if the item was not found.</returns>
public static int IndexOf<T>(this IEnumerable<T> items, T item) { return items.FindIndex(i => EqualityComparer<T>.Default.Equals(item, i)); }
public static int IndexOf<T>(this IEnumerable<T> items, T item)
{
return items.FindIndex(i => EqualityComparer<T>.Default.Equals(item, i));
}
/// <summary>
/// Determines if 2 lists have equal elements within them regardless of how they are sorted
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="other"></param>
/// <returns></returns>
/// <remarks>
/// The logic for this is taken from:
/// http://stackoverflow.com/questions/4576723/test-whether-two-ienumerablet-have-the-same-values-with-the-same-frequencies
///
/// There's a few answers, this one seems the best for it's simplicity and based on the comment of Eamon
/// </remarks>
public static bool UnsortedSequenceEqual<T>(this IEnumerable<T> source, IEnumerable<T> other)
{
if (source == null && other == null) return true;
if (source == null || other == null) return false;
var list1Groups = source.ToLookup(i => i);
var list2Groups = other.ToLookup(i => i);
return list1Groups.Count == list2Groups.Count
&& list1Groups.All(g => g.Count() == list2Groups[g.Key].Count());
}
}
}
@@ -3,7 +3,7 @@ using System.Security.Permissions;
namespace Umbraco.Core.Events
{
/// <summary>
/// <summary>
/// Event args for that can support cancellation
/// </summary>
[HostProtection(SecurityAction.LinkDemand, SharedState = true)]
@@ -11,15 +11,30 @@ namespace Umbraco.Core.Events
{
private bool _cancel;
public CancellableEventArgs(bool canCancel)
public CancellableEventArgs(bool canCancel, EventMessages eventMessages)
{
if (eventMessages == null) throw new ArgumentNullException("eventMessages");
CanCancel = canCancel;
Messages = eventMessages;
}
public CancellableEventArgs(bool canCancel)
{
CanCancel = canCancel;
}
//create a standalone messages
Messages = new EventMessages();
}
public CancellableEventArgs()
public CancellableEventArgs(EventMessages eventMessages)
: this(true, eventMessages)
{
}
public CancellableEventArgs()
: this(true)
{
}
/// <summary>
/// Flag to determine if this instance will support being cancellable
/// </summary>
@@ -32,7 +47,7 @@ namespace Umbraco.Core.Events
{
get
{
if (!CanCancel)
if (CanCancel == false)
{
throw new InvalidOperationException("This event argument class does not support cancelling.");
}
@@ -40,12 +55,28 @@ namespace Umbraco.Core.Events
}
set
{
if (!CanCancel)
if (CanCancel == false)
{
throw new InvalidOperationException("This event argument class does not support cancelling.");
}
_cancel = value;
}
}
}
/// <summary>
/// if this instance supports cancellation, this will set Cancel to true with an affiliated cancellation message
/// </summary>
/// <param name="cancelationMessage"></param>
public void CancelOperation(EventMessage cancelationMessage)
{
Cancel = true;
cancelationMessage.IsDefaultEventMessage = true;
Messages.Add(cancelationMessage);
}
/// <summary>
/// Returns the EventMessages object which is used to add messages to the message collection for this event
/// </summary>
public EventMessages Messages { get; private set; }
}
}
@@ -12,7 +12,18 @@ namespace Umbraco.Core.Events
public class CancellableObjectEventArgs<T> : CancellableEventArgs
{
public CancellableObjectEventArgs(T eventObject, bool canCancel)
public CancellableObjectEventArgs(T eventObject, bool canCancel, EventMessages eventMessages)
: base(canCancel, eventMessages)
{
EventObject = eventObject;
}
public CancellableObjectEventArgs(T eventObject, EventMessages eventMessages)
: this(eventObject, true, eventMessages)
{
}
public CancellableObjectEventArgs(T eventObject, bool canCancel)
: base(canCancel)
{
EventObject = eventObject;
+57 -7
View File
@@ -4,12 +4,56 @@ namespace Umbraco.Core.Events
{
public class DeleteEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>
{
/// <summary>
/// Constructor accepting multiple entities that are used in the delete operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
public DeleteEventArgs(IEnumerable<TEntity> eventObject, bool canCancel) : base(eventObject, canCancel)
/// <summary>
/// Constructor accepting multiple entities that are used in the delete operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
/// <param name="eventMessages"></param>
public DeleteEventArgs(IEnumerable<TEntity> eventObject, bool canCancel, EventMessages eventMessages) : base(eventObject, canCancel, eventMessages)
{
MediaFilesToDelete = new List<string>();
}
/// <summary>
/// Constructor accepting multiple entities that are used in the delete operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="eventMessages"></param>
public DeleteEventArgs(IEnumerable<TEntity> eventObject, EventMessages eventMessages) : base(eventObject, eventMessages)
{
MediaFilesToDelete = new List<string>();
}
/// <summary>
/// Constructor accepting a single entity instance
/// </summary>
/// <param name="eventObject"></param>
/// <param name="eventMessages"></param>
public DeleteEventArgs(TEntity eventObject, EventMessages eventMessages)
: base(new List<TEntity> { eventObject }, eventMessages)
{
MediaFilesToDelete = new List<string>();
}
/// <summary>
/// Constructor accepting a single entity instance
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
/// <param name="eventMessages"></param>
public DeleteEventArgs(TEntity eventObject, bool canCancel, EventMessages eventMessages)
: base(new List<TEntity> { eventObject }, canCancel, eventMessages)
{
MediaFilesToDelete = new List<string>();
}
/// <summary>
/// Constructor accepting multiple entities that are used in the delete operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
public DeleteEventArgs(IEnumerable<TEntity> eventObject, bool canCancel) : base(eventObject, canCancel)
{
MediaFilesToDelete = new List<string>();
}
@@ -60,7 +104,13 @@ namespace Umbraco.Core.Events
public class DeleteEventArgs : CancellableEventArgs
{
public DeleteEventArgs(int id, bool canCancel)
public DeleteEventArgs(int id, bool canCancel, EventMessages eventMessages)
: base(canCancel, eventMessages)
{
Id = id;
}
public DeleteEventArgs(int id, bool canCancel)
: base(canCancel)
{
Id = id;
+71 -19
View File
@@ -1,4 +1,5 @@
using System;
using System.Linq;
namespace Umbraco.Core.Events
{
@@ -7,16 +8,44 @@ namespace Umbraco.Core.Events
/// </summary>
public static class EventExtensions
{
/// <summary>
/// Raises the event and returns a boolean value indicating if the event was cancelled
/// </summary>
/// <typeparam name="TSender"></typeparam>
/// <typeparam name="TArgs"></typeparam>
/// <param name="eventHandler"></param>
/// <param name="args"></param>
/// <param name="sender"></param>
/// <returns></returns>
public static bool IsRaisedEventCancelled<TSender, TArgs>(
/// <summary>
/// Raises the event and checks if a cancelation has occurred, if so it checks if any messages have been
/// added to the event messages collection and if not it adds a default cancelation message
/// </summary>
/// <typeparam name="TSender"></typeparam>
/// <typeparam name="TArgs"></typeparam>
/// <param name="eventHandler"></param>
/// <param name="evtMsgs"></param>
/// <param name="args"></param>
/// <param name="sender"></param>
/// <returns></returns>
public static bool IsRaisedEventCancelled<TSender, TArgs>(
this TypedEventHandler<TSender, TArgs> eventHandler,
EventMessages evtMsgs,
Func<EventMessages, TArgs> args,
TSender sender)
where TArgs : CancellableEventArgs
{
var evtArgs = args(evtMsgs);
if (eventHandler != null)
{
eventHandler(sender, evtArgs);
}
return evtArgs.Cancel;
}
/// <summary>
/// Raises the event and returns a boolean value indicating if the event was cancelled
/// </summary>
/// <typeparam name="TSender"></typeparam>
/// <typeparam name="TArgs"></typeparam>
/// <param name="eventHandler"></param>
/// <param name="args"></param>
/// <param name="sender"></param>
/// <returns></returns>
public static bool IsRaisedEventCancelled<TSender, TArgs>(
this TypedEventHandler<TSender, TArgs> eventHandler,
TArgs args,
TSender sender)
@@ -28,15 +57,38 @@ namespace Umbraco.Core.Events
return args.Cancel;
}
/// <summary>
/// Raises the event
/// </summary>
/// <typeparam name="TSender"></typeparam>
/// <typeparam name="TArgs"></typeparam>
/// <param name="eventHandler"></param>
/// <param name="args"></param>
/// <param name="sender"></param>
public static void RaiseEvent<TSender, TArgs>(
/// <summary>
/// Raises the event with EventMessages
/// </summary>
/// <typeparam name="TSender"></typeparam>
/// <typeparam name="TArgs"></typeparam>
/// <param name="eventHandler"></param>
/// <param name="evtMsgs"></param>
/// <param name="args"></param>
/// <param name="sender"></param>
public static void RaiseEvent<TSender, TArgs>(
this TypedEventHandler<TSender, TArgs> eventHandler,
EventMessages evtMsgs,
Func<EventMessages, TArgs> args,
TSender sender)
where TArgs : EventArgs
{
if (eventHandler != null)
{
var evtArgs = args(evtMsgs);
eventHandler(sender, evtArgs);
}
}
/// <summary>
/// Raises the event
/// </summary>
/// <typeparam name="TSender"></typeparam>
/// <typeparam name="TArgs"></typeparam>
/// <param name="eventHandler"></param>
/// <param name="args"></param>
/// <param name="sender"></param>
public static void RaiseEvent<TSender, TArgs>(
this TypedEventHandler<TSender, TArgs> eventHandler,
TArgs args,
TSender sender)
+27
View File
@@ -0,0 +1,27 @@
namespace Umbraco.Core.Events
{
/// <summary>
/// An event message
/// </summary>
public sealed class EventMessage
{
/// <summary>
/// Initializes a new instance of the <see cref="EventMessage"/> class.
/// </summary>
public EventMessage(string category, string message, EventMessageType messageType = EventMessageType.Default)
{
Category = category;
Message = message;
MessageType = messageType;
}
public string Category { get; private set; }
public string Message { get; private set; }
public EventMessageType MessageType { get; private set; }
/// <summary>
/// This is used to track if this message should be used as a default message so that Umbraco doesn't also append it's own default messages
/// </summary>
internal bool IsDefaultEventMessage { get; set; }
}
}
+32
View File
@@ -0,0 +1,32 @@
using System.Collections.Generic;
namespace Umbraco.Core.Events
{
/// <summary>
/// Event messages collection
/// </summary>
public sealed class EventMessages : DisposableObject
{
private readonly List<EventMessage> _msgs = new List<EventMessage>();
public void Add(EventMessage msg)
{
_msgs.Add(msg);
}
public int Count
{
get { return _msgs.Count; }
}
public IEnumerable<EventMessage> GetAll()
{
return _msgs;
}
protected override void DisposeResources()
{
_msgs.Clear();
}
}
}
@@ -0,0 +1,12 @@
using System.Collections.Generic;
namespace Umbraco.Core.Events
{
/// <summary>
/// Event messages factory
/// </summary>
public interface IEventMessagesFactory
{
EventMessages Get();
}
}
+14
View File
@@ -0,0 +1,14 @@
namespace Umbraco.Core.Events
{
/// <summary>
/// The type of event message
/// </summary>
public enum EventMessageType
{
Default = 0,
Info = 1,
Error = 2,
Success = 3,
Warning = 4
}
}
+43 -9
View File
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Semver;
using Umbraco.Core.Persistence.Migrations;
namespace Umbraco.Core.Events
@@ -13,11 +15,20 @@ namespace Umbraco.Core.Events
/// <param name="targetVersion"></param>
/// <param name="canCancel"></param>
/// <param name="configuredVersion"></param>
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion, bool canCancel)
: base(eventObject, canCancel)
{
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
}
[Obsolete("Use constructor accepting UmbracoVersion instances instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationEventArgs(IList<IMigration> eventObject, Version configuredVersion, Version targetVersion, bool canCancel)
: base(eventObject, canCancel)
{
ConfiguredVersion = configuredVersion;
TargetVersion = targetVersion;
ConfiguredSemVersion = new SemVersion(configuredVersion);
TargetSemVersion = new SemVersion(targetVersion);
}
/// <summary>
@@ -28,12 +39,12 @@ namespace Umbraco.Core.Events
/// <param name="targetVersion"></param>
/// <param name="canCancel"></param>
/// <param name="configuredVersion"></param>
internal MigrationEventArgs(IList<IMigration> eventObject, MigrationContext migrationContext, Version configuredVersion, Version targetVersion, bool canCancel)
internal MigrationEventArgs(IList<IMigration> eventObject, MigrationContext migrationContext, SemVersion configuredVersion, SemVersion targetVersion, bool canCancel)
: base(eventObject, canCancel)
{
MigrationContext = migrationContext;
ConfiguredVersion = configuredVersion;
TargetVersion = targetVersion;
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
}
/// <summary>
@@ -42,11 +53,20 @@ namespace Umbraco.Core.Events
/// <param name="eventObject"></param>
/// <param name="configuredVersion"></param>
/// <param name="targetVersion"></param>
public MigrationEventArgs(IList<IMigration> eventObject, SemVersion configuredVersion, SemVersion targetVersion)
: base(eventObject)
{
ConfiguredSemVersion = configuredVersion;
TargetSemVersion = targetVersion;
}
[Obsolete("Use constructor accepting UmbracoVersion instances instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public MigrationEventArgs(IList<IMigration> eventObject, Version configuredVersion, Version targetVersion)
: base(eventObject)
{
ConfiguredVersion = configuredVersion;
TargetVersion = targetVersion;
ConfiguredSemVersion = new SemVersion(configuredVersion);
TargetSemVersion = new SemVersion(targetVersion);
}
/// <summary>
@@ -57,9 +77,23 @@ namespace Umbraco.Core.Events
get { return EventObject; }
}
public Version ConfiguredVersion { get; private set; }
[Obsolete("Use ConfiguredSemVersion instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public Version ConfiguredVersion
{
get { return ConfiguredSemVersion.GetVersion(); }
}
public Version TargetVersion { get; private set; }
[Obsolete("Use TargetUmbracoVersion instead")]
[EditorBrowsable(EditorBrowsableState.Never)]
public Version TargetVersion
{
get { return TargetSemVersion.GetVersion(); }
}
public SemVersion ConfiguredSemVersion { get; private set; }
public SemVersion TargetSemVersion { get; private set; }
internal MigrationContext MigrationContext { get; private set; }
}
+43 -14
View File
@@ -4,22 +4,51 @@ using System.Linq;
namespace Umbraco.Core.Events
{
public class MoveEventInfo<TEntity>
{
public MoveEventInfo(TEntity entity, string originalPath, int newParentId)
{
Entity = entity;
OriginalPath = originalPath;
NewParentId = newParentId;
}
public TEntity Entity { get; set; }
public string OriginalPath { get; set; }
public int NewParentId { get; set; }
}
public class MoveEventArgs<TEntity> : CancellableObjectEventArgs<TEntity>
{
/// <summary>
/// Constructor accepting a collection of MoveEventInfo objects
/// </summary>
/// <param name="canCancel"></param>
/// <param name="eventMessages"></param>
/// <param name="moveInfo">
/// A colleciton of MoveEventInfo objects that exposes all entities that have been moved during a single move operation
/// </param>
public MoveEventArgs(bool canCancel, EventMessages eventMessages, params MoveEventInfo<TEntity>[] moveInfo)
: base(default(TEntity), canCancel, eventMessages)
{
if (moveInfo.FirstOrDefault() == null)
{
throw new ArgumentException("moveInfo argument must contain at least one item");
}
MoveInfoCollection = moveInfo;
//assign the legacy props
EventObject = moveInfo.First().Entity;
ParentId = moveInfo.First().NewParentId;
}
/// <summary>
/// Constructor accepting a collection of MoveEventInfo objects
/// </summary>
/// <param name="eventMessages"></param>
/// <param name="moveInfo">
/// A colleciton of MoveEventInfo objects that exposes all entities that have been moved during a single move operation
/// </param>
public MoveEventArgs(EventMessages eventMessages, params MoveEventInfo<TEntity>[] moveInfo)
: base(default(TEntity), eventMessages)
{
if (moveInfo.FirstOrDefault() == null)
{
throw new ArgumentException("moveInfo argument must contain at least one item");
}
MoveInfoCollection = moveInfo;
//assign the legacy props
EventObject = moveInfo.First().Entity;
ParentId = moveInfo.First().NewParentId;
}
/// <summary>
/// Constructor accepting a collection of MoveEventInfo objects
/// </summary>
+16
View File
@@ -0,0 +1,16 @@
namespace Umbraco.Core.Events
{
public class MoveEventInfo<TEntity>
{
public MoveEventInfo(TEntity entity, string originalPath, int newParentId)
{
Entity = entity;
OriginalPath = originalPath;
NewParentId = newParentId;
}
public TEntity Entity { get; set; }
public string OriginalPath { get; set; }
public int NewParentId { get; set; }
}
}
+33 -1
View File
@@ -4,7 +4,39 @@ namespace Umbraco.Core.Events
{
public class NewEventArgs<TEntity> : CancellableObjectEventArgs<TEntity>
{
public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, int parentId) : base(eventObject, canCancel)
public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, int parentId, EventMessages eventMessages)
: base(eventObject, canCancel, eventMessages)
{
Alias = alias;
ParentId = parentId;
}
public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, TEntity parent, EventMessages eventMessages)
: base(eventObject, canCancel, eventMessages)
{
Alias = alias;
Parent = parent;
}
public NewEventArgs(TEntity eventObject, string @alias, int parentId, EventMessages eventMessages)
: base(eventObject, eventMessages)
{
Alias = alias;
ParentId = parentId;
}
public NewEventArgs(TEntity eventObject, string @alias, TEntity parent, EventMessages eventMessages)
: base(eventObject, eventMessages)
{
Alias = alias;
Parent = parent;
}
public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, int parentId) : base(eventObject, canCancel)
{
Alias = alias;
ParentId = parentId;
@@ -4,6 +4,52 @@ namespace Umbraco.Core.Events
{
public class PublishEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>
{
/// <summary>
/// Constructor accepting multiple entities that are used in the publish operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
/// <param name="isAllPublished"></param>
/// <param name="eventMessages"></param>
public PublishEventArgs(IEnumerable<TEntity> eventObject, bool canCancel, bool isAllPublished, EventMessages eventMessages)
: base(eventObject, canCancel, eventMessages)
{
IsAllRepublished = isAllPublished;
}
/// <summary>
/// Constructor accepting multiple entities that are used in the publish operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="eventMessages"></param>
public PublishEventArgs(IEnumerable<TEntity> eventObject, EventMessages eventMessages)
: base(eventObject, eventMessages)
{
}
/// <summary>
/// Constructor accepting a single entity instance
/// </summary>
/// <param name="eventObject"></param>
/// <param name="eventMessages"></param>
public PublishEventArgs(TEntity eventObject, EventMessages eventMessages)
: base(new List<TEntity> { eventObject }, eventMessages)
{
}
/// <summary>
/// Constructor accepting a single entity instance
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
/// <param name="isAllPublished"></param>
/// <param name="eventMessages"></param>
public PublishEventArgs(TEntity eventObject, bool canCancel, bool isAllPublished, EventMessages eventMessages)
: base(new List<TEntity> { eventObject }, canCancel, eventMessages)
{
IsAllRepublished = isAllPublished;
}
/// <summary>
/// Constructor accepting multiple entities that are used in the publish operation
/// </summary>
+49 -6
View File
@@ -4,12 +4,55 @@ namespace Umbraco.Core.Events
{
public class SaveEventArgs<TEntity> : CancellableObjectEventArgs<IEnumerable<TEntity>>
{
/// <summary>
/// Constructor accepting multiple entities that are used in the saving operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
public SaveEventArgs(IEnumerable<TEntity> eventObject, bool canCancel)
/// <summary>
/// Constructor accepting multiple entities that are used in the saving operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
/// <param name="eventMessages"></param>
public SaveEventArgs(IEnumerable<TEntity> eventObject, bool canCancel, EventMessages eventMessages)
: base(eventObject, canCancel, eventMessages)
{
}
/// <summary>
/// Constructor accepting multiple entities that are used in the saving operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="eventMessages"></param>
public SaveEventArgs(IEnumerable<TEntity> eventObject, EventMessages eventMessages)
: base(eventObject, eventMessages)
{
}
/// <summary>
/// Constructor accepting a single entity instance
/// </summary>
/// <param name="eventObject"></param>
/// <param name="eventMessages"></param>
public SaveEventArgs(TEntity eventObject, EventMessages eventMessages)
: base(new List<TEntity> { eventObject }, eventMessages)
{
}
/// <summary>
/// Constructor accepting a single entity instance
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
/// <param name="eventMessages"></param>
public SaveEventArgs(TEntity eventObject, bool canCancel, EventMessages eventMessages)
: base(new List<TEntity> { eventObject }, canCancel, eventMessages)
{
}
/// <summary>
/// Constructor accepting multiple entities that are used in the saving operation
/// </summary>
/// <param name="eventObject"></param>
/// <param name="canCancel"></param>
public SaveEventArgs(IEnumerable<TEntity> eventObject, bool canCancel)
: base(eventObject, canCancel)
{
}
@@ -0,0 +1,13 @@
namespace Umbraco.Core.Events
{
/// <summary>
/// A simple/default transient messages factory
/// </summary>
internal class TransientMessagesFactory : IEventMessagesFactory
{
public EventMessages Get()
{
return new EventMessages();
}
}
}
@@ -0,0 +1,18 @@
using System;
namespace Umbraco.Core.Exceptions
{
/// <summary>
/// An exception that is thrown if the umbraco application cannnot boot
/// </summary>
public class UmbracoStartupFailedException : Exception
{
/// <summary>
/// Initializes a new instance of the <see cref="T:System.Exception"/> class with a specified error message.
/// </summary>
/// <param name="message">The message that describes the error. </param>
public UmbracoStartupFailedException(string message) : base(message)
{
}
}
}
@@ -1,18 +1,18 @@
<?xml version="1.0"?>
<!-- Blocks public downloading of anything in this folder and sub folders -->
<configuration>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
<?xml version="1.0"?>
<!-- Blocks public downloading of anything in this folder and sub folders -->
<configuration>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
+86
View File
@@ -0,0 +1,86 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.0
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Umbraco.Core.FileResources {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Files {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Files() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Umbraco.Core.FileResources.Files", typeof(Files).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot;?&gt;
///
///&lt;!-- Blocks public downloading of anything in this folder and sub folders --&gt;
///
///&lt;configuration&gt;
/// &lt;system.web&gt;
/// &lt;httpHandlers&gt;
/// &lt;add path=&quot;*&quot; verb=&quot;*&quot; type=&quot;System.Web.HttpNotFoundHandler&quot;/&gt;
/// &lt;/httpHandlers&gt;
/// &lt;/system.web&gt;
/// &lt;system.webServer&gt;
/// &lt;validation validateIntegratedModeConfiguration=&quot;false&quot; /&gt;
/// &lt;handlers&gt;
/// &lt;remove name=&quot;BlockViewHandler&quot;/&gt;
/// &lt;add name=&quot;BlockViewHandler&quot; path=&quot;*&quot; verb=&quot;*&quot; preCondition=&quot;integratedMode&quot; type=&quot;System.Web.H [rest of string was truncated]&quot;;.
/// </summary>
internal static string BlockingWebConfig {
get {
return ResourceManager.GetString("BlockingWebConfig", resourceCulture);
}
}
}
}

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