first
This commit is contained in:
299
wp-content/plugins/wp-asset-clean-up/classes/Menu.php
Normal file
299
wp-content/plugins/wp-asset-clean-up/classes/Menu.php
Normal file
@ -0,0 +1,299 @@
|
||||
<?php
|
||||
namespace WpAssetCleanUp;
|
||||
|
||||
/**
|
||||
* Class Menu
|
||||
* @package WpAssetCleanUp
|
||||
*/
|
||||
class Menu
|
||||
{
|
||||
/**
|
||||
* @var array|string[]
|
||||
*/
|
||||
public static $allMenuPages = array();
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $_capability = 'administrator';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $_slug;
|
||||
|
||||
/**
|
||||
* Menu constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
self::$allMenuPages = array(
|
||||
WPACU_PLUGIN_ID . '_getting_started',
|
||||
WPACU_PLUGIN_ID . '_settings',
|
||||
WPACU_PLUGIN_ID . '_assets_manager',
|
||||
WPACU_PLUGIN_ID . '_plugins_manager',
|
||||
WPACU_PLUGIN_ID . '_bulk_unloads',
|
||||
WPACU_PLUGIN_ID . '_overview',
|
||||
WPACU_PLUGIN_ID . '_tools',
|
||||
WPACU_PLUGIN_ID . '_license',
|
||||
WPACU_PLUGIN_ID . '_get_help',
|
||||
WPACU_PLUGIN_ID . '_go_pro'
|
||||
);
|
||||
|
||||
self::$_slug = WPACU_PLUGIN_ID . '_getting_started';
|
||||
|
||||
add_action('admin_menu', array($this, 'activeMenu'));
|
||||
|
||||
if (isset($_GET['page']) && $_GET['page'] === WPACU_PLUGIN_ID . '_go_pro') {
|
||||
header('Location: '.apply_filters('wpacu_go_pro_affiliate_link', WPACU_PLUGIN_GO_PRO_URL.'?utm_source=plugin_go_pro'));
|
||||
exit();
|
||||
}
|
||||
|
||||
add_filter( 'post_row_actions', array($this, 'editPostRowActions'), 10, 2 );
|
||||
add_filter( 'page_row_actions', array($this, 'editPostRowActions'), 10, 2 );
|
||||
|
||||
add_action('admin_page_access_denied', array($this, 'pluginPagesAccessDenied'));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function activeMenu()
|
||||
{
|
||||
// User should be of 'administrator' role and allowed to activate plugins
|
||||
if (! self::userCanManageAssets()) {
|
||||
return;
|
||||
}
|
||||
|
||||
add_menu_page(
|
||||
WPACU_PLUGIN_TITLE,
|
||||
WPACU_PLUGIN_TITLE,
|
||||
self::getAccessCapability(),
|
||||
self::$_slug,
|
||||
array(new Info, 'gettingStarted'),
|
||||
WPACU_PLUGIN_URL.'/assets/icons/icon-asset-cleanup.png'
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Settings', 'wp-asset-clean-up'),
|
||||
__('Settings', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_settings',
|
||||
array(new Settings, 'settingsPage')
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('CSS/JS Manager', 'wp-asset-clean-up'),
|
||||
__('CSS/JS Manager', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_assets_manager',
|
||||
array(new AssetsPagesManager, 'renderPage')
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Plugins Manager', 'wp-asset-clean-up'),
|
||||
__('Plugins Manager', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_plugins_manager',
|
||||
array(new PluginsManager, 'page')
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Bulk Changes', 'wp-asset-clean-up'),
|
||||
__('Bulk Changes', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_bulk_unloads',
|
||||
array(new BulkChanges, 'pageBulkUnloads')
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Overview', 'wp-asset-clean-up'),
|
||||
__('Overview', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_overview',
|
||||
array(new Overview, 'pageOverview')
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Tools', 'wp-asset-clean-up'),
|
||||
__('Tools', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_tools',
|
||||
array(new Tools, 'toolsPage')
|
||||
);
|
||||
|
||||
// License Page
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('License', 'wp-asset-clean-up'),
|
||||
__('License', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_license',
|
||||
array(new Info, 'license')
|
||||
);
|
||||
|
||||
// Get Help | Support Page
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Help', 'wp-asset-clean-up'),
|
||||
__('Help', 'wp-asset-clean-up'),
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_get_help',
|
||||
array(new Info, 'help')
|
||||
);
|
||||
|
||||
// [wpacu_lite]
|
||||
// Upgrade to "Go Pro" | Redirects to sale page
|
||||
add_submenu_page(
|
||||
self::$_slug,
|
||||
__('Go Pro', 'wp-asset-clean-up'),
|
||||
__('Go Pro', 'wp-asset-clean-up') . ' <span style="font-size: 16px; color: inherit;" class="dashicons dashicons-star-filled"></span>',
|
||||
self::getAccessCapability(),
|
||||
WPACU_PLUGIN_ID . '_go_pro',
|
||||
function() {}
|
||||
);
|
||||
// [/wpacu_lite]
|
||||
|
||||
// Add "Asset CleanUp Pro" Settings Link to the main "Settings" menu within the Dashboard
|
||||
// For easier navigation
|
||||
$GLOBALS['submenu']['options-general.php'][] = array(
|
||||
WPACU_PLUGIN_TITLE,
|
||||
self::getAccessCapability(),
|
||||
esc_url(admin_url( 'admin.php?page=' . WPACU_PLUGIN_ID . '_settings')),
|
||||
WPACU_PLUGIN_TITLE,
|
||||
);
|
||||
|
||||
// Rename first item from the menu which has the same title as the menu page
|
||||
$GLOBALS['submenu'][self::$_slug][0][0] = esc_attr__('Getting Started', 'wp-asset-clean-up');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public static function userCanManageAssets()
|
||||
{
|
||||
if (is_super_admin()) {
|
||||
return true; // For security reasons, super admins will always be able to access the plugin's settings
|
||||
}
|
||||
|
||||
// Has self::$_capability been changed? Just user current_user_can()
|
||||
if (self::getAccessCapability() !== self::$_capability) {
|
||||
return current_user_can(self::getAccessCapability());
|
||||
}
|
||||
|
||||
// self::$_capability default value: "administrator"
|
||||
return current_user_can(self::getAccessCapability());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public static function isPluginPage()
|
||||
{
|
||||
return isset($_GET['page']) && in_array($_GET['page'], self::$allMenuPages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Here self::$_capability can be overridden
|
||||
*
|
||||
* @return mixed|void
|
||||
*/
|
||||
public static function getAccessCapability()
|
||||
{
|
||||
return apply_filters('wpacu_access_role', self::$_capability);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $actions
|
||||
* @param $post
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function editPostRowActions($actions, $post)
|
||||
{
|
||||
// Check for your post type.
|
||||
if ( $post->post_type === 'post' ) {
|
||||
$wpacuFor = 'posts';
|
||||
} elseif ( $post->post_type === 'page' ) {
|
||||
$wpacuFor = 'pages';
|
||||
} elseif ( $post->post_type === 'attachment' ) {
|
||||
$wpacuFor = 'media-attachment';
|
||||
} else {
|
||||
$wpacuFor = 'custom-post-types';
|
||||
}
|
||||
|
||||
$postTypeObject = get_post_type_object($post->post_type);
|
||||
|
||||
if ( ! (isset($postTypeObject->public) && $postTypeObject->public == 1) ) {
|
||||
return $actions;
|
||||
}
|
||||
|
||||
if ( ! in_array(get_post_status($post), array('publish', 'private')) ) {
|
||||
return $actions;
|
||||
}
|
||||
|
||||
// Do not show the management link to specific post types that are marked as "public", but not relevant such as "ct_template" from Oxygen Builder
|
||||
if (in_array($post->post_type, MetaBoxes::$noMetaBoxesForPostTypes)) {
|
||||
return $actions;
|
||||
}
|
||||
|
||||
// Build your links URL.
|
||||
$url = esc_url(admin_url( 'admin.php?page=wpassetcleanup_assets_manager' ));
|
||||
|
||||
// Maybe put in some extra arguments based on the post status.
|
||||
$edit_link = add_query_arg(
|
||||
array(
|
||||
'wpacu_for' => $wpacuFor,
|
||||
'wpacu_post_id' => $post->ID
|
||||
), $url
|
||||
);
|
||||
|
||||
// Only show it to the user that has "administrator" access, and it's in the following list (if a certain list of admins is provided)
|
||||
// "Settings" -> "Plugin Usage Preferences" -> "Allow managing assets to:"
|
||||
if (self::userCanManageAssets() && Main::currentUserCanViewAssetsList()) {
|
||||
/*
|
||||
* You can reset the default $actions with your own array, or simply merge them
|
||||
* here I want to rewrite my Edit link, remove the Quick-link, and introduce a
|
||||
* new link 'Copy'
|
||||
*/
|
||||
$actions['wpacu_manage_assets'] = sprintf( '<a href="%1$s">%2$s</a>',
|
||||
esc_url( $edit_link ),
|
||||
esc_html( __( 'Manage CSS & JS', 'wp-asset-clean-up' ) )
|
||||
);
|
||||
}
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Message to show if the user does not have self::$_capability role and tries to access a plugin's page
|
||||
*/
|
||||
public function pluginPagesAccessDenied()
|
||||
{
|
||||
if ( ! self::isPluginPage() ) {
|
||||
// Not an Asset CleanUp page
|
||||
return;
|
||||
}
|
||||
|
||||
$userMeta = get_userdata(get_current_user_id());
|
||||
$userRoles = $userMeta->roles;
|
||||
|
||||
wp_die(
|
||||
__('Sorry, you are not allowed to access this page.').'<br /><br />'.
|
||||
sprintf(__('Asset CleanUp requires "%s" role and the ability to activate plugins in order to access its pages.', 'wp-asset-clean-up'), '<span style="color: green; font-weight: bold;">'.self::getAccessCapability().'</span>').'<br />'.
|
||||
sprintf(__('Your current role(s): <strong>%s</strong>', 'wp-asset-clean-up'), implode(', ', $userRoles)).'<br /><br />'.
|
||||
__('The value (in green color) can be changed if you use the following snippet in functions.php (within your theme/child theme or a custom plugin):').'<br />'.
|
||||
'<p style="margin: -10px 0 0;"><code style="background: #f2f3ea; padding: 5px;">add_filter(\'wpacu_access_role\', function($role) { return \'your_role_here\'; });</code></p>'.
|
||||
'<p>If the snippet is not used, it will default to "administrator".</p>'.
|
||||
'<p>Possible values: <strong>manage_options</strong>, <strong>activate_plugins</strong>, <strong>manager</strong> etc.</p>'.
|
||||
'<p>Read more: <a target="_blank" href="https://wordpress.org/support/article/roles-and-capabilities/#summary-of-roles">https://wordpress.org/support/article/roles-and-capabilities/#summary-of-roles</a></p>',
|
||||
403
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user