HEX
Server: Apache/2.4.41
System: Linux mainweb 5.4.0-182-generic #202-Ubuntu SMP Fri Apr 26 12:29:36 UTC 2024 x86_64
User: nationalmedicaregrp (1119)
PHP: 8.3.7
Disabled: exec,passthru,shell_exec,system,popen,proc_open,pcntl_exec
Upload Files
File: /home/flbestac/public_html/wp-content/plugins/wp-seopress/src/Actions/Admin/CustomCapabilities.php
<?php

namespace SEOPress\Actions\Admin;

if (! defined('ABSPATH')) {
    exit;
}

use SEOPress\Core\Hooks\ExecuteHooksBackend;
use SEOPress\Helpers\PagesAdmin;

class CustomCapabilities implements ExecuteHooksBackend
{
    /**
     * @since 4.6.0
     *
     * @return void
     */
    public function hooks()
    {
        if ('1' == seopress_get_toggle_option('advanced')) {
            add_filter('seopress_capability', [$this, 'custom'], 9999, 2);
            add_filter('option_page_capability_seopress_titles_option_group', [$this, 'capabilitySaveTitlesMetas']);
            add_filter('option_page_capability_seopress_xml_sitemap_option_group', [$this, 'capabilitySaveXmlSitemap']);
            add_filter('option_page_capability_seopress_social_option_group', [$this, 'capabilitySaveSocial']);
            add_filter('option_page_capability_seopress_google_analytics_option_group', [$this, 'capabilitySaveAnalytics']);
            add_filter('option_page_capability_seopress_instant_indexing_option_group', [$this, 'capabilitySaveInstantIndexing']);
            add_filter('option_page_capability_seopress_advanced_option_group', [$this, 'capabilitySaveAdvanced']);
            add_filter('option_page_capability_seopress_tools_option_group', [$this, 'capabilitySaveTools']);
            add_filter('option_page_capability_seopress_import_export_option_group', [$this, 'capabilitySaveImportExport']);

            add_filter('option_page_capability_seopress_pro_mu_option_group', [$this, 'capabilitySavePro']);
            add_filter('option_page_capability_seopress_pro_option_group', [$this, 'capabilitySavePro']);
            add_filter('option_page_capability_seopress_bot_option_group', [$this, 'capabilitySaveBot']);

            add_action('init', [$this, 'addCapabilities']);
        }
    }

    /**
     * @since 4.6.0
     *
     * @return void
     */
    public function addCapabilities()
    {
        $roles = wp_roles();
        $pages = PagesAdmin::getPages();

        if (isset($roles->role_objects['administrator'])) {
            $role  = $roles->role_objects['administrator'];
            foreach ($pages as $value) {
                $role->add_cap(\sprintf('seopress_manage_%s', $value), true);
            }
        }

        $options = seopress_get_service('AdvancedOption')->getOption();
        if (! $options) {
            return;
        }
        $needle  = 'seopress_advanced_security_metaboxe';

        foreach ($pages as $key => $pageValue) {
            $pageForCapability = PagesAdmin::getPageByCapability($pageValue);
            $capability        = PagesAdmin::getCapabilityByPage($pageForCapability);

            $optionKey=  sprintf('%s_%s', $needle, $pageForCapability);
            if (! \array_key_exists($optionKey, $options)) {
                // Remove all cap for a specific role if option not set
                foreach ($roles->role_objects as $keyRole => $role) {
                    if ('administrator' === $keyRole) {
                        continue;
                    }

                    if($capability === null){
                        continue;
                    }

                    $role->remove_cap(\sprintf('seopress_manage_%s', $capability));
                }
            } else {
                foreach ($roles->role_objects as $keyRole => $role) {
                    if (! \array_key_exists($role->name, $options[$optionKey]) && 'administrator' !== $keyRole) {
                        $role->remove_cap(\sprintf('seopress_manage_%s', $capability));
                    } else {
                        $role->add_cap(\sprintf('seopress_manage_%s', $capability), true);
                    }
                }
            }
        }
    }

    /**
     * @since 4.6.0
     *
     * @param string $cap
     * @param string $context
     *
     * @return string
     */
    public function custom($cap, $context)
    {
        switch ($context) {
            case 'xml_html_sitemap':
            case 'social_networks':
            case 'analytics':
            case 'tools':
            case 'instant_indexing':
            case 'titles_metas':
            case 'advanced':
            case 'pro':
            case 'bot':
                return PagesAdmin::getCustomCapability($context);
            case 'dashboard':
                $capabilities = [
                    'xml_html_sitemap',
                    'social_networks',
                    'analytics',
                    'tools',
                    'instant_indexing',
                    'titles_metas',
                    'advanced',
                    'pro',
                    'bot',
                ];
                foreach ($capabilities as $key => $value) {
                    if (current_user_can(PagesAdmin::getCustomCapability($value))) {
                        return PagesAdmin::getCustomCapability($value);
                    }
                }

                return $cap;
            default:
                return $cap;
        }
    }

    /**
     * @since 4.6.0
     *
     * @param string $cap
     *
     * @return string
     */
    public function capabilitySaveTitlesMetas($cap)
    {
        return PagesAdmin::getCustomCapability('titles_metas');
    }

    public function capabilitySaveXmlSitemap($cap)
    {
        return PagesAdmin::getCustomCapability('xml_html_sitemap');
    }

    public function capabilitySaveSocial($cap)
    {
        return PagesAdmin::getCustomCapability('social_networks');
    }

    public function capabilitySaveAnalytics($cap)
    {
        return PagesAdmin::getCustomCapability('analytics');
    }

    public function capabilitySaveAdvanced($cap)
    {
        return PagesAdmin::getCustomCapability('advanced');
    }

    public function capabilitySaveTools($cap)
    {
        return PagesAdmin::getCustomCapability('tools');
    }

    public function capabilitySaveInstantIndexing($cap)
    {
        return PagesAdmin::getCustomCapability('instant_indexing');
    }

    public function capabilitySaveImportExport($cap)
    {
        return PagesAdmin::getCustomCapability('tools');
    }

    public function capabilitySavePro($cap)
    {
        return PagesAdmin::getCustomCapability('pro');
    }

    public function capabilitySaveBot($cap)
    {
        return PagesAdmin::getCustomCapability('bot');
    }
}