Making WordPress.org

Changeset 2611


Ignore:
Timestamp:
02/25/2016 05:03:19 AM (11 years ago)
Author:
dd32
Message:

Plugin Directory: Switch to using namespaces instead of implemeting them through classnames.
This change introduces an autoloader and relies upon it for most file inclusions, this should encourage us to keep a standard naming schema and writing more component classes going forward.
See #1584

Location:
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory
Files:
3 added
1 copied
7 moved

Legend:

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

    r2562 r2611  
    11<?php
     2namespace WordPressdotorg\Plugin_Directory\Admin\Metabox;
     3use WordPressdotorg\Plugin_Directory\Tools;
    24
    3 class WPorg_Plugin_Directory_Admin_Metabox_Committers {
    4         function __construct() {
    5                 add_action( 'add_meta_boxes', array( $this, 'register' ) );
    6         }
    7 
    8         function register() {
    9                 add_meta_box( 'plugin-committers', __( 'Plugin Committers', 'wporg-plugins' ), array( $this, 'display' ), 'plugin' );
    10         }
    11 
    12         function display() {
     5/**
     6 * The Plugin Committers admin metabox.
     7 *
     8 * @package WordPressdotorg_Plugin_Directory
     9 */
     10class Committers {
     11        static function display() {
    1312                $plugin_slug = get_post()->post_name;
    14                 $existing_committers = WPorg_Plugin_Directory_Tools::get_plugin_committers( $plugin_slug );
    15                 $existing_committers = array_map( function( $user ) { return new WP_User( $user ); }, $existing_committers );
     13                $existing_committers = Tools::get_plugin_committers( $plugin_slug );
     14                $existing_committers = array_map( function( $user ) { return new \WP_User( $user ); }, $existing_committers );
    1615
    1716                $output = '';
     
    2625                echo '<ul class="committers">' . $output . '</ul>';
    2726        }
    28 
    2927}
    30 new WPorg_Plugin_Directory_Admin_Metabox_Committers();
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php

    r2561 r2611  
    11<?php
     2namespace WordPressdotorg\Plugin_Directory;
     3
    24/**
    3  * @package WPorg_Plugin_Directory
     5 * The main Plugin Directory class, it handles most of the bootstrap and basic operations of the plugin.
     6 *
     7 * @package WordPressdotorg_Plugin_Directory
    48 */
    5 
    6 /**
    7  * Class WPorg_Plugin_Directory
    8  */
    9 class WPorg_Plugin_Directory {
    10 
    11         /**
    12          * Constructor.
    13          */
    14         public function __construct() {
     9class Plugin_Directory {
     10
     11        /**
     12         * Fetch the instance of the Plugin_Directory class.
     13         */
     14        public static function instance( $plugin_file = null ) {
     15                static $instance = null;
     16                return ! is_null( $instance ) ? $instance : $instance = new Plugin_Directory( $plugin_file );
     17        }
     18
     19        private function __construct( $plugin_file ) {
    1520                add_action( 'init', array( $this, 'init' ) );
     21                add_action( 'init', array( $this, 'register_shortcodes' ) );
    1622                add_filter( 'post_type_link', array( $this, 'package_link' ), 10, 2 );
    1723                add_filter( 'pre_insert_term', array( $this, 'pre_insert_term_prevent' ) );
    1824                add_action( 'pre_get_posts', array( $this, 'use_plugins_in_query' ) );
    1925                add_filter( 'the_content', array( $this, 'filter_post_content_to_correct_page' ), 1 );
    20         }
    21 
    22         /**
    23          * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
    24          */
    25         public function activate() {
    26                 global $wp_rewrite;
    27 
    28                 // Setup the environment.
    29                 $this->init();
    30 
    31                 // %postname% is required.
    32                 $wp_rewrite->set_permalink_structure( '/%postname%/' );
    33 
    34                 // /tags/%slug% is required for tags.
    35                 $wp_rewrite->set_tag_base( '/tags' );
    36 
    37                 // We require the WordPress.org Ratings plugin also be active.
    38                 if ( ! is_plugin_active( 'wporg-ratings/wporg-ratings.php' ) ) {
    39                         activate_plugin( 'wporg-ratings/wporg-ratings.php' );
    40                 }
    41 
    42                 // Enable the WordPress.org Plugin Repo Theme.
    43                 foreach ( wp_get_themes() as $theme ) {
    44                         if ( $theme->get( 'Name' ) === 'WordPress.org Plugins' ) {
    45                                 switch_theme( $theme->get_stylesheet() );
    46                                 break;
    47                         }
    48                 }
    49 
    50                 flush_rewrite_rules();
    51 
    52                 do_action( 'wporg_plugins_activation' );
    53         }
    54 
    55         /**
    56          *
    57          */
    58         public function deactivate() {
    59                 flush_rewrite_rules();
    60 
    61                 do_action( 'wporg_plugins_deactivation' );
     26
     27                // Load all Admin-specific items
     28                add_action( 'admin_init', array( __NAMESPACE__ . '\\Admin\\Admin_Customizations', 'instance' ) );
     29
     30                register_activation_hook( $plugin_file, array( $this, 'activate' ) );
     31                register_deactivation_hook( $plugin_file, array( $this, 'deactivate' ) );
    6232        }
    6333
     
    130100
    131101        /**
     102         * Register the Shortcodes used within the content.
     103         */
     104        public function register_shortcodes() {
     105                add_shortcode( 'wporg-plugins-screenshots', array( __NAMESPACE__ . '\\Shortcodes\\Screenshots', 'display' ) );
     106        //      add_shortcode( 'wporg-plugins-stats',       array( __NAMESPACE__ . '\\Shortcodes\\Stats',       'display' ) );
     107        //      add_shortcode( 'wporg-plugins-developer',   array( __NAMESPACE__ . '\\Shortcodes\\Developer',   'display' ) );
     108        }
     109
     110        /**
     111         * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
     112         */
     113        public function activate() {
     114                global $wp_rewrite;
     115
     116                // Setup the environment.
     117                $this->init();
     118
     119                // %postname% is required.
     120                $wp_rewrite->set_permalink_structure( '/%postname%/' );
     121
     122                // /tags/%slug% is required for tags.
     123                $wp_rewrite->set_tag_base( '/tags' );
     124
     125                // We require the WordPress.org Ratings plugin also be active.
     126                if ( ! is_plugin_active( 'wporg-ratings/wporg-ratings.php' ) ) {
     127                        activate_plugin( 'wporg-ratings/wporg-ratings.php' );
     128                }
     129
     130                // Enable the WordPress.org Plugin Repo Theme.
     131                foreach ( wp_get_themes() as $theme ) {
     132                        if ( $theme->get( 'Name' ) === 'WordPress.org Plugins' ) {
     133                                switch_theme( $theme->get_stylesheet() );
     134                                break;
     135                        }
     136                }
     137
     138                flush_rewrite_rules();
     139
     140                do_action( 'wporg_plugins_activation' );
     141        }
     142
     143        /**
     144         *
     145         */
     146        public function deactivate() {
     147                flush_rewrite_rules();
     148
     149                do_action( 'wporg_plugins_deactivation' );
     150        }
     151
     152        /**
    132153         * The Plugin Directory is available at multiple URLs (internationalised domains), this method allows
    133154         * for the one blog (a single blog_id) to be presented at multiple URLs yet have correct localised links.
     
    303324         */
    304325        public function get_plugin_post( $plugin_slug ) {
    305                 if ( $plugin_slug instanceof WP_Post ) {
     326                if ( $plugin_slug instanceof \WP_Post ) {
    306327                        return $plugin_slug;
    307328                }
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-geopattern.php

    r2560 r2611  
    11<?php
     2namespace WordPressdotorg\Plugin_Directory;
    23
    34require __DIR__ . '/libs/geopattern-1.1.0/geopattern_loader.php';
    45
    5 class WPorg_Plugin_Geopattern extends \RedeyeVentures\GeoPattern\GeoPattern {
     6/**
     7 * Generates Geopattern icons for Plugins.
     8 *
     9 * @package WordPressdotorg_Plugin_Directory
     10 */
     11class Plugin_Geopattern extends \RedeyeVentures\GeoPattern\GeoPattern {
    612
    713        var $slug; // Hashed to generate pattern
     
    1925
    2026                // Replace the base SVG object with our own, so the dimensions are gettable.
    21                 $this->svg = new WPorg_Plugin_Geopattern_SVG();
     27                $this->svg = new Plugin_Geopattern_SVG();
    2228        }
    2329
     
    3844
    3945        public function toSVG( $width = 128, $height = 128 ) {
    40                 $this->svg = new WPorg_Plugin_Geopattern_SVG();
     46                $this->svg = new Plugin_Geopattern_SVG();
    4147                $this->generateBackground();
    4248
     
    6975
    7076// The base SVG class doesn't provide functions for getting dimensions, so..
    71 class WPorg_Plugin_Geopattern_SVG extends \RedeyeVentures\GeoPattern\SVG {
     77class Plugin_Geopattern_SVG extends \RedeyeVentures\GeoPattern\SVG {
    7278
    7379        protected $viewbox;
     
    8995
    9096    public function addText( $text, $x, $y, $text_anchor, $style, $args=array() ) {
    91         $element = new WPorg_Plugin_Geopattern_SVGText($text, $x, $y, $text_anchor, $style, $args);
     97        $element = new Plugin_Geopattern_SVGText($text, $x, $y, $text_anchor, $style, $args);
    9298        $this->svgString .= $element;
    9399        return $this;
     
    106112
    107113// Nor does it support text.
    108 class WPorg_Plugin_Geopattern_SVGText extends \RedeyeVentures\GeoPattern\SVGElements\Base {
     114class Plugin_Geopattern_SVGText extends \RedeyeVentures\GeoPattern\SVGElements\Base {
    109115        protected $tag = 'text';
    110116        protected $text;
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-template.php

    r2561 r2611  
    11<?php
    2 /**
    3  * @package WPorg_Plugin_Directory
    4  */
     2namespace WordPressdotorg\Plugin_Directory;
    53
    64/**
    75 * Various helpers to retrieve data not stored within WordPress.
     6 *
     7 * @package WordPressdotorg_Plugin_Directory
    88 */
    9 class WPorg_Plugin_Directory_Template {
     9class Template {
    1010
    1111        /**
     
    149149         */
    150150        static function get_plugin_icon( $plugin, $output = 'raw' ) {
    151                 global $wporg_plugin_directory;
    152                 $plugin = $wporg_plugin_directory->get_plugin_post( $plugin );
     151                $plugin = Plugin_Directory::instance()->get_plugin_post( $plugin );
    153152                if ( ! $plugin ) {
    154153                        return false;
     
    176175                if ( ! $icon ) {
    177176                        $generated = true;
    178                         if ( ! class_exists( 'WPorg_Plugin_Geopattern' ) ) {
    179                                 include __DIR__ . '/class-wporg-plugin-geopattern.php';
    180                         }
    181                         $icon = new WPorg_Plugin_Geopattern;
     177
     178                        $icon = new Plugin_Geopattern;
    182179                        $icon->setString( $plugin->post_name );
    183180
     
    218215         */
    219216        static function get_plugin_banner( $plugin, $output = 'raw' ) {
    220                 global $wporg_plugin_directory;
    221                 $plugin = $wporg_plugin_directory->get_plugin_post( $plugin );
     217                $plugin = Plugin_Directory::instance()->get_plugin_post( $plugin );
    222218                if ( ! $plugin ) {
    223219                        return false;
     
    251247
    252248        static function get_asset_url( $plugin, $asset ) {
     249                if ( ! empty( $asset['location'] ) && 'plugin' == $asset['location'] ) {
     250                        // Screenshots in the plugin folder - /plugins/plugin-name/screenshot-1.png
     251                        $format = 'https://s.w.org/plugins/%s/%s?rev=%s';
     252                } else {
     253                        // Images in the assets folder - /plugin-name/assets/screenshot-1.png
     254                        $format = 'https://ps.w.org/%s/assets/%s?rev=%s';
     255                }
     256
    253257                return esc_url( sprintf(
    254                         'https://ps.w.org/%s/assets/%s?rev=%s',
     258                        $format,
    255259                        $plugin,
    256260                        $asset['filename'],
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-tools.php

    r2562 r2611  
    11<?php
    2 /**
    3  * @package WPorg_Plugin_Directory
    4  */
     2namespace WordPressdotorg\Plugin_Directory;
    53
    64/**
    75 * Various functions used by other processes, will make sense to move to specific classes.
     6 *
     7 * @package WordPressdotorg_Plugin_Directory
    88 */
    9 class WPorg_Plugin_Directory_Tools {
     9class Tools {
    1010
    1111        /**
     
    1919                include_once __DIR__ . '/readme-parser/compat.php';
    2020
    21                 $data = (object) WPorg_Readme::parse_readme( $readme );
     21                $data = (object) \WPorg_Readme::parse_readme( $readme );
    2222
    2323                unset( $data->sections['screenshots'] ); // Useless.
     
    5353                }
    5454
    55                 $tonesque = new Tonesque( $file_location );
     55                $tonesque = new \Tonesque( $file_location );
    5656                return $tonesque->color();
    5757        }
     
    7676         */
    7777        public static function grant_plugin_committer( $plugin_slug, $user ) {
    78                 global $wpdb, $wporg_plugin_directory;
    79                 if ( ! $user instanceof WP_User ) {
    80                         $user = new WP_User( $user );
     78                global $wpdb;
     79                if ( ! $user instanceof \WP_User ) {
     80                        $user = new \WP_User( $user );
    8181                }
    8282
    83                 if ( ! $user->exists() || ! $wporg_plugin_directory->get_plugin_post( $plugin_slug ) ) {
     83                if ( ! $user->exists() || ! Plugin_Directory::instance()->get_plugin_post( $plugin_slug ) ) {
    8484                        return false;
    8585                }
     
    108108         */
    109109        public static function revoke_plugin_committer( $plugin_slug, $user ) {
    110                 global $wpdb, $wporg_plugin_directory;
    111                 if ( ! $user instanceof WP_User ) {
    112                         $user = new WP_User( $user );
     110                global $wpdb;
     111                if ( ! $user instanceof \WP_User ) {
     112                        $user = new \WP_User( $user );
    113113                }
    114114
    115                 if ( ! $user->exists() || ! $wporg_plugin_directory->get_plugin_post( $plugin_slug ) ) {
     115                if ( ! $user->exists() || ! Plugin_Directory::instance()->get_plugin_post( $plugin_slug ) ) {
    116116                        return false;
    117117                }
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/plugin-directory.php

    r2602 r2611  
    11<?php
     2namespace WordPressdotorg\Plugin_Directory;
    23/**
    34 * Plugin Name: Plugin Directory
     
    1112 * License URI: http://opensource.org/licenses/gpl-2.0.php
    1213 *
    13  * @package WPorg_Plugin_Directory
     14 * @package WordPressdotorg_Plugin_Directory
    1415 */
    1516
    16 include __DIR__ . '/class-wporg-plugin-directory.php';
    17 include __DIR__ . '/class-wporg-plugin-directory-template.php';
    18 include __DIR__ . '/class-wporg-plugin-directory-tools.php';
     17// Register an Autoloader for all files
     18include __DIR__ . '/class-autoloader.php';
     19Autoloader\register_class_path( __NAMESPACE__, __DIR__ );
    1920
    20 include __DIR__ . '/shortcodes/screenshots.php';
    21 
    22 if ( is_admin() ) {
    23         include __DIR__ . '/admin/class-wporg-plugin-directory-admin-metabox-committers.php';
    24 }
    25 
    26 $wporg_plugin_directory = new WPorg_Plugin_Directory();
    27 register_activation_hook( __FILE__, array( $wporg_plugin_directory, 'activate' ) );
    28 register_deactivation_hook( __FILE__, array( $wporg_plugin_directory, 'deactivate' ) );
     21// Create the instance of the plugin, passing __FILE__ for actions that need it.
     22include __DIR__ . '/class-plugin-directory.php';
     23Plugin_Directory::instance( __FILE__ );
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-screenshots.php

    r2560 r2611  
    11<?php
    2 add_shortcode( 'wporg-plugins-screenshots', 'wporg_plugins_screenshots' );
     2namespace WordPressdotorg\Plugin_Directory\Shortcodes;
     3use WordPressdotorg\Plugin_Directory\Template;
    34
    4 function wporg_plugins_screenshots() {
    5         $plugin = get_post();
     5/**
     6 * The [wporg-plugins-screenshots] shortcode handler to display a plugins screenshots.
     7 *
     8 * @package WordPressdotorg_Plugin_Directory
     9 */
     10class Screenshots {
     11        static function display() {
     12                $plugin = get_post();
    613
    7         // All indexed from 1
    8         $screenshot_descriptions = get_post_meta( $plugin->ID, 'screenshots', true );
    9         $assets_screenshots = get_post_meta( $plugin->ID, 'assets_screenshots', true );
     14                // All indexed from 1
     15                $screenshot_descriptions = get_post_meta( $plugin->ID, 'screenshots', true );
     16                $assets_screenshots = get_post_meta( $plugin->ID, 'assets_screenshots', true );
    1017
    11         $output = '';
    12         foreach ( $screenshot_descriptions as $index => $description ) {
    13                 // Find the image that corresponds with the text.
    14                 // The image numbers are stored within the 'resolution' key.
    15                 $found = false;
    16                 foreach ( $assets_screenshots as $image ) {
    17                         if ( $index == $image['resolution'] ) {
    18                                 $found = true;
    19                                 break;
     18                $output = '';
     19                foreach ( $screenshot_descriptions as $index => $description ) {
     20                        // Find the image that corresponds with the text.
     21                        // The image numbers are stored within the 'resolution' key.
     22                        $found = false;
     23                        foreach ( $assets_screenshots as $image ) {
     24                                if ( $index == $image['resolution'] ) {
     25                                        $found = true;
     26                                        break;
     27                                }
    2028                        }
    21                 }
    22                 if ( ! $found ) {
    23                         continue;
    24                 }
     29                        if ( ! $found ) {
     30                                continue;
     31                        }
    2532
    26                 if ( ! empty( $image['location'] ) && 'plugin' == $image['location'] ) {
    27                         // Screenshot is within the plugin folder
    28                         $url = sprintf(
    29                                 'https://s.w.org/plugins/%s/%s?rev=%s',
    30                                 $plugin->post_name,
    31                                 $image['filename'],
    32                                 $image['revision']
    33                         );
    34                 } else {
    35                         // In the /assets/ folder
    36                         $url = sprintf(
    37                                 'https://ps.w.org/%s/assets/%s?rev=%s',
    38                                 $plugin->post_name,
    39                                 $image['filename'],
    40                                 $image['revision']
     33                        $url = Template::get_asset_url( $plugin->post_name, $image );
     34
     35                        $output .= sprintf(
     36                                '<li>
     37                                        <a href="%1$s" rel="nofollow">
     38                                                <img class="screenshot" src="%1$s">
     39                                        </a>
     40                                        <p>%2$s</p>
     41                                </li>',
     42                                $url,
     43                                $description
    4144                        );
    4245                }
    4346
    44                 $output .= sprintf(
    45                         '<li>
    46                                 <a href="%1$s" rel="nofollow">
    47                                         <img class="screenshot" src="%1$s">
    48                                 </a>
    49                                 <p>%2$s</p>
    50                         </li>',
    51                         $url,
    52                         $description
    53                 );
     47                return '<ol class="screenshots">' . $output . '</ol>';
     48
    5449        }
    55 
    56         return '<ol class="screenshots">' . $output . '</ol>';
    57 
    5850}
Note: See TracChangeset for help on using the changeset viewer.