Changeset 8367
- Timestamp:
- 07/17/2008 10:51:26 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/plugin.php
r8266 r8367 1 1 <?php 2 2 /** 3 * WordPress Plugin Administration API 4 * 5 * @package WordPress 6 * @subpackage Administration 7 */ 8 9 /** 10 * plugin_get_contents() - Retrieve enough of the plugin file to get plugin data. 11 * 12 * Some users have issues with opening large files and manipulating the 13 * contents for want is usually the first 1kiB or 2kiB. This function 14 * stops pulling in the plugin contents when it has all of the required 15 * plugin data. 16 * 17 * It also adds a little bit of padding for fudging the version info 18 * and to make sure that we grab absolutely everything, in case of a 19 * long description. 20 * 21 * The plugin file is assumed to have permissions to allow for scripts to 22 * read the file. This is not checked however and the file is only opened 23 * for reading. 24 * 25 * @link http://trac.wordpress.org/ticket/5651 Purpose of function. 26 * @since 2.7.0 27 * @uses plugin_has_required_fields() Checks for all of the required plugin 28 * data fields. 29 * 30 * @param string $plugin_file Path to plugin file to open 31 * @return string Plugin file contents retrieved 32 */ 33 function plugin_get_contents($plugin_file) { 34 35 // We don't need to write to the file, so just open for reading. 36 $fp = fopen($plugin_file, 'r'); 37 38 // Store the contents of the plugin file here. 39 $contents = ''; 40 41 // Keep reading the contents of the file until End of File is 42 // reached, or we grabbed all of the required plugin data. 43 while( !feof($fp) && !plugin_has_required_fields($contents) ) 44 $contents .= fread( $fp, 1024 ); 45 46 // Make sure that any padding is adding for long descriptions 47 // and grabbing any optional plugin data, not checked for. 48 if( !feof($fp) ) 49 $contents .= fread( $fp, 512 ); 50 51 // PHP will close file handle, but we are good citizens 52 fclose($fp); 53 return $contents; 54 } 55 56 /** 57 * plugin_has_required_fields() - Checks plugin contents for required plugin data 58 * 59 * @since 2.7.0 60 * @usedby plugin_get_contents() 61 * 62 * @param string $plugin_contents Plugin file contents 63 * @return bool Whether contents has all plugin data. 64 */ 65 function plugin_has_required_fields($plugin_contents) { 66 $hasName = stripos($plugin_contents, 'plugin name:'); 67 $hasPluginURI = stripos($plugin_contents, 'plugin uri:'); 68 $hasDescription = stripos($plugin_contents, 'description:'); 69 $hasAuthor = stripos($plugin_contents, 'author:'); 70 $hasAuthorURI = stripos($plugin_contents, 'author uri:'); 71 72 if( false !== $hasName && false !== $hasPluginURI && false !== $hasDescription && 73 false !== $hasAuthor && false !== $hasAuthorURI) 74 return true; 75 76 return false; 77 } 78 79 /** 80 * get_plugin_data() - Parse the plugin contents to retrieve plugin's metadata 81 * 82 * The metadata of the plugin's data searches for the following in the plugin's 83 * header. 84 * 85 * <code> 86 * /* 87 * Plugin Name: Name of Plugin 88 * Plugin URI: Link to plugin information 89 * Description: Plugin Description 90 * Author: Plugin author's name 91 * Author URI: Link to the author's web site 92 * Version: Must be set in the plugin for WordPress 2.3+ 93 * Text Domain: Optional. Unique identifier, should be same as the one used in 94 * plugin_text_domain() 95 * Domain Path: Optional. Only useful if the translations are located in a folder 96 * above the plugin's base path. For example, if .mo files are located in 97 * the locale folder then Domain Path will be "/locale/" and must have the 98 * first slash. Defaults to the base folder the plugin is located in. 99 * * / # Remove the space to close comment 100 * </code> 101 * 102 * Plugin data returned array contains the following: 103 * 'Name' - Name of the plugin, must be unique. 104 * 'Title' - Title of the plugin and the link to the plugin's web site. 105 * 'Description' - Description of what the plugin does and/or notes 106 * from the author. 107 * 'Author' - The author's name and web site link. 108 * 'Version' - The plugin version number. 109 * 110 * @param string $plugin_file Path to the plugin file 111 * @return array See above for description. 112 */ 3 113 function get_plugin_data( $plugin_file ) { 4 $plugin_data = implode( '', file( $plugin_file ));114 $plugin_data = plugin_get_contents( $plugin_file ); 5 115 preg_match( '|Plugin Name:(.*)$|mi', $plugin_data, $plugin_name ); 6 116 preg_match( '|Plugin URI:(.*)$|mi', $plugin_data, $plugin_uri ); … … 13 123 else 14 124 $version = ''; 125 126 if( preg_match( '|Text Domain:(.*)$|mi', $plugin_data, $text_domain ) ) { 127 if( preg_match( '|Domain Path:(.*)$|mi', $plugin_data, $domain_path ) ) 128 $domain_path = trim( $domain_path[1] ); 129 130 $text_domain = trim( $text_domain[1] ); 131 132 if( !empty( $text_domain ) ) { 133 if( !empty( $domain_path ) ) 134 load_plugin_textdomain($text_domain, dirname($plugin_file). $domain_path); 135 else 136 load_plugin_textdomain($text_domain, dirname($plugin_file)); 137 } 138 139 $description[1] = translate(trim($description[1]), $text_domain); 140 $plugin_name[1] = translate(trim($plugin_name[1]), $text_domain); 141 $plugin_uri[1] = translate(trim($plugin_uri[1]), $text_domain); 142 $author_name[1] = translate(trim($author_name[1]), $text_domain); 143 $author_uri[1] = translate(trim($author_uri[1]), $text_domain); 144 } 15 145 16 146 $description = wptexturize( trim( $description[1] ));
Note: See TracChangeset
for help on using the changeset viewer.