Skip to content

Commit d85ff34

Browse files
committed
3.7 + filters for provisional drafts & first saves
# Conflicts: # CHANGELOG.md
1 parent f756d06 commit d85ff34

File tree

9 files changed

+92
-2
lines changed

9 files changed

+92
-2
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33
## Unreleased
44

55
### Added
6+
- Added new “Element is being saved for the first time” and “Element is a provisional draft” webhook filters.
67
- Some webhook filters now disable other mutually-exclusive filters when active and enabled.
78
- Added `craft\webhooks\filters\ExclusiveFilterInterface`.
89

10+
### Changed
11+
- Webhooks now requires Craft 3.7 or later.
12+
913
## 2.3.3 - 2021-04-01
1014

1115
### Fixed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"rss": "https://github.com/craftcms/webhooks/commits/master.atom"
2626
},
2727
"require": {
28-
"craftcms/cms": "^3.1.19"
28+
"craftcms/cms": "^3.7.0"
2929
},
3030
"autoload": {
3131
"psr-4": {

composer.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Plugin.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
use craft\helpers\StringHelper;
1313
use craft\web\UrlManager;
1414
use craft\webhooks\filters\DraftFilter;
15+
use craft\webhooks\filters\ProvisionalDraftFilter;
1516
use craft\webhooks\filters\DuplicatingFilter;
1617
use craft\webhooks\filters\ElementEnabledFilter;
1718
use craft\webhooks\filters\FilterInterface;
19+
use craft\webhooks\filters\FirstSaveFilter;
1820
use craft\webhooks\filters\NewElementFilter;
1921
use craft\webhooks\filters\PropagatingFilter;
2022
use craft\webhooks\filters\ResavingFilter;
@@ -486,7 +488,9 @@ public function getAllFilters(): array
486488
NewElementFilter::class,
487489
ElementEnabledFilter::class,
488490
DraftFilter::class,
491+
ProvisionalDraftFilter::class,
489492
RevisionFilter::class,
493+
FirstSaveFilter::class,
490494
DuplicatingFilter::class,
491495
PropagatingFilter::class,
492496
ResavingFilter::class,

src/filters/DraftFilter.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public static function excludes(): array
2323
{
2424
return [
2525
RevisionFilter::class,
26+
FirstSaveFilter::class,
2627
];
2728
}
2829

src/filters/FirstSaveFilter.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace craft\webhooks\filters;
4+
5+
use Craft;
6+
use craft\base\ElementInterface;
7+
8+
/**
9+
* Filters events based on whether the element is propagating
10+
*
11+
* @author Pixel & Tonic, Inc. <[email protected]>
12+
* @since 2.4.0
13+
*/
14+
class FirstSaveFilter extends BaseElementFilter
15+
{
16+
public static function displayName(): string
17+
{
18+
return Craft::t('webhooks', 'Element is being saved for the first time');
19+
}
20+
21+
public static function excludes(): array
22+
{
23+
return [
24+
NewElementFilter::class,
25+
DraftFilter::class,
26+
ProvisionalDraftFilter::class,
27+
RevisionFilter::class,
28+
ResavingFilter::class,
29+
];
30+
}
31+
32+
protected static function checkElement(ElementInterface $element, bool $value): bool
33+
{
34+
return $element->firstSave;
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace craft\webhooks\filters;
4+
5+
use Craft;
6+
use craft\base\ElementInterface;
7+
use craft\helpers\ElementHelper;
8+
9+
/**
10+
* Filters events based on whether the element is a draft
11+
*
12+
* @author Pixel & Tonic, Inc. <[email protected]>
13+
* @since 2.4.0
14+
*/
15+
class ProvisionalDraftFilter extends BaseElementFilter
16+
{
17+
public static function displayName(): string
18+
{
19+
return Craft::t('webhooks', 'Element is a provisional draft');
20+
}
21+
22+
public static function excludes(): array
23+
{
24+
return [
25+
DraftFilter::class,
26+
RevisionFilter::class,
27+
FirstSaveFilter::class,
28+
];
29+
}
30+
31+
protected static function checkElement(ElementInterface $element, bool $value): bool
32+
{
33+
$root = ElementHelper::rootElement($element);
34+
return $root->isProvisionalDraft;
35+
}
36+
}

src/filters/ResavingFilter.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ public static function displayName(): string
1919
return Craft::t('webhooks', 'Element is being bulk-resaved');
2020
}
2121

22+
public static function excludes(): array
23+
{
24+
return [
25+
FirstSaveFilter::class,
26+
];
27+
}
28+
2229
protected static function checkElement(ElementInterface $element, bool $value): bool
2330
{
2431
/** @var Element $element */

src/filters/RevisionFilter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public static function excludes(): array
2323
{
2424
return [
2525
DraftFilter::class,
26+
ProvisionalDraftFilter::class,
27+
FirstSaveFilter::class,
2628
];
2729
}
2830

0 commit comments

Comments
 (0)