<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[2988] sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations: Translate: Open-source the CLI command to initialize a new locale.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/2988">2988</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/2988","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>ocean90</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-04-20 12:21:41 +0000 (Wed, 20 Apr 2016)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Translate: Open-source the CLI command to initialize a new locale.

Also, rewrite the Customizations plugin to use an autoloader.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationswporggpcustomizationsphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/wporg-gp-customizations.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationsincclasspluginphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/class-plugin.php</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/cli/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationsinccliclassinitlocalephp">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/cli/class-init-locale.php</a></li>
<li>sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/vendor/</li>
<li>sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/vendor/wordpressdotorg/</li>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationsvendorwordpressdotorgclassautoloaderphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/vendor/wordpressdotorg/class-autoloader.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationsincclasspluginphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/class-plugin.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/class-plugin.php                             (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/class-plugin.php       2016-04-20 12:21:41 UTC (rev 2988)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,136 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+namespace WordPressdotorg\GlotPress\Customizations;
+
+use WP_CLI;
+
+class Plugin {
+
+       /**
+        * @var Plugin The singleton instance.
+        */
+       private static $instance;
+
+       /**
+        * Returns always the same instance of this plugin.
+        *
+        * @return Plugin
+        */
+       public static function get_instance() {
+               if ( ! ( self::$instance instanceof Plugin ) ) {
+                       self::$instance = new Plugin();
+               }
+               return self::$instance;
+       }
+
+       /**
+        * Instantiates a new Plugin object.
+        */
+       private function __construct() {
+               add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ) );
+       }
+
+       /**
+        * Initializes the plugin.
+        */
+       function plugins_loaded() {
+               add_filter( 'gp_url_profile', array( $this, 'worg_profile_url' ), 10, 2 );
+               add_filter( 'gp_projects', array( $this, 'natural_sort_projects' ), 10, 2 );
+               add_action( 'gp_project_created', array( $this, 'update_projects_last_updated' ) );
+               add_action( 'gp_project_saved', array( $this, 'update_projects_last_updated' ) );
+               add_filter( 'pre_handle_404', array( $this, 'short_circuit_handle_404' ) );
+               add_action( 'wp_default_scripts', array( $this, 'bump_script_versions' ) );
+
+               if ( defined( 'WP_CLI' ) && WP_CLI ) {
+                       $this->register_cli_commands();
+               }
+       }
+
+       /**
+        * Registers CLI commands if WP-CLI is loaded.
+        */
+       function register_cli_commands() {
+               WP_CLI::add_command( 'wporg-translate init-locale', __NAMESPACE__ . '\CLI\Init_Locale' );
+       }
+
+       /**
+        * Changes the versions of some default scripts for cache bust.
+        *
+        * @see https://wordpress.slack.com/archives/meta-i18n/p1460626195000251
+        *
+        * @param WP_Scripts &$scripts WP_Scripts instance, passed by reference.
+        */
+       public function bump_script_versions( &$scripts ) {
+               foreach ( [ 'gp-editor', 'gp-glossary' ] as $handle ) {
+                       if ( isset( $scripts->registered[ $handle ] ) && '20160329' === $scripts->registered[ $handle ]->ver ) {
+                               $scripts->registered[ $handle ]->ver = '20160329a';
+                       }
+               }
+       }
+
+       /**
+        * Short circuits WordPress' status handler to prevent unnecessary headers
+        * which prevent caching.
+        *
+        * @return bool True if a request for GlotPress, false if not.
+        */
+       public function short_circuit_handle_404() {
+               if ( is_glotpress() ) {
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * Stores the timestamp of the last update for projects.
+        *
+        * Used by the Rosetta Roles plugin to invalidate local caches.
+        */
+       public function update_projects_last_updated() {
+               update_option( 'wporg_projects_last_updated', time() );
+       }
+
+       /**
+        * Returns the profile.wordpress.org URL of a user.
+        *
+        * @param string $url      Current profile URL.
+        * @param string $nicename The URL-friendly user name.
+        * @return string profile.wordpress.org URL
+        */
+       public function worg_profile_url( $url, $nicename ) {
+               return 'https://profiles.wordpress.org/' . $nicename;
+       }
+
+       /**
+        * Natural sorting for sub-projects, and attach whitelisted meta.
+        *
+        * @param GP_Project[] $sub_projects List of sub-projects.
+        * @param int          $parent_id    Parent project ID.
+        * @return GP_Project[] Filtered sub-projects.
+        */
+       public function natural_sort_projects( $sub_projects, $parent_id ) {
+               if ( in_array( $parent_id, array( 1, 13, 58 ) ) ) { // 1 = WordPress, 13 = BuddyPress, 58 = bbPress
+                       usort( $sub_projects, function( $a, $b ) {
+                               return - strcasecmp( $a->name, $b->name );
+                       } );
+               }
+
+               if ( in_array( $parent_id, array( 17, 523 ) ) ) { // 17 = Plugins, 523 = Themes
+                       usort( $sub_projects, function( $a, $b ) {
+                               return strcasecmp( $a->name, $b->name );
+                       } );
+               }
+
+               // Attach wp-themes meta keys
+               if ( 523 == $parent_id ) {
+                       foreach ( $sub_projects as $project ) {
+                               $project->non_db_field_names = array_merge( $project->non_db_field_names, array( 'version', 'screenshot' ) );
+                               $project->version = gp_get_meta( 'wp-themes', $project->id, 'version' );
+                               $project->screenshot = esc_url( gp_get_meta( 'wp-themes', $project->id, 'screenshot' ) );
+                       }
+               }
+
+               return $sub_projects;
+       }
+}
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationsinccliclassinitlocalephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/cli/class-init-locale.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/cli/class-init-locale.php                            (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/inc/cli/class-init-locale.php      2016-04-20 12:21:41 UTC (rev 2988)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,124 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+namespace WordPressdotorg\GlotPress\Customizations\CLI;
+
+use GP;
+use GP_Locales;
+use WP_CLI;
+use WP_CLI_Command;
+
+class Init_Locale extends WP_CLI_Command {
+
+       /**
+        * Initialize a new locale.
+        *
+        * ## OPTIONS
+        *
+        * <locale>
+        * : WordPress locale of a new locale.
+        *
+        * [--name]
+        * : Name of the locale.
+        *
+        * [--slug]
+        * : Slug of the locale.
+        */
+       public function __invoke( $args, $assoc_args ) {
+               global $wpdb;
+
+               $gp_locale = GP_Locales::by_field( 'wp_locale', $args[0] );
+               if ( ! $gp_locale ) {
+                       WP_CLI::error( sprintf( "There is no locale for '%s'.", $args[0] ) );
+               }
+
+               $name = empty( $assoc_args['name'] ) ? $gp_locale->english_name : $assoc_args['name'];
+               $slug = empty( $assoc_args['slug'] ) ? 'default' : $assoc_args['slug'];
+
+               WP_CLI::confirm(
+                       sprintf(
+                               "Data:\nWP Locale: %s\nName: %s\nSlug: %s\nDo you want to create translation sets for %s?",
+                               $gp_locale->wp_locale,
+                               $name,
+                               $slug,
+                               $gp_locale->wp_locale
+                       )
+               );
+
+               // WordPress + Meta
+               $projects = array(
+                       'wp/dev',
+                       'wp/dev/admin',
+                       'wp/dev/admin/network',
+                       'wp/dev/twentyten',
+                       'wp/dev/twentyeleven',
+                       'wp/dev/twentytwelve',
+                       'wp/dev/twentythirteen',
+                       'wp/dev/twentyfourteen',
+                       'wp/dev/twentyfifteen',
+               );
+
+               if ( 'default' === $slug ) {
+                       $projects = array_merge( $projects, array(
+                               'meta/rosetta',
+                               'meta/themes',
+                               'meta/plugins',
+                               'meta/forums',
+                               'bbpress/1.1.x',
+                       ) );
+               }
+
+               if ( 0 !== strpos( 'en_', $gp_locale->wp_locale ) ) {
+                       $projects[] = 'wp/dev/cc';
+               }
+
+               // Themes
+               $theme_projects = $wpdb->get_col( "SELECT path FROM {$wpdb->gp_projects} WHERE `parent_project_id` = 523" );
+               $projects = array_merge( $projects, $theme_projects );
+
+               // Plugins
+               $_plugin_projects = $wpdb->get_col( "SELECT path FROM {$wpdb->gp_projects} WHERE `parent_project_id` = 17" );
+               $plugin_projects = array();
+               foreach ( $_plugin_projects as $plugin_project ) {
+                       $plugin_projects[] = $plugin_project . '/dev';
+                       $plugin_projects[] = $plugin_project . '/dev-readme';
+                       $plugin_projects[] = $plugin_project . '/stable';
+                       $plugin_projects[] = $plugin_project . '/stable-readme';
+               }
+               unset( $_plugin_projects );
+               $projects = array_merge( $projects, $plugin_projects );
+
+               foreach ( $projects as $project_path ) {
+                       $project = GP::$project->by_path( $project_path );
+                       if ( ! $project ) {
+                               continue;
+                       }
+
+                       $new_set = array(
+                               'name'       => $name,
+                               'slug'       => $slug,
+                               'project_id' => $project->id,
+                               'locale'     => $gp_locale->slug,
+                       );
+                       $set = GP::$translation_set->create( $new_set );
+                       if ( $set ) {
+                               WP_CLI::line(
+                                       sprintf(
+                                               '%s added to %s.',
+                                               $gp_locale->wp_locale,
+                                               $project_path
+                                       )
+                               );
+                       } else {
+                               WP_CLI::warning(
+                                       sprintf(
+                                               '%s couldn\'t be added to %s.',
+                                               $gp_locale->wp_locale,
+                                               $project_path
+                                       )
+                               );
+                       }
+               }
+
+               WP_CLI::line( 'Done!' );
+       }
+}
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationsvendorwordpressdotorgclassautoloaderphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/vendor/wordpressdotorg/class-autoloader.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/vendor/wordpressdotorg/class-autoloader.php                              (rev 0)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/vendor/wordpressdotorg/class-autoloader.php        2016-04-20 12:21:41 UTC (rev 2988)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,93 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+namespace WordPressdotorg\Autoload;
+
+/**
+ * An Autoloader which respects WordPress's filename standards.
+ *
+ * @package WordPressdotorg\Autoload
+ */
+class Autoloader {
+
+       /**
+        * Namespace separator.
+        */
+       const NS_SEPARATOR = '\\';
+
+       /**
+        * The prefix to compare classes against.
+        *
+        * @var string
+        * @access protected
+        */
+       protected $prefix;
+
+       /**
+        * Length of the prefix string.
+        *
+        * @var int
+        * @access protected
+        */
+       protected $prefix_length;
+
+       /**
+        * Path to the file to be loaded.
+        *
+        * @var string
+        * @access protected
+        */
+       protected $path;
+
+       /**
+        * Constructor.
+        *
+        * @param string $prefix Prefix all classes have in common.
+        * @param string $path   Path to the files to be loaded.
+        */
+       public function __construct( $prefix, $path ) {
+               $this->prefix        = $prefix;
+               $this->prefix_length = strlen( $prefix );
+               $this->path          = trailingslashit( $path );
+       }
+
+       /**
+        * Loads a class if it starts with `$this->prefix`.
+        *
+        * @param string $class The class to be loaded.
+        */
+       public function load( $class ) {
+               if ( strpos( $class, $this->prefix . self::NS_SEPARATOR ) !== 0 ) {
+                       return;
+               }
+
+               // Strip prefix from the start (ala PSR-4)
+               $class = substr( $class, $this->prefix_length + 1 );
+               $class = strtolower( $class );
+               $file  = '';
+
+               if ( false !== ( $last_ns_pos = strripos( $class, self::NS_SEPARATOR ) ) ) {
+                       $namespace = substr( $class, 0, $last_ns_pos );
+                       $namespace = str_replace( '_', '-', $namespace );
+                       $class     = substr( $class, $last_ns_pos + 1 );
+                       $file      = str_replace( self::NS_SEPARATOR, DIRECTORY_SEPARATOR, $namespace ) . DIRECTORY_SEPARATOR;
+               }
+
+               $file .= 'class-' . str_replace( '_', '-', $class ) . '.php';
+
+               $path = $this->path . $file;
+
+               if ( file_exists( $path ) ) {
+                       require $path;
+               }
+       }
+}
+
+/**
+ * Registers Autoloader's autoload function.
+ *
+ * @param string $prefix
+ * @param string $path
+ */
+function register_class_path( $prefix, $path ) {
+       $loader = new Autoloader( $prefix, $path );
+       spl_autoload_register( array( $loader, 'load' ) );
+}
</ins></span></pre></div>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginswporggpcustomizationswporggpcustomizationsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/wporg-gp-customizations.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/wporg-gp-customizations.php      2016-04-20 12:10:40 UTC (rev 2987)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-customizations/wporg-gp-customizations.php        2016-04-20 12:21:41 UTC (rev 2988)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2,112 +2,25 @@
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Plugin name: GlotPress: WordPress.org Customizations
</span><span class="cx" style="display: block; padding: 0 10px">  * Description: Provides general customizations for translate.wordpress.org.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Version:     1.0
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Version:     2.0
</ins><span class="cx" style="display: block; padding: 0 10px">  * Author:      WordPress.org
</span><span class="cx" style="display: block; padding: 0 10px">  * Author URI:  http://wordpress.org/
</span><span class="cx" style="display: block; padding: 0 10px">  * License:     GPLv2 or later
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-class WPorg_GP_Customizations {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+namespace WordPressdotorg\GlotPress\Customizations;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        function __construct() {
-               add_filter( 'gp_url_profile', array( $this, 'worg_profile_url' ), 10, 2 );
-               add_filter( 'gp_projects', array( $this, 'natural_sort_projects' ), 10, 2 );
-               add_action( 'gp_project_created', array( $this, 'update_projects_last_updated' ) );
-               add_action( 'gp_project_saved', array( $this, 'update_projects_last_updated' ) );
-               add_filter( 'pre_handle_404', array( $this, 'short_circuit_handle_404' ) );
-               add_action( 'wp_default_scripts', array( $this, 'bump_script_versions' ) );
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+use WordPressdotorg\Autoload;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        /**
-        * Changes the versions of some default scripts for cache bust.
-        *
-        * @see https://wordpress.slack.com/archives/meta-i18n/p1460626195000251
-        *
-        * @param WP_Scripts &$scripts WP_Scripts instance, passed by reference.
-        */
-       public function bump_script_versions( &$scripts ) {
-               foreach ( [ 'gp-editor', 'gp-glossary' ] as $handle ) {
-                       if ( isset( $scripts->registered[ $handle ] ) && '20160329' === $scripts->registered[ $handle ]->ver ) {
-                               $scripts->registered[ $handle ]->ver = '20160329a';
-                       }
-               }
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Store the root plugin file for usage with functions which use the plugin basename.
+define( __NAMESPACE__ . '\PLUGIN_FILE', __FILE__ );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        /**
-        * Short circuits WordPress' status handler to prevent unnecessary headers
-        * which prevent caching.
-        *
-        * @return bool True if a request for GlotPress, false if not.
-        */
-       public function short_circuit_handle_404() {
-               if ( is_glotpress() ) {
-                       return true;
-               }
-
-               return false;
-       }
-
-       /**
-        * Stores the timestamp of the last update for projects.
-        *
-        * Used by the Rosetta Roles plugin to invalidate local caches.
-        */
-       public function update_projects_last_updated() {
-               update_option( 'wporg_projects_last_updated', time() );
-       }
-
-       /**
-        * Returns the profile.wordpress.org URL of a user.
-        *
-        * @param string $url      Current profile URL.
-        * @param string $nicename The URL-friendly user name.
-        * @return string profile.wordpress.org URL
-        */
-       public function worg_profile_url( $url, $nicename ) {
-               return 'https://profiles.wordpress.org/' . $nicename;
-       }
-
-       /**
-        * Natural sorting for sub-projects, and attach whitelisted meta.
-        *
-        * @param GP_Project[] $sub_projects List of sub-projects.
-        * @param int          $parent_id    Parent project ID.
-        * @return [<description>]GP_Project[] Filtered sub-projects.
-        */
-       public function natural_sort_projects( $sub_projects, $parent_id ) {
-               if ( in_array( $parent_id, array( 1, 13, 58 ) ) ) { // 1 = WordPress, 13 = BuddyPress, 58 = bbPress
-                       usort( $sub_projects, function( $a, $b ) {
-                               return - strcasecmp( $a->name, $b->name );
-                       } );
-               }
-
-               if ( in_array( $parent_id, array( 17, 523 ) ) ) { // 17 = Plugins, 523 = Themes
-                       usort( $sub_projects, function( $a, $b ) {
-                               return strcasecmp( $a->name, $b->name );
-                       } );
-               }
-
-               // Attach wp-themes meta keys
-               if ( 523 == $parent_id ) {
-                       foreach ( $sub_projects as $project ) {
-                               $project->non_db_field_names = array_merge( $project->non_db_field_names, array( 'version', 'screenshot' ) );
-                               $project->version = gp_get_meta( 'wp-themes', $project->id, 'version' );
-                               $project->screenshot = esc_url( gp_get_meta( 'wp-themes', $project->id, 'screenshot' ) );
-                       }
-               }
-
-               return $sub_projects;
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+if ( ! class_exists( '\WordPressdotorg\Autoload\Autoloader', false ) ) {
+       include __DIR__ . '/vendor/wordpressdotorg/class-autoloader.php';
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function wporg_gp_customizations() {
-       global $wporg_gp_customizations;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Register an Autoloader for all files.
+Autoload\register_class_path( __NAMESPACE__, __DIR__ . '/inc' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        if ( ! isset( $wporg_gp_customizations ) ) {
-               $wporg_gp_customizations = new WPorg_GP_Customizations();
-       }
-
-       return $wporg_gp_customizations;
-}
-add_action( 'plugins_loaded', 'wporg_gp_customizations' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Instantiate the Plugin.
+Plugin::get_instance();
</ins></span></pre>
</div>
</div>

</body>
</html>