]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/plugin.php
WordPress 3.9
[autoinstalls/wordpress.git] / wp-includes / plugin.php
index df4ba8d33ecb7b1f8a653dfa6999fc93a5abc0c5..7eba1bbdb6475c1d9dc0fed400732cc5e8c83acb 100644 (file)
@@ -16,7 +16,7 @@
  *
  * @package WordPress
  * @subpackage Plugin
- * @since 1.5
+ * @since 1.5.0
  */
 
 // Initialize the filter globals.
@@ -63,9 +63,6 @@ if ( ! isset( $wp_current_filter ) )
  * is valid. It is up to you to take care. This is done for optimization purposes,
  * so everything is as quick as possible.
  *
- * @package WordPress
- * @subpackage Plugin
- *
  * @global array $wp_filter      A multidimensional array of all hooks and the callbacks hooked to them.
  * @global array $merged_filters Tracks the tags that need to be merged for later. If the hook is added, it doesn't need to run through that process.
  *
@@ -91,9 +88,8 @@ function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1
 /**
  * Check if any filter has been registered for a hook.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.5
+ * @since 2.5.0
+ *
  * @global array $wp_filter Stores all of the filters
  *
  * @param string $tag The name of the filter hook.
@@ -146,9 +142,6 @@ function has_filter($tag, $function_to_check = false) {
  * $value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );
  * </code>
  *
- * @package WordPress
- * @subpackage Plugin
- *
  * @global array $wp_filter         Stores all of the filters
  * @global array $merged_filters    Merges the filter hooks using this function.
  * @global array $wp_current_filter stores the list of current filters with the current one last
@@ -212,8 +205,6 @@ function apply_filters( $tag, $value ) {
  * @see apply_filters() This function is identical, but the arguments passed to the
  * functions hooked to <tt>$tag</tt> are supplied using an array.
  *
- * @package WordPress
- * @subpackage Plugin
  * @since 3.0.0
  * @global array $wp_filter Stores all of the filters
  * @global array $merged_filters Merges the filter hooks using this function.
@@ -273,9 +264,7 @@ function apply_filters_ref_array($tag, $args) {
  * when the hook was added. This goes for both filters and actions. No warning
  * will be given on removal failure.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 1.2
+ * @since 1.2.0
  *
  * @param string $tag The filter hook to which the function to be removed is hooked.
  * @param callback $function_to_remove The name of the function which should be removed.
@@ -301,7 +290,7 @@ function remove_filter( $tag, $function_to_remove, $priority = 10 ) {
 /**
  * Remove all of the hooks from a filter.
  *
- * @since 2.7
+ * @since 2.7.0
  *
  * @param string $tag The filter to remove hooks from.
  * @param int $priority The priority number to remove.
@@ -326,9 +315,7 @@ function remove_all_filters($tag, $priority = false) {
 /**
  * Retrieve the name of the current filter or action.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.5
+ * @since 2.5.0
  *
  * @return string Hook name of the current filter or action.
  */
@@ -337,6 +324,63 @@ function current_filter() {
        return end( $wp_current_filter );
 }
 
