From 2c8931c55d3cfa2affe9f962c73aeee5d8a025f3 Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Tue, 20 Jun 2006 02:03:24 +0000 Subject: [PATCH] Move plugin API to plugin.php. #2525 git-svn-id: https://develop.svn.wordpress.org/trunk@3893 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-includes/functions.php | 154 ---------------------------------- wp-includes/plugin.php | 168 ++++++++++++++++++++++++++++++++++++++ wp-settings.php | 1 + 3 files changed, 169 insertions(+), 154 deletions(-) create mode 100644 wp-includes/plugin.php diff --git a/wp-includes/functions.php b/wp-includes/functions.php index fc131464f7..4905d42602 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -561,142 +561,6 @@ function is_new_day() { } } -// Filters: these are the core of WP's plugin architecture - -function merge_filters($tag) { - global $wp_filter; - if ( isset($wp_filter['all']) ) { - foreach ($wp_filter['all'] as $priority => $functions) { - if ( isset($wp_filter[$tag][$priority]) ) - $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], $wp_filter[$tag][$priority]); - else - $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], array()); - $wp_filter[$tag][$priority] = array_unique($wp_filter[$tag][$priority]); - } - } - - if ( isset($wp_filter[$tag]) ) - ksort( $wp_filter[$tag] ); -} - -function apply_filters($tag, $string) { - global $wp_filter; - - $args = array_slice(func_get_args(), 2); - - merge_filters($tag); - - if ( !isset($wp_filter[$tag]) ) { - return $string; - } - foreach ($wp_filter[$tag] as $priority => $functions) { - if ( !is_null($functions) ) { - foreach($functions as $function) { - - $all_args = array_merge(array($string), $args); - $function_name = $function['function']; - $accepted_args = $function['accepted_args']; - - if ( $accepted_args == 1 ) - $the_args = array($string); - elseif ( $accepted_args > 1 ) - $the_args = array_slice($all_args, 0, $accepted_args); - elseif ( $accepted_args == 0 ) - $the_args = NULL; - else - $the_args = $all_args; - - $string = call_user_func_array($function_name, $the_args); - } - } - } - return $string; -} - -function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { - global $wp_filter; - - // check that we don't already have the same filter at the same priority - if ( isset($wp_filter[$tag]["$priority"]) ) { - foreach($wp_filter[$tag]["$priority"] as $filter) { - // uncomment if we want to match function AND accepted_args - // if ( $filter == array($function, $accepted_args) ) { - if ( $filter['function'] == $function_to_add ) { - return true; - } - } - } - - // So the format is wp_filter['tag']['array of priorities']['array of ['array (functions, accepted_args)]'] - $wp_filter[$tag]["$priority"][] = array('function'=>$function_to_add, 'accepted_args'=>$accepted_args); - return true; -} - -function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { - global $wp_filter; - - // rebuild the list of filters - if ( isset($wp_filter[$tag]["$priority"]) ) { - $new_function_list = array(); - foreach($wp_filter[$tag]["$priority"] as $filter) { - if ( $filter['function'] != $function_to_remove ) { - $new_function_list[] = $filter; - } - } - $wp_filter[$tag]["$priority"] = $new_function_list; - } - return true; -} - -// The *_action functions are just aliases for the *_filter functions, they take special strings instead of generic content - -function do_action($tag, $arg = '') { - global $wp_filter; - $extra_args = array_slice(func_get_args(), 2); - if ( is_array($arg) ) - $args = array_merge($arg, $extra_args); - else - $args = array_merge(array($arg), $extra_args); - - merge_filters($tag); - - if ( !isset($wp_filter[$tag]) ) { - return; - } - foreach ($wp_filter[$tag] as $priority => $functions) { - if ( !is_null($functions) ) { - foreach($functions as $function) { - - $function_name = $function['function']; - $accepted_args = $function['accepted_args']; - - if ( $accepted_args == 1 ) { - if ( is_array($arg) ) - $the_args = $arg; - else - $the_args = array($arg); - } elseif ( $accepted_args > 1 ) { - $the_args = array_slice($args, 0, $accepted_args); - } elseif ( $accepted_args == 0 ) { - $the_args = NULL; - } else { - $the_args = $args; - } - - $string = call_user_func_array($function_name, $the_args); - } - } - } -} - -function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { - add_filter($tag, $function_to_add, $priority, $accepted_args); -} - -function remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { - remove_filter($tag, $function_to_remove, $priority, $accepted_args); -} - function update_post_cache(&$posts) { global $post_cache; @@ -951,24 +815,6 @@ function nocache_headers() { @ header('Pragma: no-cache'); } -function register_activation_hook($file, $function) { - $file = plugin_basename($file); - - add_action('activate_' . $file, $function); -} - -function register_deactivation_hook($file, $function) { - $file = plugin_basename($file); - - add_action('deactivate_' . $file, $function); -} - -function plugin_basename($file) { - $file = preg_replace('|\\\\+|', '\\\\', $file); - $file = preg_replace('/^.*wp-content[\\\\\/]plugins[\\\\\/]/', '', $file); - return $file; -} - function get_num_queries() { global $wpdb; return $wpdb->num_queries; diff --git a/wp-includes/plugin.php b/wp-includes/plugin.php new file mode 100644 index 0000000000..266c271ab0 --- /dev/null +++ b/wp-includes/plugin.php @@ -0,0 +1,168 @@ +$function_to_add, 'accepted_args'=>$accepted_args); + return true; +} + +function apply_filters($tag, $string) { + global $wp_filter; + + $args = array_slice(func_get_args(), 2); + + merge_filters($tag); + + if ( !isset($wp_filter[$tag]) ) { + return $string; + } + foreach ($wp_filter[$tag] as $priority => $functions) { + if ( !is_null($functions) ) { + foreach($functions as $function) { + + $all_args = array_merge(array($string), $args); + $function_name = $function['function']; + $accepted_args = $function['accepted_args']; + + if ( $accepted_args == 1 ) + $the_args = array($string); + elseif ( $accepted_args > 1 ) + $the_args = array_slice($all_args, 0, $accepted_args); + elseif ( $accepted_args == 0 ) + $the_args = NULL; + else + $the_args = $all_args; + + $string = call_user_func_array($function_name, $the_args); + } + } + } + return $string; +} + + +function merge_filters($tag) { + global $wp_filter; + if ( isset($wp_filter['all']) ) { + foreach ($wp_filter['all'] as $priority => $functions) { + if ( isset($wp_filter[$tag][$priority]) ) + $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], $wp_filter[$tag][$priority]); + else + $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], array()); + $wp_filter[$tag][$priority] = array_unique($wp_filter[$tag][$priority]); + } + } + + if ( isset($wp_filter[$tag]) ) + ksort( $wp_filter[$tag] ); +} + + + +function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { + global $wp_filter; + + // rebuild the list of filters + if ( isset($wp_filter[$tag]["$priority"]) ) { + $new_function_list = array(); + foreach($wp_filter[$tag]["$priority"] as $filter) { + if ( $filter['function'] != $function_to_remove ) { + $new_function_list[] = $filter; + } + } + $wp_filter[$tag]["$priority"] = $new_function_list; + } + return true; +} + +// +// Action functions +// + +function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { + add_filter($tag, $function_to_add, $priority, $accepted_args); +} + +function do_action($tag, $arg = '') { + global $wp_filter; + $extra_args = array_slice(func_get_args(), 2); + if ( is_array($arg) ) + $args = array_merge($arg, $extra_args); + else + $args = array_merge(array($arg), $extra_args); + + merge_filters($tag); + + if ( !isset($wp_filter[$tag]) ) { + return; + } + foreach ($wp_filter[$tag] as $priority => $functions) { + if ( !is_null($functions) ) { + foreach($functions as $function) { + + $function_name = $function['function']; + $accepted_args = $function['accepted_args']; + + if ( $accepted_args == 1 ) { + if ( is_array($arg) ) + $the_args = $arg; + else + $the_args = array($arg); + } elseif ( $accepted_args > 1 ) { + $the_args = array_slice($args, 0, $accepted_args); + } elseif ( $accepted_args == 0 ) { + $the_args = NULL; + } else { + $the_args = $args; + } + + $string = call_user_func_array($function_name, $the_args); + } + } + } +} + +function remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1) { + remove_filter($tag, $function_to_remove, $priority, $accepted_args); +} + +// +// Functions for handling plugins. +// + +function plugin_basename($file) { + $file = preg_replace('|\\\\+|', '\\\\', $file); + $file = preg_replace('/^.*wp-content[\\\\\/]plugins[\\\\\/]/', '', $file); + return $file; +} + +function register_activation_hook($file, $function) { + $file = plugin_basename($file); + + add_action('activate_' . $file, $function); +} + +function register_deactivation_hook($file, $function) { + $file = plugin_basename($file); + + add_action('deactivate_' . $file, $function); +} + +?> diff --git a/wp-settings.php b/wp-settings.php index ea94edee70..7d19a7abaa 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -112,6 +112,7 @@ else wp_cache_init(); require (ABSPATH . WPINC . '/functions.php'); +require (ABSPATH . WPINC . '/plugin.php'); require (ABSPATH . WPINC . '/default-filters.php'); require_once (ABSPATH . WPINC . '/l10n.php');