diff --git a/wp-admin/css/plugin-install.css b/wp-admin/css/plugin-install.css index 1bd75c79f..af0bd334f 100644 --- a/wp-admin/css/plugin-install.css +++ b/wp-admin/css/plugin-install.css @@ -1,122 +1,122 @@ -/* NOTE: the following CSS rules(.star*) are taken more or less straight from the bbPress rating plugin. */ -div.star-holder { - position: relative; - height: 19px; - width: 100px; - font-size: 19px; -} -div.star { - height: 100%; - position: absolute; - top: 0px; - left: 0px; - background-color: transparent; - letter-spacing: 1ex; - border: none; -} -div.star.select:hover { background-color: #d00; } -.star1 { width: 20%; } -.star2 { width: 40%; } -.star3 { width: 60%; } -.star4 { width: 80%; } -.star5 { width: 100%; } -.star-average, .star.star-rating { background-color: #fc0; } /* TODO: Colour CSS file */ -.star img, div.star a, div.star a:hover, div.star a:visited { - display: block; - position: absolute; - right: 0px; - border: none; - text-decoration: none; -} -div.star img { - width: 19px; - height: 19px; - border-left: 1px solid #fff; - border-right: 1px solid #fff; -} - -/* Start custom CSS */ -/* TODO: Move remaining colours to Colours CSS */ -/* Header on thickbox */ -#plugin-information-header { - margin: 0; - padding: 0 5px; - font-weight: bold; - position: relative; - border-bottom-width: 1px; - border-bottom-style: solid; - height: 2.5em; -} -#plugin-information ul#sidemenu { - font-weight: normal; - margin: 0 5px; - position: absolute; - left: 0px; - bottom: -1px; -} - -/* Install sidemenu */ - -#plugin-information p.action-button { - width: 100%; - padding-bottom:0; - margin-bottom:0; - margin-top: 10px; -} - -#plugin-information .action-button a { - text-align: center; - font-weight: bold; - text-decoration: none; - display: block; - line-height: 2em; -} - -#plugin-information h2 { - clear: none !important; - margin-right: 200px; -} - -#plugin-information .fyi { - margin-left: 10px; - margin-bottom: 50px; - width: 210px; -} - -#plugin-information .fyi h2 { - font-size: 0.9em; - margin-bottom: 0px; - margin-right: 0px; -} - -#plugin-information .fyi h2.mainheader { - background-color: #cee1ef; /* TODO: Colour CSS file */ - padding: 5px; -} - -#plugin-information .fyi ul { - background-color: #eaf3fa; /* TODO: Colour CSS file */ - padding-top: 10px; - padding-bottom: 10px; - padding-left: 7px; - padding-right: 5px; - margin: 0px; - list-style: none; -} - -#plugin-information .fyi li { - margin-right: 0px; -} - -#plugin-information #section-holder { - padding: 10px; -} - -#plugin-information #section-screenshots li img { - vertical-align: text-top; -} -#plugin-information #section-screenshots li p { - font-style: italic; - padding-left: 20px; - padding-bottom: 2em; +/* NOTE: the following CSS rules(.star*) are taken more or less straight from the bbPress rating plugin. */ +div.star-holder { + position: relative; + height: 19px; + width: 100px; + font-size: 19px; +} +div.star { + height: 100%; + position: absolute; + top: 0px; + left: 0px; + background-color: transparent; + letter-spacing: 1ex; + border: none; +} +div.star.select:hover { background-color: #d00; } +.star1 { width: 20%; } +.star2 { width: 40%; } +.star3 { width: 60%; } +.star4 { width: 80%; } +.star5 { width: 100%; } +.star-average, .star.star-rating { background-color: #fc0; } /* TODO: Colour CSS file */ +.star img, div.star a, div.star a:hover, div.star a:visited { + display: block; + position: absolute; + right: 0px; + border: none; + text-decoration: none; +} +div.star img { + width: 19px; + height: 19px; + border-left: 1px solid #fff; + border-right: 1px solid #fff; +} + +/* Start custom CSS */ +/* TODO: Move remaining colours to Colours CSS */ +/* Header on thickbox */ +#plugin-information-header { + margin: 0; + padding: 0 5px; + font-weight: bold; + position: relative; + border-bottom-width: 1px; + border-bottom-style: solid; + height: 2.5em; +} +#plugin-information ul#sidemenu { + font-weight: normal; + margin: 0 5px; + position: absolute; + left: 0px; + bottom: -1px; +} + +/* Install sidemenu */ + +#plugin-information p.action-button { + width: 100%; + padding-bottom:0; + margin-bottom:0; + margin-top: 10px; +} + +#plugin-information .action-button a { + text-align: center; + font-weight: bold; + text-decoration: none; + display: block; + line-height: 2em; +} + +#plugin-information h2 { + clear: none !important; + margin-right: 200px; +} + +#plugin-information .fyi { + margin-left: 10px; + margin-bottom: 50px; + width: 210px; +} + +#plugin-information .fyi h2 { + font-size: 0.9em; + margin-bottom: 0px; + margin-right: 0px; +} + +#plugin-information .fyi h2.mainheader { + background-color: #cee1ef; /* TODO: Colour CSS file */ + padding: 5px; +} + +#plugin-information .fyi ul { + background-color: #eaf3fa; /* TODO: Colour CSS file */ + padding-top: 10px; + padding-bottom: 10px; + padding-left: 7px; + padding-right: 5px; + margin: 0px; + list-style: none; +} + +#plugin-information .fyi li { + margin-right: 0px; +} + +#plugin-information #section-holder { + padding: 10px; +} + +#plugin-information #section-screenshots li img { + vertical-align: text-top; +} +#plugin-information #section-screenshots li p { + font-style: italic; + padding-left: 20px; + padding-bottom: 2em; } \ No newline at end of file diff --git a/wp-admin/includes/plugin-install.php b/wp-admin/includes/plugin-install.php index d80d89b11..1fddfb9a6 100644 --- a/wp-admin/includes/plugin-install.php +++ b/wp-admin/includes/plugin-install.php @@ -1,532 +1,532 @@ - $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
"; -?> -
-
- - - - - - - - - - - - '; - - 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); - ?> - - - - - - - - - -
', __('No plugins match your request.'), '
-
-
-
<?php _e('5 stars') ?>
-
<?php _e('4 stars') ?>
-
<?php _e('3 stars') ?>
-
<?php _e('2 stars') ?>
-
<?php _e('1 star') ?>
-
-

- - - > - - -<?php bloginfo('name') ?> › <?php echo $title ?> - - - - -> - -'; -} - -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"; - echo "\n"; - 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') ) : - ?> -

