Browse Source

Small changes finalized.

pull/373/head
Sebastian Stehle 7 years ago
parent
commit
e72945b01d
  1. 16
      src/Squidex.Domain.Apps.Core.Model/Contents/StatusChange.cs
  2. 4
      src/Squidex.Domain.Apps.Core.Operations/HandleRules/EnrichedEvents/EnrichedContentEventType.cs
  3. 1
      src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs
  4. 17
      src/Squidex.Domain.Apps.Entities/Contents/ContentChangedTriggerHandler.cs
  5. 27
      src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs
  6. 2
      src/Squidex.Domain.Apps.Events/Contents/ContentStatusChanged.cs
  7. 51
      src/Squidex/app/features/content/pages/content/content-page.component.html
  8. 5
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentChangedTriggerHandlerTests.cs
  9. 4
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs
  10. 12
      tools/Migrate_01/OldTriggers/ContentChangedTriggerSchema.cs

16
src/Squidex.Domain.Apps.Core.Model/Contents/StatusChange.cs

@ -0,0 +1,16 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschränkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
namespace Squidex.Domain.Apps.Core.Contents
{
public enum StatusChange
{
Change,
Published,
Unpublished
}
}

4
src/Squidex.Domain.Apps.Core.Operations/HandleRules/EnrichedEvents/EnrichedContentEventType.cs

@ -11,7 +11,9 @@ namespace Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents
{ {
Created, Created,
Deleted, Deleted,
Published,
StatusChanged, StatusChanged,
Updated Updated,
Unpublished,
} }
} }

1
src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs

@ -113,7 +113,6 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
{ {
Guard.NotNull(app, nameof(app)); Guard.NotNull(app, nameof(app));
Guard.NotNull(schema, nameof(schema)); Guard.NotNull(schema, nameof(schema));
Guard.NotNull(status, nameof(status));
using (Profiler.TraceMethod<MongoContentRepository>()) using (Profiler.TraceMethod<MongoContentRepository>())
{ {

17
src/Squidex.Domain.Apps.Entities/Contents/ContentChangedTriggerHandler.cs

@ -8,6 +8,7 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Orleans; using Orleans;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Core.Rules.Triggers;
@ -59,8 +60,20 @@ namespace Squidex.Domain.Apps.Entities.Contents
case ContentUpdated _: case ContentUpdated _:
result.Type = EnrichedContentEventType.Updated; result.Type = EnrichedContentEventType.Updated;
break; break;
case ContentStatusChanged _: case ContentStatusChanged contentStatusChanged:
result.Type = EnrichedContentEventType.StatusChanged; switch (contentStatusChanged.Change)
{
case StatusChange.Published:
result.Type = EnrichedContentEventType.Published;
break;
case StatusChange.Unpublished:
result.Type = EnrichedContentEventType.Unpublished;
break;
default:
result.Type = EnrichedContentEventType.StatusChanged;
break;
}
break; break;
} }

27
src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs

@ -127,11 +127,24 @@ namespace Squidex.Domain.Apps.Entities.Contents
} }
else else
{ {
var operation = c.Status == Status.Published ? "Published" : "StatusChanged"; StatusChange reason;
await ctx.ExecuteScriptAsync(s => s.Change, operation, c, Snapshot.Data); if (c.Status == Status.Published)
{
ChangeStatus(c); reason = StatusChange.Published;
}
else if (Snapshot.Status == Status.Published)
{
reason = StatusChange.Unpublished;
}
else
{
reason = StatusChange.Change;
}
await ctx.ExecuteScriptAsync(s => s.Change, reason, c, Snapshot.Data);
ChangeStatus(c, reason);
} }
} }
} }
@ -261,9 +274,9 @@ namespace Squidex.Domain.Apps.Entities.Contents
RaiseEvent(SimpleMapper.Map(command, new ContentStatusScheduled { DueTime = command.DueTime.Value })); RaiseEvent(SimpleMapper.Map(command, new ContentStatusScheduled { DueTime = command.DueTime.Value }));
} }
public void ChangeStatus(ChangeContentStatus command) public void ChangeStatus(ChangeContentStatus command, StatusChange change)
{ {
RaiseEvent(SimpleMapper.Map(command, new ContentStatusChanged())); RaiseEvent(SimpleMapper.Map(command, new ContentStatusChanged { Change = change }));
} }
private void RaiseEvent(SchemaEvent @event) private void RaiseEvent(SchemaEvent @event)

2
src/Squidex.Domain.Apps.Events/Contents/ContentStatusChanged.cs

@ -13,6 +13,8 @@ namespace Squidex.Domain.Apps.Events.Contents
[EventType(nameof(ContentStatusChanged))] [EventType(nameof(ContentStatusChanged))]
public sealed class ContentStatusChanged : ContentEvent public sealed class ContentStatusChanged : ContentEvent
{ {
public StatusChange Change { get; set; }
public Status Status { get; set; } public Status Status { get; set; }
} }
} }

51
src/Squidex/app/features/content/pages/content/content-page.component.html

