* @ingroup SpecialPage
*/
+use MediaWiki\MediaWikiServices;
+
/**
* This special page lists the defined password policies for user groups.
* See also @ref $wgPasswordPolicy.
$out = $this->getOutput();
$out->addModuleStyles( 'mediawiki.special' );
- $this->addHelpLink( 'Help:Password policies' );
+ // TODO: Have specific user documentation page for this feature
+ $this->addHelpLink( 'Manual:$wgPasswordPolicy' );
$out->addHTML(
Xml::openElement( 'table', [ 'class' => 'wikitable mw-passwordpolicies-table' ] ) .
$groupnameLocalized = UserGroupMembership::getGroupName( $group );
$grouppageLocalizedTitle = UserGroupMembership::getGroupPage( $group )
- ?: Title::newFromText( MWNamespace::getCanonicalName( NS_PROJECT ) . ':' . $group );
+ ?: Title::newFromText( MediaWikiServices::getInstance()->getNamespaceInfo()->
+ getCanonicalName( NS_PROJECT ) . ':' . $group );
$grouppage = $linkRenderer->makeLink(
$grouppageLocalizedTitle,
* Create a HTML list of password policies for $group
*
* @param array $policies Original $wgPasswordPolicy array
- * @param array $group Group to format password policies for
+ * @param string $group Group to format password policies for
*
* @return string HTML list of all applied password policies
*/
);
$ret = [];
- foreach ( $groupPolicies as $gp => $val ) {
- if ( $val === false ) {
- // Policy isn't enabled, so no need to dislpay it
+ foreach ( $groupPolicies as $gp => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = [ 'value' => $settings ];
+ }
+ $val = $settings['value'];
+ $flags = array_diff_key( $settings, [ 'value' => true ] );
+ if ( !$val ) {
+ // Policy isn't enabled, so no need to display it
continue;
- } elseif ( $val === true ) {
- $msg = $this->msg( 'passwordpolicies-policy-' . strtolower( $gp ) );
+ }
+ $msg = $this->msg( 'passwordpolicies-policy-' . strtolower( $gp ) )->numParams( $val );
+ $flagMsgs = [];
+ foreach ( array_filter( $flags ) as $flag => $value ) {
+ $flagMsg = $this->msg( 'passwordpolicies-policyflag-' . strtolower( $flag ) );
+ $flagMsg->params( $value );
+ $flagMsgs[] = $flagMsg;
+ }
+ if ( $flagMsgs ) {
+ $ret[] = $this->msg(
+ 'passwordpolicies-policy-displaywithflags',
+ $msg,
+ '<span class="mw-passwordpolicies-policy-name">' . $gp . '</span>',
+ $this->getLanguage()->commaList( $flagMsgs )
+ )->parse();
} else {
- $msg = $this->msg( 'passwordpolicies-policy-' . strtolower( $gp ) )->numParams( $val );
+ $ret[] = $this->msg(
+ 'passwordpolicies-policy-display',
+ $msg,
+ '<span class="mw-passwordpolicies-policy-name">' . $gp . '</span>'
+ )->parse();
}
- $ret[] = $this->msg(
- 'passwordpolicies-policy-display',
- $msg,
- '<span class="mw-passwordpolicies-policy-name">' . $gp . '</span>'
- )->parse();
}
- if ( !count( $ret ) ) {
+ if ( $ret === [] ) {
return '';
} else {
return '<ul><li>' . implode( "</li>\n<li>", $ret ) . '</li></ul>';