WordPress.org

Make WordPress Core

Changeset 8367


Ignore:
Timestamp:
07/17/08 22:51:26 (7 years ago)
Author:
ryan
Message:

Plugin metadata localization and get_plugin_dta() optimization from santosj. fixes #5651 #3089

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/plugin.php

    r8266 r8367  
    11<?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 */ 
     33function 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 */ 
     65function 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 */ 
    3113function get_plugin_data( $plugin_file ) { 
    4     $plugin_data = implode( '', file( $plugin_file )); 
     114    $plugin_data = plugin_get_contents( $plugin_file ); 
    5115    preg_match( '|Plugin Name:(.*)$|mi', $plugin_data, $plugin_name ); 
    6116    preg_match( '|Plugin URI:(.*)$|mi', $plugin_data, $plugin_uri ); 
     
    13123    else 
    14124        $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    } 
    15145 
    16146    $description = wptexturize( trim( $description[1] )); 
Note: See TracChangeset for help on using the changeset viewer.