Open main menu

Extension:PagePolice

MediaWiki extensions manual
OOjs UI icon advanced.svg

Release status: beta
Implementation User rights , Tag
Description Individual user access control to pages
Author(s) Ury Yakovlev (Ury.Yakovlevtalk)
Latest version 0.1 (2012-11-26)
PHP 5.3+
Database changes No
License GPL
Download No link
Example <permit>Pr0;Root;H1;127.0.0.1</permit>
  • $wgPPError
  • $wgPPMessage
<permit>
Translate the PagePolice extension if it is available at translatewiki.net
Check usage and version matrix.

The PagePolice extension allows individual user access control to pages.

InstallationEdit

ConfigurationEdit

Example:

$wgPPError = "ACCESS DENIED";
$wgPPMessage = "SECURE ZONE (access only for %s)";

CodeEdit

<?php
# Block Page content
# 
# Tag:
#   <permit>user_id</permit>
# Ex:
#   <permit>Pr0;Root;H1;127.0.0.1</permit>
# 
# Enjoy!

$wgExtensionCredits['parserhook'][] = array(
        'name' => 'PagePolice',
        'description' => 'Allows to block access to content',
        'author' => 'Ury Yakovlev',
        'url' => 'https://www.mediawiki.org/wiki/Extension:PagePolice'
);

$wgHooks['ArticlePageDataAfter'][] = 'check_permit';
$wgHooks['ParserFirstCallInit'][] = 'pp_setup';
 
function pp_setup( Parser $parser ) {
        $parser->setHook( 'permit', 'permit_render' );
       return true;
}

function check_permit( $article, $row ) {
  global $wgUser;
  global $wgPPError;
  
  if (!$wgPPError) {
    $wgPPError = "<h1>403 ACCESS DENIED</h1> <meta http-equiv='Refresh' content='5;url=/'>";
  }
  
  $dbw = wfGetDB( DB_MASTER );
  $text_data_row = $dbw->selectRow( 'text',
	  array( 'old_text', 'old_flags' ),
	  array( 'old_id' => $row->page_latest ),
	  __METHOD__ );
  $content = $text_data_row->old_text;
        preg_match('|<permit>(.*)</permit>|Uis', $content, $users_str);
        
        if ($users_str[1]) {
	      $input = $users_str[1];
        } else {
	      return true;
	}
 
         $users = explode(";", $input);
        
        $allow = false;
        $i=0;
        while ($users[$i]) {
              if ($wgUser->getName() == $users[$i]) {
		    $allow = true;
		    break;
              }
              $i++;
        }
 
	if ($allow) {
	      return true;
	} else {
	      echo $wgPPError;
	      exit;
	      return false;
	}
  
  return 0;
}

# The callback function for converting the input text to HTML output
function permit_render($input) {

	global $wgPPMessage;

	if (!$wgPPMessage) {
		$wgPPMessage = "<div style='background: #FFCC00;'><b>Защита</b></br>
			<b>Контент с защитой содержимого</b></br>
			Доступ разрешен только следующим пользователям: '%s'</div>";
	}
 
        $output = sprintf($wgPPMessage, $input);
        return $output;
}

See alsoEdit