Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 383 lines (338 sloc) 16.292 kB
fff2457 Remove cruft. see #19106.
nacin authored
1 <?php
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
2 /**
3 * WordPress Plugin Install Administration API
4 *
5 * @package WordPress
6 * @subpackage Administration
7 */
8
9 /**
10 * Retrieve plugin installer pages from WordPress Plugins API.
11 *
12 * It is possible for a plugin to override the Plugin API result with three
13 * filters. Assume this is for plugins, which can extend on the Plugin Info to
14 * offer more choices. This is very powerful and must be used with care, when
a8c3f11 s/overridding/overriding/. Props trepmal, see #18560.
duck_ authored
15 * overriding the filters.
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
16 *
17 * The first filter, 'plugins_api_args', is for the args and gives the action as
18 * the second parameter. The hook for 'plugins_api_args' must ensure that an
19 * object is returned.
20 *
21 * The second filter, 'plugins_api', is the result that would be returned.
22 *
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
23 * @since 2.7.0
24 *
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
25 * @param string $action
26 * @param array|object $args Optional. Arguments to serialize for the Plugin Info API.
72ffe9d Add extra error checking to the Plugin Browser and Plugin API functio…
dd32 authored
27 * @return object plugins_api response object on success, WP_Error on failure.
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
28 */
29 function plugins_api($action, $args = null) {
e61e261 Set eol-style. see #6015
ryan authored
30
8760e7d Coding standards, space after if
ryan authored
31 if ( is_array($args) )
e61e261 Set eol-style. see #6015
ryan authored
32 $args = (object)$args;
33
afa3f9b Show 24 results per page for plugin searches. fixes #8290
ryan authored
34 if ( !isset($args->per_page) )
35 $args->per_page = 24;
36
699387f Remove trailing whitespace
ryan authored
37 // Allows a plugin to override the WordPress.org API entirely.
c1d1590 Fix typos in documentation (wp-admin/). See #18560.
duck_ authored
38 // Use the filter 'plugins_api_result' to merely add results.
72ffe9d Add extra error checking to the Plugin Browser and Plugin API functio…
dd32 authored
39 // Please ensure that a object is returned from the following filters.
40 $args = apply_filters('plugins_api_args', $args, $action);
41 $res = apply_filters('plugins_api', false, $action, $args);
35b18e5 Trailing whitespace cleanup
ryan authored
42
72ffe9d Add extra error checking to the Plugin Browser and Plugin API functio…
dd32 authored
43 if ( false === $res ) {
44 $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
45 if ( is_wp_error($request) ) {
1a52499 Friendlier strings with links to the support forums when experiencing…
ryan authored
46 $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() );
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
47 } else {
3686bc4 use maybe_unserialize() in update and API checks, Tighten up the chec…
dd32 authored
48 $res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
49 if ( ! is_object( $res ) && ! is_array( $res ) )
1a52499 Friendlier strings with links to the support forums when experiencing…
ryan authored
50 $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) );
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
51 }
c075262 Plugin install fixes. Props Denis-de-Bernardy. see #10192
ryan authored
52 } elseif ( !is_wp_error($res) ) {
53 $res->external = true;
e61e261 Set eol-style. see #6015
ryan authored
54 }
55
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
56 return apply_filters('plugins_api_result', $res, $action, $args);
e61e261 Set eol-style. see #6015
ryan authored
57 }
58
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
59 /**
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
60 * Retrieve popular WordPress plugin tags.
61 *
62 * @since 2.7.0
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
63 *
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
64 * @param array $args
65 * @return array
e3f6b2b phpdoc for wp-admin/includes from jacobsantos. see #7527
ryan authored
66 */
e61e261 Set eol-style. see #6015
ryan authored
67 function install_popular_tags( $args = array() ) {
a7cabc4 Move plugin installer install_popular_tags() to use a site transient …
dd32 authored
68 $key = md5(serialize($args));
69 if ( false !== ($tags = get_site_transient('poptags_' . $key) ) )
70 return $tags;
e61e261 Set eol-style. see #6015
ryan authored
71
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
72 $tags = plugins_api('hot_tags', $args);
e61e261 Set eol-style. see #6015
ryan authored
73
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
74 if ( is_wp_error($tags) )
75 return $tags;
76
a7cabc4 Move plugin installer install_popular_tags() to use a site transient …
dd32 authored
77 set_site_transient('poptags_' . $key, $tags, 10800); // 3 * 60 * 60 = 10800
e61e261 Set eol-style. see #6015
ryan authored
78
79 return $tags;
80 }
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
81
01ee36d Plugin install from DD32. see #6015
ryan authored
82 function install_dashboard() {
e61e261 Set eol-style. see #6015
ryan authored
83 ?>
3aff9d9 Link tab=upload when referenced on 'Install Plugins.' fixes #18290.
nacin authored
84 <p><?php printf( __( 'Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href="http://wordpress.org/extend/plugins/">WordPress Plugin Directory</a> or upload a plugin in .zip format via <a href="%s">this page</a>.' ), self_admin_url( 'plugin-install.php?tab=upload' ) ); ?></p>
35b18e5 Trailing whitespace cleanup
ryan authored
85
e61e261 Set eol-style. see #6015
ryan authored
86 <h4><?php _e('Search') ?></h4>
d17afd1 Reduce clutter and repetive functionality from the initial landing pa…
nacin authored
87 <?php install_search_form( false ); ?>
e89192b Strip trailing whitespace
ryan authored
88
e61e261 Set eol-style. see #6015
ryan authored
89 <h4><?php _e('Popular tags') ?></h4>
fb0c5fb More theme install styling, see #8652
azaozz authored
90 <p class="install-help"><?php _e('You may also browse based on the most popular tags in the Plugin Directory:') ?></p>
e61e261 Set eol-style. see #6015
ryan authored
91 <?php
92
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
93 $api_tags = install_popular_tags();
e61e261 Set eol-style. see #6015
ryan authored
94
fb0c5fb More theme install styling, see #8652
azaozz authored
95 echo '<p class="popular-tags">';
72f72cb Handle HTTP errors on popular tags requests, Handle HTTP Errors on li…
dd32 authored
96 if ( is_wp_error($api_tags) ) {
97 echo $api_tags->get_error_message();
98 } else {
c1d1590 Fix typos in documentation (wp-admin/). See #18560.
duck_ authored
99 //Set up the tags in a way which can be interpreted by wp_generate_tag_cloud()
72f72cb Handle HTTP errors on popular tags requests, Handle HTTP Errors on li…
dd32 authored
100 $tags = array();
101 foreach ( (array)$api_tags as $tag )
102 $tags[ $tag['name'] ] = (object) array(
6b6c258 Add plugin update notifications, plugin install, plugin update to the…
ryan authored
103 'link' => esc_url( self_admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ),
72f72cb Handle HTTP errors on popular tags requests, Handle HTTP Errors on li…
dd32 authored
104 'name' => $tag['name'],
105 'id' => sanitize_title_with_dashes($tag['name']),
106 'count' => $tag['count'] );
c59f813 Use %s instead of %d in plugin install notice strings. props johnbill…
markjaquith authored
107 echo wp_generate_tag_cloud($tags, array( 'single_text' => __('%s plugin'), 'multiple_text' => __('%s plugins') ) );
72f72cb Handle HTTP errors on popular tags requests, Handle HTTP Errors on li…
dd32 authored
108 }
4b729c6 Cleanup plugin compatibility messages. Props DD32. fixes #8868
ryan authored
109 echo '</p><br class="clear" />';
e61e261 Set eol-style. see #6015
ryan authored
110 }
020ce73 Ajaxify list-type screens in the admin. See #14579
scribu authored
111 add_action('install_plugins_dashboard', 'install_dashboard');
e61e261 Set eol-style. see #6015
ryan authored
112
3fc6097 phpdoc corrections from jacobsantos. see #7918
ryan authored
113 /**
114 * Display search form for searching plugins.
115 *
116 * @since 2.7.0
117 */
d17afd1 Reduce clutter and repetive functionality from the initial landing pa…
nacin authored
118 function install_search_form( $type_selector = true ) {
608b265 Default to keyword searches for the plugin and theme installers in ca…
nacin authored
119 $type = isset($_REQUEST['type']) ? stripslashes( $_REQUEST['type'] ) : 'term';
5c9e75b stripslashes() on plugin-install.php stuff
markjaquith authored
120 $term = isset($_REQUEST['s']) ? stripslashes( $_REQUEST['s'] ) : '';
e61e261 Set eol-style. see #6015
ryan authored
121
020ce73 Ajaxify list-type screens in the admin. See #14579
scribu authored
122 ?><form id="search-plugins" method="get" action="">
123 <input type="hidden" name="tab" value="search" />
d17afd1 Reduce clutter and repetive functionality from the initial landing pa…
nacin authored
124 <?php if ( $type_selector ) : ?>
e61e261 Set eol-style. see #6015
ryan authored
125 <select name="type" id="typeselector">
d7d0da4 Use 'Keyword' instead of 'Term' in the search type selector in the pl…
nacin authored
126 <option value="term"<?php selected('term', $type) ?>><?php _e('Keyword'); ?></option>
193fabc Add missing "echo" in plugin installer, props Viper007Bond, fixes #9746
azaozz authored
127 <option value="author"<?php selected('author', $type) ?>><?php _e('Author'); ?></option>
c6d21e7 Introduce _ex(), a hybrid between _e() and _x() -- translate with con…
nacin authored
128 <option value="tag"<?php selected('tag', $type) ?>><?php _ex('Tag', 'Plugin Installer'); ?></option>
e61e261 Set eol-style. see #6015
ryan authored
129 </select>
d17afd1 Reduce clutter and repetive functionality from the initial landing pa…
nacin authored
130 <?php endif; ?>
06bc3bf Autofocus the search box on the Theme and Plugin installation pages. …
markjaquith authored
131 <input type="search" name="s" value="<?php echo esc_attr($term) ?>" autofocus="autofocus" />
bdf8e8f Use a semantic class name for text targeted to screen readers. props …
markjaquith authored
132 <label class="screen-reader-text" for="plugin-search-input"><?php _e('Search Plugins'); ?></label>
fc6e89d Expand submit_button() capabilities. Replace all (or almost all) manu…
markjaquith authored
133 <?php submit_button( __( 'Search Plugins' ), 'button', 'plugin-search-input', false ); ?>
e61e261 Set eol-style. see #6015
ryan authored
134 </form><?php
135 }
136
05e7b08 Split add new plugin dashboard into search and upload.
ryan authored
137 /**
138 * Upload from zip
139 * @since 2.8.0
a61bc0e Trailing whitespace cleanup
ryan authored
140 *
05e7b08 Split add new plugin dashboard into search and upload.
ryan authored
141 * @param string $page
142 */
143 function install_plugins_upload( $page = 1 ) {
144 ?>
145 <h4><?php _e('Install a plugin in .zip format') ?></h4>
9485983 i18n fixes. Props nbachiyski. fixes #11954
ryan authored
146 <p class="install-help"><?php _e('If you have a plugin in a .zip format, you may install it by uploading it here.') ?></p>
6b6c258 Add plugin update notifications, plugin install, plugin update to the…
ryan authored
147 <form method="post" enctype="multipart/form-data" action="<?php echo self_admin_url('update.php?action=upload-plugin') ?>">
05e7b08 Split add new plugin dashboard into search and upload.
ryan authored
148 <?php wp_nonce_field( 'plugin-upload') ?>
bdf8e8f Use a semantic class name for text targeted to screen readers. props …
markjaquith authored
149 <label class="screen-reader-text" for="pluginzip"><?php _e('Plugin zip file'); ?></label>
ef0b1dc Add labels to text inputs. see #9445
ryan authored
150 <input type="file" id="pluginzip" name="pluginzip" />
6c2ffdd _a(), _ea(), _xa(), attr() are now esc_attr__(), esc_attr_e(), esc_at…
markjaquith authored
151 <input type="submit" class="button" value="<?php esc_attr_e('Install Now') ?>" />
05e7b08 Split add new plugin dashboard into search and upload.
ryan authored
152 </form>
153 <?php
154 }
020ce73 Ajaxify list-type screens in the admin. See #14579
scribu authored
155 add_action('install_plugins_upload', 'install_plugins_upload', 10, 1);
e61e261 Set eol-style. see #6015
ryan authored
156
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
157 /**
158 * Display plugin content based on plugin list.
159 *
160 * @since 2.7.0
161 */
020ce73 Ajaxify list-type screens in the admin. See #14579
scribu authored
162 function display_plugins_table() {
cae0e96 replace $table with $wp_list_table. See #14651
scribu authored
163 global $wp_list_table;
e61e261 Set eol-style. see #6015
ryan authored
164
cae0e96 replace $table with $wp_list_table. See #14651
scribu authored
165 $wp_list_table->display();
e61e261 Set eol-style. see #6015
ryan authored
166 }
020ce73 Ajaxify list-type screens in the admin. See #14579
scribu authored
167 add_action('install_plugins_search', 'display_plugins_table');
168 add_action('install_plugins_featured', 'display_plugins_table');
169 add_action('install_plugins_popular', 'display_plugins_table');
170 add_action('install_plugins_new', 'display_plugins_table');
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
171
172 /**
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
173 * Determine the status we can perform on a plugin.
174 *
175 * @since 3.0.0
176 */
177 function install_plugin_install_status($api, $loop = false) {
c1d1590 Fix typos in documentation (wp-admin/). See #18560.
duck_ authored
178 // this function is called recursively, $loop prevents further loops.
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
179 if ( is_array($api) )
180 $api = (object) $api;
181
182 //Default to a "new" plugin
183 $status = 'install';
184 $url = false;
185
186 //Check to see if this plugin is known to be installed, and has an update awaiting it.
187 $update_plugins = get_site_transient('update_plugins');
dad0572 Check for the response property in tue update_plugins transient objec…
nacin authored
188 if ( isset( $update_plugins->response ) ) {
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
189 foreach ( (array)$update_plugins->response as $file => $plugin ) {
190 if ( $plugin->slug === $api->slug ) {
191 $status = 'update_available';
192 $update_file = $file;
193 $version = $plugin->new_version;
194 if ( current_user_can('update_plugins') )
6b6c258 Add plugin update notifications, plugin install, plugin update to the…
ryan authored
195 $url = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=' . $update_file), 'upgrade-plugin_' . $update_file);
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
196 break;
197 }
198 }
199 }
200
201 if ( 'install' == $status ) {
07ff8b2 Use one space, not two, after trailing punctuation. fixes #19537
ryan authored
202 if ( is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) {
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
203 $installed_plugin = get_plugins('/' . $api->slug);
204 if ( empty($installed_plugin) ) {
205 if ( current_user_can('install_plugins') )
6b6c258 Add plugin update notifications, plugin install, plugin update to the…
ryan authored
206 $url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug);
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
207 } else {
208 $key = array_shift( $key = array_keys($installed_plugin) ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers
209 if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '=') ){
210 $status = 'latest_installed';
211 } elseif ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '<') ) {
212 $status = 'newer_installed';
213 $version = $installed_plugin[ $key ]['Version'];
214 } else {
215 //If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh
216 if ( ! $loop ) {
217 delete_site_transient('update_plugins');
218 wp_update_plugins();
219 return install_plugin_install_status($api, true);
220 }
221 }
222 }
223 } else {
224 // "install" & no directory with that slug
225 if ( current_user_can('install_plugins') )
6b6c258 Add plugin update notifications, plugin install, plugin update to the…
ryan authored
226 $url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug);
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
227 }
228 }
de6abc0 Add Importer support to Plugin Install workflow, Offers to Activate P…
dd32 authored
229 if ( isset($_GET['from']) )
230 $url .= '&amp;from=' . urlencode(stripslashes($_GET['from']));
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
231
232 return compact('status', 'url', 'version');
233 }
234
235 /**
9ce46d3 phpdoc for wp-admin. Props jacobsantos. see #7527
ryan authored
236 * Display plugin information in dialog box form.
237 *
238 * @since 2.7.0
239 */
e61e261 Set eol-style. see #6015
ryan authored
240 function install_plugin_information() {
241 global $tab;
35b18e5 Trailing whitespace cleanup
ryan authored
242
5c9e75b stripslashes() on plugin-install.php stuff
markjaquith authored
243 $api = plugins_api('plugin_information', array('slug' => stripslashes( $_REQUEST['plugin'] ) ));
e61e261 Set eol-style. see #6015
ryan authored
244
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
245 if ( is_wp_error($api) )
246 wp_die($api);
247
f60ca6d Better indentation. Props SergeyBiryukov. See #16580
dd32 authored
248 $plugins_allowedtags = array(
249 'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ),
250 'abbr' => array( 'title' => array() ), 'acronym' => array( 'title' => array() ),
251 'code' => array(), 'pre' => array(), 'em' => array(), 'strong' => array(),
252 'div' => array(), 'p' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(),
253 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(),
254 'img' => array( 'src' => array(), 'class' => array(), 'alt' => array() )
255 );
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
256
257 $plugins_section_titles = array(
f60ca6d Better indentation. Props SergeyBiryukov. See #16580
dd32 authored
258 'description' => _x('Description', 'Plugin installer section title'),
259 'installation' => _x('Installation', 'Plugin installer section title'),
260 'faq' => _x('FAQ', 'Plugin installer section title'),
261 'screenshots' => _x('Screenshots', 'Plugin installer section title'),
262 'changelog' => _x('Changelog', 'Plugin installer section title'),
263 'other_notes' => _x('Other Notes', 'Plugin installer section title')
264 );
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
265
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
266 //Sanitize HTML
267 foreach ( (array)$api->sections as $section_name => $content )
268 $api->sections[$section_name] = wp_kses($content, $plugins_allowedtags);
fdedc8a Check if property exists on plugins_api() returned object in install_…
nacin authored
269 foreach ( array( 'version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug' ) as $key ) {
270 if ( isset( $api->$key ) )
271 $api->$key = wp_kses( $api->$key, $plugins_allowedtags );
272 }
d7fccb6 Sanitation and error handling for plugin install. Props DD32. see #6015
ryan authored
273
5c9e75b stripslashes() on plugin-install.php stuff
markjaquith authored
274 $section = isset($_REQUEST['section']) ? stripslashes( $_REQUEST['section'] ) : 'description'; //Default to the Description tab, Do not translate, API returns English.
8760e7d Coding standards, space after if
ryan authored
275 if ( empty($section) || ! isset($api->sections[ $section ]) )
e61e261 Set eol-style. see #6015
ryan authored
276 $section = array_shift( $section_titles = array_keys((array)$api->sections) );
35b18e5 Trailing whitespace cleanup
ryan authored
277
e89192b Strip trailing whitespace
ryan authored
278 iframe_header( __('Plugin Install') );
e61e261 Set eol-style. see #6015
ryan authored
279 echo "<div id='$tab-header'>\n";
280 echo "<ul id='sidemenu'>\n";
281 foreach ( (array)$api->sections as $section_name => $content ) {
35b18e5 Trailing whitespace cleanup
ryan authored
282
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
283 if ( isset( $plugins_section_titles[ $section_name ] ) )
284 $title = $plugins_section_titles[ $section_name ];
285 else
286 $title = ucwords( str_replace( '_', ' ', $section_name ) );
e61e261 Set eol-style. see #6015
ryan authored
287
288 $class = ( $section_name == $section ) ? ' class="current"' : '';
289 $href = add_query_arg( array('tab' => $tab, 'section' => $section_name) );
3ebf837 Deprecate sanitize_url() and clean_url() in favor of esc_url_raw() an…
markjaquith authored
290 $href = esc_url($href);
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
291 $san_section = esc_attr( $section_name );
292 echo "\t<li><a name='$san_section' href='$href' $class>$title</a></li>\n";
e61e261 Set eol-style. see #6015
ryan authored
293 }
294 echo "</ul>\n";
295 echo "</div>\n";
296 ?>
297 <div class="alignright fyi">
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
298 <?php if ( ! empty($api->download_link) && ( current_user_can('install_plugins') || current_user_can('update_plugins') ) ) : ?>
e61e261 Set eol-style. see #6015
ryan authored
299 <p class="action-button">
300 <?php
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
301 $status = install_plugin_install_status($api);
302 switch ( $status['status'] ) {
303 case 'install':
c2aba0b Correct typos in r13920. Use correct variable name. See #11050
dd32 authored
304 if ( $status['url'] )
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
305 echo '<a href="' . $status['url'] . '" target="_parent">' . __('Install Now') . '</a>';
e61e261 Set eol-style. see #6015
ryan authored
306 break;
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
307 case 'update_available':
c2aba0b Correct typos in r13920. Use correct variable name. See #11050
dd32 authored
308 if ( $status['url'] )
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
309 echo '<a href="' . $status['url'] . '" target="_parent">' . __('Install Update Now') .'</a>';
e61e261 Set eol-style. see #6015
ryan authored
310 break;
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
311 case 'newer_installed':
312 echo '<a>' . sprintf(__('Newer Version (%s) Installed'), $status['version']) . '</a>';
f5d551e Improve latest version detection in plugin updater. Props DD32. fixes…
ryan authored
313 break;
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
314 case 'latest_installed':
315 echo '<a>' . __('Latest Version Installed') . '</a>';
e61e261 Set eol-style. see #6015
ryan authored
316 break;
f7b83bd Rename Install to More Information, Add an Install Now action link to…
dd32 authored
317 }
318 ?>
e61e261 Set eol-style. see #6015
ryan authored
319 </p>
320 <?php endif; ?>
9485983 i18n fixes. Props nbachiyski. fixes #11954
ryan authored
321 <h2 class="mainheader"><?php /* translators: For Your Information */ _e('FYI') ?></h2>
e61e261 Set eol-style. see #6015
ryan authored
322 <ul>
323 <?php if ( ! empty($api->version) ) : ?>
324 <li><strong><?php _e('Version:') ?></strong> <?php echo $api->version ?></li>
325 <?php endif; if ( ! empty($api->author) ) : ?>
326 <li><strong><?php _e('Author:') ?></strong> <?php echo links_add_target($api->author, '_blank') ?></li>
327 <?php endif; if ( ! empty($api->last_updated) ) : ?>
35b18e5 Trailing whitespace cleanup
ryan authored
328 <li><strong><?php _e('Last Updated:') ?></strong> <span title="<?php echo $api->last_updated ?>"><?php
e61e261 Set eol-style. see #6015
ryan authored
329 printf( __('%s ago'), human_time_diff(strtotime($api->last_updated)) ) ?></span></li>
330 <?php endif; if ( ! empty($api->requires) ) : ?>
331 <li><strong><?php _e('Requires WordPress Version:') ?></strong> <?php printf(__('%s or higher'), $api->requires) ?></li>
332 <?php endif; if ( ! empty($api->tested) ) : ?>
333 <li><strong><?php _e('Compatible up to:') ?></strong> <?php echo $api->tested ?></li>
334 <?php endif; if ( ! empty($api->downloaded) ) : ?>
fc660a4 Use _n(). Props nbachiyski. fixes #9111
ryan authored
335 <li><strong><?php _e('Downloaded:') ?></strong> <?php printf(_n('%s time', '%s times', $api->downloaded), number_format_i18n($api->downloaded)) ?></li>
c075262 Plugin install fixes. Props Denis-de-Bernardy. see #10192
ryan authored
336 <?php endif; if ( ! empty($api->slug) && empty($api->external) ) : ?>
e61e261 Set eol-style. see #6015
ryan authored
337 <li><a target="_blank" href="http://wordpress.org/extend/plugins/<?php echo $api->slug ?>/"><?php _e('WordPress.org Plugin Page &#187;') ?></a></li>
338 <?php endif; if ( ! empty($api->homepage) ) : ?>
340e933 Remove extraneous spaces. Props kenan3008, dimadin. fixes #19501 #19433
ryan authored
339 <li><a target="_blank" href="<?php echo $api->homepage ?>"><?php _e('Plugin Homepage &#187;') ?></a></li>
e61e261 Set eol-style. see #6015
ryan authored
340 <?php endif; ?>
341 </ul>
c075262 Plugin install fixes. Props Denis-de-Bernardy. see #10192
ryan authored
342 <?php if ( ! empty($api->rating) ) : ?>
e61e261 Set eol-style. see #6015
ryan authored
343 <h2><?php _e('Average Rating') ?></h2>
fc660a4 Use _n(). Props nbachiyski. fixes #9111
ryan authored
344 <div class="star-holder" title="<?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings)); ?>">
886ee99 Replace commas with periods when converting ratings float values to s…
nacin authored
345 <div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $api->rating ) ); ?>px"></div>
e61e261 Set eol-style. see #6015
ryan authored
346 </div>
fc660a4 Use _n(). Props nbachiyski. fixes #9111
ryan authored
347 <small><?php printf(_n('(based on %s rating)', '(based on %s ratings)', $api->num_ratings), number_format_i18n($api->num_ratings)); ?></small>
c075262 Plugin install fixes. Props Denis-de-Bernardy. see #10192
ryan authored
348 <?php endif; ?>
e61e261 Set eol-style. see #6015
ryan authored
349 </div>
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
350 <div id="section-holder" class="wrap">
01ee36d Plugin install from DD32. see #6015
ryan authored
351 <?php
4b729c6 Cleanup plugin compatibility messages. Props DD32. fixes #8868
ryan authored
352 if ( !empty($api->tested) && version_compare( substr($GLOBALS['wp_version'], 0, strlen($api->tested)), $api->tested, '>') )
01ee36d Plugin install from DD32. see #6015
ryan authored
353 echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This plugin has <strong>not been tested</strong> with your current version of WordPress.') . '</p></div>';
4b729c6 Cleanup plugin compatibility messages. Props DD32. fixes #8868
ryan authored
354
355 else if ( !empty($api->requires) && version_compare( substr($GLOBALS['wp_version'], 0, strlen($api->requires)), $api->requires, '<') )
356 echo '<div class="updated"><p>' . __('<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress.') . '</p></div>';
357
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
358 foreach ( (array)$api->sections as $section_name => $content ) {
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
359
360 if ( isset( $plugins_section_titles[ $section_name ] ) )
361 $title = $plugins_section_titles[ $section_name ];
362 else
363 $title = ucwords( str_replace( '_', ' ', $section_name ) );
35b18e5 Trailing whitespace cleanup
ryan authored
364
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
365 $content = links_add_base_url($content, 'http://wordpress.org/extend/plugins/' . $api->slug . '/');
366 $content = links_add_target($content, '_blank');
35b18e5 Trailing whitespace cleanup
ryan authored
367
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
368 $san_section = esc_attr( $section_name );
35b18e5 Trailing whitespace cleanup
ryan authored
369
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
370 $display = ( $section_name == $section ) ? 'block' : 'none';
35b18e5 Trailing whitespace cleanup
ryan authored
371
3928e40 s/Faq/FAQ/ for Plugin Installer tabs, Gains Translation support for T…
dd32 authored
372 echo "\t<div id='section-{$san_section}' class='section' style='display: {$display};'>\n";
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
373 echo "\t\t<h2 class='long-header'>$title</h2>";
374 echo $content;
375 echo "\t</div>\n";
376 }
e61e261 Set eol-style. see #6015
ryan authored
377 echo "</div>\n";
5e87cb8 Plugin install fixes from DD32. see #6015
ryan authored
378
01ee36d Plugin install from DD32. see #6015
ryan authored
379 iframe_footer();
e61e261 Set eol-style. see #6015
ryan authored
380 exit;
381 }
020ce73 Ajaxify list-type screens in the admin. See #14579
scribu authored
382 add_action('install_plugins_pre_plugin-information', 'install_plugin_information');
Something went wrong with that request. Please try again.