suggestions_message ); ?>
missing as $plugin ) : ?>
- suggestions[ $plugin ]['name']; ?>
(Install for free)
suggestions[ $plugin ]['desc']; ?>
prefix . '-dismiss-suggestions' ) ) {
$this->update_dismissed_timestamp( 'suggestions' );
}
}
// Plugins information retrieval
// ---------------------------------------------------------------------------------------------------
/**
* Retrieve uninstalled plugins
*/
private function get_missing_plugins() {
// Initialize
$inactive = array();
// Check plugins directory
$directories = array_merge( self::get_mu_plugins_directories(), self::get_plugins_directories() );
if ( ! empty( $directories ) ) {
$required = array_keys( $this->suggestions );
foreach ( $required as $plugin ) {
if ( ! in_array( $plugin, $directories ) ) {
$inactive[] = $plugin;
}
}
}
// Check inactives
if ( empty( $inactive ) ) {
return false;
}
// Done
return $inactive;
}
/**
* Collects all active plugins
*/
private function get_plugins_directories() {
// Initialize
$directories = array();
// Plugins split directory
$split = '/' . basename( WP_CONTENT_DIR ) . '/' . basename( WP_PLUGIN_DIR ) . '/';
// Multisite plugins
if ( is_multisite() ) {
$ms_plugins = wp_get_active_network_plugins();
if ( ! empty( $ms_plugins ) && is_array( $ms_plugins ) ) {
foreach ( $ms_plugins as $file ) {
$directory = explode( $split, $file );
$directory = explode( '/', ltrim( $directory[1], '/' ) );
$directory = $directory[0];
if ( ! in_array( $directory, $directories ) ) {
$directories[] = $directory;
}
}
}
}
// Active plugins
$plugins = wp_get_active_and_valid_plugins();
if ( ! empty( $plugins ) && is_array( $plugins ) ) {
foreach ( $plugins as $file ) {
$directory = explode( $split, $file );
$directory = explode( '/', ltrim( $directory[1], '/' ) );
$directory = $directory[0];
if ( ! in_array( $directory, $directories ) ) {
$directories[] = $directory;
}
}
}
// Done
return $directories;
}
/**
* Retrieve mu-plugins directories
*/
private function get_mu_plugins_directories() {
// Initialize
$directories = array();
// Dependencies
if ( ! function_exists( 'get_plugins' ) ) {
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
}
// Retrieve mu-plugins
$plugins = get_plugins( '/../mu-plugins' );
if ( ! empty( $plugins ) && is_array( $plugins ) ) {
foreach ( $plugins as $path => $info ) {
$directory = dirname( $path );
if ( ! in_array( $directory, array( '.', '..' ) ) ) {
$directories[] = $directory;
}
}
}
// Done
return $directories;
}
/**
* Plugin install/activate URL
*/
private function get_install_url( $plugin ) {
if ( ! isset( $this->suggestions[ $plugin ]['filename'] ) && isset( $this->suggestions[ $plugin ]['url'] ) ) {
return $this->suggestions[ $plugin ]['url'];
}
// Check existing plugin
$exists = @file_exists( WP_PLUGIN_DIR . '/' . $plugin );
// Activate
if ( $exists ) {
// Existing plugin
$path = $plugin . '/' . $this->suggestions[ $plugin ]['filename'];
return admin_url( 'plugins.php?action=activate&plugin=' . $path . '&_wpnonce=' . wp_create_nonce( 'activate-plugin_' . $path ) );
// Install
} else {
// New plugin
return admin_url( 'update.php?action=install-plugin&plugin=' . $plugin . '&_wpnonce=' . wp_create_nonce( 'install-plugin_' . $plugin ) );
}
}
/**
* Determines the admin notices display
*/
private function disable_nag_notices() {
return ( defined( 'DISABLE_NAG_NOTICES' ) && DISABLE_NAG_NOTICES );
}
// Plugin related
// ---------------------------------------------------------------------------------------------------
/**
* Plugin uninstall hook
*/
public static function uninstall() {
$admin_notices = self::instance();
$admin_notices->delete_activation_timestamp();
$admin_notices->delete_dismissed_timestamp( 'suggestions' );
}
// Activation timestamp management
// ---------------------------------------------------------------------------------------------------
/**
* Retrieves the plugin activation timestamp
*/
private function get_activation_timestamp() {
return (int) get_option( $this->prefix . '_activated_on' );
}
/**
* Updates activation timestamp
*/
private function update_activation_timestamp() {
update_option( $this->prefix . '_activated_on', time(), true );
}
/**
* Removes activation timestamp
*/
private function delete_activation_timestamp() {
delete_option( $this->prefix . '_activated_on' );
}
// Dismissed timestamp management
// ---------------------------------------------------------------------------------------------------
/**
* Current timestamp by key
*/
private function get_dismissed_timestamp( $key ) {
return (int) get_option( $this->prefix . '_dismissed_' . $key . '_on' );
}
/**
* Update with the current timestamp
*/
private function update_dismissed_timestamp( $key ) {
update_option( $this->prefix . '_dismissed_' . $key . '_on', time(), true );
}
/**
* Removes dismissied option
*/
private function delete_dismissed_timestamp( $key ) {
delete_option( $this->prefix . '_dismissed_' . $key . '_on' );
}
// Javascript code
// ---------------------------------------------------------------------------------------------------
/**
* Footer script for Suggestions
*/
public function admin_footer_suggestions() {
?>