Skip to content

Commit 6f0f29e

Browse files
authored
Merge pull request #19 from soderlind/fix/best-practices-audit
fix: best practices audit - v1.5.1
2 parents 0b2371a + ab42b94 commit 6f0f29e

7 files changed

Lines changed: 63 additions & 15 deletions

File tree

.phpunit.cache/test-results

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version":2,"defects":{"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_users_without_permissions_are_denied":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_role_based_permission_grants_access":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_can_move_to_folder_checks_move_action":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_set_folder_permissions":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_get_all_folder_permissions":7,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_permission_results_are_cached":7,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_inbox_map_returns_empty_by_default":8,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_set_inbox_map":8,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_user_inbox_folder":7,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_assigns_folder":8,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_is_inbox_folder":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_system_folder":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_blocks_deletion":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_allows_regular_folders":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_workflow_enabled":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_get_review_count_uses_transient":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_invalidate_review_count_cache":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled_is_deprecated":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_mark_approved":8},"times":{"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_administrators_have_full_access":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_users_without_permissions_are_denied":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_role_based_permission_grants_access":0.021999999999999999,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_can_move_to_folder_checks_move_action":0.001,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_set_folder_permissions":0.001,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_get_all_folder_permissions":0.001,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_permission_results_are_cached":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_clear_cache":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_inbox_map_returns_empty_by_default":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_set_inbox_map":0.024,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_user_inbox_folder":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_assigns_folder":0.052999999999999999,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_skips_non_create_context":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_skips_if_already_assigned":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_is_inbox_folder":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_system_folder":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_blocks_deletion":0.001,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_allows_regular_folders":0.002,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_get_needs_review_folder":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_mark_needs_review":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_mark_approved":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_workflow_enabled":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled":0.021000000000000001,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_get_review_count_uses_transient":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_invalidate_review_count_cache":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled_is_deprecated":0.023,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_workflow_is_always_enabled":0}}
1+
{"version":2,"defects":{"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_users_without_permissions_are_denied":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_role_based_permission_grants_access":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_can_move_to_folder_checks_move_action":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_set_folder_permissions":8,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_get_all_folder_permissions":7,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_permission_results_are_cached":7,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_inbox_map_returns_empty_by_default":8,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_set_inbox_map":8,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_user_inbox_folder":7,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_assigns_folder":8,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_is_inbox_folder":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_system_folder":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_blocks_deletion":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_allows_regular_folders":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_workflow_enabled":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_get_review_count_uses_transient":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_invalidate_review_count_cache":8,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled_is_deprecated":7,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_mark_approved":8},"times":{"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_administrators_have_full_access":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_users_without_permissions_are_denied":0.023,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_role_based_permission_grants_access":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_can_move_to_folder_checks_move_action":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_set_folder_permissions":0.001,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_get_all_folder_permissions":0.001,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_permission_results_are_cached":0,"VmfaEditorialWorkflow\\Tests\\AccessCheckerTest::test_clear_cache":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_inbox_map_returns_empty_by_default":0.024,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_set_inbox_map":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_get_user_inbox_folder":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_assigns_folder":0.050999999999999997,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_skips_non_create_context":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_route_to_inbox_skips_if_already_assigned":0,"VmfaEditorialWorkflow\\Tests\\InboxServiceTest::test_is_inbox_folder":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_system_folder":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_blocks_deletion":0.001,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_protect_system_folders_allows_regular_folders":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_get_needs_review_folder":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_mark_needs_review":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_mark_approved":0.0030000000000000001,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_is_workflow_enabled":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled":0.021000000000000001,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_get_review_count_uses_transient":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_invalidate_review_count_cache":0,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_set_workflow_enabled_is_deprecated":0.023,"VmfaEditorialWorkflow\\Tests\\WorkflowStateTest::test_workflow_is_always_enabled":0}}

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.5.1] - 2025-06-25
9+
10+
### Fixed
11+
12+
- Removed redundant `require_once` calls in Plugin.php (handled by Composer autoloading)
13+
14+
### Added
15+
16+
- `uninstall.php` for clean plugin removal
17+
818
## [1.5.0] - 2026-02-07
919

1020
### Fixed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vmfa-editorial-workflow",
3-
"version": "1.5.0",
3+
"version": "1.5.1",
44
"description": "Role-based folder access, move restrictions, and Inbox workflow for Virtual Media Folders.",
55
"author": "Per Soderlind",
66
"license": "GPL-2.0-or-later",

readme.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Tags: media, folders, workflow, editorial, permissions
44
Requires at least: 6.8
55
Tested up to: 6.9
66
Requires PHP: 8.3
7-
Stable tag: 1.5.0
7+
Stable tag: 1.5.1
88
License: GPL-2.0-or-later
99
License URI: https://www.gnu.org/licenses/gpl-2.0.html
1010

@@ -95,6 +95,16 @@ Existing media is not affected. The workflow only applies to new uploads and exp
9595

9696
== Changelog ==
9797

98+
= 1.5.1 =
99+
100+
**Fixed**
101+
102+
* Removed redundant `require_once` calls in Plugin.php (handled by Composer autoloading)
103+
104+
**Added**
105+
106+
* `uninstall.php` for clean plugin removal
107+
98108
= 1.5.0 =
99109

100110
**Fixed**

src/php/Plugin.php

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,7 @@ private function __construct() {
8181
* @return void
8282
*/
8383
private function load_dependencies(): void {
84-
$base = VMFA_EDITORIAL_WORKFLOW_PATH . 'src/php/';
85-
86-
require_once $base . 'Services/AccessChecker.php';
87-
require_once $base . 'Services/InboxService.php';
88-
require_once $base . 'AccessEnforcer.php';
89-
require_once $base . 'WorkflowState.php';
90-
require_once $base . 'Admin/ReviewPage.php';
91-
require_once $base . 'Admin/SettingsTab.php';
92-
require_once $base . 'Admin/MediaLibraryEnforcer.php';
93-
require_once $base . 'REST/SettingsController.php';
84+
// Dependencies are loaded via Composer PSR-4 autoloading.
9485
}
9586

9687
/**

uninstall.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
* Uninstall handler for Virtual Media Folders – Editorial Workflow.
4+
*
5+
* Removes all plugin-specific options and term meta from the database.
6+
*
7+
* @package VmfaEditorialWorkflow
8+
*/
9+
10+
// Exit if not called by WordPress.
11+
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
12+
exit;
13+
}
14+
15+
// Delete plugin options.
16+
delete_option( 'vmfa_workflow_enabled' );
17+
delete_option( 'vmfa_editors_can_review' );
18+
delete_option( 'vmfa_approved_folder' );
19+
delete_option( 'vmfa_inbox_map' );
20+
delete_option( 'vmfa_needs_review_folder' );
21+
22+
// Remove per-folder term meta (role permissions and system folder flags).
23+
global $wpdb;
24+
25+
$wpdb->query(
26+
$wpdb->prepare(
27+
"DELETE FROM {$wpdb->termmeta} WHERE meta_key LIKE %s",
28+
$wpdb->esc_like( 'vmfa_access_' ) . '%'
29+
)
30+
);
31+
32+
$wpdb->query(
33+
$wpdb->prepare(
34+
"DELETE FROM {$wpdb->termmeta} WHERE meta_key = %s",
35+
'vmfa_system_folder'
36+
)
37+
);

vmfa-editorial-workflow.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Plugin Name: Virtual Media Folders - Editorial Workflow
44
* Plugin URI: https://github.com/soderlind/vmfa-editorial-workflow
55
* Description: Role-based folder access, move restrictions, and Inbox workflow for Virtual Media Folders.
6-
* Version: 1.5.0
6+
* Version: 1.5.1
77
* Requires at least: 6.8
88
* Requires PHP: 8.3
99
* Tested up to: 6.9
@@ -26,7 +26,7 @@
2626
defined( 'ABSPATH' ) || exit;
2727

2828
// Plugin constants.
29-
define( 'VMFA_EDITORIAL_WORKFLOW_VERSION', '1.5.0' );
29+
define( 'VMFA_EDITORIAL_WORKFLOW_VERSION', '1.5.1' );
3030
define( 'VMFA_EDITORIAL_WORKFLOW_FILE', __FILE__ );
3131
define( 'VMFA_EDITORIAL_WORKFLOW_PATH', plugin_dir_path( __FILE__ ) );
3232
define( 'VMFA_EDITORIAL_WORKFLOW_URL', plugin_dir_url( __FILE__ ) );

0 commit comments

Comments
 (0)