<?php
|
|
|
|
/**
|
|
* Refbase database connector
|
|
*/
|
|
class RefbaseConnector {
|
|
|
|
/// Database location
|
|
private $dbHost = "";
|
|
|
|
/// Database name
|
|
private $dbName = "";
|
|
|
|
/// Database user
|
|
private $dbUser = "";
|
|
|
|
/// Database password
|
|
private $dbPass = "";
|
|
|
|
/// Character set
|
|
private $dbCharset = "";
|
|
|
|
/// Reference table
|
|
private $dbRefTable = "";
|
|
|
|
/// User data table (for cite key entry)
|
|
private $dbUserDataTable = "";
|
|
|
|
/// Method to access database (mysql or PDO)
|
|
private $dbAccessMethod = "";
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct() {
|
|
global $wgRefbaseDbHost;
|
|
global $wgRefbaseDbName;
|
|
global $wgRefbaseDbUser;
|
|
global $wgRefbaseDbPass;
|
|
global $wgRefbaseDbRefTable;
|
|
global $wgRefbaseDbUserDataTable;
|
|
global $wgRefbaseDbCharset;
|
|
global $wgRefbaseDbAccessMethod;
|
|
|
|
// Read from global configuration
|
|
$this->dbHost = $wgRefbaseDbHost;
|
|
$this->dbName = $wgRefbaseDbName;
|
|
$this->dbUser = $wgRefbaseDbUser;
|
|
$this->dbPass = $wgRefbaseDbPass;
|
|
$this->dbRefTable = $wgRefbaseDbRefTable;
|
|
$this->dbUserDataTable = $wgRefbaseDbUserDataTable;
|
|
$this->dbCharset = $wgRefbaseDbCharset;
|
|
$this->dbAccessMethod = $wgRefbaseDbAccessMethod;
|
|
}
|
|
|
|
/**
|
|
* Query by serial number or cite key entry
|
|
*/
|
|
public function getEntry( $input, $tagTypeList, & $outputEntry,
|
|
$fieldList ) {
|
|
|
|
// List of fields to extract (prefix 'r.' to each element)
|
|
$fieldPref = $fieldList;
|
|
array_walk( $fieldPref, function ( &$value, $key) {
|
|
$value="r.$value";
|
|
} );
|
|
$fieldPref = join(",", $fieldPref);
|
|
|
|
$flagFound = false;
|
|
for ( $i = 0; $i < count($tagTypeList) && ! $flagFound; $i++ ) {
|
|
|
|
$tagType = $tagTypeList[$i];
|
|
|
|
// Query string
|
|
$queryStr = "";
|
|
if ( $tagType === 'citekey' ) {
|
|
$queryStr = "SELECT $fieldPref " .
|
|
"FROM " . $this->dbRefTable . " r " .
|
|
"INNER JOIN " . $this->dbUserDataTable . " u " .
|
|
"ON r.serial = u.record_id " .
|
|
"WHERE u.cite_key='$input'";
|
|
} else {
|
|
$queryStr = "SELECT $fieldPref " .
|
|
"FROM " . $this->dbRefTable . " r " .
|
|
"WHERE r.serial='$input'";
|
|
}
|
|
|
|
if ( strtolower( $this->dbAccessMethod ) === 'pdo' ) {
|
|
|
|
// Connect and query
|
|
$link = new PDO( 'mysql:host=' . $this->dbHost . ';dbname=' .
|
|
$this->dbName . ';charset=' . $this->dbCharset,
|
|
$this->dbUser, $this->dbPass );
|
|
$dbexec = $link->prepare( $queryStr );
|
|
|
|
try {
|
|
// Perform query
|
|
$outputEntry = $dbexec->execute();
|
|
} catch( PDOException $ex ) {
|
|
$outputEntry = wfMessage( 'refbase-error-dbquery' )->text() .
|
|
$ex->getMessage();
|
|
return false;
|
|
}
|
|
|
|
$outputEntry = $dbexec->fetch(PDO::FETCH_ASSOC);
|
|
|
|
} elseif ( strtolower( $this->dbAccessMethod ) === 'mysql' ) {
|
|
|
|
$link = mysqli_connect( $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName ) or die("db error");
|
|
if ( !$link ) {
|
|
$outputEntry = wfMessage( 'refbase-error-mysqlconn' )->text();
|
|
return false;
|
|
}
|
|
|
|
$result = mysqli_query($link, $queryStr );
|
|
if ( !$result ) {
|
|
$outputEntry = wfMessage( 'refbase-error-dbquery' )->text() .
|
|
mysqli_error($link);
|
|
return false;
|
|
}
|
|
$outputEntry = mysqli_fetch_array($result);
|
|
|
|
}
|
|
if ( !empty( $outputEntry ) ) {
|
|
$flagFound = true;
|
|
}
|
|
}
|
|
|
|
if ( empty( $outputEntry ) ) {
|
|
$outputEntry = wfMessage( 'refbase-error-notfound' )->text();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
}
|
|
|