Refbase update_2021-01-28_15_58
This commit is contained in:
113
contrib/mediawiki/Refbase.Hooks.php
Normal file
113
contrib/mediawiki/Refbase.Hooks.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Refbase hooks and parser
|
||||
*/
|
||||
class RefbaseHooks {
|
||||
|
||||
/**
|
||||
* Register <refbase> hook
|
||||
*/
|
||||
public static function efRefbaseParserInit( $parser ) {
|
||||
$parser->setHook( 'refbase',
|
||||
'RefbaseHooks::efRefbaseRender' );
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define special formatting for this tag
|
||||
*/
|
||||
private static function makeOutputString ( $str ) {
|
||||
return $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add <pre></pre> tags around error message and return
|
||||
*/
|
||||
private static function makeErrorOutputString ( $errMsg ) {
|
||||
$errMsg = "Refbase: <br/>" . $errMsg;
|
||||
$preMsg = Html::openElement( 'pre' ) . $errMsg .
|
||||
Html::closeElement( 'pre' );
|
||||
return self::makeOutputString( $preMsg );
|
||||
}
|
||||
|
||||
/**
|
||||
* Main function: parse input and create HTML table with events
|
||||
*/
|
||||
public static function efRefbaseRender( $input, array $args,
|
||||
Parser $parser,
|
||||
PPFrame $frame ) {
|
||||
// Global parameters
|
||||
global $wgRefbaseDefaultTagType;
|
||||
global $wgRefbaseDefaultOutputType;
|
||||
global $wgRefbaseDefaultCitationType;
|
||||
|
||||
// Read arguments
|
||||
if ( isset( $args['tagtype'] ) ) {
|
||||
$tagType = $args['tagtype'];
|
||||
} else {
|
||||
$tagType = $wgRefbaseDefaultTagType;
|
||||
}
|
||||
if ( ! ( strtolower( $tagType ) === 'serial' ) &&
|
||||
! ( strtolower( $tagType ) === 'citekey' ) ) {
|
||||
$errStr = wfMessage( 'refbase-error-tagtype' )->text();
|
||||
return self::makeErrorOutputString( $errStr );
|
||||
}
|
||||
if ( isset( $args['output'] ) ) {
|
||||
$outputType = $args['output'];
|
||||
} else {
|
||||
$outputType = $wgRefbaseDefaultOutputType;
|
||||
}
|
||||
if ( ! ( strtolower( $outputType ) === 'cite_journal' ) &&
|
||||
! ( strtolower( $outputType ) === 'link' ) &&
|
||||
! ( strtolower( $outputType ) === 'cite' ) ) {
|
||||
$errStr = wfMessage( 'refbase-error-outputtype' )->text();
|
||||
return self::makeErrorOutputString( $errStr );
|
||||
}
|
||||
if ( isset( $args['citationtype'] ) ) {
|
||||
$citationType = $args['citationtype'];
|
||||
} else {
|
||||
$citationType = $wgRefbaseDefaultCitationType;
|
||||
}
|
||||
if ( ! ( strtolower( $citationType ) === 'minimal' ) &&
|
||||
! ( strtolower( substr( $citationType, 0, 3 ) ) === 'rb-' ) ) {
|
||||
$errStr = wfMessage( 'refbase-error-citation-type' )->text();
|
||||
return self::makeErrorOutputString( $errStr );
|
||||
}
|
||||
|
||||
// Order tag types
|
||||
switch ( strtolower( $tagType ) ) {
|
||||
case 'serial':
|
||||
$tagTypeList = array( 'serial', 'citekey' );
|
||||
break;
|
||||
case 'citekey':
|
||||
$tagTypeList = array( 'citekey', 'serial' );
|
||||
break;
|
||||
}
|
||||
|
||||
// Instantiate renderer based on options
|
||||
$refbaseRenderer = RefbaseRenderer::create( $outputType,
|
||||
$citationType );
|
||||
// Request list of fields to extract
|
||||
$fieldList = $refbaseRenderer->getFieldList();
|
||||
|
||||
// Perform database query to get entry
|
||||
$refbaseDbConnector = new RefbaseConnector();
|
||||
$entry = "";
|
||||
if ( !$refbaseDbConnector->getEntry( $input, $tagTypeList, $entry,
|
||||
$fieldList ) ) {
|
||||
return self::makeErrorOutputString( $entry );
|
||||
}
|
||||
|
||||
// Generate output
|
||||
$citekey = $input;
|
||||
$renderOpts = array( 'citekey' => $citekey );
|
||||
$outputStr = "";
|
||||
if ( !$refbaseRenderer->render( $entry, $outputStr, $renderOpts ) ) {
|
||||
return self::makeErrorOutputString( $outputStr );
|
||||
}
|
||||
|
||||
$outputStr = $parser->recursiveTagParse( $outputStr );
|
||||
return self::makeOutputString( $outputStr );
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user