Sindbad~EG File Manager
<?php
namespace WPForms\Pro\Admin\Settings;
/**
* Access management settings panel.
*
* @since 1.5.8
*/
class Access {
/**
* View slug.
*
* @since 1.5.8
*
* @var string
*/
const SLUG = 'access';
/**
* Init class.
*
* @since 1.5.8
*/
public function init() {
$this->hooks();
}
/**
* Access settings panel hooks.
*
* @since 1.5.8
*/
public function hooks() {
add_filter( 'wpforms_settings_tabs', [ $this, 'add_tab' ] );
add_filter( 'wpforms_settings_defaults', [ $this, 'add_section' ] );
add_filter( 'wpforms_settings_exclude_view', [ $this, 'exclude_view' ] );
add_filter( 'wpforms_settings_custom_process', [ $this, 'process_settings' ], 10, 2 );
if ( wpforms_is_admin_page( 'settings', 'access' ) ) {
add_action( 'admin_enqueue_scripts', [ $this, 'enqueues' ] );
}
}
/**
* Load enqueues.
*
* @since 1.5.8.2
*/
public function enqueues() {
$min = \wpforms_get_min_suffix();
\wp_enqueue_script(
'wpforms-settings-access',
\WPFORMS_PLUGIN_URL . "assets/pro/js/admin/settings-access{$min}.js",
[ 'jquery', 'jquery-confirm' ],
\WPFORMS_VERSION,
true
);
\wp_localize_script(
'wpforms-settings-access',
'wpforms_settings_access',
[
'labels' => [
'caps' => \wpforms()->get( 'access' )->get_caps(),
'roles' => \wp_list_pluck( \get_editable_roles(), 'name' ),
],
'l10n' => [
/* translators: %1$s - capability being granted; %2$s - capability(s) required for a capability being granted; %3$s - role a capability is granted to. */
'grant_caps' => '<p>' . \esc_html__( 'In order to give %1$s access, %2$s access is also required.', 'wpforms' ) . '</p><p>' . \esc_html__( 'Would you like to also grant %2$s access to %3$s?', 'wpforms' ) . '</p>',
/* translators: %1$s - capability being granted; %2$s - capability(s) required for a capability being granted; %3$s - role a capability is granted to. */
'remove_caps' => '<p>' . \esc_html__( 'In order to remove %1$s access, %2$s access is also required to be removed.', 'wpforms' ) . '</p><p>' . \esc_html__( 'Would you like to also remove %2$s access from %3$s?', 'wpforms' ) . '</p>',
],
]
);
}
/**
* Get Access settings panel labels.
*
* @since 1.5.8
*/
protected function get_caps_settings_labels() {
return [
'create_forms' => [
'title' => \esc_html__( 'Create Forms', 'wpforms' ),
'caps' => [
'wpforms_create_forms' => [
'title' => '',
'desc' => '',
],
],
],
'view_forms' => [
'title' => \esc_html__( 'View Forms', 'wpforms' ),
'caps' => [
'wpforms_view_own_forms' => [
'title' => \esc_html__( 'Own', 'wpforms' ),
'desc' => \esc_html__( 'Can view forms created by themselves.', 'wpforms' ),
],
'wpforms_view_others_forms' => [
'title' => \esc_html__( 'Others', 'wpforms' ),
'desc' => \esc_html__( 'Can view forms created by others.', 'wpforms' ),
],
],
],
'edit_forms' => [
'title' => \esc_html__( 'Edit Forms', 'wpforms' ),
'caps' => [
'wpforms_edit_own_forms' => [
'title' => \esc_html__( 'Own', 'wpforms' ),
'desc' => \esc_html__( 'Can edit forms created by themselves.', 'wpforms' ),
],
'wpforms_edit_others_forms' => [
'title' => \esc_html__( 'Others', 'wpforms' ),
'desc' => \esc_html__( 'Can edit forms created by others.', 'wpforms' ),
],
],
],
'delete_forms' => [
'title' => \esc_html__( 'Delete Forms', 'wpforms' ),
'caps' => [
'wpforms_delete_own_forms' => [
'title' => \esc_html__( 'Own', 'wpforms' ),
'desc' => \esc_html__( 'Can delete forms created by themselves.', 'wpforms' ),
],
'wpforms_delete_others_forms' => [
'title' => \esc_html__( 'Others', 'wpforms' ),
'desc' => \esc_html__( 'Can delete forms created by others.', 'wpforms' ),
],
],
],
// Entry categories.
'view_entries' => [
'title' => \esc_html__( 'View Entries', 'wpforms' ),
'caps' => [
'wpforms_view_entries_own_forms' => [
'title' => \esc_html__( 'Own', 'wpforms' ),
'desc' => \esc_html__( 'Can view entries of forms created by themselves.', 'wpforms' ),
],
'wpforms_view_entries_others_forms' => [
'title' => \esc_html__( 'Others', 'wpforms' ),
'desc' => \esc_html__( 'Can view entries of forms created by others.', 'wpforms' ),
],
],
],
'edit_entries' => [
'title' => \esc_html__( 'Edit Entries', 'wpforms' ),
'caps' => [
'wpforms_edit_entries_own_forms' => [
'title' => \esc_html__( 'Own', 'wpforms' ),
'desc' => \esc_html__( 'Can edit entries of forms created by themselves.', 'wpforms' ),
],
'wpforms_edit_entries_others_forms' => [
'title' => \esc_html__( 'Others', 'wpforms' ),
'desc' => \esc_html__( 'Can edit entries of forms created by others.', 'wpforms' ),
],
],
],
'delete_entries' => [
'title' => \esc_html__( 'Delete Entries', 'wpforms' ),
'caps' => [
'wpforms_delete_entries_own_forms' => [
'title' => \esc_html__( 'Own', 'wpforms' ),
'desc' => \esc_html__( 'Can delete entries of forms created by themselves.', 'wpforms' ),
],
'wpforms_delete_entries_others_forms' => [
'title' => \esc_html__( 'Others', 'wpforms' ),
'desc' => \esc_html__( 'Can delete entries of forms created by others.', 'wpforms' ),
],
],
],
];
}
/**
* Add Access settings tab on the left of Misc tab.
*
* @since 1.5.8
*
* @param array $tabs Settings tabs.
*
* @return array
*/
public function add_tab( $tabs ) {
$tab = [
self::SLUG => [
'name' => \esc_html__( 'Access', 'wpforms' ),
'form' => true,
'submit' => \esc_html__( 'Save Settings', 'wpforms' ),
],
];
return \wpforms_list_insert_after( $tabs, 'geolocation', $tab );
}
/**
* Add Access settings section.
*
* @since 1.5.8
*
* @param array $settings Settings sections.
*
* @return array
*/
public function add_section( $settings ) {
$settings[ self::SLUG ][ self::SLUG . '-heading' ] = [
'id' => self::SLUG . '-heading',
'content' => '<h4>' . esc_html__( 'Access', 'wpforms' ) . '</h4><p>' .
sprintf(
wp_kses( /* translators: %s - WPForms.com access control link. */
__( 'Select the user roles that are allowed to manage different aspects of WPForms. By default, all permissions are provided only to administrator users. Please see our <a href="%s" target="_blank" rel="noopener noreferrer">Access Controls documentation</a> for full details.', 'wpforms' ),
[
'a' => [
'href' => [],
'target' => [],
'rel' => [],
],
]
),
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-set-up-access-controls-in-wpforms/', 'Settings - Access', 'Access Control Documentation' ) )
)
. '</p>',
'type' => 'content',
'no_label' => true,
'class' => [ 'section-heading' ],
];
$labels = $this->get_caps_settings_labels();
$roles = get_editable_roles();
$caps = wpforms()->get( 'access' )->get_caps();
$master_cap = wpforms_get_capability_manage_options();
// Get a list of assigned capabilities for every role.
foreach ( $roles as $role => $details ) {
if ( $role === $master_cap || ! empty( $details['capabilities'][ $master_cap ] ) ) {
continue;
}
$options[ $role ] = $details['name'];
$role_caps[ $role ] = array_intersect_key( $caps, array_filter( $details['capabilities'] ) );
}
foreach ( $labels as $row_id => $row ) {
$columns = [];
foreach ( $row['caps'] as $cap_id => $cap ) {
$selected = array_keys( wp_list_filter( $role_caps, [ $cap_id => $caps[ $cap_id ] ] ) );
$columns[ $cap_id ] = [
'id' => $cap_id,
'name' => esc_html( $cap['title'] ),
'desc' => esc_html( $cap['desc'] ),
'type' => 'select',
'choicesjs' => true,
'multiple' => true,
'options' => $options,
'selected' => $selected,
'data' => [ 'cap' => $cap_id ],
];
}
$settings[ self::SLUG ][ $row_id ] = [
'id' => $row_id,
'name' => esc_html( $row['title'] ),
'type' => 'columns',
'columns' => $columns,
];
}
return $settings;
}
/**
* Exclude Access settings from a saved settings list.
*
* @since 1.5.8
*
* @param array $exclude_views Views to exclude from saving.
*
* @return array
*/
public function exclude_view( $exclude_views ) {
$exclude_views[] = self::SLUG;
return $exclude_views;
}
/**
* Run own processing of a settings view.
*
* @since 1.5.8
*
* @param string $view Settings view slug.
* @param array $rows Set of settings fields rows for Access view.
*/
public function process_settings( $view, $rows ) {
if ( $view !== self::SLUG ) {
return;
}
// Check nonce and other various security checks.
if ( ! isset( $_POST['wpforms-settings-submit'] ) || empty( $_POST['nonce'] ) ) {
return;
}
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'wpforms-settings-nonce' ) ) {
return;
}
if ( ! wpforms_current_user_can() ) {
return;
}
$columns = wp_filter_object_list( $rows, [ 'type' => 'columns' ], 'and', 'columns' );
foreach ( $columns as $column ) {
if ( empty( $column ) || ! is_array( $column ) ) {
continue;
}
foreach ( $column as $cap_id => $cap ) {
$value = isset( $_POST[ $cap_id ] ) && is_array( $_POST[ $cap_id ] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST[ $cap_id ] ) ) : [];
$value_prev = isset( $cap['selected'] ) ? $cap['selected'] : [];
$add_cap_roles = array_diff( $value, $value_prev );
$remove_cap_roles = array_diff( $value_prev, $value );
$this->save_caps( $cap_id, $add_cap_roles, $remove_cap_roles );
}
}
}
/**
* Add or remove a capability to a set of roles.
*
* @since 1.5.8
*
* @param string $cap_id Capability name.
* @param array $add_cap_roles Set of roles to add the capability to.
* @param array $remove_cap_roles Set of roles to remove the capability from.
*/
protected function save_caps( $cap_id, $add_cap_roles, $remove_cap_roles ) {
if ( empty( $add_cap_roles ) && empty( $remove_cap_roles ) ) {
return;
}
\WPForms\Pro\Admin\DashboardWidget::clear_widget_cache();
\WPForms\Pro\Admin\Entries\DefaultScreen::clear_widget_cache();
$roles = \get_editable_roles();
foreach ( $add_cap_roles as $role ) {
if ( \array_key_exists( $role, $roles ) ) {
\get_role( $role )->add_cap( $cap_id );
}
}
foreach ( $remove_cap_roles as $role ) {
if ( \array_key_exists( $role, $roles ) ) {
\get_role( $role )->remove_cap( $cap_id );
}
}
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists