Current path: home/webdevt/www/cryptoimpot.fr/wp-content/plugins/divi-contact-form-helper/app/Admin/Handlers/
?? Go up: /home/webdevt/www/cryptoimpot.fr/wp-content/plugins/divi-contact-form-helper/app/Admin
<?php
namespace KS_PAC_DCFH\Admin\Handlers;
if (!defined('ABSPATH')) {
exit;
}
class User_Permissions_Handler
{
public function init(): void
{
add_action('wp_ajax_handle_user_permissions', [$this, 'maybe_update_permissions']);
add_action('admin_init', [$this, 'update_admin_permissions']);
}
public function update_admin_permissions(): void
{
if (get_option('_pwh_dcfh_default_permissions_beta') !== 'yes') {
$admin_role = get_role('administrator');
if ($admin_role) {
$permissions = $this->get_permissions();
foreach ($permissions as $permission) {
foreach ($permission as $cap => $value) {
$admin_role->add_cap($cap);
}
}
update_option('_pwh_dcfh_default_permissions_beta', 'yes', 'no');
}
}
}
public function maybe_update_permissions(): void
{
$permissions = $this->get_permissions();
$form_data = $_POST['form_data'] ?? ''; // phpcs:ignore
// Check if form data is present
if (empty($form_data)) {
return;
}
// Loop through roles and remove all capabilities
$roles = get_editable_roles();
$excluded_roles = ['administrator', 'subscriber'];
foreach ($roles as $role_key => $role_info) {
// Skip excluded roles
if (in_array($role_key, $excluded_roles, true)) {
continue;
}
$role_object = get_role($role_key);
if ($role_object) {
foreach ($permissions as $permission) {
foreach ($permission as $cap => $value) {
$role_object->remove_cap($cap);
}
}
}
}
// Parse form data
parse_str($form_data, $form_array);
// Check an if form array is empty
if (empty($form_array)) {
return; // No options to process
}
// Filter and process form options
$options = array_filter($form_array, static function ($key) {
return strpos($key, 'pwh_dcfh_permission_') === 0;
}, ARRAY_FILTER_USE_KEY);
// Check if options are present
if (!empty($options)) {
// Process each role and its associated capabilities
foreach ($options as $role => $caps) {
$role_name = substr($role, strlen('pwh_dcfh_permission_'));
$admin_role = get_role($role_name);
if ($admin_role) {
// Add capabilities to role
foreach ($caps as $cap) {
if (isset($permissions[$cap])) {
foreach ($permissions[$cap] as $key => $permission) {
$admin_role->add_cap($key);
}
}
}
}
}
}
}
private function get_permissions(): array
{
return [
'access_entries' => [
//'read_pwh_dcfh' => true,
//'edit_pwh_dcfh' => true,
//'edit_pwh_dcfhs' => true,
//'edit_others_pwh_dcfhs' => true,
'edit_draft_pwh_dcfh' => true,
'edit_draft_pwh_dcfhs' => true,
'edit_others_pwh_dcfhs' => true,
'edit_private_pwh_dcfh' => true,
'edit_private_pwh_dcfhs' => true,
'edit_published_pwh_dcfhs' => true,
'edit_pwh_dcfh' => true,
'edit_pwh_dcfhs' => true,
'publish_pwh_dcfhs' => true,
'read_draft_pwh_dcfhs' => true,
'read_private_pwh_dcfhs' => true,
'read_pwh_dcfh' => true,
// Custom Caps
'view_forms_pwh_dcfh' => true,
],
'entry_actions' => [
'delete_others_pwh_dcfhs' => true,
'delete_private_pwh_dcfhs' => true,
'delete_published_pwh_dcfhs' => true,
'delete_pwh_dcfh' => true,
'delete_pwh_dcfhs' => true,
// Custom Caps
'perform_entry_actions_pwh_dcfh' => true,
],
'export_csv' => [
'export_csv_pwh_dcfh' => true,
],
];
}
}