install_plugin_install_status

Definition:
function install_plugin_install_status($api, $loop = false) {}

Determine the status we can perform on a plugin.

Parameters

  • $api
  • $loop

Source code

function install_plugin_install_status($api, $loop = false) {

	// this function is called recursivly, $loop prevents futhur loops.

	if ( is_array($api) )

		$api = (object) $api;



	//Default to a "new" plugin

	$status = 'install';

	$url = false;



	//Check to see if this plugin is known to be installed, and has an update awaiting it.

	$update_plugins = get_site_transient('update_plugins');

	if ( is_object( $update_plugins ) ) {

		foreach ( (array)$update_plugins->response as $file => $plugin ) {

			if ( $plugin->slug === $api->slug ) {

				$status = 'update_available';

				$update_file = $file;

				$version = $plugin->new_version;

				if ( current_user_can('update_plugins') )

					$url = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=' . $update_file), 'upgrade-plugin_' . $update_file);

				break;

			}

		}

	}



	if ( 'install' == $status ) {

		if ( is_dir( WP_PLUGIN_DIR  . '/' . $api->slug ) ) {

			$installed_plugin = get_plugins('/' . $api->slug);

			if ( empty($installed_plugin) ) {

				if ( current_user_can('install_plugins') )

					$url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug);

			} else {

				$key = array_shift( $key = array_keys($installed_plugin) ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers

				if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '=') ){

					$status = 'latest_installed';

				} elseif ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '<') ) {

					$status = 'newer_installed';

					$version = $installed_plugin[ $key ]['Version'];

				} else {

					//If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh

					if ( ! $loop ) {

						delete_site_transient('update_plugins');

						wp_update_plugins();

						return install_plugin_install_status($api, true);

					}

				}

			}

		} else {

			// "install" & no directory with that slug

			if ( current_user_can('install_plugins') )

				$url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug);

		}

	}

	if ( isset($_GET['from']) )

		$url .= '&amp;from=' . urlencode(stripslashes($_GET['from']));



	return compact('status', 'url', 'version');

}

2041

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: