Making WordPress.org


Ignore:
Timestamp:
01/02/2024 02:44:07 AM (6 months ago)
Author:
tellyworth
Message:

Plugin Directory: Improved preview links for plugin mods

This adds separate "preview" and "pcp" links.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin-blueprint.php

    r13076 r13088  
    3737        $plugin = Plugin_Directory::get_plugin_post( $request['plugin_slug'] );
    3838
    39         // Direct zip preview for plugin reviewers
    4039        if ( $request->get_param('zip_hash') ) {
    41             foreach ( get_attached_media( 'application/zip', $plugin ) as $zip_file ) {
    42                 if ( hash_equals( Template::preview_link_hash( $zip_file->ID, 0 ), $request->get_param('zip_hash') ) ||
    43                      hash_equals( Template::preview_link_hash( $zip_file->ID, -1 ), $request->get_param('zip_hash') ) ) {
    44                     $zip_url = wp_get_attachment_url( $zip_file->ID );
    45                     $zip_blueprint =<<<EOF
    46 {
    47     "landingPage": "/wp-admin/plugins.php",
    48     "preferredVersions": {
    49         "php": "8.0",
    50         "wp": "latest"
    51     },
    52     "phpExtensionBundles": [
    53         "kitchen-sink"
    54     ],
    55     "features": {
    56         "networking": true
    57     },
    58     "steps": [
    59         {
    60             "step": "installPlugin",
    61             "pluginZipFile": {
    62                 "resource": "wordpress.org/plugins",
    63                 "slug": "plugin-check"
    64             }
    65         },
    66         {
    67             "step": "installPlugin",
    68             "pluginZipFile": {
    69                 "resource": "url",
    70                 "url": "$zip_url"
    71             }
    72         },
    73         {
    74             "step": "login",
    75             "username": "admin",
    76             "password": "password"
    77         }
    78     ]
    79 }
    80 EOF;
    81                     header( 'Access-Control-Allow-Origin: https://playground.wordpress.net' );
    82                     die( $zip_blueprint );
    83                 }
    84             }
     40            $this->reviewer_blueprint( $request, $plugin );
    8541        }
    8642
     
    10258    }
    10359
     60    function reviewer_blueprint( $request, $plugin ) {
     61        // Direct zip preview for plugin reviewers
     62        if ( $request->get_param('zip_hash') ) {
     63            foreach ( get_attached_media( 'application/zip', $plugin ) as $zip_file ) {
     64                if ( hash_equals( Template::preview_link_hash( $zip_file->ID, 0 ), $request->get_param('zip_hash') ) ||
     65                     hash_equals( Template::preview_link_hash( $zip_file->ID, -1 ), $request->get_param('zip_hash') ) ) {
     66                    $zip_url = wp_get_attachment_url( $zip_file->ID );
     67                    if ( $zip_url ) {
     68
     69                        $landing_page = '/wp-admin/plugins.php';
     70                        $activate_plugin = true;
     71
     72                        // Plugin deactivated, and land on the Plugin Check page
     73                        if ( 'pcp' === $request->get_param('type') ) {
     74                            $landing_page = '/wp-admin/admin.php?page=plugin-check';
     75                            $activate_plugin = false;
     76                        }
     77
     78                        $zip_blueprint = (object)[
     79                            'landingPage' => $landing_page,
     80                            'preferredVersions' => (object)[
     81                                'php' => '8.0',
     82                                'wp'  => 'latest',
     83                            ],
     84                            'phpExtensionBundles' => [
     85                                'kitchen-sink'
     86                            ],
     87                            'features' => (object)[
     88                                'networking' => true
     89                            ],
     90                            'steps' => [
     91                                (object)[
     92                                    'step' => 'installPlugin',
     93                                    'pluginZipFile' => [
     94                                        'resource' => 'wordpress.org/plugins',
     95                                        'slug'     => 'plugin-check',
     96                                    ]
     97                                ],
     98                                (object)[
     99                                    'step' => 'installPlugin',
     100                                    'pluginZipFile' => (object)[
     101                                        'resource' => 'url',
     102                                        'url'      => $zip_url,
     103                                    ],
     104                                    'options' => (object)[
     105                                        'activate' => (bool)$activate_plugin
     106                                    ]
     107                                ],
     108                                (object)[
     109                                    'step' => 'login',
     110                                    'username' => 'admin',
     111                                    'password' => 'password',
     112                                ]
     113                            ]
     114                        ];
     115
     116                        $output = json_encode( $zip_blueprint );
     117
     118                        if ( $output ) {
     119                            header( 'Access-Control-Allow-Origin: https://playground.wordpress.net' );
     120                            die( $output );
     121                        }
     122                    }
     123                }
     124            }
     125        }
     126
     127        return new \WP_Error( 'invalid_blueprint', 'Invalid file', array( 'status' => 500 ) );
     128
     129    }
     130
    104131}
Note: See TracChangeset for help on using the changeset viewer.