<!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>