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