WordPress.org

Make WordPress Core

Ticket #6015: 6015.diff

File 6015.diff, 19.4 KB (added by DD32, 10 years ago)

First (relitivly) quick scrape of integration.

  • wp-admin/admin-ajax.php

     
    534534        $post_id = isset($_POST['post_id'])? intval($_POST['post_id']) : 0;
    535535        die(get_sample_permalink_html($post_id, $_POST['new_slug']));
    536536break;
     537case 'plugin-install':
     538        require_once( ABSPATH . WPINC . '/rss.php' );
     539        require_once( ABSPATH . '/wp-admin/includes/plugin-install.php' );
     540        installplugin_display();
     541break;
    537542default :
    538543        do_action( 'wp_ajax_' . $_POST['action'] );
    539544        die('0');
  • wp-admin/includes/plugin-install.php

     
     1<?php
     2
     3add_action('installplugin_sources','get_installplugin_sources');
     4function get_installplugin_sources($sources){
     5        $sources['featured'] = array( 'title' => __('Featured Plugins'), 'callback' => 'installplugin_featured');
     6        $sources['popular'] = array( 'title' => __('Popular Plugins'), 'callback' => 'installplugin_popular');
     7        $sources['updated'] = array( 'title' => __('Recently Updated'), 'callback' => 'installplugin_updated');
     8        $sources['newest'] = array( 'title' => __('Newest Plugins'), 'callback'=> 'installplugin_newest');
     9        $sources['custom'] = array( 'title' => __('Custom Search'), 'callback' => 'installplugin_custom');
     10        return $sources;
     11}
     12
     13function installplugin_display(){
     14        $show_values = apply_filters('installplugin_sources', array());
     15
     16        $show_selected = isset($_REQUEST['show']) ? $_REQUEST['show'] : false;
     17        if( ! isset($show_values[$show_selected]) )
     18                $show_selected = 'featured';
     19
     20        $plugins = @call_user_func($show_values[ $show_selected ]['callback']);
     21
     22        if ( ! is_array($plugins) )
     23                return;
     24
     25        if( empty($plugins) ){
     26                echo '<h3>' . __('No Plugins Found') . '</h3>';
     27        } else {
     28                foreach($plugins as $plugin){
     29                        extract($plugin);
     30                        $ilink = 'update.php?action=install-plugin&plugin=' . urlencode($latestzip);
     31                        $ilink = wp_nonce_url($ilink, 'install-plugin_' . $latestzip);
     32                        echo "<h3>$title</h3>\n";
     33                        echo "<p><span><a href='$link' target='_blank'>" . __('Visit Homepage') .
     34                                        "</a> | <a href='$dlink' target='_blank'>" . __('Download Page') .
     35                                        "</a> | <a href='$ilink'>" . __('Install Now') . "</a></span></p>";
     36                        echo "<p>$description</p>\n";
     37                }
     38        }
     39}
     40
     41function installplugin_featured(){
     42        return array(); //TODO: Need a API for wordpress.org for this :)
     43}
     44function installplugin_popular(){
     45        return installplugin_wporg('http://wordpress.org/extend/plugins/rss/browse/popular/');
     46}
     47function installplugin_newest(){
     48        return installplugin_wporg('http://wordpress.org/extend/plugins/rss/browse/new/');
     49}
     50function installplugin_updated(){
     51        return installplugin_wporg('http://wordpress.org/extend/plugins/rss/browse/updated/');
     52}
     53function installplugin_custom(){
     54        //REQUEST used as GET = Web interface, POST = Ajax
     55        if( isset($_REQUEST['term']) && ! empty($_REQUEST['term']) ){
     56                $term = urldecode($_REQUEST['term']);
     57                echo '<p>' . sprintf(__('Displaying a selection from the %s category'), $term) . '</p>';
     58                return installplugin_wporg('http://wordpress.org/extend/plugins/rss/tags/' . $term);
     59        }
     60
     61        $tags = installplugin_custom_tags();
     62       
     63        echo "<p>" . __('Please select a Category to view plugins from.') . "</p>";
     64       
     65        echo "<div id='tag-list'>";
     66       
     67        foreach($tags as $tag){
     68                $num = sprintf(__('%s plugins'), $tag['num']);
     69                echo "<a href='plugin-install.php?show=custom&term={$tag['tag']}' onclick='return showSelection(\"custom\", \"{$tag['tag']}\")' title='$num' rel='tag' style='font-size: {$tag['size']}pt;'>{$tag['tag']}</a> ";
     70        }
     71       
     72        echo "</div>";
     73}
     74function installplugin_custom_tags(){
     75        //TODO: Needs Caching
     76        //TODO: Needs a API on Wordpress.org :)
     77        $url = 'http://wordpress.org/extend/plugins/tags/';
     78        $html = file_get_contents($url); //TODO: Replace.
     79        $html = substr( $html, strpos($html,'<div id="hottags">'));
     80       
     81        preg_match_all("|<a href='.*/([a-zA-Z0-9]+)' title='(\d+) topics' rel='tag' style='font-size: ([\d\.]+)pt;'>.*</a>|i", $html, $mat);
     82
     83        $tags = array();
     84       
     85        for($i = 0; $i < count($mat[1]); $i++)
     86                $tags[] = array('tag' => $mat[1][$i], 'num' => $mat[2][$i], 'size' => $mat[3][$i]);
     87       
     88        return $tags;
     89}
     90
     91function installplugin_wporg($feedurl){
     92        $plugins = array();
     93        $items = @fetch_rss( $feedurl );
     94        if( ! $items || empty($items->items) )
     95                return $plugins;
     96       
     97        foreach($items->items as $item){
     98                // current bbPress feed item titles are: user on "topic title"
     99                if ( preg_match( '/"(.*)"/s', $item['title'], $matches ) )
     100                        $title = $matches[1];
     101                else // but let's make it forward compatible if things change
     102                        $title = $item['title'];
     103                $title = wp_specialchars( $title );
     104
     105                $description = wp_specialchars( strip_tags(html_entity_decode($item['description'], ENT_QUOTES)) );
     106
     107                list($link, $frag) = explode( '#', $item['link'] );
     108
     109                $link = clean_url($link);
     110                $link = rtrim($link, '/');
     111                $dlink = $link . '/download/';
     112               
     113                if( preg_match("|\/([a-zA-Z\-0-9]+)$|", $link, $slug) )
     114                        $slug = $slug[1];
     115                else
     116                        $slug = '';
     117               
     118                $latestzip = 'http://downloads.wordpress.org/plugin/' . $slug . '.zip';
     119               
     120                $plugins[] = array('title' => $title, 'link' => $link, 'dlink' => $dlink, 'description' => $description, 'slug' => $slug, 'latestzip' => $latestzip);
     121        }
     122        return $plugins;
     123}
     124?>
     125 No newline at end of file
  • wp-admin/includes/update.php

     
    192192        delete_option('update_plugins');
    193193}
    194194
     195function wp_install_plugin($package, $feedback = '') {
     196        global $wp_filesystem;
     197
     198        if ( !empty($feedback) )
     199                add_filter('update_feedback', $feedback);
     200
     201        if ( empty($package) )
     202                return new WP_Error('empty_url', __('Invalid URL given'));
     203
     204        // Is a filesystem accessor setup?
     205        if ( ! $wp_filesystem || !is_object($wp_filesystem) )
     206                WP_Filesystem();
     207
     208        if ( ! is_object($wp_filesystem) )
     209                return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
     210
     211        if ( $wp_filesystem->errors->get_error_code() )
     212                return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors);
     213
     214        // Download the package
     215        apply_filters('update_feedback', __("Downloading installer from $package"));
     216        $file = download_url($package);
     217
     218        if ( !$file )
     219                return new WP_Error('download_failed', __('Download failed.'));
     220
     221        $name = basename($package, '.zip');
     222        $working_dir = ABSPATH . 'wp-content/upgrade/' . $name;
     223
     224        // Clean up working directory
     225        $wp_filesystem->delete($working_dir, true);
     226
     227        apply_filters('update_feedback', __("Unpacking the files"));
     228        // Unzip package to working directory
     229        $result = unzip_file($file, $working_dir);
     230        if ( is_wp_error($result) ) {
     231                unlink($file);
     232                $wp_filesystem->delete($working_dir, true);
     233                return $result;
     234        }
     235
     236        // Once installed, delete the package
     237        unlink($file);
     238
     239
     240        //TODO: Check if the plugin is allready installed.     
     241        // Remove the existing plugin.
     242        //apply_filters('update_feedback', __("Removing the old version of the plugin"));
     243        //$wp_filesystem->delete(ABSPATH . PLUGINDIR . "/$plugin");
     244        //$plugin_dir = dirname(ABSPATH . PLUGINDIR . "/$plugin");
     245
     246        // If plugin is in its own directory, recursively delete the directory.
     247        //if ( '.' != $plugin_dir && ABSPATH . PLUGINDIR != $plugin_dir )
     248        //      $wp_filesystem->delete($plugin_dir, true);
     249
     250        apply_filters('update_feedback', __("Installing the files"));
     251        // Copy new version of plugin into place.
     252        copy_dir($working_dir, ABSPATH . PLUGINDIR);
     253
     254        // Remove working directory
     255        $wp_filesystem->delete($working_dir, true);
     256
     257        // Force refresh of plugin update information
     258        //delete_option('update_plugins');
     259}
     260
    195261?>
  • wp-admin/plugin-install.php

     
     1<?php
     2require_once('admin.php');
     3require_once('includes/plugin-install.php');
     4
     5$title = __('Get More Plugins');
     6$parent_file = 'plugins.php';
     7
     8//wp_reset_vars(array('show')); //Does it do both POST and GET?
     9
     10add_action('admin_head','installplugin_head');
     11function installplugin_head(){ ?>
     12<style>
     13.plugin-install-search-types{
     14        background-color:#eaf3fa;
     15        width: 200px;
     16        border:inset thin #000;
     17        float: left;
     18        clear: left;
     19}
     20.plugin-install-plugins{
     21        background-color:#eaf3fa;
     22        border:inset thin #000;
     23        margin-left: 210px;
     24}
     25.plugin-install-search-types ul{
     26        list-style: none;
     27}
     28.plugin-install-search-types li{
     29        margin-left: -30px;
     30        margin-right: 10px;
     31        font-size: 1.2em;
     32        padding:0;
     33}
     34.plugin-install-search-types li:hover{
     35        background-color: #e1e4f1;
     36}
     37.plugin-install-search-types li.selected{
     38        background-color: #fff;
     39}
     40.plugin-install-search-types a {
     41        display:block;
     42        padding:3px;
     43        margin: 0;
     44}
     45</style>
     46<script type="text/javascript">
     47function showSelection(selection, selectedterm){
     48        if( selectedterm == undefined)
     49                var selectedterm = '';
     50
     51        jQuery('.plugin-install-search-types ul li').removeClass('selected');
     52        jQuery('#plugin-install-search-' + selection).addClass('selected');
     53       
     54        jQuery('.plugin-install-plugins').html('<p><strong><?php _e('Loading Plugin list..') ?></strong></p>');
     55        jQuery.post("admin-ajax.php",
     56                { action: "plugin-install", show: selection, term: selectedterm },
     57                function(data){
     58                        jQuery('.plugin-install-plugins').html(data);
     59                }
     60        );
     61       
     62        return false;
     63}
     64</script>
     65<?php
     66}//End head items.
     67
     68require_once('admin-header.php');
     69?>
     70<div class="wrap">
     71<h2><?php _e('Get more Plugins'); ?></h2>
     72<p><?php _e('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, You may activate on the Plugins tab.'); ?></p>
     73</div>
     74
     75<div class="wrap">
     76        <div class='plugin-install-search-types'>
     77                <ul>
     78                        <?php
     79                        $show_values = apply_filters('installplugin_sources', array());
     80                        $show_selected = isset($_REQUEST['show']) ? $_REQUEST['show'] : false;
     81                        if( ! isset($show_values[$show_selected]) )
     82                                $show_selected = 'featured';
     83
     84                        foreach ( $show_values as $show_value => $info ){
     85                                $show_value = attribute_escape( $show_value );
     86                                $show_text = wp_specialchars( $info['title'] );
     87                                $class = ($show_value == $show_selected) ? ' class="selected"' : '';
     88                                echo "<li id='plugin-install-search-{$show_value}'$class><a href='plugin-browse.php?show=$show_value' onclick='return showSelection(\"$show_value\")'>$show_text</a></li>";
     89                        }
     90                        ?>
     91                </ul>
     92        </div>
     93        <div class='plugin-install-plugins'>
     94                <?php
     95                        installplugin_display();
     96                ?>
     97        </div>
     98</div>
     99<?php include('admin-footer.php') ?>
     100 No newline at end of file
  • wp-admin/update.php

     
    1 <?php
    2 
    3 require_once('admin.php');
    4 
    5 if ( !current_user_can('edit_plugins') )
    6                 wp_die('<p>'.__('You do not have sufficient permissions to update plugins for this blog.').'</p>');
    7 
    8 function request_filesystem_credentials($form_post, $type = '') {
    9         if ( empty($type) )
    10                 $type = get_filesystem_method();
    11 
    12         if ( 'direct' == $type )
    13                 return array();
    14 
    15         if ( !empty($_POST['password']) && !empty($_POST['username']) && !empty($_POST['hostname']) ) {
    16                 $credentials = array('hostname' => $_POST['hostname'], 'username' => $_POST['username'],
    17                         'password' => $_POST['password'], 'ssl' => $_POST['ssl']);
    18                 $stored_credentials = $credentials;
    19                 unset($stored_credentials['password']);
    20                 update_option('ftp_credentials', $stored_credentials);
    21                 return $credentials;
    22         }
    23         $hostname = '';
    24         $username = '';
    25         $password = '';
    26         $ssl = '';
    27         if ( $credentials = get_option('ftp_credentials') )
    28                 extract($credentials, EXTR_OVERWRITE);
    29 ?>
    30 <form action="<?php echo $form_post ?>" method="post">
    31 <div class="wrap">
    32 <h2><?php _e('FTP Connection Information') ?></h2>
    33 <p><?php _e('To perform the requested update, FTP connection information is required.') ?></p>
    34 <table class="form-table">
    35 <tr valign="top">
    36 <th scope="row"><?php _e('Hostname:') ?></th>
    37 <td><input name="hostname" type="text" id="hostname" value="<?php echo attribute_escape($hostname) ?>" size="40" /></td>
    38 </tr>
    39 <tr valign="top">
    40 <th scope="row"><?php _e('Username:') ?></th>
    41 <td><input name="username" type="text" id="username" value="<?php echo attribute_escape($username) ?>" size="40" /></td>
    42 </tr>
    43 <tr valign="top">
    44 <th scope="row"><?php _e('Password:') ?></th>
    45 <td><input name="password" type="text" id="password" value="<?php echo attribute_escape($password) ?>" size="40" /></td>
    46 </tr>
    47 <tr valign="top">
    48 <th scope="row"><?php _e('Use SSL:') ?></th>
    49 <td>
    50 <select name="ssl" id="ssl">
    51 <?php
    52 foreach ( array(0 => __('No'), 1 => __('Yes')) as $key => $value ) :
    53         $selected = ($ssl == $value) ? 'selected="selected"' : '';
    54         echo "\n\t<option value='$key' $selected>" . $value . '</option>';
    55 endforeach;
    56 ?>
    57 </select>
    58 </td>
    59 </tr>
    60 </table>
    61 <p class="submit">
    62 <input type="submit" name="submit" value="<?php _e('Proceed'); ?>" />
    63 </p>
    64 </div>
    65 </form>
    66 <?php
    67         return false;
    68 }
    69 
    70 function show_message($message) {
    71         if ( is_wp_error($message) )
    72                 $message = $message->get_error_message();
    73         echo "<p>$message</p>";
    74 }
    75 
    76 function do_plugin_upgrade($plugin) {
    77         global $wp_filesystem;
    78 
    79         $credentials = request_filesystem_credentials("update.php?action=upgrade-plugin&plugin=$plugin");
    80         if ( false === $credentials )
    81                 return;
    82         echo '<div class="wrap">';
    83         echo '<h2>' . __('Upgrade Plugin') . '</h2>';
    84         WP_Filesystem($credentials);
    85         // TODO: look for auth and connect error codes and direct back to credentials form.
    86         if ( $wp_filesystem->errors->get_error_code() ) {
    87                 foreach ( $wp_filesystem->errors->get_error_messages() as $message )
    88                         show_message($message);
    89                 echo '</div>';
    90                 return;
    91         }
    92 
    93         $result = wp_update_plugin($plugin, 'show_message');
    94 
    95         if ( is_wp_error($result) )
    96                 show_message($result);
    97         else
    98                 echo __('Plugin upgraded successfully');
    99         echo '</div>';
    100 }
    101 
    102 if ( isset($_GET['action']) ) {
    103         if ( isset($_GET['plugin']) )
    104                 $plugin = trim($_GET['plugin']);
    105 
    106         if ( 'upgrade-plugin' == $_GET['action'] ) {
    107                 //check-admin_referer('upgrade-plugin_' . $plugin);
    108                 $title = __('Upgrade Plugin');
    109                 $parent_file = 'plugins.php';
    110                 require_once('admin-header.php');
    111                 do_plugin_upgrade($plugin);
    112                 include('admin-footer.php');
    113         }
    114 
    115 }
    116 
     1<?php
     2
     3require_once('admin.php');
     4
     5if ( !current_user_can('edit_plugins') )
     6                wp_die('<p>'.__('You do not have sufficient permissions to update plugins for this blog.').'</p>');
     7
     8function request_filesystem_credentials($form_post, $type = '') {
     9        if ( empty($type) )
     10                $type = get_filesystem_method();
     11
     12        if ( 'direct' == $type )
     13                return array();
     14
     15        if ( !empty($_POST['password']) && !empty($_POST['username']) && !empty($_POST['hostname']) ) {
     16                $credentials = array('hostname' => $_POST['hostname'], 'username' => $_POST['username'],
     17                        'password' => $_POST['password'], 'ssl' => $_POST['ssl']);
     18                $stored_credentials = $credentials;
     19                unset($stored_credentials['password']);
     20                update_option('ftp_credentials', $stored_credentials);
     21                return $credentials;
     22        }
     23        $hostname = '';
     24        $username = '';
     25        $password = '';
     26        $ssl = '';
     27        if ( $credentials = get_option('ftp_credentials') )
     28                extract($credentials, EXTR_OVERWRITE);
     29?>
     30<form action="<?php echo $form_post ?>" method="post">
     31<div class="wrap">
     32<h2><?php _e('FTP Connection Information') ?></h2>
     33<p><?php _e('To perform the requested update, FTP connection information is required.') ?></p>
     34<table class="form-table">
     35<tr valign="top">
     36<th scope="row"><?php _e('Hostname:') ?></th>
     37<td><input name="hostname" type="text" id="hostname" value="<?php echo attribute_escape($hostname) ?>" size="40" /></td>
     38</tr>
     39<tr valign="top">
     40<th scope="row"><?php _e('Username:') ?></th>
     41<td><input name="username" type="text" id="username" value="<?php echo attribute_escape($username) ?>" size="40" /></td>
     42</tr>
     43<tr valign="top">
     44<th scope="row"><?php _e('Password:') ?></th>
     45<td><input name="password" type="text" id="password" value="<?php echo attribute_escape($password) ?>" size="40" /></td>
     46</tr>
     47<tr valign="top">
     48<th scope="row"><?php _e('Use SSL:') ?></th>
     49<td>
     50<select name="ssl" id="ssl">
     51<?php
     52foreach ( array(0 => __('No'), 1 => __('Yes')) as $key => $value ) :
     53        $selected = ($ssl == $value) ? 'selected="selected"' : '';
     54        echo "\n\t<option value='$key' $selected>" . $value . '</option>';
     55endforeach;
     56?>
     57</select>
     58</td>
     59</tr>
     60</table>
     61<p class="submit">
     62<input type="submit" name="submit" value="<?php _e('Proceed'); ?>" />
     63</p>
     64</div>
     65</form>
     66<?php
     67        return false;
     68}
     69
     70function show_message($message) {
     71        if ( is_wp_error($message) )
     72                $message = $message->get_error_message();
     73        echo "<p>$message</p>";
     74}
     75
     76function do_plugin_upgrade($plugin) {
     77        global $wp_filesystem;
     78
     79        $credentials = request_filesystem_credentials("update.php?action=upgrade-plugin&plugin=$plugin");
     80        if ( false === $credentials )
     81                return;
     82        echo '<div class="wrap">';
     83        echo '<h2>' . __('Upgrade Plugin') . '</h2>';
     84        WP_Filesystem($credentials);
     85        // TODO: look for auth and connect error codes and direct back to credentials form.
     86        if ( $wp_filesystem->errors->get_error_code() ) {
     87                foreach ( $wp_filesystem->errors->get_error_messages() as $message )
     88                        show_message($message);
     89                echo '</div>';
     90                return;
     91        }
     92
     93        $result = wp_update_plugin($plugin, 'show_message');
     94
     95        if ( is_wp_error($result) )
     96                show_message($result);
     97        else
     98                echo __('Plugin upgraded successfully');
     99        echo '</div>';
     100}
     101
     102function do_plugin_install($url) {
     103        global $wp_filesystem;
     104
     105        $credentials = request_filesystem_credentials('plugin-install.php?action=install-plugin&plugin=' . urlencode($url));
     106        if ( false === $credentials )
     107                return;
     108        echo '<div class="wrap">';
     109        echo '<h2>' . __('Install Plugin') . '</h2>';
     110        WP_Filesystem($credentials);
     111        // TODO: look for auth and connect error codes and direct back to credentials form.
     112        if ( $wp_filesystem->errors->get_error_code() ) {
     113                foreach ( $wp_filesystem->errors->get_error_messages() as $message )
     114                        show_message($message);
     115                echo '</div>';
     116                return;
     117        }
     118
     119        $result = wp_install_plugin($url, 'show_message');
     120
     121        if ( is_wp_error($result) )
     122                show_message($result);
     123        else
     124                echo __('Plugin installed successfully');
     125        echo '</div>';
     126}
     127
     128if ( isset($_GET['action']) ) {
     129        if ( isset($_GET['plugin']) )
     130                $plugin = trim($_GET['plugin']);
     131
     132        if ( 'upgrade-plugin' == $_GET['action'] ) {
     133                //check-admin_referer('upgrade-plugin_' . $plugin);
     134                $title = __('Upgrade Plugin');
     135                $parent_file = 'plugins.php';
     136                require_once('admin-header.php');
     137                do_plugin_upgrade($plugin);
     138                include('admin-footer.php');
     139        } elseif ( 'install-plugin' == $_GET['action'] ){
     140               
     141                $plugin = urldecode($plugin);
     142                check_admin_referer('install-plugin_' . $plugin);
     143               
     144                $title = __('Install Plugins');
     145                $parent_file = 'plugins.php';
     146               
     147                require_once('admin-header.php');
     148                do_plugin_install($plugin);
     149                include('admin-footer.php');
     150        }
     151
     152}
     153
    117154?>
     155 No newline at end of file