00001 <?php
00002
00010 class SpecialListGroupRights extends SpecialPage {
00011
00012 var $skin;
00013
00017 function __construct() {
00018 global $wgUser;
00019 parent::__construct( 'Listgrouprights' );
00020 $this->skin = $wgUser->getSkin();
00021 }
00022
00026 public function execute( $par ) {
00027 global $wgOut, $wgImplicitGroups, $wgMessageCache;
00028 global $wgGroupPermissions, $wgAddGroups, $wgRemoveGroups;
00029 $wgMessageCache->loadAllMessages();
00030
00031 $this->setHeaders();
00032 $this->outputHeader();
00033
00034 $wgOut->addHTML(
00035 Xml::openElement( 'table', array( 'class' => 'mw-listgrouprights-table' ) ) .
00036 '<tr>' .
00037 Xml::element( 'th', null, wfMsg( 'listgrouprights-group' ) ) .
00038 Xml::element( 'th', null, wfMsg( 'listgrouprights-rights' ) ) .
00039 '</tr>'
00040 );
00041
00042 foreach( $wgGroupPermissions as $group => $permissions ) {
00043 $groupname = ( $group == '*' ) ? 'all' : htmlspecialchars( $group );
00044
00045 $msg = wfMsg( 'group-' . $groupname );
00046 if ( wfEmptyMsg( 'group-' . $groupname, $msg ) || $msg == '' ) {
00047 $groupnameLocalized = $groupname;
00048 } else {
00049 $groupnameLocalized = $msg;
00050 }
00051
00052 $msg = wfMsgForContent( 'grouppage-' . $groupname );
00053 if ( wfEmptyMsg( 'grouppage-' . $groupname, $msg ) || $msg == '' ) {
00054 $grouppageLocalized = MWNamespace::getCanonicalName( NS_PROJECT ) . ':' . $groupname;
00055 } else {
00056 $grouppageLocalized = $msg;
00057 }
00058
00059 if( $group == '*' ) {
00060
00061 $grouppage = $groupnameLocalized;
00062 } else {
00063 $grouppage = $this->skin->makeLink( $grouppageLocalized, $groupnameLocalized );
00064 }
00065
00066 if ( $group === 'user' ) {
00067
00068 $grouplink = '<br />' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Listusers' ), wfMsgHtml( 'listgrouprights-members' ), '' );
00069 } elseif ( !in_array( $group, $wgImplicitGroups ) ) {
00070 $grouplink = '<br />' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Listusers' ), wfMsgHtml( 'listgrouprights-members' ), 'group=' . $group );
00071 } else {
00072
00073 $grouplink = '';
00074 }
00075
00076 $addgroups = isset( $wgAddGroups[$group] ) ? $wgAddGroups[$group] : array();
00077 $removegroups = isset( $wgRemoveGroups[$group] ) ? $wgRemoveGroups[$group] : array();
00078
00079 $wgOut->addHTML(
00080 '<tr>
00081 <td>' .
00082 $grouppage . $grouplink .
00083 '</td>
00084 <td>' .
00085 self::formatPermissions( $permissions, $addgroups, $removegroups ) .
00086 '</td>
00087 </tr>'
00088 );
00089 }
00090 $wgOut->addHTML(
00091 Xml::closeElement( 'table' ) . "\n"
00092 );
00093 }
00094
00101 private static function formatPermissions( $permissions, $add, $remove ) {
00102 global $wgLang;
00103 $r = array();
00104 foreach( $permissions as $permission => $granted ) {
00105 if ( $granted ) {
00106 $description = wfMsgExt( 'listgrouprights-right-display', array( 'parseinline' ),
00107 User::getRightDescription( $permission ),
00108 $permission
00109 );
00110 $r[] = $description;
00111 }
00112 }
00113 sort( $r );
00114 if( $add === true ){
00115 $r[] = wfMsgExt( 'listgrouprights-addgroup-all', array( 'escape' ) );
00116 } else if( is_array( $add ) && count( $add ) ) {
00117 $r[] = wfMsgExt( 'listgrouprights-addgroup', array( 'parseinline' ), $wgLang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $add ) ), count( $add ) );
00118 }
00119 if( $remove === true ){
00120 $r[] = wfMsgExt( 'listgrouprights-removegroup-all', array( 'escape' ) );
00121 } else if( is_array( $remove ) && count( $remove ) ) {
00122 $r[] = wfMsgExt( 'listgrouprights-removegroup', array( 'parseinline' ), $wgLang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $remove ) ), count( $remove ) );
00123 }
00124 if( empty( $r ) ) {
00125 return '';
00126 } else {
00127 return '<ul><li>' . implode( "</li>\n<li>", $r ) . '</li></ul>';
00128 }
00129 }
00130 }