umbraco / umbraco-cms Goto Github PK
View Code? Open in Web Editor NEWUmbraco is a free and open source .NET content management system helping you deliver delightful digital experiences.
Home Page: https://umbraco.com
License: MIT License
Umbraco is a free and open source .NET content management system helping you deliver delightful digital experiences.
Home Page: https://umbraco.com
License: MIT License
This epic is focused on upgrading and maturing the installer to clean it up.
Currently, the validation messages in the save/publish dialogs are very generic. We want more detailed messages that tell which properties have validation errors.
The challenge is, with variants, that a lot of properties can have validation messages so we need to explore a way to present the validation messages in the save/publish dialog.
child of #3674
We need to update the tags tables to support storing a culture for tags so that we can query tags on the front-end for specific cultures.
There will be a few tasks to get the whole job done, this is firstly to get the DB, Service and Repos updated to store tags with cultures
A different task will exist to query tags #3676
I know I can backup the database and config files and there're also built-in versioning of CMS documents. Still, an all inclusive snapshot feature will just make everybody's life easier, starting with the developers. It will also make other features/bug fixes etc. happen quicker. Thanks!
child of #3649
When a new infinite editor opens it overwrites the keyboard shortcuts from the current editor. When the editor closes again the underlying editor don’t reassign its shortcuts.
We need to find a way to reassign keyboard shortcuts when an infinite editor closes.
child of #3657
To follow the best practices for content apps the content info app should only show the info related to the currently selected variant.
goes along with #3665 - currently, IPublishedContent
has tons of properties that can end up colliding with model properties. For instance, if IPublishedContent
has a Parent
C# property, and I create a parent
user property = collision.
Ideally, we should remove as much as we can from IPublishedContent
so there are no collisions. Or something. Having to do content.Umbraco.Parent
ie moving everything under Umbraco
is really not convenient, but... not sure. We could have them all at IPublishedContent
level but only as interface properties... need to think about it.
child of #3661
Implement proper fallback in content.Value<T>()
methods. Should be able to fallback on language, or walk up the tree, or anything - should be extensible.
child of #3661
This is somewhat related to http://issues.umbraco.org/issue/U4-9616
I had a customer run into this problem: The media picker remembers the last folder used. However, if the folder is deleted and the media picker opened again, it still opens to the last folder - even though that folder is now deleted. You can still select items from the folder. In this case, the client was confused, as the folder (at a glance) was identical to a later uploaded folder.
In a broader sense, the media picker should not in any way (be it browsing or searching) show or allow selection of deleted media items.
The media picker should go back to the root, since the previous item is no longer valid
Also, it should not be possible to find items via search
The deleted folder is still shown and items can be selected
child of #3690
When setting up content start nodes for a user to be both children of a listview and children not of a listview - after you login to that user the children start nodes of a list views cannot collapse and expand (thus the arrow always points to the right, even if it is expanded to a start node), while node which is not a container and has children set as custom start nodes behaves in a usual way (right-for collapsed and down for expanded)
Video reference - https://www.screencast.com/t/ssGLlYBvXHyc
When I did a request to get all the content notes in a tree structure, the response back was indicating that the nodes which were List Views had no children, even though there were children on those nodes. What has happened was that the HasChildren property on a node was set to false when a node was marked to be displayed as a list view, even though the node happened to have children.
Connects to #2859
Umbraco needs to be updated to index all variant and invariant data so it can be searched. Currently it only indexes variant data.
Each Lucene document will store all variant data. This means that there will need to be prefixed (or suffixed) field names with the culture (we'll need to determine which is best). For example, all names will need to be indexed so we'll have "en_US_Name" (keeping in mind that Examine uses special underscore and double underscore prefixes to determine how things can be indexed). Similarly for properties, if there's a property called "title", we'll have "en_US_title", "es_ES_title", etc... For invariant content items there won't be any culture prefix just like there is today. The index should probably be updated with another enum field to determine if the document is variant/invariant.
The built in indexes by default will use a PerFieldAnalyzerWrapper which uses the CultureInvariantWhitespaceAnalyzer
by default, devs will then have the ability to extend this (which is part of #3535)
requires https://github.com/umbraco/Umbraco.Private/issues/194
child of #3530
We are indexing all variant data into one document and each column will contain different variant data. i.e. en_US_name
. With this in place developers can use their own implementation of a PerFieldAnalyzerWrapper
where they can define which analyzer to use for which field/culture.
This would be the most basic/rudimentary way that a developer can extend this functionality so it might be best if we can have our own implementation of PerFieldAnalyzerWrapper
that can be modified on startup to include different analyzers.
Ideally, the indexes that we ship with are not config based and instead codebased and if developers want to extend them they would do so via startup code.
don't review until #3534 is reviewed and merged
When doing a review of https://github.com/umbraco/Umbraco.Private/issues/92 with @madsrasmussen we discovered a bug where if you have more than one available template assigned to a doctype, change the template assigned to a content node and then click open for the new template editor to show it will show the incorrect template.
The serverside response of JSON for allowedTemplates
is a string array of template aliases and does not include the template ID that is needed to be updated to open the correct template.
This was a PR for V7 that was merged up into V8 so it will need to be fixed in both places.
This is due to the logic that is used to copy the values across, it doesn't take into account the new variations structure so you'll probably end up with a YSOD like:
Server Error in '/' Application.
Variation InvariantNeutral is invalid for property type "content".
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NotSupportedException: Variation InvariantNeutral is invalid for property type "content".
Source Error:
Line 248: if (throwIfInvalid)
Line 249: throw new NotSupportedException($"Variation {variation} is invalid for property type \"{Alias}\".");
Line 250: return false;
Line 251: }
Line 252: return true;
Source File: C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Models\PropertyType.cs Line: 250
Stack Trace:
[NotSupportedException: Variation InvariantNeutral is invalid for property type "content".]
Umbraco.Core.Models.PropertyType.ValidateVariation(String culture, String segment, Boolean throwIfInvalid) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Models\PropertyType.cs:250
Umbraco.Core.Models.Property.SetValue(Object value, String culture, String segment) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Models\Property.cs:274
Umbraco.Core.Models.ContentBase.SetValue(String propertyTypeAlias, Object value, String culture, String segment) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Models\ContentBase.cs:273
Umbraco.Web.UI.Umbraco.Dialogs.ChangeDocType.ValidateAndSave_Click(Object sender, EventArgs e) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Web.UI\Umbraco\Dialogs\ChangeDocType.aspx.cs:242
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +141
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +150
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5445
We need to ensure that all of the functionality for blueprints still works with all of the variant editing changes. Initial tests show things are broken, currently you cannot even create a blueprint based on an existing content item, you will get a ysod:
An error occured
Variation "<null>,<null>" is not supported by the property type.
Exception Details
System.NotSupportedException: Variation "<null>,<null>" is not supported by the property type.
Stacktrace
at Umbraco.Core.Models.Property.SetValue(Object value, String culture, String segment) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Models\Property.cs:line 282
at Umbraco.Core.Models.ContentBase.SetValue(String propertyTypeAlias, Object value, String culture, String segment) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Models\ContentBase.cs:line 270
at Umbraco.Core.Services.Implement.ContentService.CreateContentFromBlueprint(IContent blueprint, String name, Int32 userId) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Core\Services\Implement\ContentService.cs:line 2486
at Umbraco.Web.Editors.ContentController.CreateBlueprintFromContent(Int32 contentId, String name) in C:\Users\Shannon\Documents\_Projects\Umbraco\Umbraco_8.0\src\Umbraco.Web\Editors\ContentController.cs:line 566
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.<GetExecutor>b__3(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()
This epic includes work related to ensuring we support both version 7 and 8 in our package system.
There are different Value()
overloads but really we need a clean approach for dealing with fallbacks, cultures, etc.
child of #3661
child of #3649
When you open a list view node in infinite editing you are able to make a lot of actions which will change the route. Create, edit etc. We need to find the best way to handle list view: disable, remove or fully support?
We might want to wait with this task until content apps are closer so we don't implement a hack on top of a hack.
child of #3690
If you set up content start nodes for a user to be children of a listview and children not of a listview, and then you login to the user - when you select the "Move" action on a node from the "Actions" menu in the upper right corner or after right clicking it, you will end up a listview "parent" folder (MoveAction video - https://www.screencast.com/t/wVLxPJ4YkB7) and then if you go back to see the tree structure that you have access to and you double click a listview node it opens a sublistview with all the children of this container (also the ones which were not set as start nodes)
As a content editor in the backoffice I expect to be able to see items in a list view with the current culture used for getting the right variant of the content items being shown.
Acceptance criteria:
parent of https://github.com/umbraco/Umbraco.Private/issues/18
parent of https://github.com/umbraco/Umbraco.Private/issues/67
parent of https://github.com/umbraco/Umbraco.Private/issues/188
parent of https://github.com/umbraco/Umbraco.Private/issues/189
parent of https://github.com/umbraco/Umbraco.Private/issues/206
parent of https://github.com/umbraco/Umbraco.Private/issues/203
parent of https://github.com/umbraco/Umbraco.Private/issues/204
See #2849 for more details.
Add a variant and invariant upload field and image cropper to a doctype so you have 4 properties in total.
Upload the same image to all of the fields (variant and invariant) in all variants. Save. Remove all images from one variant and save. Some images are missing on the other variants.
child of #3649
How do we handle the tree when infinite editing is open? You don’t really need the tree when you are in an infinite flow so we could add a black overlay so it matches the editor.
Another solution would be to warn the user if they change the node. I think we already implemented a warning on route change but it doens't seem to work anymore. We need to look into that.
Get rid of raiseEvents parameter in services. Was done as part of other tasks, proposed here as a PR for review.
child of #3639
Current ContentService events when (un)publishing documents & cultures are probably not consistent, triggering 'unpublish' when publishing or whatever, without a way to figure out which culture is impacted, etc
Goal: list & understand events (existing and missing), define what needs to be changed
Preview functionality needs to be updated for variants.
For some reason v8 build scripts don't build the documentation anymore, need to port v7 Build-UmbracoDocs.ps1 as a method in v8 build.ps1.
BUT also need to rethink how it's done - do we really need to rebuild the whole solution in Debug mode just for docs?!
When in preview mode you need to be able to set the preview culture for the current node.
First implementation could be a simple dropdown to select between the available cultures.
child of #3643
Supporting infinite editing throughout the backoffice in Umbraco 8.0
When you go to the Backoffice and you open the Developer tools the side bar size is being adjusted due to the new size of the browser. If you want to see all of the sections you would click on the arrow that will make the rest of the sections appear as a second side bar. If you close the Developer tools after, all the sections will appear on the first side bar but the second side bar won't disappear unless you click on a section.
We need to fix how XML is stored for date properties to ensure this can be stored correctly by examine without throwing exceptions.
More info and instructions to replicate see: http://issues.umbraco.org/issue/U4-11387
Given this blog post: https://umbraco.com/blog/a-new-take-on-the-umbraco-issue-tracker/
I am migrating this issue to this issue tracker: http://issues.umbraco.org/issue/U4-10422
Much discussion has happened around the issue and I think it's time for a reset to get everybody on the same page. Here is the actual request:
Add a toggle button to nested content items that allows the nested content items to be either enabled or disabled.
There are a bunch of ways of going about that. Here are my recommendations (gathered from the other ticket and from other places this issue was being discussed):
I understand you may not have the resources to implement this feature yourselves at Umbraco HQ. There are a ton of people interested in making this happen, so it's probably safe to assume you can get another pull request that implements this.
child of #3649
We need another round of animation fixes. We never found a solution to the bad performing animations. With the upgraded Angular we now have access to more ngAnimate classes and we might be able to do a full CSS-animated solution now instead of relaying on javascript animations and a 3rd-part library.
A brief description of the issue goes here.
If you're filing a bug, please describe how to reproduce it. Include as much
relevant information as possible, such as:
When selecting a start nodes for a user to be children of a folder that was created in a Media structure and then you login with the user, sometimes an error stating : "Could not find the tree media, activeTree has not been set" appears (https://www.screencast.com/t/asYMBrO5ZJ4) but the tree is behaving as intended - it could collapse and expand and your access to click into the parent node is restricted.
Sometimes the aforementioned error was not being shown, or it happened that when reproducing the same scenario several times - it didn't work the first time I've selected custom start nodes of a list view but when I run the solution again it worked normally.
We have a couple of custom event directives: onKeyUp, onFocus, onBlur etc. Angular now has its own build in ones which we should use instead.
Their code:
https://github.com/angular/angular.js/blob/master/src/ng/directive/ngEventDirs.js#L49
When there is "no value" we want to fall back to something else - but how can you indicate that a value is "intentionally empty" ie "no value" actually means "no value, please don't fallback"?
child of #3661
I found this issue when testing latest changes to variations.
System.InvalidOperationException: Cannot save content with an empty name.
at Umbraco.Core.Persistence.Repositories.Implement.DocumentRepository.EnsureInvariantNameExists(Content content) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Persistence\Repositories\Implement\DocumentRepository.cs:line 1122
at Umbraco.Core.Persistence.Repositories.Implement.DocumentRepository.SanitizeNames(Content content, Boolean publishing) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Persistence\Repositories\Implement\DocumentRepository.cs:line 1103
at Umbraco.Core.Persistence.Repositories.Implement.DocumentRepository.PersistUpdatedItem(IContent entity) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Persistence\Repositories\Implement\DocumentRepository.cs:line 433
at Umbraco.Core.Cache.DefaultRepositoryCachePolicy`2.Update(TEntity entity, Action`1 persistUpdated) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Cache\DefaultRepositoryCachePolicy.cs:line 128
at Umbraco.Core.Persistence.Repositories.Implement.RepositoryBase`2.Save(TEntity entity) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Persistence\Repositories\Implement\RepositoryBaseOfTIdTEntity.cs:line 167
at Umbraco.Core.Services.Implement.ContentService.PerformMoveContentLocked(IContent content, Int32 userId, Nullable`1 trash) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Services\Implement\ContentService.cs:line 1685
at Umbraco.Core.Services.Implement.ContentService.PerformMoveLocked(IContent content, Int32 parentId, IContent parent, Int32 userId, ICollection`1 moves, Nullable`1 trash) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Services\Implement\ContentService.cs:line 1660
at Umbraco.Core.Services.Implement.ContentService.MoveToRecycleBin(IContent content, Int32 userId) in C:\Code\Umbraco-CMS\src\Umbraco.Core\Services\Implement\ContentService.cs:line 1547
at Umbraco.Web.Editors.ContentController.DeleteById(Int32 id) in C:\Code\Umbraco-CMS\src\Umbraco.Web\Editors\ContentController.cs:line 881
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.<GetExecutor>b__3(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()
child of #3649
We need to add documentation for infinite editing so we and the community knows how support infinite editing in their custom plugins.
When Value()
methods + navigation have all been updated, we need to update the query builder (in the template editor) to generate proper code.
child of #3661
NOTE: this task is ONLY to get the snippets working, currently all execution, reporting and timing cannot be done in v8, there is a separate task for this: #3908
As an example, lets say there are 3 languages installed and English is the default.
If i have a content picker that is variant and I am editing the Danish language. When I choose a content item in the tree, the content picker displays some details including the "Name", "Url" and "Icon" ... but the "Name" and "Url" are both going to be displaying the default language information.
Also I think the 'edit' button to edit that particular content item will default to editing the default language.
Similarly this will be a problem for the media picker too, and since a different image can be picked between variants that will need to be update too.
We need to cleanup navigating the tree with IPublishedContent
. The model IPublishedContent
should be as POCO as we can make it so that the logic for traversing/navigating is done via a new service.
This is an important step for unit testing and for implementing IPublishedContent and what will be the new service.
We will still have methods on IPublishedContent to traversal for better backwards compatibility for and for easier API usage. These methods will be extension methods that will need to use a service locator to resolve the underling service. So things like content.Children()
will still be possible.
And while we're at it, we should clarify the Root()
vs. Site()
vs. whatever other navigation methods we may want to support.
child of #3661
Missing documentation
https://github.com/umbraco/Umbraco-CMS/blob/dev-v7/docs/CONTRIBUTING_DETAILED.md
The contribution guide is great and very well written however to make it easier to understand as a reference please separate out the section on What should I know before I get started?. Most users / devs who have not worked with Umbraco before will want to begin with this section so it makes little sense in placing it halfway down a page within a section on contributing in detail.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.