- -

- -

-
-
-
<?php _e('5 stars') ?>
-
<?php _e('4 stars') ?>
-
<?php _e('3 stars') ?>
-
<?php _e('2 stars') ?>
-
<?php _e('1 star') ?>
-
- 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

$title

"; - 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); - -} - - + $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
"; +?> +
+
+ + + + + + + + + + + + '; + + 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); + ?> + + + + + + + + + +
', __('No plugins match your request.'), '
+
+
+
<?php _e('5 stars') ?>
+
<?php _e('4 stars') ?>
+
<?php _e('3 stars') ?>
+
<?php _e('2 stars') ?>
+
<?php _e('1 star') ?>
+
+

+ + + > + + +<?php bloginfo('name') ?> › <?php echo $title ?> + + + + +> + +'; +} + +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"; + echo "
    \n"; + foreach ( (array)$api->sections as $section_name => $content ) { + + $title = $section_name; + $title[0] = strtoupper($title[0]); + $title = str_replace('_', ' ', $title); + + $class = ( $section_name == $section ) ? ' class="current"' : ''; + $href = add_query_arg( array('tab' => $tab, 'section' => $section_name) ); + $href = clean_url($href); + $san_title = attribute_escape(sanitize_title_with_dashes($title)); + echo "\t
  • $title
  • \n"; + } + echo "
\n"; + 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) ) : ?> +
  • + +
+

+
+
+
<?php _e('5 stars') ?>
+
<?php _e('4 stars') ?>
+
<?php _e('3 stars') ?>
+
<?php _e('2 stars') ?>
+
<?php _e('1 star') ?>
+
+ 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

$title