@ -32,8 +32,7 @@
<div class="dropdown dropdown-options ml-1" *ngIf="content"> <div class="dropdown dropdown-options ml-1" *ngIf="content">
<sqx-preview-button [schema]="schema" [content]="content"></sqx-preview-button> <sqx-preview-button [schema]="schema" [content]="content"></sqx-preview-button>
<button type="button" class="btn btn-outline-secondary btn-status" (click)="dropdown.toggle()" [disabled]="schema.isSingleton && !content.isPending" <button type="button" class="btn btn-outline-secondary btn-status" (click)="dropdown.toggle()" [class.active]="dropdown.isOpen | async" #optionsButton>
[class.active]="dropdown.isOpen | async" #optionsButton>
<sqx-content-status <sqx-content-status
[status]="content.status" [status]="content.status"
[scheduledTo]="content.scheduleJob?.status" [scheduledTo]="content.scheduleJob?.status"
@ -43,35 +42,33 @@
</sqx-content-status> </sqx-content-status>
</button> </button>
<ng-container *ngIf="content.isPending || !schema.isSingleton"> <div class="dropdown-menu" *sqxModalView="dropdown;closeAlways:true" [sqxModalTarget]="optionsButton" @fade>
<div class="dropdown-menu" *sqxModalView="dropdown;closeAlways:true" [sqxModalTarget]="optionsButton" @fade> <a class="dropdown-item" (click)="discardChanges()" *ngIf="content.canDraftDiscard">
<a class="dropdown-item" (click)="discardChanges()" *ngIf="content.canDraftDiscard"> Discard changes
Discard changes </a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" (click)="publishChanges()" *ngIf="content.canDraftPublish">
Publish changes
</a>
<ng-container>
<a class="dropdown-item" *ngFor="let status of content.statusUpdates" (click)="changeStatus(status)">
Status to {{status}}
</a> </a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" (click)="publishChanges()" *ngIf="content.canDraftPublish">
Publish changes
</a>
<ng-container *ngIf="!schema.isSingleton"> <a class="dropdown-item dropdown-item-delete"
<a class="dropdown-item" *ngFor="let status of content.statusUpdates" (click)="changeStatus(status)"> [class.disabled]="!content.canDelete"
Status to {{status}} (sqxConfirmClick)="delete()"
</a> confirmTitle="Delete content"
confirmText="Do you really want to delete the content?">
<div class="dropdown-divider"></div> Delete
</a>
<a class="dropdown-item dropdown-item-delete" </ng-container>
[class.disabled]="!content.canDelete" </div>
(sqxConfirmClick)="delete()"
confirmTitle="Delete content"
confirmText="Do you really want to delete the content?">
Delete
</a>
</ng-container>
</div>
</ng-container>
</div> </div>
<button type="button" class="btn btn-secondary ml-1" (click)="saveAsDraft()" *ngIf="content.canDraftPropose"> <button type="button" class="btn btn-secondary ml-1" (click)="saveAsDraft()" *ngIf="content.canDraftPropose">

5
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentChangedTriggerHandlerTests.cs

@ -11,6 +11,7 @@ using System.Collections.ObjectModel;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy; using FakeItEasy;
using Orleans; using Orleans;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Core.Rules.Triggers;
@ -53,7 +54,9 @@ namespace Squidex.Domain.Apps.Entities.Contents
new object[] { new ContentCreated(), EnrichedContentEventType.Created }, new object[] { new ContentCreated(), EnrichedContentEventType.Created },
new object[] { new ContentUpdated(), EnrichedContentEventType.Updated }, new object[] { new ContentUpdated(), EnrichedContentEventType.Updated },
new object[] { new ContentDeleted(), EnrichedContentEventType.Deleted }, new object[] { new ContentDeleted(), EnrichedContentEventType.Deleted },
new object[] { new ContentStatusChanged(), EnrichedContentEventType.StatusChanged } new object[] { new ContentStatusChanged { Change = StatusChange.Change }, EnrichedContentEventType.StatusChanged },
new object[] { new ContentStatusChanged { Change = StatusChange.Published }, EnrichedContentEventType.Published },
new object[] { new ContentStatusChanged { Change = StatusChange.Unpublished }, EnrichedContentEventType.Unpublished }
}; };
[Theory] [Theory]

4
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs

@ -343,7 +343,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
LastEvents LastEvents
.ShouldHaveSameEvents( .ShouldHaveSameEvents(
CreateContentEvent(new ContentStatusChanged { Status = Status.Published }) CreateContentEvent(new ContentStatusChanged { Status = Status.Published, Change = StatusChange.Published })
); );
A.CallTo(() => scriptEngine.Execute(A<ScriptContext>.Ignored, "<change-script>")) A.CallTo(() => scriptEngine.Execute(A<ScriptContext>.Ignored, "<change-script>"))
@ -388,7 +388,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
LastEvents LastEvents
.ShouldHaveSameEvents( .ShouldHaveSameEvents(
CreateContentEvent(new ContentStatusChanged { Status = Status.Draft }) CreateContentEvent(new ContentStatusChanged { Status = Status.Draft, Change = StatusChange.Unpublished })
); );
A.CallTo(() => scriptEngine.Execute(A<ScriptContext>.Ignored, "<change-script>")) A.CallTo(() => scriptEngine.Execute(A<ScriptContext>.Ignored, "<change-script>"))

12
tools/Migrate_01/OldTriggers/ContentChangedTriggerSchema.cs

@ -50,19 +50,9 @@ namespace Migrate_01.OldTriggers
conditions.Add($"event.type == '{EnrichedContentEventType.Published}'"); conditions.Add($"event.type == '{EnrichedContentEventType.Published}'");
} }
if (SendUnpublish)
{
conditions.Add($"event.type == '{EnrichedContentEventType.Unpublished}'");
}
if (SendArchived) if (SendArchived)
{ {
conditions.Add($"event.type == '{EnrichedContentEventType.Archived}'"); conditions.Add($"event.status == 'Archived'");
}
if (SendRestore)
{
conditions.Add($"event.type == '{EnrichedContentEventType.Restored}'");
} }
if (SendDelete) if (SendDelete)

Loading…
Cancel
Save