rate_us_url, str_replace('%plugin%', $plugin_data['Name'], $this->rate_us_message)); ?>
prefix.'-dismiss-suggestions'))
$this->update_dismissed_timestamp('suggestions');
}
/**
* Dismiss rate plugin
*/
public function dismiss_rate_us() {
if (!empty($_POST['nonce']) && wp_verify_nonce( $_POST['nonce'], $this->prefix.'-dismiss-rate-us'))
$this->update_dismissed_timestamp('rate_us');
}
// 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) {
// 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');
$admin_notices->delete_dismissed_timestamp('rate_us');
}
// 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() { ?>