Skip to content

Commit fc6cd4f

Browse files
authored
Merge pull request #1532 from publishpress/release/4.9.3
Release/4.9.3
2 parents 0cbefc1 + 0c10298 commit fc6cd4f

File tree

83 files changed

+2885
-993
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2885
-993
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
.phplint.yml export-ignore
1414
.rsync-filters-post-build export-ignore
1515
.rsync-filters-pre-build export-ignore
16+
.rsync-filters-dev-sync export-ignore
1617
.vscode export-ignore
1718
.wordpress-org export-ignore
1819
.env export-ignore

.github/workflows/code-test.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ jobs:
5555
run: |
5656
docker exec future_free_env_wp_test chmod -R 777 /var/www/html/wp-content
5757
58+
- name: Remove WordPress maintenance file if exists
59+
run: |
60+
docker exec future_free_env_wp_test rm -f /var/www/html/.maintenance || true
61+
5862
- name: Run Unit Tests
5963
run: |
6064
composer test Unit

.rsync-filters-post-build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
- lib/vendor/bin
1111
- .DS_Store
1212
- .phplint.cache
13+
- .rsync-filters-dev-sync

CHANGELOG.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,36 @@
11
The format is based on [Keep a Changelog](http://keepachangelog.com/)
22
and this project adheres to [Semantic Versioning](http://semver.org/).
33

4+
## [4.9.3]- 11 December, 2025
5+
6+
### Added
7+
8+
- Added new conditional operators for workflow steps: "Is empty" and "Is not empty", allowing you to check if a value or field is empty or not within conditional logic (Issue #1518).
9+
10+
### Fixed
11+
12+
- Warning: Undefined array key "id" on an imported workflow, (Issue #1524)
13+
- Unable to re-schedule "On Schedule" trigger if it was already executed, (Issue #1527)
14+
- "Update post details" step not working with "Query posts" step, (Issue #1503).
15+
- Fixed how variable helpers are interpreted inside JSON logic conditions (Issue #1517).
16+
- "Query Posts" step has invalid settings validation, (Issue #1525)
17+
- Update ES-FR-IT translations (Issue #1477).
18+
- Remove email field from getAuthors REST API endpoint.
19+
- Convert workflow operations from GET to POST requests
20+
- Add capability checks for all workflow actions
21+
- Improve utils stripTags function
22+
- Implement backup structure validation to ensure data integrity
23+
- Add sanitization methods for workflows and settings data
24+
- Improve input validation with proper type checking and whitelisting
25+
- Enhanced workflow setDescription() method with wp_kses_post() sanitization
26+
- Enhance post expiration extraData data validation
27+
- Improve query parameter handling in settings controller
28+
- Enhance template rendering validation and path security
29+
- Add nonce verification to processMetaboxUpdate method
30+
- Improve input sanitization in debug log download
31+
- Add proper permission checks for post expiration data access
32+
- Add input sanitization for workflow node data values
33+
434
## [4.9.2]- 18 Novemeber, 2025
535

636
### Added

assets/css/workflows-list.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,9 @@
22
.inline-edit-wrapper .inline-edit-date {
33
display: none;
44
}
5+
6+
.pp-future-workflow-action-form {
7+
display: inline-block;
8+
margin: 0;
9+
padding: 0;
10+
}

assets/js/78.min.js

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

assets/js/assets_jsx_workflow-editor_components_app_jsx.js

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,17 +202,22 @@ var getActionSettingsFromColumnData = function getActionSettingsFromColumnData(p
202202
};
203203
};
204204

205-
/**
206-
* This function is used to determine if a value is a number, including strings.
207-
*
208-
* @param {*} value
209-
* @returns
205+
/**
206+
* This function is used to determine if a value is a number, including strings.
207+
*
208+
* @param {*} value
209+
* @returns
210210
*/
211211
var isNumber = function isNumber(value) {
212212
return !isNaN(value);
213213
};
214214
function stripTags(string) {
215-
return string.replace(/<[^>]*>?/gm, '');
215+
if (typeof string !== 'string') {
216+
return '';
217+
}
218+
var div = document.createElement('div');
219+
div.textContent = string;
220+
return div.innerHTML;
216221
}
217222

218223
/***/ }),
@@ -1329,7 +1334,7 @@ var ValueExpressionBuilder = function ValueExpressionBuilder(_ref) {
13291334
}
13301335
setCompleters(newCompleters);
13311336
}, [variableDataType]);
1332-
if (rule.operator === 'null' || rule.operator === 'notNull') {
1337+
if (rule.operator === 'null' || rule.operator === 'notNull' || rule.operator === 'isEmpty' || rule.operator === 'isNotEmpty') {
13331338
return /*#__PURE__*/React.createElement("div", null);
13341339
}
13351340
return /*#__PURE__*/React.createElement(_conditional_expression_builder__WEBPACK_IMPORTED_MODULE_2__.ConditionalExpressionBuilder, {
@@ -1419,6 +1424,28 @@ var useConditionalLogic = function useConditionalLogic(_ref) {
14191424
formatValue: function formatValue(_field, value) {
14201425
return "'".concat(value, "'");
14211426
}
1427+
}, {
1428+
name: 'isEmpty',
1429+
value: 'isEmpty',
1430+
label: 'is empty',
1431+
jsonLogic: function jsonLogic(field) {
1432+
return {
1433+
isEmpty: [{
1434+
var: field
1435+
}]
1436+
};
1437+
}
1438+
}, {
1439+
name: 'isNotEmpty',
1440+
value: 'isNotEmpty',
1441+
label: 'is not empty',
1442+
jsonLogic: function jsonLogic(field) {
1443+
return {
1444+
isNotEmpty: [{
1445+
var: field
1446+
}]
1447+
};
1448+
}
14221449
}]);
14231450

14241451
/**
@@ -1450,6 +1477,24 @@ var useConditionalLogic = function useConditionalLogic(_ref) {
14501477
value: value
14511478
};
14521479
}
1480+
},
1481+
// Handle "isEmpty" => { isEmpty: [{ var: field }] }
1482+
isEmpty: function isEmpty(_ref4) {
1483+
var _ref5 = _slicedToArray(_ref4, 1),
1484+
field = _ref5[0];
1485+
return {
1486+
field: field.var,
1487+
operator: 'isEmpty'
1488+
};
1489+
},
1490+
// Handle "isNotEmpty" => { isNotEmpty: [{ var: field }] }
1491+
isNotEmpty: function isNotEmpty(_ref6) {
1492+
var _ref7 = _slicedToArray(_ref6, 1),
1493+
field = _ref7[0];
1494+
return {
1495+
field: field.var,
1496+
operator: 'isNotEmpty'
1497+
};
14531498
}
14541499
};
14551500

@@ -1468,6 +1513,10 @@ var useConditionalLogic = function useConditionalLogic(_ref) {
14681513
return "".concat(fieldLabel, " does not have ").concat(formattedValue);
14691514
} else if (rule.operator === 'has') {
14701515
return "".concat(fieldLabel, " has ").concat(formattedValue);
1516+
} else if (rule.operator === 'isEmpty') {
1517+
return "".concat(fieldLabel, " is empty");
1518+
} else if (rule.operator === 'isNotEmpty') {
1519+
return "".concat(fieldLabel, " is not empty");
14711520
}
14721521
return (0,react_querybuilder__WEBPACK_IMPORTED_MODULE_1__.defaultRuleProcessorNL)(rule, options);
14731522
}, []);
@@ -3743,7 +3792,7 @@ var getAuthorOptions = function getAuthorOptions(authors) {
37433792
return authors.map(function (author) {
37443793
return {
37453794
value: author.id,
3746-
label: author.name + ' (' + author.email + ')'
3795+
label: author.name
37473796
};
37483797
});
37493798
};

assets/js/blockEditor.js

Lines changed: 11 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/js/bulkEdit.js

Lines changed: 11 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/js/classicEditor.js

Lines changed: 11 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)