Making WordPress.org


Ignore:
Timestamp:
03/11/2015 10:55:10 PM (11 years ago)
Author:
obenland
Message:

WP.org Themes: Add a custom post status for suspended themes.

Fixes #949.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/theme-directory/theme-directory.php

    r1392 r1395  
    2424include_once plugin_dir_path( __FILE__ ) . 'themes-api.php';
    2525
    26 register_activation_hook( __FILE__, 'flush_rewrite_rules' );
    27 register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );
     26// Load adjustments to the edit.php screen for repopackage posts.
     27include_once plugin_dir_path( __FILE__ ) . 'admin-edit.php';
     28
     29
     30/**
     31 * Things to change on activation.
     32 */
     33function wporg_themes_activate() {
     34        flush_rewrite_rules();
     35
     36        do_action( 'wporg_themes_activation' );
     37}
     38register_activation_hook( __FILE__, 'wporg_themes_activate' );
     39
     40/**
     41 * Things to change on deactivation.
     42 */
     43function wporg_themes_deactivate() {
     44        flush_rewrite_rules();
     45
     46        do_action( 'wporg_themes_deactivation' );
     47}
     48register_deactivation_hook( __FILE__, 'wporg_themes_deactivate' );
    2849
    2950/**
     
    193214
    194215/**
    195  * Capability mapping for custom caps.
    196  *
    197  * @param array  $caps    Returns the user's actual capabilities.
    198  * @param string $cap     Capability name.
    199  * @param int    $user_id The user ID.
    200  * @param array  $args    Adds the context to the cap. Typically the object ID.
    201  * @return array
    202  */
    203 function wporg_themes_map_meta_cap( $caps, $cap, $user_id, $args ) {
    204         switch ( $cap ) {
    205                 case 'delete_categories':
    206                 case 'edit_categories':
    207                 case 'manage_categories':
    208 
    209                         if ( ! is_super_admin() ) {
    210                                 $caps[] = 'do_not_allow';
    211                         }
    212                         break;
    213         }
    214 
    215         return $caps;
    216 }
    217 add_filter( 'map_meta_cap', 'wporg_themes_map_meta_cap', 10, 4 );
    218 
    219 /**
    220216 * Checks if ther current users is a super admin before allowing terms to be added.
    221217 *
     
    503499        }
    504500}
    505 
    506 /* REPOPACKAGE EDITOR ENHANCEMENTS */
    507 
    508 /**
    509  * Use theme screen shot for post thumbnails.
    510  *
    511  * @param string $html
    512  * @param int    $post_id
    513  * @return string
    514  */
    515 function wporg_themes_post_thumbnail_html( $html, $post_id, $post_thumbnail_id, $size ) {
    516         $post = get_post( $post_id );
    517         if ( 'repopackage' == $post->post_type ) {
    518                 $theme = new WPORG_Themes_Repo_Package( $post );
    519                 $src   = add_query_arg( array( 'w' => $size, 'strip' => 'all' ), $theme->screenshot_url() );
    520 
    521                 $html = '<img src="' . esc_url( $src ) . '"/>';
    522         }
    523 
    524         return $html;
    525 }
    526 add_filter( 'post_thumbnail_html', 'wporg_themes_post_thumbnail_html', 10, 5 );
    527 
    528 /**
    529  * Prevents repopackages from being deleted.
    530  *
    531  * @param int $post_id
    532  */
    533 function wporg_theme_no_delete_repopackage( $post_id ) {
    534         if ( 'repopackage' == get_post( $post_id )->post_type ) {
    535                 wp_die( __( 'Repopackages can not be deleted.', 'wporg-themes' ), '', array(
    536                         'back_link' => true,
    537                 ) );
    538         }
    539 }
    540 add_filter( 'before_delete_post', 'wporg_theme_no_delete_repopackage' );
    541 
    542 /**
    543  * Better view in the Packages screen.
    544  *
    545  * @param array $columns
    546  * @return array
    547  */
    548 function wporg_themes_repopackage_columns( $columns ) {
    549         $columns = array_merge( $columns, array(
    550                 'version'    => __( 'Version', 'wporg-themes' ),
    551                 'theme-url'  => __( 'Theme URL', 'wporg-themes' ),
    552                 'author-url' => __( 'Author URL', 'wporg-themes' ),
    553                 'ticket'     => __( 'Ticket ID', 'wporg-themes' ),
    554         ) );
    555         unset( $columns['categories'] );
    556 
    557         return $columns;
    558 }
    559 add_filter( 'manage_repopackage_posts_columns', 'wporg_themes_repopackage_columns' );
    560 
    561 /**
    562  * Custom columns for the admin screen.
    563  *
    564  * @param string $column
    565  * @param int    $post_id
    566  */
    567 function wporg_themes_repopackage_custom_columns( $column, $post_id ) {
    568         $theme = new WPORG_Themes_Repo_Package( $post_id );
    569 
    570         switch ( $column ) {
    571                 case 'ticket':
    572                         if ( $theme->ticket ) {
    573                                 printf( '<a href="%1$s">%2$s</a>', esc_url( 'https://themes.trac.wordpress.org/ticket/' . $theme->ticket ), '#' . $theme->ticket );
    574                         }
    575                         break;
    576                 case 'theme-url':
    577                 case 'author-url':
    578                         echo make_clickable( $theme->$column );
    579                         break;
    580                 default:
    581                         echo $theme->$column;
    582         }
    583 }
    584 add_action( 'manage_repopackage_posts_custom_column', 'wporg_themes_repopackage_custom_columns', 10, 2 );
    585 
    586 /**
    587  * Meta box to choose which version is live.
    588  */
    589 function wporg_themes_add_meta_box() {
    590         add_meta_box(
    591                 'wporg_themes_versions',
    592                 __( 'Theme Versions', 'wporg-themes' ),
    593                 'wporg_themes_meta_box_callback',
    594                 'repopackage',
    595                 'side',
    596                 'high'
    597         );
    598 }
    599 add_action( 'add_meta_boxes', 'wporg_themes_add_meta_box' );
    600 
    601 /**
    602  * Displays the content of the `_status` meta box.
    603  *
    604  * @param WP_Post $post
    605  */
    606 function wporg_themes_meta_box_callback( $post ) {
    607         $versions = get_post_meta( $post->ID, '_status', true );
    608 
    609         if ( empty( $versions ) ) {
    610                 return;
    611         }
    612 
    613         // Add an nonce field so we can check for it later.
    614         wp_nonce_field( 'wporg_themes_meta_box', 'wporg_themes_meta_box_nonce' );
    615 
    616         foreach ( $versions as $version => $status ) :
    617                 ?>
    618                 <p><?php echo $version; ?> -
    619                         <select name="wporg_themes_status[<?php echo base64_encode( $version ); // base64 because version numbers don't work so well as parts of keys ?>]">
    620                                 <option value="new" <?php selected( $status, 'new' ); ?>><?php esc_html_e( 'New', 'wporg-themes' ); ?></option>
    621                                 <option value="live" <?php selected( $status, 'live' ); ?>><?php esc_html_e( 'Live', 'wporg-themes' ); ?></option>
    622                                 <option value="old" <?php selected( $status, 'old' ); ?>><?php esc_html_e( 'Old', 'wporg-themes' ); ?></option>
    623                         </select>
    624                 </p>
    625         <?php
    626         endforeach;
    627 }
    628 
    629 /**
    630  * Sanitizes and saves meta box settings.
    631  *
    632  * @param int $post_id
    633  */
    634 function wporg_themes_save_meta_box_data( $post_id ) {
    635         // All the safety checks.
    636         if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    637                 return;
    638         }
    639         if ( ! isset( $_POST['wporg_themes_meta_box_nonce'] ) ) {
    640                 return;
    641         }
    642         if ( ! wp_verify_nonce( $_POST['wporg_themes_meta_box_nonce'], 'wporg_themes_meta_box' ) ) {
    643                 return;
    644         }
    645         // TODO should this be a post type specific capability?
    646         if ( ! current_user_can( 'edit_post', $post_id ) ) {
    647                 return;
    648         }
    649 
    650         $new_status = array();
    651         foreach ( $_POST['wporg_themes_status'] as $version => $status ) {
    652                 // We could check of the passed status is valid, but wporg_themes_update_version_status() handles that beautifully.
    653                 $new_status[ base64_decode( $version ) ] = $status;
    654         }
    655         uksort( $new_status, 'version_compare' );
    656 
    657         // Update the statuses.
    658         foreach ( $new_status as $version => $status ) {
    659                 wporg_themes_update_version_status( $post_id, $version, $status );
    660         }
    661 }
    662 add_action( 'save_post', 'wporg_themes_save_meta_box_data' );
Note: See TracChangeset for help on using the changeset viewer.