"; + 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); + +} + + ?> \ No newline at end of file diff --git a/wp-admin/js/plugin-install.js b/wp-admin/js/plugin-install.js index 5222efa54..f1691d5cf 100644 --- a/wp-admin/js/plugin-install.js +++ b/wp-admin/js/plugin-install.js @@ -1,53 +1,53 @@ -/* Plugin Browser Thickbox related JS*/ -jQuery(function($) { - var thickDims = function() { - var tbWindow = $('#TB_window'); - var width = $(window).width(); - var H = $(window).height(); - var W = ( 720 < width ) ? 720 : width; - - if ( tbWindow.size() ) { - tbWindow.width( W - 50 ).height( H - 45 ); - $('#TB_iframeContent').width( W - 50 ).height( H - 75 ); - tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'}); - if ( ! ( $.browser.msie && $.browser.version.substr(0,1) < 7 ) ) - tbWindow.css({'top':'20px','margin-top':'0'}); - }; - - return $('a.thickbox').each( function() { - var href = $(this).attr('href'); - if ( ! href ) - return; - href = href.replace(/&width=[0-9]+/g, ''); - href = href.replace(/&height=[0-9]+/g, ''); - $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) ); - }); - }; - - thickDims().click( function() { - $('#TB_title').css({'background-color':'#222','color':'#cfcfcf'}); - $('#TB_ajaxWindowTitle').html('' + plugininstallL10n.plugin_information + ' ' + $(this).attr('title') ); - return false; - }); - - $(window).resize( function() { tb_position() } ); -}); - -/* Plugin install related JS*/ -jQuery(function($) { - $('#install-plugins tbody.plugins tr').click( function() { - $(this).find('.action-links a.onclick').click(); - return false; - }); - - $('#plugin-information #sidemenu a').click( function() { - var tab = $(this).attr('name'); - //Flip the tab - $('#plugin-information-header a.current').removeClass('current'); - $(this).addClass('current'); - //Flip the content. - $('#section-holder div').hide(); //Hide 'em all - $('#section-' + tab).show(); - return false; - }); +/* Plugin Browser Thickbox related JS*/ +jQuery(function($) { + var thickDims = function() { + var tbWindow = $('#TB_window'); + var width = $(window).width(); + var H = $(window).height(); + var W = ( 720 < width ) ? 720 : width; + + if ( tbWindow.size() ) { + tbWindow.width( W - 50 ).height( H - 45 ); + $('#TB_iframeContent').width( W - 50 ).height( H - 75 ); + tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'}); + if ( ! ( $.browser.msie && $.browser.version.substr(0,1) < 7 ) ) + tbWindow.css({'top':'20px','margin-top':'0'}); + }; + + return $('a.thickbox').each( function() { + var href = $(this).attr('href'); + if ( ! href ) + return; + href = href.replace(/&width=[0-9]+/g, ''); + href = href.replace(/&height=[0-9]+/g, ''); + $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) ); + }); + }; + + thickDims().click( function() { + $('#TB_title').css({'background-color':'#222','color':'#cfcfcf'}); + $('#TB_ajaxWindowTitle').html('' + plugininstallL10n.plugin_information + ' ' + $(this).attr('title') ); + return false; + }); + + $(window).resize( function() { tb_position() } ); +}); + +/* Plugin install related JS*/ +jQuery(function($) { + $('#install-plugins tbody.plugins tr').click( function() { + $(this).find('.action-links a.onclick').click(); + return false; + }); + + $('#plugin-information #sidemenu a').click( function() { + var tab = $(this).attr('name'); + //Flip the tab + $('#plugin-information-header a.current').removeClass('current'); + $(this).addClass('current'); + //Flip the content. + $('#section-holder div').hide(); //Hide 'em all + $('#section-' + tab).show(); + return false; + }); }); \ No newline at end of file diff --git a/wp-admin/plugin-install.php b/wp-admin/plugin-install.php index 4bbe871cf..1361a140a 100644 --- a/wp-admin/plugin-install.php +++ b/wp-admin/plugin-install.php @@ -1,59 +1,59 @@ - __('Search Plugins'), - 'upload' => __('Upload a Plugin'), - 'featured' => __('Featured Plugins'), - 'popular' => __('Popular Plugins'), - 'new' => __('Newest Plugins'), - 'updated' => __('Recently Updated Plugins') - ); - -$tabs = apply_filters('install_plugins_tabs', $tabs ); - -if( empty($tab) || ( ! isset($tabs[ $tab ]) && ! in_array($tab, array('install', 'plugin-information')) ) ){ - $tab_actions = array_keys($tabs); - $tab = $tab_actions[0]; -} -if( empty($paged) ) - $paged = 1; - -$body_id = $tab; - -do_action('install_plugins_pre_' . $tab); - -include('admin-header.php'); -?> -
-

-
    - $text ) { - $sep = ( end($tabs) != $text ) ? ' | ' : ''; - $class = ( $action == $tab ) ? ' class="current"' : ''; - $href = admin_url('plugin-install.php?tab='. $action); - echo "\t\t
  • $text$sep
  • \n"; -} -?> -
- -
- __('Search Plugins'), + 'upload' => __('Upload a Plugin'), + 'featured' => __('Featured Plugins'), + 'popular' => __('Popular Plugins'), + 'new' => __('Newest Plugins'), + 'updated' => __('Recently Updated Plugins') + ); + +$tabs = apply_filters('install_plugins_tabs', $tabs ); + +if( empty($tab) || ( ! isset($tabs[ $tab ]) && ! in_array($tab, array('install', 'plugin-information')) ) ){ + $tab_actions = array_keys($tabs); + $tab = $tab_actions[0]; +} +if( empty($paged) ) + $paged = 1; + +$body_id = $tab; + +do_action('install_plugins_pre_' . $tab); + +include('admin-header.php'); +?> +
+

+
    + $text ) { + $sep = ( end($tabs) != $text ) ? ' | ' : ''; + $class = ( $action == $tab ) ? ' class="current"' : ''; + $href = admin_url('plugin-install.php?tab='. $action); + echo "\t\t
  • $text$sep
  • \n"; +} +?> +
+ +
+ \ No newline at end of file