|
|
- <?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 );
- }
- }
|