Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
24 / 24
EntitySchema\DataAccess\SchemaCleaner
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
11
100.00% covered (success)
100.00%
24 / 24
 cleanupParameters
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 cleanupArrayOfStrings
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 trimWhitespaceAndControlChars
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 cleanAliasGroups
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
9 / 9
 filterEmptyStrings
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
4 / 4
<?php
namespace EntitySchema\DataAccess;
/**
 * @license GPL-2.0-or-later
 */
class SchemaCleaner {
    /**
     * @param string[] $labels
     * @param string[] $descriptions
     * @param array<string,string[]> $aliasGroups
     * @param string $schemaText
     */
    public static function cleanupParameters(
        array &$labels,
        array &$descriptions,
        array &$aliasGroups,
        &$schemaText
    ) {
        $labels = self::cleanupArrayOfStrings( $labels );
        $descriptions = self::cleanupArrayOfStrings( $descriptions );
        $aliasGroups = self::cleanAliasGroups( $aliasGroups );
        $schemaText = self::trimWhitespaceAndControlChars( $schemaText );
    }
    public static function cleanupArrayOfStrings( array $arrayOfStrings ) {
        foreach ( $arrayOfStrings as &$string ) {
            $string = self::trimWhitespaceAndControlChars( $string );
        }
        $arrayOfStrings = self::filterEmptyStrings( $arrayOfStrings );
        ksort( $arrayOfStrings );
        return $arrayOfStrings;
    }
    /**
     * @param string $string The string to trim
     *
     * @return string The trimmed string after applying the regex
     */
    public static function trimWhitespaceAndControlChars( $string ) {
        return preg_replace( '/^[\p{Z}\p{Cc}\p{Cf}]+|[\p{Z}\p{Cc}\p{Cf}]+$/u', '', $string );
    }
    private static function cleanAliasGroups( array $aliasGroups ): array {
        foreach ( $aliasGroups as &$aliasGroup ) {
            $aliasGroup = self::cleanupArrayOfStrings( $aliasGroup );
        }
        unset( $aliasGroup );
        foreach ( $aliasGroups as $languageCode => &$aliasGroup ) {
            $aliasGroup = array_values( array_unique( $aliasGroup ) );
            if ( $aliasGroup === [] ) {
                unset( $aliasGroups[$languageCode] );
            }
        }
        ksort( $aliasGroups );
        return $aliasGroups;
    }
    /**
     * Remove keys with empty values/strings from the array
     *
     * Note: This does not renumber numeric keys!
     *
     * @param string[] $array
     *
     * @return string[]
     */
    private static function filterEmptyStrings( array $array ): array {
        foreach ( $array as $key => $value ) {
            if ( $value === '' ) {
                unset( $array[$key] );
            }
        }
        return $array;
    }
}