$action, 'request' => serialize($args))) );//Note: http_build_query() can be removed once WP_HTTP accepts unencoded data.
$res = unserialize($request['body']);
if ( ! $res )
wp_die($request['body']);
}
return apply_filters('plugins_api_result', $res);
}
function install_popular_tags( $args = array() ) {
if ( ! $cache = get_option('wporg_popular_tags') )
add_option('wporg_popular_tags', array(), '', 'no');///No autoload.
if ( $cache && $cache->timeout + 3 * 60 * 60 > time() )
return $cache->cached;
$tags = plugins_api('hot_tags');
update_option('wporg_popular_tags', (object) array('timeout' => time(), 'cached' => $tags));
return $tags;
}
add_action('install_plugins_search', 'install_search', 10, 1);
function install_search($page) {
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
$term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
if( ! empty($term) ){
$args = array();
switch( $type ){
case 'tag':
$args['tag'] = sanitize_title_with_dashes($term);
break;
case 'term':
$args['search'] = $term;
break;
case 'author':
$args['author'] = $term;
break;
}
$args['page'] = $page;
$api = plugins_api('query_plugins', $args);
add_action('install_plugins_table_header', 'install_search_form');
display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
return;
}
?>
WordPress Plugin Directory via this page.') ?>
Term: Searches plugins names and descriptions for the specified term') ?>
Tag: Searches for plugins tagged as such') ?>
Author: Searches for plugins created by the Author, or which the Author contributed to.') ?>
clean_url( admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ),
'name' => $tag['name'],
'count' => $tag['count'] );
echo wp_generate_tag_cloud($tags, array( 'single_text' => __('%d plugin'), 'multiple_text' => __('%d plugins') ) );
}
function install_search_form(){
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
$term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
?> 'featured', 'page' => $page);
$api = plugins_api('query_plugins', $args);
display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
}
add_action('install_plugins_popular', 'install_popular', 10, 1);
function install_popular($page){
$args = array('browse' => 'popular', 'page' => $page);
$api = plugins_api('query_plugins', $args);
display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
}
add_action('install_plugins_new', 'install_new', 10, 1);
function install_new($page){
$args = array('browse' => 'new', 'page' => $page);
$api = plugins_api('query_plugins', $args);
display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
}
add_action('install_plugins_updated', 'install_updated', 10, 1);
function install_updated($page){
$args = array('browse' => 'updated', 'page' => $page);
$api = plugins_api('query_plugins', $args);
display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
}
add_action('install_plugins_upload', 'install_upload_custom', 10, 1);
function install_upload_custom($page){
//$args = array('browse' => 'updated', 'page' => $page);
//$api = plugins_api('query_plugins', $args);
//display_plugins_table($api->plugins, $api->info['page'], $api->info['pages']);
echo 'Not Implemented
Will utilise SwfUpload(if available) & unzip .zip plugin packages
';
}
function display_plugins_table($plugins, $page = 1, $totalpages = 1){
global $tab;
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : '';
$term = isset($_REQUEST['s']) ? $_REQUEST['s'] : '';
$plugins_allowedtags = array('a' => array('href' => array(),'title' => array(), 'target' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
?>
add_query_arg('paged', '%#%', $url),
'format' => '',
'total' => $totalpages,
'current' => $page
));
if ( $page_links )
echo "\t\t
$page_links
";
?>
|
|
|
|
|
', __('No plugins match your request.'), ' | ';
foreach( (array) $plugins as $plugin ){
if ( is_object($plugin) )
$plugin = (array) $plugin;
$title = wp_kses($plugin['name'], $plugins_allowedtags);
$description = wp_kses($plugin['description'], $plugins_allowedtags);
$version = wp_kses($plugin['version'], $plugins_allowedtags);
$name = strip_tags($title . ' ' . $version);
$author = $plugin['author'];
if( ! empty($plugin['author']) )
$author = ' ' . sprintf( __('By %s'), $author ) . '.';
$author = wp_kses($author, $plugins_allowedtags);
if( isset($plugin['homepage']) )
$title = '' . $title . '';
$action_links = array();
$action_links[] = '' . __('Install') . '';
$action_links = apply_filters('plugin_install_action_links', $action_links, $plugin);
?>
|
|
|
|
|
>
›
>
';
}
add_action('install_plugins_pre_plugin-information', 'install_plugin_information');
function install_plugin_information() {
global $tab;
$api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin']));
$section = isset($_REQUEST['section']) ? $_REQUEST['section'] : 'description'; //Default to the Description tab, Do not translate, API returns English.
if( empty($section) || ! isset($api->sections[ $section ]) )
$section = array_shift( $section_titles = array_keys((array)$api->sections) );
install_iframe_header();
echo "\n";
?>
download_link) ) : ?>
slug ) ) { //TODO: Make more.. searchable?
$type = 'latest_installed';
$update_plugins = get_option('update_plugins');
foreach ( (array)$update_plugins->response as $file => $plugin ) {
if ( $plugin->slug === $api->slug ) {
$type = 'update_available';
$update_file = $file;
break;
}
}
}
switch ( $type ) :
default:
case 'install':
if ( current_user_can('install_plugins') ) :
?>
version) ) : ?>
- version ?>
author) ) : ?>
- author, '_blank') ?>
last_updated) ) : ?>
- last_updated)) ) ?>
requires) ) : ?>
- requires) ?>
tested) ) : ?>
- tested ?>
downloaded) ) : ?>
- downloaded)) ?>
slug) ) : ?>
homepage) ) : ?>
num_ratings) ?>
\n";
foreach ( (array)$api->sections as $section_name => $content ) {
$title = $section_name;
$title[0] = strtoupper($title[0]);
$title = str_replace('_', ' ', $title);
$content = links_add_base_url($content, 'http://wordpress.org/extend/plugins/' . $api->slug . '/');
$content = links_add_target($content, '_blank');
$san_title = attribute_escape(sanitize_title_with_dashes($title));
$display = ( $section_name == $section ) ? 'block' : 'none';
echo "\t\n";
echo "\t\t";
echo $content;
echo "\t
\n";
}
echo "\n";
//var_dump($api);
exit;
}
add_action('install_plugins_pre_install', 'install_plugin');
function install_plugin() {
check_admin_referer('install-plugin_' . $_REQUEST['plugin']);
install_iframe_header();
$api = plugins_api('plugin_information', array('slug' => $_REQUEST['plugin'], 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth.
echo '';
echo '
', sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ), '
';
do_plugin_install($api->download_link);
echo '';
exit;
}
function do_plugin_install($download_url = '') {
global $wp_filesystem;
if ( empty($download_url) ) {
show_message( __('No plugin Specified') );
return;
}
$plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
$url = 'plugin-install.php?tab=install';
$url = add_query_arg(array('plugin' => $plugin, 'plugin_name' => $_REQUEST['plugin_name'], 'download_url' => $_REQUEST['download_url']), $url);
$url = wp_nonce_url($url, "install-plugin_$plugin");
if ( false === ($credentials = request_filesystem_credentials($url)) )
return;
if ( ! WP_Filesystem($credentials) ) {
request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again
return;
}
if ( $wp_filesystem->errors->get_error_code() ) {
foreach ( $wp_filesystem->errors->get_error_messages() as $message )
show_message($message);
return;
}
$result = wp_install_plugin( $download_url, 'show_message' );
if ( is_wp_error($result) ) {
show_message($result);
show_message( __('Installation Failed') );
} else {
show_message( sprintf(__('Successfully installed the plugin %s %s.'), $plugin_information->name, $plugin_information->version) );
}
}
function wp_install_plugin($package, $feedback = '') {
global $wp_filesystem;
if ( !empty($feedback) )
add_filter('install_feedback', $feedback);
// Is a filesystem accessor setup?
if ( ! $wp_filesystem || ! is_object($wp_filesystem) )
WP_Filesystem();
if ( ! is_object($wp_filesystem) )
return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
if ( $wp_filesystem->errors->get_error_code() )
return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors);
//Get the base plugin folder
$plugins_dir = $wp_filesystem->wp_plugins_dir();
if ( empty($plugins_dir) )
return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.'));
//And the same for the Content directory.
$content_dir = $wp_filesystem->wp_content_dir();
if( empty($content_dir) )
return new WP_Error('fs_no_content_dir', __('Unable to locate WordPress Content directory (wp-content).'));
$plugins_dir = trailingslashit( $plugins_dir );
$content_dir = trailingslashit( $content_dir );
if ( empty($package) )
return new WP_Error('no_package', __('Install package not available.'));
// Download the package
apply_filters('install_feedback', sprintf(__('Downloading plugin package from %s'), $package));
$download_file = download_url($package);
if ( is_wp_error($download_file) )
return new WP_Error('download_failed', __('Download failed.'), $download_file->get_error_message());
$working_dir = $content_dir . 'upgrade/' . basename($package, '.zip');
// Clean up working directory
if ( $wp_filesystem->is_dir($working_dir) )
$wp_filesystem->delete($working_dir, true);
apply_filters('install_feedback', __('Unpacking the plugin package'));
// Unzip package to working directory
$result = unzip_file($download_file, $working_dir);
// Once extracted, delete the package
unlink($download_file);
if ( is_wp_error($result) ) {
$wp_filesystem->delete($working_dir, true);
return $result;
}
//Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin
$filelist = array_keys( $wp_filesystem->dirlist($working_dir) );
if( $wp_filesystem->exists( $plugins_dir . $filelist[0] ) ) {
$wp_filesystem->delete($working_dir, true);
return new WP_Error('install_folder_exists', __('Folder allready exists.'), $filelist[0] );
}
apply_filters('install_feedback', __('Installing the plugin'));
// Copy new version of plugin into place.
$result = copy_dir($working_dir, $plugins_dir);
if ( is_wp_error($result) ) {
$wp_filesystem->delete($working_dir, true);
return $result;
}
// Remove working directory
$wp_filesystem->delete($working_dir, true);
}
?>