|
|
|
|
@ -6,6 +6,7 @@ use BSR\Lib\Configuration;
|
|
|
|
|
use BSR\Lib\db\DBHelper;
|
|
|
|
|
use BSR\Lib\db\Connection;
|
|
|
|
|
use BSR\Lib\db\User;
|
|
|
|
|
use BSR\Lib\Logger;
|
|
|
|
|
use BSR\Lib\Exception\AuthenticationException;
|
|
|
|
|
use BSR\Lib\Exception\WebException;
|
|
|
|
|
use BSR\Lib\Search\BookSearch;
|
|
|
|
|
@ -14,10 +15,9 @@ class NetBiblio extends WebService
|
|
|
|
|
{
|
|
|
|
|
/** @var string $version version number */
|
|
|
|
|
public static $version = '1.2.0';
|
|
|
|
|
|
|
|
|
|
private $login = '';
|
|
|
|
|
private $client = 'website';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct() {
|
|
|
|
|
parent::__construct(self::$version);
|
|
|
|
|
}
|
|
|
|
|
@ -79,6 +79,7 @@ class NetBiblio extends WebService
|
|
|
|
|
{
|
|
|
|
|
$codes = array_map('intval', $codes);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$uri = sprintf("%s%s",
|
|
|
|
|
Configuration::get('checkfile_url'),
|
|
|
|
|
http_build_query(array("book" => implode(',', $codes)))
|
|
|
|
|
@ -141,11 +142,13 @@ class NetBiblio extends WebService
|
|
|
|
|
*/
|
|
|
|
|
private function AddBookData(array $books)
|
|
|
|
|
{
|
|
|
|
|
Logger::log(print_r($books, true), 0);
|
|
|
|
|
|
|
|
|
|
if(isset($books['code'])) {
|
|
|
|
|
$result = $this->AddBookData(array($books));
|
|
|
|
|
return reset($result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// add complementary data to each book
|
|
|
|
|
$books = array_map(function($b) {
|
|
|
|
|
// add files if we already have them
|
|
|
|
|
@ -178,7 +181,6 @@ class NetBiblio extends WebService
|
|
|
|
|
$b['code3'] = $b['producerCode'];
|
|
|
|
|
$b['code3Long'] = $b['producer'];
|
|
|
|
|
$b['typeMedia1'] = $b['mediaType'];
|
|
|
|
|
|
|
|
|
|
return $b;
|
|
|
|
|
}, $books);
|
|
|
|
|
|
|
|
|
|
@ -187,7 +189,7 @@ class NetBiblio extends WebService
|
|
|
|
|
return ! (
|
|
|
|
|
isset($b['files']) &&
|
|
|
|
|
isset($b['files']['samples']) &&
|
|
|
|
|
count($b['files']['samples']) == 2 && // we want two samples (mp3 and ogg)
|
|
|
|
|
count($b['files']['samples']) == 2 && // we want two samples .wav and ogg)
|
|
|
|
|
isset($b['files']['zip']) // we want a zip file
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
@ -269,6 +271,7 @@ class NetBiblio extends WebService
|
|
|
|
|
*/
|
|
|
|
|
public function AddDownloadLog($client, $login, $code)
|
|
|
|
|
{
|
|
|
|
|
$dl_alert = 80;
|
|
|
|
|
$client = str_replace("'", "", $client);
|
|
|
|
|
$login = str_replace("'", "", $login);
|
|
|
|
|
$code = ltrim(str_replace("'", "", $code), '0');
|
|
|
|
|
@ -282,19 +285,20 @@ class NetBiblio extends WebService
|
|
|
|
|
throw new WebException("ItemNotFound", "cannot find item", -1030);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT UserAccountID FROM UserAccounts WHERE LTRIM(RTRIM(UserAccountNr)) = '$login';";
|
|
|
|
|
$sql = "SELECT UserAccountID, DisplayName FROM UserAccounts WHERE LTRIM(RTRIM(UserAccountNr)) = '$login';";
|
|
|
|
|
$result = Connection::execute($sql, false);
|
|
|
|
|
if ($row = $result->current()) {
|
|
|
|
|
$userId = $row['UserAccountID'];
|
|
|
|
|
$username = $row['DisplayName'];
|
|
|
|
|
} else {
|
|
|
|
|
throw new WebException("UserNotFound", "cannot find user", -1031);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT circulationId
|
|
|
|
|
FROM OldCirculations
|
|
|
|
|
WHERE
|
|
|
|
|
FROM OldCirculations
|
|
|
|
|
WHERE
|
|
|
|
|
UserAccountID= $userId AND
|
|
|
|
|
itemID = $itemId AND
|
|
|
|
|
itemID = $itemId AND
|
|
|
|
|
LTRIM(RTRIM(remark)) = '$client';";
|
|
|
|
|
$result = Connection::execute($sql, false);
|
|
|
|
|
|
|
|
|
|
@ -317,6 +321,27 @@ class NetBiblio extends WebService
|
|
|
|
|
$nextId = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT count(*) as DLs FROM OldCirculations WHERE UserAccountID = $userId
|
|
|
|
|
AND checkoutdate >= Dateadd(month, Datediff(month, 0, Getdate()), 0);";
|
|
|
|
|
|
|
|
|
|
$result = Connection::execute($sql, false);
|
|
|
|
|
|
|
|
|
|
if ($row = $result->current()) {
|
|
|
|
|
$DLs = $row['DLs'];
|
|
|
|
|
if($DLs >= $dl_alert){
|
|
|
|
|
|
|
|
|
|
$to = 'sschule@bibliothequesonore.ch';
|
|
|
|
|
$subject = 'Limite atteinte pour '.$username.", ".$login;
|
|
|
|
|
$message = "Nombre de livres ce mois: ".($DLs+1);
|
|
|
|
|
$headers = 'From: webmaster@bibliothequesonore.ch' . "\r\n" .
|
|
|
|
|
'Reply-To: webmaster@bibliothequesonore.ch' . "\r\n" .
|
|
|
|
|
'X-Mailer: PHP/' . phpversion();
|
|
|
|
|
|
|
|
|
|
mail($to, $subject, $message, $headers);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "UPDATE UserAccounts
|
|
|
|
|
SET
|
|
|
|
|
Circulations = Circulations + 1,
|
|
|
|
|
@ -473,6 +498,18 @@ class NetBiblio extends WebService
|
|
|
|
|
return array_values($this->AddBookData($circulations));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This method returns the books lent to the current user in the time period
|
|
|
|
|
* 2 weeks to 4 month.
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
* @throws AuthenticationException
|
|
|
|
|
*/
|
|
|
|
|
public function GetBooksForFeedback()
|
|
|
|
|
{
|
|
|
|
|
return array_values($this->getUser()->GetBooksForFeedback());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This method return information for the user dashboard :
|
|
|
|
|
*
|
|
|
|
|
@ -674,6 +711,11 @@ class NetBiblio extends WebService
|
|
|
|
|
|
|
|
|
|
$bs = new BookSearch();
|
|
|
|
|
|
|
|
|
|
// when search on a particular field, put results in descending date order
|
|
|
|
|
if(!isset($queryArray['queryText'])) {
|
|
|
|
|
$bs->addSortField('availabilityDate');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($queryArray['queryText']) && strlen($queryArray['queryText']) > 0) {
|
|
|
|
|
$type = isset($queryArray['queryType']) ? $queryArray['queryType'] : null;
|
|
|
|
|
|
|
|
|
|
@ -684,7 +726,7 @@ class NetBiblio extends WebService
|
|
|
|
|
// The field 'text' is still used by the Android app but does not exists anymore
|
|
|
|
|
// We use the default search fields in this case.
|
|
|
|
|
$type = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$bs->addQuery($queryArray['queryText'], $type);
|
|
|
|
|
}
|
|
|
|
|
@ -709,7 +751,7 @@ class NetBiblio extends WebService
|
|
|
|
|
$bs->addRange('duration', $min, $max);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$availableFields = array('producerCode', 'genreCode', 'author', 'reader', 'motsMatieres');
|
|
|
|
|
$availableFields = array('producerCode', 'genreCode', 'author', 'author_fr', 'title_fr', 'reader', 'reader_fr', 'motsMatieres', 'mediaType');
|
|
|
|
|
foreach($availableFields as $q) {
|
|
|
|
|
if(isset($queryArray[$q]) && (
|
|
|
|
|
(is_string($queryArray[$q]) && strlen($queryArray[$q]) > 0) ||
|
|
|
|
|
@ -719,7 +761,12 @@ class NetBiblio extends WebService
|
|
|
|
|
// Genres cannot overlap, so we use 'OR', otherwise use 'AND'
|
|
|
|
|
$bs->addCompoundQuery($queryArray[$q], $q, $q == 'genreCode' ? 'OR' : 'AND');
|
|
|
|
|
} else {
|
|
|
|
|
$bs->addQuery($queryArray[$q], $q);
|
|
|
|
|
if($q == 'reader'){
|
|
|
|
|
$q2 = 'reader_fr';
|
|
|
|
|
$queryArray[$q] = ucfirst($queryArray[$q]);
|
|
|
|
|
} else{$q2 = $q;}
|
|
|
|
|
|
|
|
|
|
$bs->addQuery($queryArray[$q], $q2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -734,12 +781,19 @@ class NetBiblio extends WebService
|
|
|
|
|
$highlight = isset($queryArray['highlight']) && $queryArray['highlight'];
|
|
|
|
|
|
|
|
|
|
$results = $bs->getResults($start, $count, $facets, $spellcheck, $highlight);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$data = array(
|
|
|
|
|
'count' => $results['count'],
|
|
|
|
|
'facets' => $results['facets'],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return array_merge($data, $this->AddBookData($results['books']));
|
|
|
|
|
$finalResult = array_merge($data, $this->AddBookData($results['books']));
|
|
|
|
|
for($i = 0; $i < count($finalResult)-2 ; $i++){
|
|
|
|
|
$finalResult[$i]['position']=$i;
|
|
|
|
|
}
|
|
|
|
|
return $finalResult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|