$user = $this->getUser();
$userCanManage = $user->isAllowed( 'managechangetags' );
+ $userCanDelete = $user->isAllowed( 'deletechangetags' );
$userCanEditInterface = $user->isAllowed( 'editinterface' );
// Show form to create a tag
if ( $userCanManage ) {
- $fields = array(
- 'Tag' => array(
+ $fields = [
+ 'Tag' => [
'type' => 'text',
'label' => $this->msg( 'tags-create-tag-name' )->plain(),
'required' => true,
- ),
- 'Reason' => array(
+ ],
+ 'Reason' => [
'type' => 'text',
'label' => $this->msg( 'tags-create-reason' )->plain(),
'size' => 50,
- ),
- 'IgnoreWarnings' => array(
+ ],
+ 'IgnoreWarnings' => [
'type' => 'hidden',
- ),
- );
+ ],
+ ];
$form = new HTMLForm( $fields, $this->getContext() );
$form->setAction( $this->getPageTitle( 'create' )->getLocalURL() );
$form->setWrapperLegendMsg( 'tags-create-heading' );
- $form->setHeaderText( $this->msg( 'tags-create-explanation' )->plain() );
- $form->setSubmitCallback( array( $this, 'processCreateTagForm' ) );
+ $form->setHeaderText( $this->msg( 'tags-create-explanation' )->parseAsBlock() );
+ $form->setSubmitCallback( [ $this, 'processCreateTagForm' ] );
$form->setSubmitTextMsg( 'tags-create-submit' );
$form->show();
ChangeTags::listExtensionDefinedTags(), true );
// List all defined tags, even if they were never applied
- $definedTags = array_keys( array_merge(
- $this->explicitlyDefinedTags, $this->extensionDefinedTags ) );
+ $definedTags = array_keys( $this->explicitlyDefinedTags + $this->extensionDefinedTags );
// Show header only if there exists atleast one tag
if ( !$tagStats && !$definedTags ) {
Xml::tags( 'th', null, $this->msg( 'tags-source-header' )->parse() ) .
Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() ) .
- ( $userCanManage ?
- Xml::tags( 'th', array( 'class' => 'unsortable' ),
+ ( ( $userCanManage || $userCanDelete ) ?
+ Xml::tags( 'th', [ 'class' => 'unsortable' ],
$this->msg( 'tags-actions-header' )->parse() ) :
'' )
);
// Insert tags that have been applied at least once
foreach ( $tagStats as $tag => $hitcount ) {
- $html .= $this->doTagRow( $tag, $hitcount, $userCanManage, $userCanEditInterface );
+ $html .= $this->doTagRow( $tag, $hitcount, $userCanManage,
+ $userCanDelete, $userCanEditInterface );
}
// Insert tags defined somewhere but never applied
foreach ( $definedTags as $tag ) {
if ( !isset( $tagStats[$tag] ) ) {
- $html .= $this->doTagRow( $tag, 0, $userCanManage, $userCanEditInterface );
+ $html .= $this->doTagRow( $tag, 0, $userCanManage, $userCanDelete, $userCanEditInterface );
}
}
$out->addHTML( Xml::tags(
'table',
- array( 'class' => 'mw-datatable sortable mw-tags-table' ),
+ [ 'class' => 'mw-datatable sortable mw-tags-table' ],
$html
) );
}
- function doTagRow( $tag, $hitcount, $showActions, $showEditLinks ) {
+ function doTagRow( $tag, $hitcount, $showManageActions, $showDeleteActions, $showEditLinks ) {
$newRow = '';
$newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
+ $linkRenderer = $this->getLinkRenderer();
$disp = ChangeTags::tagDescription( $tag );
if ( $showEditLinks ) {
$disp .= ' ';
- $editLink = Linker::link(
+ $editLink = $linkRenderer->makeLink(
$this->msg( "tag-$tag" )->inContentLanguage()->getTitle(),
- $this->msg( 'tags-edit' )->escaped()
+ $this->msg( 'tags-edit' )->text()
);
$disp .= $this->msg( 'parentheses' )->rawParams( $editLink )->escaped();
}
$desc = !$msg->exists() ? '' : $msg->parse();
if ( $showEditLinks ) {
$desc .= ' ';
- $editDescLink = Linker::link(
+ $editDescLink = $linkRenderer->makeLink(
$this->msg( "tag-$tag-description" )->inContentLanguage()->getTitle(),
- $this->msg( 'tags-edit' )->escaped()
+ $this->msg( 'tags-edit' )->text()
);
$desc .= $this->msg( 'parentheses' )->rawParams( $editDescLink )->escaped();
}
$newRow .= Xml::tags( 'td', null, $desc );
- $sourceMsgs = array();
+ $sourceMsgs = [];
$isExtension = isset( $this->extensionDefinedTags[$tag] );
$isExplicit = isset( $this->explicitlyDefinedTags[$tag] );
if ( $isExtension ) {
$activeMsg = ( $isActive ? 'tags-active-yes' : 'tags-active-no' );
$newRow .= Xml::tags( 'td', null, $this->msg( $activeMsg )->escaped() );
- $hitcountLabel = $this->msg( 'tags-hitcount' )->numParams( $hitcount )->escaped();
+ $hitcountLabelMsg = $this->msg( 'tags-hitcount' )->numParams( $hitcount );
if ( $this->getConfig()->get( 'UseTagFilter' ) ) {
- $hitcountLabel = Linker::link(
+ $hitcountLabel = $linkRenderer->makeLink(
SpecialPage::getTitleFor( 'Recentchanges' ),
- $hitcountLabel,
- array(),
- array( 'tagfilter' => $tag )
+ $hitcountLabelMsg->text(),
+ [],
+ [ 'tagfilter' => $tag ]
);
+ } else {
+ $hitcountLabel = $hitcountLabelMsg->escaped();
}
// add raw $hitcount for sorting, because tags-hitcount contains numbers and letters
- $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLabel );
+ $newRow .= Xml::tags( 'td', [ 'data-sort-value' => $hitcount ], $hitcountLabel );
// actions
- if ( $showActions ) { // we've already checked that the user had the requisite userright
- $actionLinks = array();
-
- // delete
- if ( ChangeTags::canDeleteTag( $tag )->isOK() ) {
- $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'delete' ),
- $this->msg( 'tags-delete' )->escaped(),
- array(),
- array( 'tag' => $tag ) );
- }
+ $actionLinks = [];
+
+ // delete
+ if ( $showDeleteActions && ChangeTags::canDeleteTag( $tag )->isOK() ) {
+ $actionLinks[] = $linkRenderer->makeKnownLink(
+ $this->getPageTitle( 'delete' ),
+ $this->msg( 'tags-delete' )->text(),
+ [],
+ [ 'tag' => $tag ] );
+ }
+
+ if ( $showManageActions ) { // we've already checked that the user had the requisite userright
// activate
if ( ChangeTags::canActivateTag( $tag )->isOK() ) {
- $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'activate' ),
- $this->msg( 'tags-activate' )->escaped(),
- array(),
- array( 'tag' => $tag ) );
+ $actionLinks[] = $linkRenderer->makeKnownLink(
+ $this->getPageTitle( 'activate' ),
+ $this->msg( 'tags-activate' )->text(),
+ [],
+ [ 'tag' => $tag ] );
}
// deactivate
if ( ChangeTags::canDeactivateTag( $tag )->isOK() ) {
- $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'deactivate' ),
- $this->msg( 'tags-deactivate' )->escaped(),
- array(),
- array( 'tag' => $tag ) );
+ $actionLinks[] = $linkRenderer->makeKnownLink(
+ $this->getPageTitle( 'deactivate' ),
+ $this->msg( 'tags-deactivate' )->text(),
+ [],
+ [ 'tag' => $tag ] );
}
+ }
+
+ if ( $showDeleteActions || $showManageActions ) {
$newRow .= Xml::tags( 'td', null, $this->getLanguage()->pipeList( $actionLinks ) );
}
return true;
} elseif ( $status->isOK() ) {
// we have some warnings, so we show a confirmation form
- $fields = array(
- 'Tag' => array(
+ $fields = [
+ 'Tag' => [
'type' => 'hidden',
'default' => $data['Tag'],
- ),
- 'Reason' => array(
+ ],
+ 'Reason' => [
'type' => 'hidden',
'default' => $data['Reason'],
- ),
- 'IgnoreWarnings' => array(
+ ],
+ 'IgnoreWarnings' => [
'type' => 'hidden',
'default' => '1',
- ),
- );
+ ],
+ ];
// fool HTMLForm into thinking the form hasn't been submitted yet. Otherwise
// we get into an infinite loop!
$headerText = $this->msg( 'tags-create-warnings-above', $tag,
count( $status->getWarningsArray() ) )->parseAsBlock() .
- $out->parse( $status->getWikitext() ) .
+ $out->parse( $status->getWikiText() ) .
$this->msg( 'tags-create-warnings-below' )->parseAsBlock();
$subform = new HTMLForm( $fields, $this->getContext() );
$subform->setAction( $this->getPageTitle( 'create' )->getLocalURL() );
$subform->setWrapperLegendMsg( 'tags-create-heading' );
$subform->setHeaderText( $headerText );
- $subform->setSubmitCallback( array( $this, 'processCreateTagForm' ) );
+ $subform->setSubmitCallback( [ $this, 'processCreateTagForm' ] );
$subform->setSubmitTextMsg( 'htmlform-yes' );
$subform->show();
$out->addBacklinkSubtitle( $this->getPageTitle() );
return true;
} else {
- $out->addWikiText( "<div class=\"error\">\n" . $status->getWikitext() .
+ $out->addWikiText( "<div class=\"error\">\n" . $status->getWikiText() .
"\n</div>" );
return false;
}
protected function showDeleteTagForm( $tag ) {
$user = $this->getUser();
- if ( !$user->isAllowed( 'managechangetags' ) ) {
- throw new PermissionsError( 'managechangetags' );
+ if ( !$user->isAllowed( 'deletechangetags' ) ) {
+ throw new PermissionsError( 'deletechangetags' );
}
$out = $this->getOutput();
$preText .= $this->msg( 'tags-delete-explanation-active', $tag )->parseAsBlock();
}
- $fields = array();
- $fields['Reason'] = array(
+ $fields = [];
+ $fields['Reason'] = [
'type' => 'text',
'label' => $this->msg( 'tags-delete-reason' )->plain(),
'size' => 50,
- );
- $fields['HiddenTag'] = array(
+ ];
+ $fields['HiddenTag'] = [
'type' => 'hidden',
'name' => 'tag',
'default' => $tag,
'required' => true,
- );
+ ];
$form = new HTMLForm( $fields, $this->getContext() );
$form->setAction( $this->getPageTitle( 'delete' )->getLocalURL() );
$form->tagAction = 'delete'; // custom property on HTMLForm object
- $form->setSubmitCallback( array( $this, 'processTagForm' ) );
+ $form->setSubmitCallback( [ $this, 'processTagForm' ] );
$form->setSubmitTextMsg( 'tags-delete-submit' );
$form->setSubmitDestructive(); // nasty!
$form->addPreText( $preText );
$func = $activate ? 'canActivateTag' : 'canDeactivateTag';
$result = ChangeTags::$func( $tag, $user );
if ( !$result->isGood() ) {
- $out->wrapWikiMsg( "<div class=\"error\">\n$1" . $result->getWikiText() .
+ $out->addWikiText( "<div class=\"error\">\n" . $result->getWikiText() .
"\n</div>" );
if ( !$result->isOK() ) {
return;
// tags-activate-question, tags-deactivate-question
$preText = $this->msg( "tags-$actionStr-question", $tag )->parseAsBlock();
- $fields = array();
+ $fields = [];
// tags-activate-reason, tags-deactivate-reason
- $fields['Reason'] = array(
+ $fields['Reason'] = [
'type' => 'text',
'label' => $this->msg( "tags-$actionStr-reason" )->plain(),
'size' => 50,
- );
- $fields['HiddenTag'] = array(
+ ];
+ $fields['HiddenTag'] = [
'type' => 'hidden',
'name' => 'tag',
'default' => $tag,
'required' => true,
- );
+ ];
$form = new HTMLForm( $fields, $this->getContext() );
$form->setAction( $this->getPageTitle( $actionStr )->getLocalURL() );
$form->tagAction = $actionStr;
- $form->setSubmitCallback( array( $this, 'processTagForm' ) );
+ $form->setSubmitCallback( [ $this, 'processTagForm' ] );
// tags-activate-submit, tags-deactivate-submit
$form->setSubmitTextMsg( "tags-$actionStr-submit" );
$form->addPreText( $preText );
$out = $context->getOutput();
$tag = $data['HiddenTag'];
- $status = call_user_func( array( 'ChangeTags', "{$form->tagAction}TagWithChecks" ),
+ $status = call_user_func( [ 'ChangeTags', "{$form->tagAction}TagWithChecks" ],
$tag, $data['Reason'], $context->getUser(), true );
if ( $status->isGood() ) {
}
}
+ /**
+ * Return an array of subpages that this special page will accept.
+ *
+ * @return string[] subpages
+ */
+ public function getSubpagesForPrefixSearch() {
+ // The subpages does not have an own form, so not listing it at the moment
+ return [
+ // 'delete',
+ // 'activate',
+ // 'deactivate',
+ // 'create',
+ ];
+ }
+
protected function getGroupName() {
return 'changes';
}