Refbase update_2021-01-28_15_58
This commit is contained in:
144
contrib/mediawiki/include/Refbase.CitationCreator.php
Normal file
144
contrib/mediawiki/include/Refbase.CitationCreator.php
Normal file
@@ -0,0 +1,144 @@
|
||||
<?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;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user