diff --git a/NEWS b/NEWS index 5a865955281d..7af52dd802fe 100644 --- a/NEWS +++ b/NEWS @@ -25,6 +25,7 @@ PHP NEWS throwing a ValueError. (Marc Bennewitz) - Intl: + . Added Spoofchecker::getRestrictionLevel(). (Weilin Du) . Added Collator::getRules() and collator_get_rules(). (Weilin Du) . Added IntlRelativeDateTimeFormatter for locale-aware relative date and time formatting, with enums for styles, capitalization contexts, and units. diff --git a/UPGRADING b/UPGRADING index a4df23352639..562905653961 100644 --- a/UPGRADING +++ b/UPGRADING @@ -129,6 +129,8 @@ PHP 8.7 UPGRADE NOTES to the root collation order; the full root/UCA rules are not included. An empty string is returned if no tailoring rules are available, or false if the rules cannot be converted to UTF-8. + . Added Spoofchecker::getRestrictionLevel() to retrieve the configured + restriction level as one of the Spoofchecker restriction level constants. ======================================== 7. New Classes and Interfaces diff --git a/ext/intl/spoofchecker/spoofchecker.stub.php b/ext/intl/spoofchecker/spoofchecker.stub.php index 160ad63128b8..0232f5ccbe4a 100644 --- a/ext/intl/spoofchecker/spoofchecker.stub.php +++ b/ext/intl/spoofchecker/spoofchecker.stub.php @@ -78,6 +78,9 @@ public function setChecks(int $checks): void {} /** @tentative-return-type */ public function setRestrictionLevel(int $level): void {} + + public function getRestrictionLevel(): int {} + public function setAllowedChars(string $pattern, int $patternOptions = 0): void {} public function getSkeleton(string $string): string|false {} diff --git a/ext/intl/spoofchecker/spoofchecker_arginfo.h b/ext/intl/spoofchecker/spoofchecker_arginfo.h index 236a292767ca..550096605ea8 100644 --- a/ext/intl/spoofchecker/spoofchecker_arginfo.h +++ b/ext/intl/spoofchecker/spoofchecker_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit spoofchecker.stub.php instead. - * Stub hash: e701a18d8fd0c9bba50ee184e700263bffd882f8 */ + * Stub hash: f836555c3a7d642b88c0856e0366447f0a70a9c7 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Spoofchecker___construct, 0, 0, 0) ZEND_END_ARG_INFO() @@ -27,6 +27,9 @@ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Spoofchecker_set ZEND_ARG_TYPE_INFO(0, level, IS_LONG, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Spoofchecker_getRestrictionLevel, 0, 0, IS_LONG, 0) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Spoofchecker_setAllowedChars, 0, 1, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, patternOptions, IS_LONG, 0, "0") @@ -56,6 +59,7 @@ ZEND_METHOD(Spoofchecker, areConfusable); ZEND_METHOD(Spoofchecker, setAllowedLocales); ZEND_METHOD(Spoofchecker, setChecks); ZEND_METHOD(Spoofchecker, setRestrictionLevel); +ZEND_METHOD(Spoofchecker, getRestrictionLevel); ZEND_METHOD(Spoofchecker, setAllowedChars); ZEND_METHOD(Spoofchecker, getSkeleton); #if U_ICU_VERSION_MAJOR_NUM >= 74 @@ -70,6 +74,7 @@ static const zend_function_entry class_Spoofchecker_methods[] = { ZEND_ME(Spoofchecker, setAllowedLocales, arginfo_class_Spoofchecker_setAllowedLocales, ZEND_ACC_PUBLIC) ZEND_ME(Spoofchecker, setChecks, arginfo_class_Spoofchecker_setChecks, ZEND_ACC_PUBLIC) ZEND_ME(Spoofchecker, setRestrictionLevel, arginfo_class_Spoofchecker_setRestrictionLevel, ZEND_ACC_PUBLIC) + ZEND_ME(Spoofchecker, getRestrictionLevel, arginfo_class_Spoofchecker_getRestrictionLevel, ZEND_ACC_PUBLIC) ZEND_ME(Spoofchecker, setAllowedChars, arginfo_class_Spoofchecker_setAllowedChars, ZEND_ACC_PUBLIC) ZEND_ME(Spoofchecker, getSkeleton, arginfo_class_Spoofchecker_getSkeleton, ZEND_ACC_PUBLIC) #if U_ICU_VERSION_MAJOR_NUM >= 74 diff --git a/ext/intl/spoofchecker/spoofchecker_main.cpp b/ext/intl/spoofchecker/spoofchecker_main.cpp index 8caa5e345aa9..cbadf6f3d1be 100644 --- a/ext/intl/spoofchecker/spoofchecker_main.cpp +++ b/ext/intl/spoofchecker/spoofchecker_main.cpp @@ -166,6 +166,19 @@ PHP_METHOD(Spoofchecker, setRestrictionLevel) } /* }}} */ +/* {{{ Get the configured restriction level. */ +PHP_METHOD(Spoofchecker, getRestrictionLevel) +{ + SPOOFCHECKER_METHOD_INIT_VARS; + + ZEND_PARSE_PARAMETERS_NONE(); + + SPOOFCHECKER_METHOD_FETCH_OBJECT; + + RETURN_LONG(uspoof_getRestrictionLevel(co->uspoof)); +} +/* }}} */ + PHP_METHOD(Spoofchecker, setAllowedChars) { zend_string *pattern; diff --git a/ext/intl/tests/spoofchecker_get_restriction_level.phpt b/ext/intl/tests/spoofchecker_get_restriction_level.phpt new file mode 100644 index 000000000000..8490fbb12376 --- /dev/null +++ b/ext/intl/tests/spoofchecker_get_restriction_level.phpt @@ -0,0 +1,35 @@ +--TEST-- +Spoofchecker::getRestrictionLevel() returns the configured restriction level +--EXTENSIONS-- +intl +--FILE-- +getRestrictionLevel() === Spoofchecker::HIGHLY_RESTRICTIVE); + +foreach ([ + Spoofchecker::ASCII, + Spoofchecker::SINGLE_SCRIPT_RESTRICTIVE, + Spoofchecker::HIGHLY_RESTRICTIVE, + Spoofchecker::MODERATELY_RESTRICTIVE, + Spoofchecker::MINIMALLY_RESTRICTIVE, + Spoofchecker::UNRESTRICTIVE, +] as $level) { + $checker->setRestrictionLevel($level); + var_dump($checker->getRestrictionLevel() === $level); +} + +// Disabling checks does not change the configured restriction level. +$checker->setRestrictionLevel(Spoofchecker::ASCII); +$checker->setChecks(0); +var_dump($checker->getRestrictionLevel() === Spoofchecker::ASCII); +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) diff --git a/ext/intl/tests/spoofchecker_get_restriction_level_unconstructed.phpt b/ext/intl/tests/spoofchecker_get_restriction_level_unconstructed.phpt new file mode 100644 index 000000000000..35317eb3553f --- /dev/null +++ b/ext/intl/tests/spoofchecker_get_restriction_level_unconstructed.phpt @@ -0,0 +1,18 @@ +--TEST-- +Spoofchecker::getRestrictionLevel() rejects an unconstructed object +--EXTENSIONS-- +intl +--FILE-- +getRestrictionLevel(); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +?> +--EXPECT-- +Found unconstructed Spoofchecker