Making WordPress.org

Ticket #6256: patch.6256.3.diff

File patch.6256.3.diff, 2.8 KB (added by akirk, 3 years ago)
  • wp-content/plugins/wporg-gp-customizations/inc/class-plugin.php

     
    5555
    5656                add_filter( 'gp_for_translation_clauses', array( $this, 'allow_searching_for_no_author_translations' ), 10, 3 );
    5757
     58                add_filter( 'gp_warning_discarded', array( $this, 'disable_discarding_some_warnings' ), 10, 5 );
     59
    5860                // Cron.
    5961                add_filter( 'cron_schedules', [ $this, 'register_cron_schedules' ] );
    6062                add_action( 'init', [ $this, 'register_cron_events' ] );
     
    325327        }
    326328
    327329        /**
     330         * Allow disabling some warnings.
     331         *
     332         * See https://meta.trac.wordpress.org/ticket/6256
     333         */
     334        function disable_discarding_some_warnings( $project_id, $translation_set_id, $translation_id, $warning, $user ) {
     335                if ( 'unexpected_sprintf_token' === $warning ) {
     336                        GP::$current_route->die_with_error( __( 'This warning cannot be discarded. Please remove the unexpected placeholders. A % needs to be translated as %%.', 'wporg' ) );
     337                }
     338
     339                if ( 'placeholders' === $warning ) {
     340                        // Since we only get the warning key, we need to determine the exact warning to decide if we should prevent it.
     341                        function _placeholders_counts( $string, $re ) {
     342                                $counts = array();
     343                                preg_match_all( "/$re/", $string, $matches );
     344                                foreach ( $matches[0] as $match ) {
     345                                        $counts[ $match ] = gp_array_get( $counts, $match, 0 ) + 1;
     346                                }
     347
     348                                return $counts;
     349                        }
     350
     351                        $placeholders_re = apply_filters( 'gp_warning_placeholders_re', '(?<!%)%(\d+\$(?:\d+)?)?(\.\d+)?[bcdefgosuxEFGX%l@]' );
     352                        $translation = GP::$translation->get( $translation_id );
     353                        $original = GP::$original->get( $translation->original_id );
     354                        foreach ( $translation->translations() as $k => $t ) {
     355                                $original_counts    = _placeholders_counts( $k === 0 ? $original->singular : $original->plural, $placeholders_re );
     356                                $translation_counts = _placeholders_counts( $t, $placeholders_re );
     357                                $all_placeholders   = array_unique( array_merge( array_keys( $original_counts ), array_keys( $translation_counts ) ) );
     358                                foreach ( $all_placeholders as $placeholder ) {
     359                                        $original_count    = gp_array_get( $original_counts, $placeholder, 0 );
     360                                        $translation_count = gp_array_get( $translation_counts, $placeholder, 0 );
     361                                        if ( $original_count < $translation_count ) {
     362                                                if ( '%%' === $placeholder ) {
     363                                                        // Extra %% is ok.
     364                                                        continue;
     365                                                }
     366                                                GP::$current_route->die_with_error( __( 'This warning cannot be discarded. Please remove the extra placeholders.', 'wporg' ) );
     367                                        }
     368                                }
     369                        }
     370                }
     371        }
     372
     373        /**
    328374         * Adds a link to view originals in consistency tool.
    329375         *
    330376         * @param array              $more_links      The links to be output.