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