X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/bf5c68485ef07868ad0a91168ecd0092af7661ae..refs/tags/wordpress-3.4:/wp-admin/includes/plugin.php diff --git a/wp-admin/includes/plugin.php b/wp-admin/includes/plugin.php index be97e8c3..89ebdea8 100644 --- a/wp-admin/includes/plugin.php +++ b/wp-admin/includes/plugin.php @@ -65,8 +65,8 @@ * @since 1.5.0 * * @param string $plugin_file Path to the plugin file - * @param bool $markup If the returned data should have HTML markup applied - * @param bool $translate If the returned data should be translated + * @param bool $markup Optional. If the returned data should have HTML markup applied. Defaults to true. + * @param bool $translate Optional. If the returned data should be translated. Defaults to true. * @return array See above for description. */ function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { @@ -88,68 +88,85 @@ function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { $plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' ); // Site Wide Only is the old header for Network - if ( empty( $plugin_data['Network'] ) && ! empty( $plugin_data['_sitewide'] ) ) { + if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) { _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The %1$s plugin header is deprecated. Use %2$s instead.' ), 'Site Wide Only: true', 'Network: true' ) ); $plugin_data['Network'] = $plugin_data['_sitewide']; } $plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) ); unset( $plugin_data['_sitewide'] ); - //For backward compatibility by default Title is the same as Name. - $plugin_data['Title'] = $plugin_data['Name']; - - if ( $markup || $translate ) + if ( $markup || $translate ) { $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); - else + } else { + $plugin_data['Title'] = $plugin_data['Name']; $plugin_data['AuthorName'] = $plugin_data['Author']; + } return $plugin_data; } -function _get_plugin_data_markup_translate($plugin_file, $plugin_data, $markup = true, $translate = true) { - - //Translate fields - if ( $translate && ! empty($plugin_data['TextDomain']) ) { - if ( ! empty( $plugin_data['DomainPath'] ) ) - load_plugin_textdomain($plugin_data['TextDomain'], false, dirname($plugin_file). $plugin_data['DomainPath']); - else - load_plugin_textdomain($plugin_data['TextDomain'], false, dirname($plugin_file)); +/** + * Sanitizes plugin data, optionally adds markup, optionally translates. + * + * @since 2.7.0 + * @access private + * @see get_plugin_data() + */ +function _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup = true, $translate = true ) { - foreach ( array('Name', 'PluginURI', 'Description', 'Author', 'AuthorURI', 'Version') as $field ) - $plugin_data[ $field ] = translate($plugin_data[ $field ], $plugin_data['TextDomain']); + // Translate fields + if ( $translate ) { + if ( $textdomain = $plugin_data['TextDomain'] ) { + if ( $plugin_data['DomainPath'] ) + load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) . $plugin_data['DomainPath'] ); + else + load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) ); + } elseif ( in_array( basename( $plugin_file ), array( 'hello.php', 'akismet.php' ) ) ) { + $textdomain = 'default'; + } + if ( $textdomain ) { + foreach ( array( 'Name', 'PluginURI', 'Description', 'Author', 'AuthorURI', 'Version' ) as $field ) + $plugin_data[ $field ] = translate( $plugin_data[ $field ], $textdomain ); + } } - $plugins_allowedtags = array( - 'a' => array( 'href' => array(), 'title' => array() ), - 'abbr' => array( 'title' => array() ), - 'acronym' => array( 'title' => array() ), - 'code' => array(), - 'em' => array(), - 'strong' => array(), + // Sanitize fields + $allowed_tags = $allowed_tags_in_links = array( + 'abbr' => array( 'title' => true ), + 'acronym' => array( 'title' => true ), + 'code' => true, + 'em' => true, + 'strong' => true, ); + $allowed_tags['a'] = array( 'href' => true, 'title' => true ); - $plugin_data['AuthorName'] = $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $plugins_allowedtags ); + // Name is marked up inside tags. Don't allow these. + // Author is too, but some plugins have used here (omitting Author URI). + $plugin_data['Name'] = wp_kses( $plugin_data['Name'], $allowed_tags_in_links ); + $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $allowed_tags ); - //Apply Markup + $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $allowed_tags ); + $plugin_data['Version'] = wp_kses( $plugin_data['Version'], $allowed_tags ); + + $plugin_data['PluginURI'] = esc_url( $plugin_data['PluginURI'] ); + $plugin_data['AuthorURI'] = esc_url( $plugin_data['AuthorURI'] ); + + $plugin_data['Title'] = $plugin_data['Name']; + $plugin_data['AuthorName'] = $plugin_data['Author']; + + // Apply markup if ( $markup ) { - if ( ! empty($plugin_data['PluginURI']) && ! empty($plugin_data['Name']) ) + if ( $plugin_data['PluginURI'] && $plugin_data['Name'] ) $plugin_data['Title'] = '' . $plugin_data['Name'] . ''; - else - $plugin_data['Title'] = $plugin_data['Name']; - if ( ! empty($plugin_data['AuthorURI']) && ! empty($plugin_data['Author']) ) + if ( $plugin_data['AuthorURI'] && $plugin_data['Author'] ) $plugin_data['Author'] = '' . $plugin_data['Author'] . ''; $plugin_data['Description'] = wptexturize( $plugin_data['Description'] ); - if ( ! empty($plugin_data['Author']) ) - $plugin_data['Description'] .= ' ' . sprintf( __('By %s'), $plugin_data['Author'] ) . '.'; - } - // Sanitize all displayed data. Author and AuthorName sanitized above. - $plugin_data['Title'] = wp_kses( $plugin_data['Title'], $plugins_allowedtags ); - $plugin_data['Version'] = wp_kses( $plugin_data['Version'], $plugins_allowedtags ); - $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $plugins_allowedtags ); - $plugin_data['Name'] = wp_kses( $plugin_data['Name'], $plugins_allowedtags ); + if ( $plugin_data['Author'] ) + $plugin_data['Description'] .= ' ' . sprintf( __('By %s.'), $plugin_data['Author'] ) . ''; + } return $plugin_data; } @@ -555,9 +572,11 @@ function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silen * @since 2.5.0 * * @param string|array $plugins Single plugin or list of plugins to deactivate. + * @param mixed $network_wide Whether to deactivate the plugin for all sites in the network. + * A value of null (the default) will deactivate plugins for both the site and the network. * @param bool $silent Prevent calling deactivation hooks. Default is false. */ -function deactivate_plugins( $plugins, $silent = false ) { +function deactivate_plugins( $plugins, $silent = false, $network_wide = null ) { if ( is_multisite() ) $network_current = get_site_option( 'active_sitewide_plugins', array() ); $current = get_option( 'active_plugins', array() ); @@ -568,15 +587,21 @@ function deactivate_plugins( $plugins, $silent = false ) { if ( ! is_plugin_active($plugin) ) continue; - $network_wide = is_plugin_active_for_network( $plugin ); + $network_deactivating = false !== $network_wide && is_plugin_active_for_network( $plugin ); if ( ! $silent ) - do_action( 'deactivate_plugin', $plugin, $network_wide ); + do_action( 'deactivate_plugin', $plugin, $network_deactivating ); - if ( $network_wide ) { - $do_network = true; - unset( $network_current[ $plugin ] ); - } else { + if ( false !== $network_wide ) { + if ( is_plugin_active_for_network( $plugin ) ) { + $do_network = true; + unset( $network_current[ $plugin ] ); + } elseif ( $network_wide ) { + continue; + } + } + + if ( true !== $network_wide ) { $key = array_search( $plugin, $current ); if ( false !== $key ) { $do_blog = true; @@ -585,8 +610,8 @@ function deactivate_plugins( $plugins, $silent = false ) { } if ( ! $silent ) { - do_action( 'deactivate_' . $plugin, $network_wide ); - do_action( 'deactivated_plugin', $plugin, $network_wide ); + do_action( 'deactivate_' . $plugin, $network_deactivating ); + do_action( 'deactivated_plugin', $plugin, $network_deactivating ); } } @@ -863,7 +888,7 @@ function uninstall_plugin($plugin) { * * @return string The resulting page's hook_suffix */ -function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = NULL ) { +function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '', $position = null ) { global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages; $menu_slug = plugin_basename( $menu_slug ); @@ -882,7 +907,7 @@ function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $func $new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $hookname, $hookname, $icon_url ); - if ( null === $position ) + if ( null === $position ) $menu[] = $new_menu; else $menu[$position] = $new_menu; @@ -985,10 +1010,10 @@ function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, } // If the parent doesn't already have a submenu, add a link to the parent - // as the first item in the submenu. If the submenu file is the same as the - // parent file someone is trying to link back to the parent manually. In + // as the first item in the submenu. If the submenu file is the same as the + // parent file someone is trying to link back to the parent manually. In // this case, don't automatically add a link back to avoid duplication. - if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug ) { + if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug ) { foreach ( (array)$menu as $parent_menu ) { if ( $parent_menu[2] == $parent_slug && current_user_can( $parent_menu[1] ) ) $submenu[$parent_slug][] = $parent_menu; @@ -1002,7 +1027,7 @@ function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, add_action( $hookname, $function ); $_registered_pages[$hookname] = true; - // backwards-compatibility for plugins using add_management page. See wp-admin/admin.php for redirect from edit.php to tools.php + // backwards-compatibility for plugins using add_management page. See wp-admin/admin.php for redirect from edit.php to tools.php if ( 'tools.php' == $parent_slug ) $_registered_pages[get_plugin_page_hookname( $menu_slug, 'edit.php')] = true; @@ -1246,7 +1271,6 @@ function add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $ return add_submenu_page( 'edit-comments.php', $page_title, $menu_title, $capability, $menu_slug, $function ); } - /** * Remove a top level admin menu * @@ -1589,7 +1613,7 @@ function user_can_access_admin_page() { * * @since 2.7.0 * - * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. + * @param string $option_group A settings group name. Should correspond to a whitelisted option key name. * Default whitelisted option key names include "general," "discussion," and "reading," among others. * @param string $option_name The name of an option to sanitize and save. * @param unknown_type $sanitize_callback A callback function that sanitizes the option's value. @@ -1715,12 +1739,10 @@ function remove_option_whitelist( $del_options, $options = '' ) { * * @since 2.7.0 * - * @param string $option_group A settings group name. This should match the group name used in register_setting(). + * @param string $option_group A settings group name. This should match the group name used in register_setting(). */ function settings_fields($option_group) { echo ""; echo ''; wp_nonce_field("$option_group-options"); } - -?>