+/**
+ * Retrieve the name of the current action.
+ *
+ * @since 3.9.0
+ *
+ * @uses current_filter()
+ *
+ * @return string Hook name of the current action.
+ */
+function current_action() {
+       return current_filter();
+}
+
+/**
+ * Retrieve the name of a filter currently being processed.
+ *
+ * The function current_filter() only returns the most recent filter or action
+ * being executed. did_action() returns true once the action is initially
+ * processed. This function allows detection for any filter currently being
+ * executed (despite not being the most recent filter to fire, in the case of
+ * hooks called from hook callbacks) to be verified.
+ *
+ * @since 3.9.0
+ *
+ * @see current_filter()
+ * @see did_action()
+ * @global array $wp_current_filter Current filter.
+ *
+ * @param null|string $filter Optional. Filter to check. Defaults to null, which
+ *                            checks if any filter is currently being run.
+ * @return bool Whether the filter is currently in the stack
+ */
+function doing_filter( $filter = null ) {
+       global $wp_current_filter;
+
+       if ( null === $filter ) {
+               return ! empty( $wp_current_filter );
+       }
+
+       return in_array( $filter, $wp_current_filter );
+}
+
+/**
+ * Retrieve the name of an action currently being processed.
+ *
+ * @since 3.9.0
+ *
+ * @uses doing_filter()
+ *
+ * @param string|null $action Optional. Action to check. Defaults to null, which checks
+ *                            if any action is currently being run.
+ * @return bool Whether the action is currently in the stack.
+ */
+function doing_action( $action = null ) {
+       return doing_filter( $action );
+}
+
 /**
  * Hooks a function on to a specific action.
  *
@@ -347,9 +391,7 @@ function current_filter() {
  *
  * @uses add_filter() Adds an action. Parameter list and functionality are the same.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 1.2
+ * @since 1.2.0
  *
  * @param string $tag The name of the action to which the $function_to_add is hooked.
  * @param callback $function_to_add The name of the function you wish to be called.
@@ -373,9 +415,8 @@ function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1)
  * @see apply_filters() This function works similar with the exception that
  * nothing is returned and only the functions or methods are called.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 1.2
+ * @since 1.2.0
+ *
  * @global array $wp_filter Stores all of the filters
  * @global array $wp_actions Increments the amount of times action was triggered.
  *
@@ -436,9 +477,8 @@ function do_action($tag, $arg = '') {
 /**
  * Retrieve the number of times an action is fired.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.1
+ * @since 2.1.0
+ *
  * @global array $wp_actions Increments the amount of times action was triggered.
  *
  * @param string $tag The name of the action hook.
@@ -459,9 +499,8 @@ function did_action($tag) {
  * @see do_action() This function is identical, but the arguments passed to the
  * functions hooked to <tt>$tag</tt> are supplied using an array.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.1
+ * @since 2.1.0
+ *
  * @global array $wp_filter Stores all of the filters
  * @global array $wp_actions Increments the amount of times action was triggered.
  *
@@ -514,9 +553,8 @@ function do_action_ref_array($tag, $args) {
 /**
  * Check if any action has been registered for a hook.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.5
+ * @since 2.5.0
+ *
  * @see has_filter() has_action() is an alias of has_filter().
  *
  * @param string $tag The name of the action hook.
@@ -537,9 +575,7 @@ function has_action($tag, $function_to_check = false) {
  * method can be used to remove default functions attached to a specific filter
  * hook and possibly replace them with a substitute.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 1.2
+ * @since 1.2.0
  *
  * @param string $tag The action hook to which the function to be removed is hooked.
  * @param callback $function_to_remove The name of the function which should be removed.
@@ -553,7 +589,7 @@ function remove_action( $tag, $function_to_remove, $priority = 10 ) {
 /**
  * Remove all of the hooks from an action.
  *
- * @since 2.7
+ * @since 2.7.0
  *
  * @param string $tag The action to remove hooks from.
  * @param int $priority The priority number to remove them from.
@@ -572,9 +608,7 @@ function remove_all_actions($tag, $priority = false) {
  *
  * This method extracts the name of a plugin from its filename.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 1.5
+ * @since 1.5.0
  *
  * @access private
  *
@@ -582,23 +616,64 @@ function remove_all_actions($tag, $priority = false) {
  * @return string The name of a plugin.
  * @uses WP_PLUGIN_DIR
  */
