300 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			300 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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
 | |
| 		);
 | |
| 	}
 | |
| }
 |