WordPress.org

Making WordPress.org

Changeset 2655


Ignore:
Timestamp:
03/01/2016 07:51:16 AM (4 years ago)
Author:
dd32
Message:

Plugin Directory: Add several metaboxes for the Plugin Review/Admin.
This change includes switching to custom taxonomies, a custom publish metabox, a custom tags metabox, and the start of a plugin-reviewer metabox.

See #1570, #1584

Location:
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory
Files:
8 added
5 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/class-customizations.php

    r2639 r2655  
    11<?php
    22namespace WordPressdotorg\Plugin_Directory\Admin;
     3use \WordPressdotorg\Plugin_Directory;
    34
    45/**
     
    1011
    1112    /**
    12      * Fetch the instance of the Plugin_Directory class.
     13     * Fetch the instance of the Admin Customizations class.
    1314     */
    1415    public static function instance() {
     
    1819    }
    1920
     21    private function __construct() {
     22        // Admin Metaboxes
     23        add_action( 'add_meta_boxes', array( $this, 'register_admin_metaboxes' ), 10, 1 );
     24        add_action( 'do_meta_boxes', array( $this, 'replace_title_global' ) );
     25
     26        add_action( 'save_post_plugin', array( $this, 'save_plugin_post' ), 10, 2 );
     27
     28        add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
     29    }
     30
    2031    /**
     32     * Adds the plugin name into the post editing title.
    2133     *
     34     * @global $title The wp-admin title variable.
     35     *
     36     * @param string $post_type The post type of the current page
     37     * @return void.
    2238     */
    23     private function __construct() {
    24         add_action( 'add_meta_boxes', array( $this, 'register_admin_metaboxes' ) );
    25         add_action( 'edit_form_after_title', array( $this, 'edit_form_after_title' ) );
     39    public function replace_title_global( $post_type ) {
     40        global $title;
     41        if ( 'plugin' === $post_type ) {
     42            $title = sprintf( $title, get_the_title() ); // esc_html() on output
     43        }
     44    }
     45
     46    /**
     47     * Enqueue JS and CSS assets needed for any wp-admin screens.
     48     *
     49     * @param string $hook_suffix The hook suffix of the current screen.
     50     * @return void.
     51     */
     52    public function enqueue_assets( $hook_suffix ) {
     53        global $post_type;
     54
     55        if ( 'post.php' == $hook_suffix && 'plugin' == $post_type ) {
     56            wp_enqueue_style( 'plugin-admin-edit-css', plugins_url( 'css/edit-form.css', Plugin_Directory\PLUGIN_FILE ), array( 'edit' ), 1 );
     57            wp_enqueue_script( 'plugin-admin-edit-js', plugins_url( 'js/edit-form.js', Plugin_Directory\PLUGIN_FILE ), array(), 1 );
     58        }
    2659    }
    2760
    2861    /**
    2962     * Register the Admin metaboxes for the plugin management screens.
     63     *
     64     * @param string $post_type The post type of the current screen.
     65     * @return void.
    3066     */
    31     public function register_admin_metaboxes() {
     67    public function register_admin_metaboxes( $post_type ) {
     68        if ( 'plugin' != $post_type ) {
     69            return;
     70        }
     71
    3272        add_meta_box(
    3373            'plugin-committers',
    3474            __( 'Plugin Committers', 'wporg-plugins' ),
    35             array( __NAMESPACE__ . '\\Metabox\\Committers', 'display' ),
    36             'plugin'
     75            array( __NAMESPACE__ . '\Metabox\Committers', 'display' ),
     76            'plugin', 'side'
    3777        );
     78
     79        add_meta_box(
     80            'plugin-review',
     81            __( 'Plugin Review Tools', 'wporg-plugins' ),
     82            array( __NAMESPACE__ . '\Metabox\Review_Tools', 'display' ),
     83            'plugin', 'normal', 'high'
     84        );
     85
     86        add_meta_box(
     87            'plugin-fields',
     88            __( 'Plugin Meta', 'wporg-plugins' ),
     89            array( __NAMESPACE__ . '\Metabox\Custom_Fields', 'display' ),
     90            'plugin', 'normal', 'low'
     91        );
     92
     93        // Replace the publish box
     94        add_meta_box(
     95            'submitdiv',
     96            __( 'Plugin Controls', 'wporg-plugins' ),
     97            array( __NAMESPACE__ . '\Metabox\Controls', 'display' ),
     98            'plugin', 'side', 'high'
     99        );
     100
     101        // Remove the Slug metabox
     102        add_meta_box( 'slugdiv', false, false, false );
    38103    }
    39104
    40105    /**
    41      * Displays a link to the plugins zip file.
     106     * Hook into the save process for the plugin post_type to save extra metadata.
    42107     *
    43      * @param \WP_Post $post
     108     * Currently saves the tested_with value.
     109     *
     110     * @param int      $post_id The post_id being updated.
     111     * @param \WP_Post $post    The WP_Post object being updated.
    44112     */
    45     public function edit_form_after_title( $post ) {
    46         $zip_files = get_attached_media( 'application/zip', $post );
    47         $zip_file  = current( $zip_files );
    48         $zip_url   = wp_get_attachment_url( $zip_file->ID );
     113    public function save_plugin_post( $post_id, $post ) {
     114        // Save meta information
     115        if ( isset( $_POST['tested_with'] ) && isset( $_POST['hidden_tested_with'] ) && $_POST['tested_with'] != $_POST['hidden_tested_with'] ) {
     116            update_post_meta( $post_id, 'tested', wp_slash( wp_unslash( $_POST['tested_with'] ) ) );
     117        }
     118    }
    49119
    50         if ( $zip_url ) :
    51             ?>
    52 
    53             <p style="padding: 0 10px;">
    54                 <?php printf( __( '<strong>Zip file:</strong> %s' ), sprintf( '<a href="%s">%s</a>', esc_url( $zip_url ), esc_html( $zip_url ) ) ); ?>
    55             </p>
    56 
    57         <?php
    58         endif;
    59     }
    60120}
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/metabox/class-committers.php

    r2621 r2655  
    11<?php
    22namespace WordPressdotorg\Plugin_Directory\Admin\Metabox;
    3 
    43use WordPressdotorg\Plugin_Directory\Tools;
    54
     
    109 */
    1110class Committers {
    12 
    13     /**
    14      *
    15      */
    1611    static function display() {
    1712        $plugin_slug         = get_post()->post_name;
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php

    r2640 r2655  
    1212     * Fetch the instance of the Plugin_Directory class.
    1313     */
    14     public static function instance( $plugin_file = null ) {
     14    public static function instance() {
    1515        static $instance = null;
    1616
    17         return ! is_null( $instance ) ? $instance : $instance = new Plugin_Directory( $plugin_file );
    18     }
    19 
    20     /**
    21      * @param string $plugin_file
    22      */
    23     private function __construct( $plugin_file ) {
     17        return ! is_null( $instance ) ? $instance : $instance = new Plugin_Directory();
     18    }
     19
     20    private function __construct() {
    2421        add_action( 'init', array( $this, 'init' ) );
    2522        add_action( 'init', array( $this, 'register_shortcodes' ) );
     
    3027
    3128        // Load all Admin-specific items.
    32         add_action( 'admin_init', array( __NAMESPACE__ . '\\Admin\\Customizations', 'instance' ) );
    33 
    34         register_activation_hook( $plugin_file, array( $this, 'activate' ) );
    35         register_deactivation_hook( $plugin_file, array( $this, 'deactivate' ) );
     29        add_action( 'admin_init', array( __NAMESPACE__ . '\Admin\Customizations', 'instance' ) );
     30
     31        register_activation_hook( PLUGIN_FILE, array( $this, 'activate' ) );
     32        register_deactivation_hook( PLUGIN_FILE, array( $this, 'deactivate' ) );
    3633    }
    3734
     
    4340
    4441        register_post_type( 'plugin', array(
    45             'labels'      => array(
    46                 'name'               => __( 'Plugins',          'wporg-plugins' ),
    47                 'singular_name'      => __( 'Plugin',           'wporg-plugins' ),
    48                 'menu_name'          => __( 'My Plugins',       'wporg-plugins' ),
    49                 'add_new'            => __( 'Add New',          'wporg-plugins' ),
    50                 'add_new_item'       => __( 'Add New Plugin',   'wporg-plugins' ),
    51                 'edit_item'          => __( 'Edit Plugin',      'wporg-plugins' ),
    52                 'new_item'           => __( 'New Plugin',       'wporg-plugins' ),
    53                 'view_item'          => __( 'View Plugin',      'wporg-plugins' ),
    54                 'search_items'       => __( 'Search Plugins',   'wporg-plugins' ),
    55                 'not_found'          => __( 'No plugins found', 'wporg-plugins' ),
     42            'labels'          => array(
     43                'name'               => __( 'Plugins',                   'wporg-plugins' ),
     44                'singular_name'      => __( 'Plugin',                    'wporg-plugins' ),
     45                'menu_name'          => __( 'My Plugins',                'wporg-plugins' ),
     46                'add_new'            => __( 'Add New',                   'wporg-plugins' ),
     47                'add_new_item'       => __( 'Add New Plugin',            'wporg-plugins' ),
     48                'edit_item'          => __( 'Editing Plugin: %s',        'wporg-plugins' ),
     49                'new_item'           => __( 'New Plugin',                'wporg-plugins' ),
     50                'view_item'          => __( 'View Plugin',               'wporg-plugins' ),
     51                'search_items'       => __( 'Search Plugins',            'wporg-plugins' ),
     52                'not_found'          => __( 'No plugins found',          'wporg-plugins' ),
    5653                'not_found_in_trash' => __( 'No plugins found in Trash', 'wporg-plugins' ),
    5754            ),
    58             'description' => __( 'A Repo Plugin', 'wporg-plugins' ),
    59             'supports'    => array( 'title', 'editor', 'excerpt', 'custom-fields' ),
    60             'taxonomies'  => array( 'post_tag', 'category' ),
    61             'public'      => true,
    62             'show_ui'     => true,
    63             'has_archive' => true,
    64             'rewrite'     => false,
    65             'menu_icon'   => 'dashicons-admin-plugins',
     55            'description'     => __( 'A Repo Plugin', 'wporg-plugins' ),
     56            'supports'        => false,
     57            'public'          => true,
     58            'show_ui'         => true,
     59            'has_archive'     => true,
     60            'rewrite'         => false,
     61            'menu_icon'       => 'dashicons-admin-plugins',
     62            'capability_type' => array( 'post', 'posts' ), // TODO roles & capabilities
     63            'map_meta_cap'    => true,
     64            'capabilities'    => array(
     65                'create_posts' => 'do_not_allow'
     66            )
     67        ) );
     68
     69        register_taxonomy( 'plugin_category', 'plugin', array(
     70            'hierarchical'      => true,
     71            'query_var'         => 'plugin_category',
     72            'rewrite'           => false,
     73            'public'            => true,
     74            'show_ui'           => true,
     75            'show_admin_column' => true,
     76            'meta_box_cb'       => 'post_categories_meta_box',
     77            'capabilities'      => array(
     78                'assign_terms' => 'manage_categories',
     79            )
     80        ) );
     81
     82        register_taxonomy( 'plugin_tag', 'plugin', array(
     83            'hierarchical'      => true, /* for tax_input[] handling on post saves. */
     84            'query_var'         => 'plugin_tag',
     85            'rewrite'           => array(
     86                'hierarchical' => false,
     87                'slug'         => 'tags',
     88                'with_front'   => false,
     89                'ep_mask'      => EP_TAGS,
     90            ),
     91            'labels'            => array(
     92                'name'          => __( 'Plugin Tags',  'wporg-plugins' ),
     93                'singular_name' => __( 'Plugin Tag',   'wporg-plugins' ),
     94                'edit_item'     => __( 'Edit Tag',     'wporg-plugins' ),
     95                'update_item'   => __( 'Update Tag',   'wporg-plugins' ),
     96                'add_new_item'  => __( 'Add New Tag',  'wporg-plugins' ),
     97                'new_item_name' => __( 'New Tag Name', 'wporg-plugins' ),
     98                'search_items'  => __( 'Search Tags',  'wporg-plugins' ),
     99            ),
     100            'public'            => true,
     101            'show_ui'           => true,
     102            'show_admin_column' => true,
     103            'meta_box_cb'       => array( __NAMESPACE__ . '\Admin\Metabox\Plugin_Tags', 'display' ),
     104            'capabilities'      => array()
    66105        ) );
    67106
     
    83122            'show_in_admin_status_list' => true,
    84123            'label_count'               => _n_noop( 'Closed <span class="count">(%s)</span>', 'Closed <span class="count">(%s)</span>', 'wporg-plugins' ),
     124        ) );
     125        register_post_status( 'rejected', array(
     126            'label'                     => _x( 'Rejected', 'plugin status', 'wporg-plugins' ),
     127            'public'                    => false,
     128            'show_in_admin_status_list' => true,
     129            'label_count'               => _n_noop( 'Rejected <span class="count">(%s)</span>', 'Rejected <span class="count">(%s)</span>', 'wporg-plugins' ),
    85130        ) );
    86131
     
    108153     */
    109154    public function register_shortcodes() {
    110         add_shortcode( 'wporg-plugin-upload',       array( __NAMESPACE__ . '\\Shortcodes\\Upload',      'display' ) );
    111         add_shortcode( 'wporg-plugins-screenshots', array( __NAMESPACE__ . '\\Shortcodes\\Screenshots', 'display' ) );
    112     //  add_shortcode( 'wporg-plugins-stats',       array( __NAMESPACE__ . '\\Shortcodes\\Stats',       'display' ) );
    113     //  add_shortcode( 'wporg-plugins-developer',   array( __NAMESPACE__ . '\\Shortcodes\\Developer',   'display' ) );
    114     }
    115 
    116     /**
     155        add_shortcode( 'wporg-plugin-upload',       array( __NAMESPACE__ . '\Shortcodes\Upload',      'display' ) );
     156        add_shortcode( 'wporg-plugins-screenshots', array( __NAMESPACE__ . '\Shortcodes\Screenshots', 'display' ) );
     157    //  add_shortcode( 'wporg-plugins-stats',       array( __NAMESPACE__ . '\Shortcodes\Stats',       'display' ) );
     158    //  add_shortcode( 'wporg-plugins-developer',   array( __NAMESPACE__ . '\Shortcodes\Developer',   'display' ) );
     159    }
     160
     161    /**
     162     * Upon plugin activation, set up the current site for acting
     163     * as the plugin directory.
     164     *
     165     * Setting up the site requires setting up the theme and proper
     166     * rewrite permastructs.
     167     *
    117168     * @global \WP_Rewrite $wp_rewrite WordPress rewrite component.
    118169     */
     
    148199
    149200    /**
    150      *
     201     * Clean up options & rewrite rules after plugin deactivation.
    151202     */
    152203    public function deactivate() {
     
    241292        switch ( get_query_var( 'browse' ) ) {
    242293            case 'beta':
    243                 $wp_query->query_vars['category_name'] = 'beta';
     294                $wp_query->query_vars['plugin_category'] = 'beta';
    244295                break;
    245296
    246297            case 'featured':
    247                 $wp_query->query_vars['category_name'] = 'featured';
     298                $wp_query->query_vars['plugin_category'] = 'featured';
    248299                break;
    249300
     
    326377     *
    327378     * @param $plugin_slug string|\WP_Post The slug of the plugin to retrieve.
    328      * @return \WP_Post|\WP_Error
     379     * @return \WP_Post|bool
    329380     */
    330381    static public function get_plugin_post( $plugin_slug ) {
     382        global $post;
    331383        if ( $plugin_slug instanceof \WP_Post ) {
    332384            return $plugin_slug;
     385        }
     386        // Use the global $post object when it matches to avoid hitting the database.
     387        if ( !empty( $post ) && 'plugin' == $post->post_type && $plugin_slug == $post->post_name ) {
     388            return $post;
    333389        }
    334390
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php

    r2649 r2655  
    33use WordPressdotorg\Plugin_Directory\Plugin_Directory;
    44use WordPressdotorg\Plugin_Directory\Readme_Parser;
     5use WordPressdotorg\Plugin_Directory\Template;
    56use WordPressdotorg\Plugin_Directory\Tools;
    67use WordPressdotorg\Plugin_Directory\Tools\Filesystem;
     
    8889
    8990        foreach ( $this->readme_fields as $readme_field ) {
    90             update_post_meta( $plugin->ID, $readme_field, $readme->$readme_field );
     91            // Don't change the tested version if a newer version was specified through wp-admin
     92            if ( 'tested' == $readme_field && version_compare( get_post_meta( $plugin->ID, 'tested', true ), $readme->$readme_field, '>' ) ) {
     93                continue;
     94            }
     95            update_post_meta( $plugin->ID, $readme_field, wp_slash( $readme->$readme_field ) );
    9196        }
    9297        foreach ( $this->plugin_headers as $plugin_header => $meta_field ) {
    93             update_post_meta( $plugin->ID, $meta_field, $headers->$plugin_header );
     98            update_post_meta( $plugin->ID, $meta_field, wp_slash( $headers->$plugin_header ) );
    9499        }
    95100
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/plugin-directory.php

    r2621 r2655  
    1616namespace WordPressdotorg\Plugin_Directory;
    1717
     18/**
     19 * Store the root plugin file for usage with functions which use the plugin basename.
     20 */
     21define( __NAMESPACE__ . '\PLUGIN_FILE', __FILE__ );
     22
    1823// Register an Autoloader for all files
    1924include __DIR__ . '/class-autoloader.php';
    2025Autoloader\register_class_path( __NAMESPACE__, __DIR__ );
    2126
    22 // Create the instance of the plugin, passing __FILE__ for actions that need it.
     27// Instantiate the Plugin Directory
    2328include __DIR__ . '/class-plugin-directory.php';
    24 Plugin_Directory::instance( __FILE__ );
     29Plugin_Directory::instance();
Note: See TracChangeset for help on using the changeset viewer.