-function plugin_basename($file) {
-       $file = str_replace('\\','/',$file); // sanitize for Win32 installs
-       $file = preg_replace('|/+|','/', $file); // remove any duplicate slash
-       $plugin_dir = str_replace('\\','/',WP_PLUGIN_DIR); // sanitize for Win32 installs
-       $plugin_dir = preg_replace('|/+|','/', $plugin_dir); // remove any duplicate slash
-       $mu_plugin_dir = str_replace('\\','/',WPMU_PLUGIN_DIR); // sanitize for Win32 installs
-       $mu_plugin_dir = preg_replace('|/+|','/', $mu_plugin_dir); // remove any duplicate slash
+function plugin_basename( $file ) {
+       global $wp_plugin_paths;
+
+       foreach ( $wp_plugin_paths as $dir => $realdir ) {
+               if ( strpos( $file, $realdir ) === 0 ) {
+                       $file = $dir . substr( $file, strlen( $realdir ) );
+               }
+       }
+
+       $file = wp_normalize_path( $file );
+       $plugin_dir = wp_normalize_path( WP_PLUGIN_DIR );
+       $mu_plugin_dir = wp_normalize_path( WPMU_PLUGIN_DIR );
+
        $file = preg_replace('#^' . preg_quote($plugin_dir, '#') . '/|^' . preg_quote($mu_plugin_dir, '#') . '/#','',$file); // get relative path from plugins dir
        $file = trim($file, '/');
        return $file;
 }
 
+/**
+ * Register a plugin's real path.
+ *
+ * This is used in plugin_basename() to resolve symlinked paths.
+ *
+ * @since 3.9.0
+ *
+ * @see plugin_basename()
+ *
+ * @param string $file Known path to the file.
+ * @return bool Whether the path was able to be registered.
+ */
+function wp_register_plugin_realpath( $file ) {
+       global $wp_plugin_paths;
+
+       // Normalize, but store as static to avoid recalculation of a constant value
+       static $wp_plugin_path, $wpmu_plugin_path;
+       if ( ! isset( $wp_plugin_path ) ) {
+               $wp_plugin_path   = wp_normalize_path( WP_PLUGIN_DIR   );
+               $wpmu_plugin_path = wp_normalize_path( WPMU_PLUGIN_DIR );
+       }
+
+       $plugin_path = wp_normalize_path( dirname( $file ) );
+       $plugin_realpath = wp_normalize_path( dirname( realpath( $file ) ) );
+
+       if ( $plugin_path === $wp_plugin_path || $plugin_path === $wpmu_plugin_path ) {
+               return false;
+       }
+
+       if ( $plugin_path !== $plugin_realpath ) {
+               $wp_plugin_paths[ $plugin_path ] = $plugin_realpath;
+       }
+
+       return true;
+}
+
 /**
  * Gets the filesystem directory path (with trailing slash) for the plugin __FILE__ passed in
- * @package WordPress
- * @subpackage Plugin
- * @since 2.8
+ *
+ * @since 2.8.0
  *
  * @param string $file The filename of the plugin (__FILE__)
  * @return string the filesystem path of the directory that contains the plugin
@@ -609,9 +684,8 @@ function plugin_dir_path( $file ) {
 
 /**
  * Gets the URL directory path (with trailing slash) for the plugin __FILE__ passed in
- * @package WordPress
- * @subpackage Plugin
- * @since 2.8
+ *
+ * @since 2.8.0
  *
  * @param string $file The filename of the plugin (__FILE__)
  * @return string the URL path of the directory that contains the plugin
@@ -633,9 +707,7 @@ function plugin_dir_url( $file ) {
  * wp-content/plugins/sample.php the name of this hook will be
  * 'activate_sample.php'.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.0
+ * @since 2.0.0
  *
  * @param string $file The filename of the plugin including the path.
  * @param callback $function the function hooked to the 'activate_PLUGIN' action.
@@ -658,9 +730,7 @@ function register_activation_hook($file, $function) {
  * wp-content/plugins/sample.php the name of this hook will be
  * 'deactivate_sample.php'.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.0
+ * @since 2.0.0
  *
  * @param string $file The filename of the plugin including the path.
  * @param callback $function the function hooked to the 'deactivate_PLUGIN' action.
@@ -690,7 +760,7 @@ function register_deactivation_hook($file, $function) {
  * should always check for the 'WP_UNINSTALL_PLUGIN' constant, before
  * executing.
  *
- * @since 2.7
+ * @since 2.7.0
  *
  * @param string $file
  * @param callback $callback The callback to run when the hook is called. Must be a static method or function.
@@ -720,9 +790,7 @@ function register_uninstall_hook( $file, $callback ) {
  * functions. This function does not check for the existence of the all hook, so
  * it will fail unless the all hook exists prior to this function call.
  *
- * @package WordPress
- * @subpackage Plugin
- * @since 2.5
+ * @since 2.5.0
  * @access private
  *
  * @uses $wp_filter Used to process all of the functions in the 'all' hook
@@ -758,8 +826,6 @@ function _wp_call_all_hook($args) {
  * Functions and static method callbacks are just returned as strings and
  * shouldn't have any speed penalty.
  *
- * @package WordPress
- * @subpackage Plugin
  * @access private
  * @since 2.2.3
  * @link http://trac.wordpress.org/ticket/3875