114 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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 );
 | 
						|
	}
 | 
						|
}
 |