| | 105 | /** |
| | 106 | * Parse the plugin readme.txt file to retrieve plugin's metadata. |
| | 107 | * |
| | 108 | * The metadata of the plugin's readme searches for the following in the readme.txt |
| | 109 | * header. All metadata must be on its own line. The below is formatted for printing. |
| | 110 | * |
| | 111 | * <code> |
| | 112 | * Contributors: contributors nicknames, comma delimited |
| | 113 | * Donate link: Link to plugin donate page |
| | 114 | * Tags: Plugin tags, comma delimited |
| | 115 | * Requires at least: Minimum WordPress version required |
| | 116 | * Tested up to: Higher WordPress version the plugin has been tested. |
| | 117 | * Stable tag: Latest stable tag in repository. |
| | 118 | * </code> |
| | 119 | * |
| | 120 | * Readme data returned array cointains the following: |
| | 121 | * - 'Contributors' - An array with all contributors nicknames. |
| | 122 | * - 'Tags' - An array with all plugin tags. |
| | 123 | * - 'DonateURI' - The donations page address. |
| | 124 | * - 'Required' - Minimum required WordPress version. |
| | 125 | * - 'Tested' - Higher WordPress version this plugin has been tested. |
| | 126 | * - 'Stable' - Last stable tag when this was released. |
| | 127 | * |
| | 128 | * The first 8kiB of the file will be pulled in and if the readme data is not |
| | 129 | * within that first 8kiB, then the plugin author should correct their plugin |
| | 130 | * and move the plugin data headers to the top. |
| | 131 | * |
| | 132 | * The readme file is assumed to have permissions to allow for scripts to read |
| | 133 | * the file. This is not checked however and the file is only opened for |
| | 134 | * reading. |
| | 135 | * |
| | 136 | * @param string $plugin_file Path to the plugin file (not the readme file) |
| | 137 | * @return array See above for description. |
| | 138 | */ |
| | 139 | function get_plugin_readme_data( $plugin_file ) { |
| | 140 | |
| | 141 | $file = dirname($plugin_file) . '/readme.txt'; |
| | 142 | |
| | 143 | $fp = fopen($file, 'r'); // Open just for reading. |
| | 144 | $data = fread( $fp, 8192 ); // Pull the first 8kiB of the file in. |
| | 145 | fclose($fp); // Close the file. |
| | 146 | |
| | 147 | preg_match( '|Contributors:(.*)$|mi', $data, $contributors ); |
| | 148 | preg_match( '|Donate link:(.*)$|mi', $data, $uri ); |
| | 149 | preg_match( '|Tags:(.*)|i', $data, $tags ); |
| | 150 | preg_match( '|Requires at least:(.*)$|mi', $data, $required ); |
| | 151 | preg_match( '|Tested up to:(.*)$|mi', $data, $tested ); |
| | 152 | preg_match( '|Stable tag:(.*)$|mi', $data, $stable ); |
| | 153 | |
| | 154 | foreach ( array( 'contributors', 'uri', 'tags', 'required', 'tested', 'stable' ) as $field ) { |
| | 155 | if ( !empty( ${$field} ) ) { |
| | 156 | ${$field} = trim(${$field}[1]); |
| | 157 | } else { |
| | 158 | ${$field} = ''; |
| | 159 | } |
| | 160 | } |
| | 161 | |
| | 162 | $readme_data = array( |
| | 163 | 'Contributors' => array_map('trim', explode(',', $contributors)), |
| | 164 | 'Tags' => array_map('trim', explode(',', $tags)), |
| | 165 | 'DonateURI' => trim($uri), |
| | 166 | 'Requires' => trim($required), |
| | 167 | 'Tested' => trim($tested), |
| | 168 | 'Stable' => trim($stable) ); |
| | 169 | |
| | 170 | return $readme_data; |
| | 171 | } |
| | 172 | |