You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

144 lines
3.6 KiB

<?php
/**
* Enum for citation types
*/
abstract class RefbaseCitationType {
// Minimal reference type (author, title, publication, year)
const CT_MINIMAL = 0;
// Request citation from refbase installation (using show.php interface)
const CT_RB = 1;
/**
* Convert string to RefbaseCitationType
*/
static public function decodeCitationType ( $str, & $citeStyle ) {
if ( strtolower( $str ) == 'minimal' ) {
return self::CT_MINIMAL;
} elseif ( preg_match( '/rb-(.*)/', strtolower( $str ),
$citeStyle ) ) {
return self::CT_RB;
} else {
return null;
}
}
}
/**
* Helper class to generate citation text
*/
class RefbaseCitationCreator {
/// Citation type
private $citationType;
/// Citation style (only with $citationType = CT_RB)
private $citationStyle = "";
/// Location of refbase installation (may differ from $dbHost if using https
/// for instance)
protected $refbaseURL = "";
/**
* Constructor
*/
public function __construct( $citationTypeStr ) {
global $wgRefbaseURL;
$this->refbaseURL = $wgRefbaseURL;
$this->citationType =
RefbaseCitationType::decodeCitationType( $citationTypeStr,
$citeStyle );
if ( !empty( $citeStyle ) ) {
$this->citationStyle = $citeStyle[1];
}
wfDebug('refbase-decode-in:' . $citationTypeStr . "\n");
wfDebug('refbase-decode:' . $this->citationType . ", " . var_export($this->citationStyle,true)."\n");
}
/**
* Create citation text
*/
public function createCitation( $entry, & $cite ) {
switch( $this->citationType ) {
case RefbaseCitationType::CT_MINIMAL:
$cite = $entry['author'] . ", " . $entry['title'] . ", " .
$entry['publication'] . ", " . $entry['year'] . ".";
break;
case RefbaseCitationType::CT_RB:
$url = $this->refbaseURL . "show.php?" .
"record=" . "27711"//$entry['serial'] .
"&submit=Cite&exportType=text&citeType=ASCII";
if ( !empty( $this->citationStyle ) ) {
$url .= "&citeStyle=" . $this->citationStyle;
}
wfDebug('refbase-getcite:' . $url . "\n");
// Get citation from url (add http authentication if desired)
global $wgRefbaseURLAuth;
if ( !empty( $wgRefbaseURLAuth ) ) {
if ( strcmp( strtolower( $wgRefbaseURLAuth ),
'default' ) == 0 ) {
if ( isset( $_SERVER['PHP_AUTH_USER'] ) &&
isset( $_SERVER['PHP_AUTH_PW'] ) ) {
$username = $_SERVER['PHP_AUTH_USER'];
$password = $_SERVER['PHP_AUTH_PW'];
$authStr = "Authorization: Basic " .
base64_encode( "$username:$password" );
} else {
$authStr = '';
}
} else {
preg_match( "/([^:]*):(.*)$/", $wgRefbaseURLAuth, $out);
$username = $out[1];
$password = $out[2];
$authStr = "Authorization: Basic " .
base64_encode( "$username:$password" );
}
$param = array( 'http' => array( 'header' => $authStr ) );
$context = stream_context_create( $param );
$cite = trim( file_get_contents( $url, false, $context ) );
} else {
$cite = trim( file_get_contents( $url ) );
}
break;
default:
$cite = wfMessage( 'refbase-error-citation-type' )->text();
}
return true;
}
/*
* Get list of required fields to produce the citation in the desired format
*/
public function getFieldList() {
switch( $this->citationType ) {
case RefbaseCitationType::CT_MINIMAL:
$fieldList = array( 'author',
'title',
'publication',
'year' );
break;
case RefbaseCitationType::CT_RB:
$fieldList = array( 'serial' );
break;
default:
$fieldList = array();
}
return $fieldList;
}
}