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