yv01p 26e97dfc81 feat(core): implement ContentPublishOperationService for Phase 5
Implements all publishing operations extracted from ContentService:
- Publish/Unpublish with culture support
- CommitDocumentChanges (core publishing logic with advanced API)
- CommitDocumentChangesInternal (330 lines of business logic)
- PerformScheduledPublish for scheduled jobs
- PerformScheduledPublishingRelease/Expiration (scheduled release/expiry)
- PublishBranch for tree publishing (public + internal overloads)
- PublishBranchItem for individual branch items
- Schedule management operations (GetContentScheduleByContentId, PersistContentSchedule, GetContentSchedulesByIds)
- Path checks (IsPathPublishable, IsPathPublished)
- SendToPublication workflow
- GetPublishedChildren query
- Publishing strategies (StrategyCanPublish, StrategyPublish, StrategyCanUnpublish, StrategyUnpublish)
- GetPublishedDescendants/GetPublishedDescendantsLocked (internal)
- Helper methods (PublishBranch_PublishCultures, PublishBranch_ShouldPublish, EnsureCultures, etc.)

Critical Review fixes implemented:
- Thread-safe ContentSettings access with lock (fix 2.1)
- Null/empty check in GetContentSchedulesByIds (fix 2.4)
- Explicit failure logging in PerformScheduledPublish

Architecture:
- Inherits from ContentServiceBase (provides repository, auditing, scoping)
- Uses IContentCrudService for content lookups (delegation)
- Uses ILanguageRepository for culture operations
- Uses Lazy<IPropertyValidationService> for property validation
- Thread-safe settings via IOptionsMonitor<ContentSettings> with lock

Total: ~1,500 lines of publishing logic extracted.

Part of ContentService refactoring Phase 5.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-23 19:53:22 +00:00
2024-12-10 10:25:50 +01:00
2022-09-27 14:22:34 +02:00
2024-11-11 13:02:33 +01:00
2025-04-01 11:52:32 +02:00
2025-09-24 23:31:14 +02:00

Umbraco CMS

GitHub license NuGet Version Build status PRs Welcome Forum Chat about Umbraco on Discord Mastodon Follow

Umbraco is a free and open source .NET content management system. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social.

Learn more at umbraco.com

Umbraco Logo

Looking to install Umbraco?

You can get started using the following commands on Windows, Linux and MacOS (after installing the .NET Runtime and SDK):

dotnet new install Umbraco.Templates
dotnet new umbraco --name MyProject
cd MyProject
dotnet run

Documentation

Our comprehensive documentation takes you from the fundamentals on how to start with Umbraco to deploying it to production.

Some important documentation links to get you started:

Backoffice Preview

Want to see the latest backoffice UI in action? Check out our live preview:

backofficepreview.umbraco.com

This preview is automatically deployed from the main branch and showcases the latest backoffice features and improvements. It runs from mock data and persistent edits are not supported.

Get help

If you need a bit of feedback while building your Umbraco projects, we are chatty on Discord. Our Discord server serves as a social space for all Umbracians. If you have any questions or need some help with a problem, head over to our dedicated forum where the Umbraco Community will be happy to help.

Looking to contribute back to Umbraco?

You came to the right place! Our GitHub repository is available for all kinds of contributions:

Umbraco is contribution-focused and community-driven. If you want to contribute back to the Umbraco source code, please check out our guide to contributing.

Tip: You should not run Umbraco from source code found here. Umbraco is extremely extensible and can do whatever you need. Instead, install Umbraco as noted above and then extend it any way you want to.

Description
Umbraco is a free and open source .NET content management system helping you deliver delightful digital experiences.
Readme 448 MiB
Languages
C# 59.5%
TypeScript 39.9%
JavaScript 0.3%
HTML 0.2%