File: /var/www/html/wp-content/plugins/plugin-check/includes/Traits/License_Utils.php
<?php
/**
* Trait WordPress\Plugin_Check\Traits\License_Utils
*
* @package plugin-check
*/
namespace WordPress\Plugin_Check\Traits;
/**
* Trait for license utilities.
*
* @since 1.3.0
*/
trait License_Utils {
/**
* Returns normalized license.
*
* @since 1.3.0
*
* @param string $license The license to normalize.
* @return string Normalized license.
*/
protected function get_normalized_license( $license ) {
$license = trim( $license );
$license = str_replace( ' ', ' ', $license );
// Remove some strings at the end.
$strings_to_remove = array(
'.',
'http://www.gnu.org/licenses/old-licenses/gpl-2.0.html',
'https://www.gnu.org/licenses/old-licenses/gpl-2.0.html',
'https://www.gnu.org/licenses/gpl-3.0.html',
' or later',
'-or-later',
'+',
);
foreach ( $strings_to_remove as $string_to_remove ) {
$position = strrpos( $license, $string_to_remove );
if ( false !== $position ) {
// To remove from the end, the string to remove must be at the end.
if ( $position + strlen( $string_to_remove ) === strlen( $license ) ) {
$license = trim( substr( $license, 0, $position ) );
}
}
}
// Versions.
$license = str_replace( '-', '', $license );
$license = str_replace( 'GNU General Public License (GPL)', 'GPL', $license );
$license = str_replace( 'GNU General Public License', 'GPL', $license );
$license = str_replace( ' version ', 'v', $license );
$license = preg_replace( '/GPL\s*[-|\.]*\s*[v]?([0-9])(\.[0])?/i', 'GPL$1', $license, 1 );
$license = preg_replace( '/Apache.*?([0-9])(\.[0])?/i', 'Apache$1', $license );
$license = preg_replace( '/(The\s+)?Unlicense/i', 'Unlicense', $license );
// Normalize WTFPL variations - must come before version removal to catch full text.
$license = preg_replace( '/Do\s+What\s+The\s+F[^\s]*\s+You\s+Want\s+To\s+Public\s+License/i', 'WTFPL', $license );
// Remove version numbers from WTFPL (e.g., "WTFPL v2" -> "WTFPL").
$license = preg_replace( '/WTFPL\s*[v]?([0-9])/i', 'WTFPL', $license );
$license = str_replace( '.', '', $license );
return $license;
}
/**
* Checks if the license is valid identifier.
*
* @since 1.3.0
*
* @param string $license License text.
* @return bool true if the license is valid identifier, otherwise false.
*/
protected function is_license_valid_identifier( $license ) {
$match = preg_match( '/^([a-z0-9\-\+\.]+)(\sor\s([a-z0-9\-\+\.]+))*$/i', $license );
return ( false === $match || 0 === $match ) ? false : true;
}
/**
* Checks if the license is GPL compatible.
*
* @since 1.3.0
*
* @param string $license License text.
* @return bool true if the license is GPL compatible, otherwise false.
*/
protected function is_license_gpl_compatible( $license ) {
// Check for WTFPL in full text form before normalization.
$wtfpl_match = preg_match( '/Do\s+What\s+The\s+F[^\s]*\s+You\s+Want\s+To\s+Public\s+License/i', $license );
if ( $wtfpl_match ) {
return true;
}
$match = preg_match( '/GPL|GNU|MIT|FreeBSD|New BSD|BSD-3-Clause|BSD 3 Clause|OpenLDAP|Expat|Apache2|MPL20|ISC|CC0|Unlicense|WTFPL/im', $license );
return ( false === $match || 0 === $match ) ? false : true;
}
}