ЧТМ:Расширения/PersonalWhitelist/SpecialWhitelistedPages.php
Перейти к навигации
Перейти к поиску
<?php
namespace PersonalWhitelist;
use SpecialPage;
use Title;
use Html;
use MediaWiki\MediaWikiServices;
class SpecialWhitelistedPages extends SpecialPage {
public function __construct() {
parent::__construct( 'WhitelistedPages' );
}
protected function getGroupName() {
return 'restriction';
}
public function execute( $par ) {
$this->setHeaders();
$this->outputHeader();
$out = $this->getOutput();
$dbr = wfGetDB( DB_REPLICA );
$res = $dbr->select(
[ 'page', 'page_props' ],
[ 'page_namespace', 'page_title', 'pp_value' ],
[ 'pp_propname' => 'custom_whitelist' ],
__METHOD__,
[ 'ORDER BY' => 'page_namespace, page_title' ],
[ 'page_props' => [ 'JOIN', 'page_id = pp_page' ] ]
);
if ( $res->numRows() === 0 ) {
$out->addWikiMsg( 'specialpage-empty' );
return;
}
$linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
$html = '<ul>';
foreach ( $res as $row ) {
$title = Title::makeTitle( $row->page_namespace, $row->page_title );
$link = $linkRenderer->makeLink( $title );
$data = json_decode( $row->pp_value, true );
$isEnabled = !empty( $data['enabled'] );
$users = $data['users'] ?? [];
$level = $data['level'] ?? '';
if ( $isEnabled ) {
$status = '<span style="color: green; font-weight: bold;">[Включено]</span>';
} else {
$status = '<span style="color: gray;">[Выключено]</span>';
}
// Красивый вывод уровня доступа
if ( $level !== '' ) {
$msg = wfMessage( "protect-level-{$level}" );
$levelText = $msg->exists() ? $msg->text() : $level;
} else {
$levelText = wfMessage( 'personalwhitelist-level-none' )->text();
}
$usersList = empty( $users ) ? '<i>нет участников</i>' : implode( ', ', $users );
$html .= Html::rawElement(
'li',
[ 'style' => 'margin-bottom: 5px;' ],
"$link $status Уровень: <b>$levelText</b> — Исключения: $usersList"
);
}
$html .= '</ul>';
$out->addHTML( $html );
}
}