Add files via upload
This commit is contained in:
parent
bfc858ee04
commit
4e72a94841
50
README.md
Normal file
50
README.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# BiblioMxWeb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
> Not official and not
|
||||||
|
|
||||||
|
A system to extract data from a [BiblioMx](http://www.micla.org/freeware/bibliomx.html) system and display it on the Internet in a searchable fashion, trough a semi-automatic process
|
||||||
|
|
||||||
|
> **Notice**
|
||||||
|
>
|
||||||
|
> The GUI present in this software is in Italian, because of the primary audience of said software
|
||||||
|
> However, you may freely and easily fix this in your implementation
|
||||||
|
|
||||||
|
## Preamble
|
||||||
|
|
||||||
|
BiblioMx, despite being a pretty common library management software, saves data in custom binary files, and only allows to export data to CSV.
|
||||||
|
|
||||||
|
This is the major limitation that this project tries to address.
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
### Server
|
||||||
|
|
||||||
|
The server receives a CSV (trough chunking, if necessary) and concerts it into a sqllite database.
|
||||||
|
|
||||||
|
The PHP application provides a Web UI for searching and viewing books, including bibliographical data and availability
|
||||||
|
|
||||||
|
### Agent
|
||||||
|
|
||||||
|
The agent must be set to boot hidden at the start of the computer (functionality not included int the code)
|
||||||
|
|
||||||
|
``biblio.ini`` must be configured with the correct information, under the ``[DATA]`` section:
|
||||||
|
|
||||||
|
| Key | Value |
|
||||||
|
| ---- | ----- |
|
||||||
|
|databasePath|The path to the xbb database|
|
||||||
|
|csvPath|The path to the csv export file|
|
||||||
|
|serverUrl|The URL to ``up.php``|
|
||||||
|
|authCode|The authentication code for that server instance|
|
||||||
|
|significance|The number of action that must be taken before the server shall be synced again|
|
||||||
|
|verbose|Show verbose output|
|
||||||
|
|updateUserWait|After prompting the user to update the CSV, how much time (s) to wait before moving on and uploading the file, starts after pressing "OK"|
|
||||||
|
|chunkSize|Chunk size (rows) for uploading the CSV|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Once the librarian performs a set number of actions, they will be asked to export the database manually to a csv, then the agent will upload it accordingly
|
||||||
|
|
||||||
|
The upload will also trigger the refresh of the sqllite database on the server when ended
|
||||||
|
|
221
server/bookDetail.php
Normal file
221
server/bookDetail.php
Normal file
|
@ -0,0 +1,221 @@
|
||||||
|
<?php
|
||||||
|
require("common.php");
|
||||||
|
function bookDisplay($pdo, $id)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* if(isset($_GET["duid"])){
|
||||||
|
$ex=base64url_decode($_GET["duid"]);
|
||||||
|
$stmt = $pdo->prepare("SELECT * FROM Libri WHERE Titolo=:titolo AND ISBN=:isbn");
|
||||||
|
|
||||||
|
$stmt->execute([":isbn"=>$ex]);//TODO
|
||||||
|
}
|
||||||
|
else{*/
|
||||||
|
$stmt = $pdo->prepare("SELECT * FROM Libri WHERE id=:id");
|
||||||
|
$stmt->execute([':id' => $id]);
|
||||||
|
// }
|
||||||
|
$data = $stmt->fetch();
|
||||||
|
$ak=array_keys($data);
|
||||||
|
for($i=0;$i<count($ak);$i++){
|
||||||
|
$data[$ak[$i]]=iconv('iso-8859-1', 'UTF-8//IGNORE', $data[$ak[$i]]);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<title><?php echo htmlentities($data["Titolo"]); ?> | <?php echo $GLOBALS["place"]; ?></title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
|
||||||
|
<link rel="stylesheet" href="https://www.w3schools.com/lib/w3-theme-blue-grey.css">
|
||||||
|
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Open+Sans'>
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5 {
|
||||||
|
font-family: "Open Sans", sans-serif
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body class="w3-theme-l5">
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<div class="w3-top">
|
||||||
|
<div class="w3-bar w3-theme-d2 w3-left-align w3-large">
|
||||||
|
<a href="./" class="w3-bar-item w3-button w3-padding-large w3-theme-d4"><i class="fa fa-home w3-margin-right"></i>Biblioteca | <?php echo $GLOBALS["place"]; ?></a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Page Container -->
|
||||||
|
<div class="w3-container w3-content" style="max-width:1400px;margin-top:80px">
|
||||||
|
<!-- The Grid -->
|
||||||
|
<div class="w3-row">
|
||||||
|
<!-- Left Column -->
|
||||||
|
<div class="w3-content">
|
||||||
|
<!-- Profile -->
|
||||||
|
<div class="w3-card w3-round w3-white">
|
||||||
|
<div class="w3-container">
|
||||||
|
<h4 class="w3-center"><?php echo htmlentities($data["Titolo"]); ?></h4>
|
||||||
|
<center><img style="width:10vw" src="books.png" /></center>
|
||||||
|
<hr>
|
||||||
|
<?php
|
||||||
|
if ($data["Autore"]) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p><i class="fa fa-user fa-fw w3-margin-right w3-text-theme"></i> <?php echo htmlentities($data["Autore"]); ?></p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
if ($data["Editore"]) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p><i class="fa fa-pencil fa-fw w3-margin-right w3-text-theme"></i> <?php echo htmlentities($data["Editore"]); ?></p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
if ($data["ISBN"]) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p><i class="fa fa-hashtag fa-fw w3-margin-right w3-text-theme"></i> ISBN: <?php echo htmlentities($data["ISBN"]); ?></p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
if ($data["Descrizione"]) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p><i class="fa fa-book fa-fw w3-margin-right w3-text-theme"></i><?php echo htmlentities($data["Descrizione"]); ?></p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Accordion -->
|
||||||
|
<div class="w3-card w3-round">
|
||||||
|
<div class="w3-white">
|
||||||
|
<?php
|
||||||
|
if ($data["Prestito"] == "P") {
|
||||||
|
?>
|
||||||
|
<button onclick="myFunction('Demo1')" class="w3-button w3-block w3-theme-l1 w3-left-align" style="background-color:red!important"><i class="fa fa-circle-o-notch fa-fw w3-margin-right"></i> In prestito</button>
|
||||||
|
<div id="Demo1" class="w3-hide w3-container">
|
||||||
|
<p>Il libro risulta essere in prestito in base agli ultimi dati disponibili</p>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
<button onclick="myFunction('Demo1')" class="w3-button w3-block w3-theme-l1 w3-left-align" style="background-color:green!important"><i class="fa fa-check fa-fw w3-margin-right"></i>Disponibile</button>
|
||||||
|
<div id="Demo1" class="w3-hide w3-container">
|
||||||
|
<p>Il libro risulta essere disponibile al prestito in base agli ultimi dati disponibili</p>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
<button onclick="myFunction('Demo2')" class="w3-button w3-block w3-theme-l1 w3-left-align"><i class="fa fa-info fa-fw w3-margin-right"></i>Informazioni dettagliate</button>
|
||||||
|
<div id="Demo2" class=" w3-hide w3-container">
|
||||||
|
<table class="w3-table-all">
|
||||||
|
<?php if ($data["Genere"]) { ?><tr class="w3-light-grey"><th>Genere</th> <td><?php echo htmlentities($data["Genere"]); ?> </td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Titolo"]) { ?><tr class="w3-light-grey"><th>Titolo</th> <td><?php echo htmlentities($data["Titolo"]); ?></td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Autore"]) { ?><tr class="w3-light-grey"><th>Autore</th><td><?php echo htmlentities($data["Autore"]); ?></td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Editore"]) { ?><tr class="w3-light-grey"><th>Editore</th><td><?php echo htmlentities($data["Editore"]); ?></td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Serie"]) { ?><tr class="w3-light-grey"><th>Serie</th><td><?php echo htmlentities($data["Serie"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Lingua"]) { ?><tr class="w3-light-grey"><th>Lingua</th><td><?php echo htmlentities($data["Lingua"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Argomento"]) { ?><tr class="w3-light-grey"><th>Argomento</th><td><?php echo htmlentities($data["Argomento"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["ISBN"]) { ?><tr class="w3-light-grey"><th>ISBN</th><td><?php echo htmlentities($data["ISBN"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Note1"] || $data["Note2"]) { ?><tr class="w3-light-grey"><th>Note</th><td><?php echo htmlentities($data["Note1"])."<br />".htmlentities($data["Note2"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Posizione"]) { ?><tr class="w3-light-grey"><th>Posizione</th><td><?php echo htmlentities($data["Posizione"]); ?></td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Data"]) { ?><tr class="w3-light-grey"><th>Data</th><td><?php echo htmlentities($data["Data"]); ?></td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Inventario"]) { ?><tr class="w3-light-grey"><th>Inventario</th><td><?php echo htmlentities($data["Inventario"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["NPag"]) { ?><tr class="w3-light-grey"><th>Numero di Pagine</th><td><?php echo htmlentities($data["NPag"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Lvlbibliogr"]) { ?><tr class="w3-light-grey"><th>Livello Bibliografico</th><td><?php echo htmlentities($data["Lvlbibliogr"]); ?></td> </tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Dewey"]) { ?><tr class="w3-light-grey"><th>Dewey</th><td><?php echo htmlentities($data["Dewey"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Paesepubblicaz"]) { ?><tr class="w3-light-grey"><th>Paese di pubblicazione</th><td><?php echo htmlentities($data["Paesepubblicaz"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Luogoeditore"]) { ?><tr class="w3-light-grey"><th>Luogo editore</th><td><?php echo htmlentities($data["Luogoeditore"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Curatore"]) { ?><tr class="w3-light-grey"><th>Curatore</th><td><?php echo htmlentities($data["Curatore"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Tipo"]) { ?><tr class="w3-light-grey"><th>Tipo</th><td><?php echo htmlentities($data["Tipo"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Traduzione"]) { ?><tr class="w3-light-grey"><th>Traduzione</th><td><?php echo htmlentities($data["Traduzione"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Descrizione"]) { ?><tr class="w3-light-grey"><th>Descrizione</th><td><?php echo htmlentities($data["Descrizione"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
<?php if ($data["Identificativo"]) { ?><tr class="w3-light-grey"><th>Identificativo</th><td><?php echo htmlentities($data["Identificativo"]); ?></td></tr class="w3-light-grey"><?php } ?>
|
||||||
|
</table>
|
||||||
|
<!-- <div class="resultD w3-panel w3-card">
|
||||||
|
Url permanente: <?php
|
||||||
|
$uri='http://'. $_SERVER['HTTP_HOST']
|
||||||
|
. explode('?', $_SERVER['REQUEST_URI'], 2)[0];
|
||||||
|
$lur=$uri."?duid=".base64url_encode($data["ISBN"]);
|
||||||
|
echo "<a href=\"$lur\">".htmlentities($lur)."</a>";
|
||||||
|
|
||||||
|
?>
|
||||||
|
</div>-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Interests -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- End Left Column -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- End Grid -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- End Page Container -->
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="w3-container w3-theme-d3 w3-padding-16">
|
||||||
|
<h5>Mattia Mascarello, MIT License, 2021</h5>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<footer class="w3-container w3-theme-d5">
|
||||||
|
<p>Repo <a href="https://www.w3schools.com/w3css/default.asp" target="_blank">github</a></p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Accordion
|
||||||
|
function myFunction(id) {
|
||||||
|
var x = document.getElementById(id);
|
||||||
|
if (x.className.indexOf("w3-show") == -1) {
|
||||||
|
x.className += " w3-show";
|
||||||
|
x.previousElementSibling.className += " w3-theme-d1";
|
||||||
|
} else {
|
||||||
|
x.className = x.className.replace("w3-show", "");
|
||||||
|
x.previousElementSibling.className =
|
||||||
|
x.previousElementSibling.className.replace(" w3-theme-d1", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used to toggle the menu on smaller screens when clicking on the menu button
|
||||||
|
function openNav() {
|
||||||
|
var x = document.getElementById("navDemo");
|
||||||
|
if (x.className.indexOf("w3-show") == -1) {
|
||||||
|
x.className += " w3-show";
|
||||||
|
} else {
|
||||||
|
x.className = x.className.replace(" w3-show", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
myFunction('Demo2')
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbh = new PDO('sqlite:db');
|
||||||
|
bookDisplay($dbh, $_GET["id"]);
|
||||||
|
?>
|
BIN
server/books.png
Normal file
BIN
server/books.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 99 KiB |
92
server/bookshelf.svg
Normal file
92
server/bookshelf.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 146 KiB |
38
server/common.php
Normal file
38
server/common.php
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
/* Encode data to Base64URL
|
||||||
|
* @param string $data
|
||||||
|
* @return boolean|string
|
||||||
|
*/
|
||||||
|
function base64url_encode($data)
|
||||||
|
{
|
||||||
|
// First of all you should encode $data to Base64 string
|
||||||
|
$b64 = base64_encode($data);
|
||||||
|
|
||||||
|
// Make sure you get a valid result, otherwise, return FALSE, as the base64_encode() function do
|
||||||
|
if ($b64 === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert Base64 to Base64URL by replacing “+” with “-” and “/” with “_”
|
||||||
|
$url = strtr($b64, '+/', '-_');
|
||||||
|
|
||||||
|
// Remove padding character from the end of line and return the Base64URL result
|
||||||
|
return rtrim($url, '=');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode data from Base64URL
|
||||||
|
* @param string $data
|
||||||
|
* @param boolean $strict
|
||||||
|
* @return boolean|string
|
||||||
|
*/
|
||||||
|
function base64url_decode($data, $strict = false)
|
||||||
|
{
|
||||||
|
// Convert Base64URL to Base64 by replacing “-” with “+” and “_” with “/”
|
||||||
|
$b64 = strtr($data, '-_', '+/');
|
||||||
|
|
||||||
|
// Decode Base64 string and return the original data
|
||||||
|
return base64_decode($b64, $strict);
|
||||||
|
}
|
||||||
|
|
||||||
|
$GLOBALS["place"]="Liceo Scientifico Statale \"L.Cocito\"";
|
29
server/data/current.csv
Normal file
29
server/data/current.csv
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
"Genere","Titolo","Autore","Editore","Serie","Lingua","Argomento","Prestito","ISBN","Note 1","Note 2","Posizione","Data","Inventario","Npag","Lvl bibliog.","Dewey","Paese pubblicaz.","Luogo editore","Curatore","Tipo documento","Traduzione","Descrizione","Identificat.","PrleChv","Prezzo","Dispnbl","Apprzm","Custom Field 1","Custom Field 2","Custom Field 3","Custom Field 4","Custom Field 5","Custom Field 6","Custom Field 7","Custom Field 8","Custom Field 9","Custom Field 10"
|
||||||
|
"","The Mammoth Book of Great British Humour","Michael Powell","Little, Brown Book Group","Mammoth Books","","Libri in inglese/Music & Entertainment/Humor/Humor - General","P","9781849010535","Note","","","2010","","","","","","","","","","576 p.; fisico","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Romanzi italiani » Racconti e antologie letterarie","Il sistema periodico","Primo Levi","Giulio Einaudi Editore","Einaudi tascabili. Scrittori","Italiano","","","9788806219505","","","","02/02/2014","","266","Monografia","853 (12.) NARRATIVA ITALIANA","ITALIA","","","Testo","","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"","Machines Like Me: and people like you","Ian McEwan","London Jonathan Cape, 2019","","INGLESE","","","9781787331662","","","","","","","Monografia","","GRAN BRETAGNA","","","Testo","","305 p. ; 24 cm","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Romanzi stranieri","Norwegian wood. Tokyo blues","Haruki Murakami","Giulio Einaudi Editore","Super ET","Italiano","Narrativa Narrativa moderna e contemporanea (dopo il 1945)","","9788806216467","","","","18/03/2013","","399","Monografia","895.635 (21.) NARRATIVA GIAPPONESE. 1945-1999","ITALIA","","","Libro: Copertina morbida","G. Amitrano","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Informatica e Web » Sicurezza informatica","L'arte dell'inganno. I consigli dell'hacker più famoso del mondo","Kevin D. Mitnick","Casa editrice Feltrinelli","Universale economica. Saggi","Italiano","Informatica Sicurezza informatica","","9788807882463","","","","24/09/2013","","324","Monografia","005.8 (22.) SICUREZZA DEI DATI","ITALIA","","","Libro: Copertina morbida","G. Carlotti","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Politica e Società » Comunicazione e Media » Studi sulla comunicazione » Politica e Istituzioni » Pr","Dieci ragioni per cancellare subito i tuoi account social","Jaron Lanier","Il Saggiatore","La piccola cultura","Italiano","Società, scienze sociali e politica Società e cultura: argom","","9788842825166","","","","21/06/2018","","211","Monografia","302.231 (23.) MEDIA DIGITALI","ITALIA","","","Libro: Copertina morbida","F. Mastruzzo","Brossura","","","","No","0","","","","","","","","","",""
|
||||||
|
"Bambini e Ragazzi » Scienza e Natura » Scienza e tecnologia » Libri per Conoscere » Cultura generale","Chi era Albert Einstein?","Jess M. Brallier","Nord Sud","Narrativa","Italiano","Bambini e ragazzi Non fiction per bambini e ragazzi","","9788865268421","","","","15/02/2018","","105","Monografia","530.092 (23.) FISICA. Biografia","ITALIA","","","Libro: Copertina morbida","C. Bombari","Brossura","","","","No","0","","","","","","","","","",""
|
||||||
|
"","Se questo è un uomo","Primo Levi","Giulio Einaudi Editore","","","","","9788806354107","","","","","","","","","","","","","","","","","","No","0","","","","","","","","","",""
|
||||||
|
"Bambini e Ragazzi » Classici » 10-12 anni","La fattoria degli animali","George Orwell","Arnoldo Mondadori Editore","Oscar junior","Italiano","Bambini e ragazzi Narrativa e storie vere per bambini e raga","","9788804663089","","","","01/01/2016","","198","Monografia","","ITALIA","","","Libro: Copertina morbida","G. Bulla","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Scienza e Tecnica » Biologia » Opere divulgative » Zoologia , Ambiente e Animali » Cani Gatti e altr","La vita segreta delle mucche","Rosamund Young","Garzanti","Saggi","Italiano","Casa, hobby, cucina e tempo libero Natura, vita in campagna ","","9788811675747","","","","05/10/2017","","150","Monografia","636.2 (23.) RUMINANTI E CAMELIDI BOVINI","ITALIA","","","Libro: Copertina rigida","A. Di Gregorio","Rilegato","","","","No","0","","","","","","","","","",""
|
||||||
|
"Scienza e Tecnica » Astronomia, Spazio e Tempo » Cosmologia e Universo » Opere divulgative » Fisica ","Hawking per tutti. Universo, spazio, tempo","Rudiger Vaas","Libreria Geografica","ATLANTI","Italiano","","","9788869852046","","","","31/10/2017","","128","Monografia","530.092 (21.) FISICA. Persone","ITALIA","","","Libro: Copertina morbida","R. Franceschini","Brossura","","","","No","0","","","","","","","","","",""
|
||||||
|
"Economia Diritto e Lavoro » Management » Impresa: strategia, innovazione, imprenditorialità¿ » Studi","Silicon valley. Sogna credici realizza. Cosa imparare dalla terra dell'innovazione per farcela in Italia","Eleonora Chioda","Ulrico Hoepli Editore","Business & technology","Italiano","Economia e management Affari e gestione (management)","","9788820389161","","","","16/05/2019","","384","Monografia","","ITALIA","","","Libro: Copertina morbida","","Brossura","","","","No","0","","","","","","","","","",""
|
||||||
|
"Economia Diritto e Lavoro » Finanze personali e Investimenti , Salute Benessere Self Help » Self Hel","Padre ricco padre povero. Quello che i ricchi insegnano ai figli sul denaro","Robert T. Kiyosaki","Gribaudi","","Italiano","Salute e benessere personale Auto aiuto e valorizzazione per","","9788871527741","","","","24/01/2004","","208","Monografia","","ITALIA","","","Libro","D. Ballarini","Libro","","","","No","0","","","","","","","","","",""
|
||||||
|
"Bambini e Ragazzi » Narrativa » Narrativa » 10-12 anni , Famiglia Scuola e Università » Libri Scuola","L'amico ritrovato","Fred Uhlman","Loescher","Narrativa scuola Feltrinelli/Loescher","Italiano","Bambini e ragazzi Materiale educativo","","9788820116262","","","","15/06/1986","","144","","","","","","Libro","M. Castagnone","Libro","","","","No","0","","","","","","","","","",""
|
||||||
|
"Religione","Vangelo. Nuovo testo CEI","AA.VV.","Edizioni Paoline","Vangelo. Nuovo Testamento. Testi","ITALIANO","Scienze umane Religione e fede","","9788821592683","","","","05/2015","","400","Monografia","","ITALIA","","","Libro: Copertina morbida","","391 p. ; 10 cm","","","","No","0","","","","","","","","","",""
|
||||||
|
"Storia e Biografie » Storia: opere generali","Una questione privata","Beppe Fenoglio","Giulio Einaudi Editore","Einaudi tascabili","Italiano","Narrativa Narrativa moderna e contemporanea (dopo il 1945)","","9788806117856","","","","01/01/1990","","334","Monografia","","ITALIA","","","Libro","","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Bambini e Ragazzi » Narrativa » Narrativa » Racconti » 10-12 anni","L'uomo che sapeva contare","Malba Tahan","Salani","","Italiano","Bambini e ragazzi Narrativa e storie vere per bambini e raga","","9788867158836","","","","15/05/2014","","208","Monografia","","ITALIA","","","Libro: Copertina rigida","L. Zannini","Rilegato","","","","No","0","","","","","","","","","",""
|
||||||
|
"Gialli Noir e Avventura » Gialli per bambini e ragazzi , Bambini e Ragazzi » Narrativa » Avventura, ","Dieci piccoli indiani","Agatha Christie","Arnoldo Mondadori Editore","Oscar junior","Italiano","Bambini e ragazzi Narrativa e storie vere per bambini e raga","","9788804616986","","","","18/06/2012","","229","Monografia","823.912 (19.) NARRATIVA INGLESE. 1900-1945","ITALIA","","","Libro: Copertina morbida","B. Della Frattina","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Storie vere , Storia e Biografie » Storie vere , Politica e Società » Proble","Nel mare ci sono i coccodrilli. Storia vera di Enaiatollah Akbari","Fabio Geda","Baldini & Castoldi","I tascabili","Italiano","","","9788868520151","","","","08/07/2013","","155","Monografia","","ITALIA","","","Testo","","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Romanzi italiani","L'Arminuta","Donatella Di Pietrantonio","Giulio Einaudi Editore","Super ET","Italiano","","","9788806239848","","","","05/02/2019","","176","Monografia","853.92 (21.) NARRATIVA ITALIANA, 2000-","ITALIA","","","Testo","","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Romanzi italiani","Lessico famigliare","Natalia Ginzburg","Giulio Einaudi Editore","Super ET","Italiano","Narrativa Narrativa moderna e contemporanea (dopo il 1945)","","9788806219291","","","","01/01/2014","","296","Monografia","853.914 (21.) NARRATIVA ITALIANA, 1945-1999","ITALIA","","","Libro","","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Classici italiani","La luna e i falò","Cesare Pavese","Giulio Einaudi Editore","Super ET","Italiano","","","9788806219383","","","","Super ET","","246","Monografia","853.914 (19.) NARRATIVA ITALIANA. 1945-","ITALIA","","","Libro","","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"Bambini e Ragazzi » Narrativa » Narrativa » Temi personali e sociali » Autostima e autocoscienza » 1","Wonder","R. J. Palacio","Giunti Editore","Biblioteca Junior","Italiano","Bambini e ragazzi Narrativa e storie vere per bambini e raga","","9788809058347","","","","07/05/2013","","288","Monografia","","ITALIA","","","Libro: Copertina morbida","A. Orcese","Brossura","","","","No","0","","","","","","","","","",""
|
||||||
|
"Romanzi e Letterature » Fantascienza , Fantasy Horror e Gothic » Fantascienza","Il ritorno dello Jedi. Star Wars","James Kahn","Arnoldo Mondadori Editore","Oscar grandi bestsellers","Italiano","Narrativa Fantasy e fantascienza","","9788804657019","","","","20/10/2015","","204","Monografia","","ITALIA","","","Libro: Copertina morbida","A. Guarnieri","Tascabile","","","","No","0","","","","","","","","","",""
|
||||||
|
"","Il nome della rosa ","Eco, Umberto","Bompiani","I libri di Umberto Eco","ITALIANO","Narrativa Narrativa di ambientazione storica","","9788845296833","","","","02/2018","","624","Monografia","853.914 (23.) NARRATIVA ITALIANA, 1945-1999","ITALIA","","","Testo","","618 p. ; 21 cm.","","","","No","0","","","","","","","","","",""
|
||||||
|
"Gialli Noir e Avventura » Gialli per bambini e ragazzi , Bambini e Ragazzi » Narrativa » Avventura, ","La nave del tempo. Ediz. illustrata","Ulysses Moore","Edizioni Piemme","Il battello a vapore. Ulysses Moore","Italiano","Bambini e ragazzi Narrativa e storie vere per bambini e raga","","9788856631715","","","","21/10/2013","","311","Monografia","853.92 (21.) NARRATIVA ITALIANA, 2000-","ITALIA","","","Libro: Copertina rigida","","Rilegato","","","","No","0","","","","","","","","","",""
|
||||||
|
"Bambini e Ragazzi » Narrativa » Narrativa » Temi personali e sociali » Autostima e autocoscienza » 1","Dragon Boy","Guido Sgardoli","Edizioni Piemme","Il Battello a vapore. One shot","Italiano","Bambini e ragazzi Narrativa e storie vere per bambini e raga","","9788856648348","","","","03/10/2015","","232","Monografia","","ITALIA","","","Libro: Copertina rigida","","Rilegato","","","","No","0","","","","","","","","","",""
|
||||||
|
"T","1989. Dieci storie per attraversare i muri","M. Reynolds","Orecchio Acerbo","","ITALIANO","","","9788889025833","","","","01/2009","","87","Monografia","808.83 (20.) NARRATIVA. COLLEZIONI, ANTOLOGIE","ITALIA","","","Libro: Copertina morbida","","87 p. : ill. ; 25 cm","","","","No","0","","","","","","","","","",""
|
|
251
server/index.php
Normal file
251
server/index.php
Normal file
|
@ -0,0 +1,251 @@
|
||||||
|
<?php
|
||||||
|
require("common.php");
|
||||||
|
function main($pdo)
|
||||||
|
{
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<title>Biblioteca | <?php echo $GLOBALS["place"]; ?></title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
|
||||||
|
<link rel="stylesheet" href="https://www.w3schools.com/lib/w3-theme-blue-grey.css">
|
||||||
|
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Open+Sans'>
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5 {
|
||||||
|
font-family: "Open Sans", sans-serif
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body class="w3-theme-l5">
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<div class="w3-top">
|
||||||
|
<div class="w3-bar w3-theme-d2 w3-left-align w3-large">
|
||||||
|
<a href="#" class="w3-bar-item w3-button w3-padding-large w3-theme-d4"><i class="fa fa-book w3-margin-right"></i>Biblioteca |<?php echo $GLOBALS["place"]; ?></a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Page Container -->
|
||||||
|
<div class="w3-container w3-content" style="max-width:1400px;margin-top:80px">
|
||||||
|
<!-- The Grid -->
|
||||||
|
<div class="w3-row">
|
||||||
|
<!-- Left Column -->
|
||||||
|
<div class="w3-content">
|
||||||
|
<!-- Profile -->
|
||||||
|
<div class="w3-card w3-round w3-white">
|
||||||
|
<div class="w3-container">
|
||||||
|
<h3 class="w3-center">Biblioteca online</h3>
|
||||||
|
<h4 class="w3-center"><?php echo $GLOBALS["place"]; ?></h4>
|
||||||
|
<center><img style="width:45vw" src="bookshelf.svg" /></center>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
<p><i class="fa fa-book fa-fw w3-margin-right w3-text-theme"></i> <?php
|
||||||
|
|
||||||
|
$stmt = $pdo->prepare("SELECT COUNT(*) as n FROM Libri");
|
||||||
|
$stmt->execute();
|
||||||
|
$data = $stmt->fetch();
|
||||||
|
|
||||||
|
echo "Volumi: " . $data["n"];
|
||||||
|
|
||||||
|
?></p>
|
||||||
|
|
||||||
|
|
||||||
|
<p><i class="fa fa-user fa-fw w3-margin-right w3-text-theme"></i> <?php
|
||||||
|
|
||||||
|
$stmt = $pdo->prepare("SELECT COUNT(DISTINCT Autore) as n FROM Libri");
|
||||||
|
$stmt->execute();
|
||||||
|
$data = $stmt->fetch();
|
||||||
|
|
||||||
|
echo "Autori: " . $data["n"];
|
||||||
|
|
||||||
|
?></p>
|
||||||
|
|
||||||
|
|
||||||
|
<p><i class="fa fa-clock-o fa-fw w3-margin-right w3-text-theme"></i> <?php
|
||||||
|
|
||||||
|
$f = date("d/m/Y H:i:s", file_get_contents("lastupdate.dat"));
|
||||||
|
|
||||||
|
echo "Ultimo aggiornamento: " . $f;
|
||||||
|
|
||||||
|
?></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Accordion -->
|
||||||
|
<div class="w3-card w3-round">
|
||||||
|
<div class="w3-white">
|
||||||
|
|
||||||
|
<button onclick="myFunction('Demo1')" class="w3-button w3-block w3-theme-l1 w3-left-align"><i class="fa fa-search fa-fw w3-margin-right"></i>Interroga l'archivio</button>
|
||||||
|
<div id="Demo1" class="w3-hide w3-container">
|
||||||
|
<form method="POST" action="results.php">
|
||||||
|
<div class="w3-row">
|
||||||
|
<p class="w3-third"><label>Titolo</label>
|
||||||
|
<input class="w3-input w3-border" name="Titolo" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Autore</label>
|
||||||
|
<input class="w3-input w3-border" name="Autore" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Genere</label>
|
||||||
|
<input class="w3-input w3-border" name="Genere" type="text">
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="w3-row">
|
||||||
|
<p class="w3-third"><label>Editore</label>
|
||||||
|
<input class="w3-input w3-border" name="Editore" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>ISBN</label>
|
||||||
|
<input class="w3-input w3-border" name="ISBN" type="number">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Inventario</label>
|
||||||
|
<input class="w3-input w3-border" name="Inventario" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="w3-row">
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Serie</label>
|
||||||
|
<input class="w3-input w3-border" name="Serie" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Lingua</label>
|
||||||
|
<input class="w3-input w3-border" name="Lingua" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Argomento</label>
|
||||||
|
<input class="w3-input w3-border" name="Argomento" type="text">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="w3-row">
|
||||||
|
|
||||||
|
<p class="w3-third"><label>In prestito</label>
|
||||||
|
<select class="w3-select" name="Prestito">
|
||||||
|
<option value="P">Sì</option>
|
||||||
|
<option value="NP">No</option>
|
||||||
|
<option selected value="IGNORE">Ignora</option>
|
||||||
|
</select>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Dewey</label>
|
||||||
|
<input class="w3-input w3-border" name="first" type="Dewey">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="w3-third"><label>Numero di pagine</label>
|
||||||
|
<input class="w3-input w3-border" name="NPag" type="number">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button class="w3-btn w3-right w3-blue-grey"><i class="fa fa-search fa-fw w3-margin-right"></i>Interroga</button>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<button onclick="myFunction('Demo2')" class="w3-button w3-block w3-theme-l1 w3-left-align"><i class="fa fa-newspaper-o fa-fw w3-margin-right"></i>Notizie</button>
|
||||||
|
<div id="Demo2" class=" w3-hide w3-container">
|
||||||
|
<h4>Titolo</h4>
|
||||||
|
<h3>Autore</h3>
|
||||||
|
Dfsfdf
|
||||||
|
<hr />
|
||||||
|
<h4>Titolo</h4>
|
||||||
|
<h3>Autore</h3>
|
||||||
|
Dfsfdf
|
||||||
|
<hr />
|
||||||
|
<h4>Titolo</h4>
|
||||||
|
<h3>Autore</h3>
|
||||||
|
Dfsfdf
|
||||||
|
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Interests -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- End Left Column -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- End Grid -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- End Page Container -->
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="w3-container w3-theme-d3 w3-padding-16">
|
||||||
|
<h5>Mattia Mascarello, MIT License, 2021</h5>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<footer class="w3-container w3-theme-d5">
|
||||||
|
<p>Repo <a href="https://www.w3schools.com/w3css/default.asp" target="_blank">github</a></p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Accordion
|
||||||
|
function myFunction(id) {
|
||||||
|
var x = document.getElementById(id);
|
||||||
|
if (x.className.indexOf("w3-show") == -1) {
|
||||||
|
x.className += " w3-show";
|
||||||
|
x.previousElementSibling.className += " w3-theme-d1";
|
||||||
|
} else {
|
||||||
|
x.className = x.className.replace("w3-show", "");
|
||||||
|
x.previousElementSibling.className =
|
||||||
|
x.previousElementSibling.className.replace(" w3-theme-d1", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used to toggle the menu on smaller screens when clicking on the menu button
|
||||||
|
function openNav() {
|
||||||
|
var x = document.getElementById("navDemo");
|
||||||
|
if (x.className.indexOf("w3-show") == -1) {
|
||||||
|
x.className += " w3-show";
|
||||||
|
} else {
|
||||||
|
x.className = x.className.replace(" w3-show", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//myFunction('Demo2')
|
||||||
|
myFunction('Demo1')
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbh = new PDO('sqlite:db');
|
||||||
|
main($dbh);
|
||||||
|
?>
|
47
server/processCsv.php
Normal file
47
server/processCsv.php
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
function processCsv(){
|
||||||
|
$f=file("data/current.csv",FILE_SKIP_EMPTY_LINES);
|
||||||
|
$dbh = new PDO('sqlite:db');
|
||||||
|
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
$q=$dbh->prepare("DELETE FROM Libri");
|
||||||
|
$q->execute();
|
||||||
|
$i=0;
|
||||||
|
foreach($f as $row){
|
||||||
|
if($i==0){
|
||||||
|
$i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$aL=str_getcsv($row);
|
||||||
|
$statement=$dbh->prepare("INSERT INTO Libri(Genere,Titolo,Autore,Editore,Serie,Lingua,Argomento,Prestito,ISBN,Note1,Note2,Posizione,Data,Inventario,Npag,Lvlbibliogr,Dewey,Paesepubblicaz,Luogoeditore,Curatore,Tipo,Traduzione,Descrizione,Identificativo) VALUES(:Genere,:Titolo,:Autore,:Editore,:Serie,:Lingua,:Argomento,:Prestito,:ISBN,:Note1,:Note2,:Posizione,:Data,:Inventario,:Npag,:Lvlbibliogr,:Dewey,:Paesepubblicaz,:Luogoeditore,:Curatore,:Tipo,:Traduzione,:Descrizione,:Identificativo)");
|
||||||
|
$statement->execute([
|
||||||
|
":Genere"=>$aL[0],
|
||||||
|
":Titolo"=>$aL[1],
|
||||||
|
":Autore"=>$aL[2],
|
||||||
|
":Editore"=>$aL[3],
|
||||||
|
":Serie"=>$aL[4],
|
||||||
|
":Lingua"=>$aL[5],
|
||||||
|
":Argomento"=>$aL[6],
|
||||||
|
":Prestito"=>$aL[7],
|
||||||
|
":ISBN"=>$aL[8],
|
||||||
|
":Note1"=>$aL[9],
|
||||||
|
":Note2"=>$aL[10],
|
||||||
|
":Posizione"=>$aL[11],
|
||||||
|
":Data"=>$aL[12],
|
||||||
|
":Inventario"=>$aL[13],
|
||||||
|
":Npag"=>$aL[14],
|
||||||
|
":Lvlbibliogr"=>$aL[15],
|
||||||
|
":Dewey"=>$aL[16],
|
||||||
|
":Paesepubblicaz"=>$aL[17],
|
||||||
|
":Luogoeditore"=>$aL[18],
|
||||||
|
":Curatore"=>$aL[19],
|
||||||
|
":Tipo"=>$aL[20],
|
||||||
|
":Traduzione"=>$aL[21],
|
||||||
|
":Descrizione"=>$aL[22],
|
||||||
|
":Identificativo"=>$aL[23]
|
||||||
|
]);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$q=$dbh->prepare("VACUUM");
|
||||||
|
$q->execute();
|
||||||
|
file_put_contents("lastupdate.dat",time());
|
||||||
|
}
|
328
server/results.php
Normal file
328
server/results.php
Normal file
|
@ -0,0 +1,328 @@
|
||||||
|
<?php
|
||||||
|
require("common.php");
|
||||||
|
function main($pdo, $pageN)
|
||||||
|
{
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<title>Biblioteca | <?php echo $GLOBALS["place"]; ?></title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
|
||||||
|
<link rel="stylesheet" href="https://www.w3schools.com/lib/w3-theme-blue-grey.css">
|
||||||
|
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Open+Sans'>
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
<style>
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5 {
|
||||||
|
font-family: "Open Sans", sans-serif
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body class="w3-theme-l5">
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<div class="w3-top">
|
||||||
|
<div class="w3-bar w3-theme-d2 w3-left-align w3-large">
|
||||||
|
<a href="./" class="w3-bar-item w3-button w3-padding-large w3-theme-d4"><i class="fa fa-book w3-margin-right"></i>Biblioteca | <?php echo $GLOBALS["place"]; ?></a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Page Container -->
|
||||||
|
<div class="w3-container w3-content" style="max-width:1400px;margin-top:80px">
|
||||||
|
<!-- The Grid -->
|
||||||
|
<div class="w3-row">
|
||||||
|
<!-- Left Column -->
|
||||||
|
<div class="w3-content">
|
||||||
|
<!-- Profile -->
|
||||||
|
<div class="w3-card w3-round w3-white">
|
||||||
|
<div class="w3-container">
|
||||||
|
<h3 class="w3-center">Biblioteca online</h3>
|
||||||
|
<h4 class="w3-center"><?php echo $GLOBALS["place"]; ?></h4>
|
||||||
|
<center><img style="width:45vw" src="bookshelf.svg" /></center>
|
||||||
|
<hr>
|
||||||
|
<h4 class="w3-center">Interrogazione completata</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Accordion -->
|
||||||
|
<div class="w3-card w3-round">
|
||||||
|
<div class="w3-white">
|
||||||
|
|
||||||
|
<button onclick="myFunction('Demo1')" class="w3-button w3-block w3-theme-l1 w3-left-align"><i class="fa fa-list fa-fw w3-margin-right"></i>Risultati dell'interrogazione</button>
|
||||||
|
<div id="Demo1" class="w3-hide w3-container">
|
||||||
|
<?php
|
||||||
|
$arrayQ = [];
|
||||||
|
$query = "SELECT id,Titolo,Autore,ISBN FROM Libri WHERE";
|
||||||
|
$flag = false;
|
||||||
|
if (!empty($_POST["Titolo"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Titolo LIKE ('%' || :Titolo || '%')";
|
||||||
|
$arrayQ[":Titolo"] = $_POST["Titolo"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Autore"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Autore LIKE ('%' || :Autore || '%')";
|
||||||
|
$arrayQ[":Autore"] = $_POST["Autore"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Editore"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Editore LIKE ('%' || :Editore || '%')";
|
||||||
|
$arrayQ[":Editore"] = $_POST["Editore"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Genere"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Genere LIKE ('%' || :Genere || '%')";
|
||||||
|
$arrayQ[":Genere"] = $_POST["Genere"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["ISBN"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " ISBN LIKE ('%' || :ISBN || '%')";
|
||||||
|
$arrayQ[":ISBN"] = $_POST["ISBN"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Inventario"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Inventario LIKE ('%' || :Inventario || '%')";
|
||||||
|
$arrayQ[":Inventario"] = $_POST["Inventario"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Serie"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Serie LIKE ('%' || :Serie || '%')";
|
||||||
|
$arrayQ[":Serie"] = $_POST["Serie"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Lingua"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Lingua LIKE ('%' || :Lingua || '%')";
|
||||||
|
$arrayQ[":Lingua"] = $_POST["Lingua"];
|
||||||
|
}
|
||||||
|
if (!empty($_POST["Argomento"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Argomento LIKE ('%' || :Argomento || '%')";
|
||||||
|
$arrayQ[":Argomento"] = $_POST["Argomento"];
|
||||||
|
}
|
||||||
|
if ($_POST["Prestito"] == "P") {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Prestito='P'";
|
||||||
|
} elseif ($_POST["Prestito"] == "NP") {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " Prestito!='P'";
|
||||||
|
}
|
||||||
|
if (!empty($_POST["NPag"])) {
|
||||||
|
if (!$flag) {
|
||||||
|
$flag = true;
|
||||||
|
} else {
|
||||||
|
$query .= " AND ";
|
||||||
|
}
|
||||||
|
$query .= " NPag =:NPag";
|
||||||
|
$arrayQ[":NPag"] = $_POST["NPag"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$flag) $query .= " 1=1";
|
||||||
|
$query .= " ORDER BY Titolo ASC";
|
||||||
|
$query .= " LIMIT " . (10) . " OFFSET " . ($pageN * 10);
|
||||||
|
$stmt = $pdo->prepare($query);
|
||||||
|
$stmt->execute($arrayQ);
|
||||||
|
$i = 0;
|
||||||
|
while ($data = $stmt->fetch()) {
|
||||||
|
$ak = array_keys($data);
|
||||||
|
for ($i = 0; $i < count($ak); $i++) {
|
||||||
|
$data[$ak[$i]] = iconv('iso-8859-1', 'UTF-8//IGNORE', $data[$ak[$i]]);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="resultD w3-panel w3-card">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Titolo</th>
|
||||||
|
<td><?php echo htmlentities($data["Titolo"]); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Autore</th>
|
||||||
|
<td><?php echo htmlentities($data["Autore"]); ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>ISBN</th>
|
||||||
|
<td><?php echo htmlentities($data["ISBN"]); ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<form action="bookDetail.php" method="GET">
|
||||||
|
<input name="id" type="hidden" value="<?php echo $data["id"]; ?>" />
|
||||||
|
<button class="w3-btn w3-right w3-blue-grey"><i class="fa fa-arrow-circle-right fa-fw w3-margin-right"></i>Vedi</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
if ($i == 0) {
|
||||||
|
echo '<h4 class="w3-center">Nessun risultato</h4>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="w3-row">
|
||||||
|
<?php
|
||||||
|
$p = (int)$_POST["page"];
|
||||||
|
unset($_POST["page"]);
|
||||||
|
if ($p != 0) {
|
||||||
|
?>
|
||||||
|
<div class="w3-third">
|
||||||
|
<form method="POST">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
foreach ($_POST as $key => $val) {
|
||||||
|
?><input type="hidden" name="<?php echo htmlentities($key); ?>" value="<?php echo htmlentities($val); ?>" /><?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<input type="hidden" name="page" value="<?php echo $p - 1; ?>">
|
||||||
|
<button class="w3-btn w3-left w3-blue-grey"> <i class="fa fa-arrow-left fa-fw w3-margin-right "></i>Pagina precedente</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
} else {
|
||||||
|
?><div class="w3-third"></div><?php
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div class="w3-third">
|
||||||
|
<?php if ($i != 0) { ?> <h4 class="w3-center">Pagina <?php echo $pageN + 1; ?></h4> <?php } ?>
|
||||||
|
</div>
|
||||||
|
<div class="w3-third">
|
||||||
|
<?php
|
||||||
|
if ($i != 0) {
|
||||||
|
?>
|
||||||
|
<form method="POST">
|
||||||
|
<?php
|
||||||
|
foreach ($_POST as $key => $val) {
|
||||||
|
?><input type="hidden" name="<?php echo htmlentities($key); ?>" value="<?php echo htmlentities($val); ?>" /><?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<input type="hidden" name="page" value="<?php echo $p + 1; ?>">
|
||||||
|
<button class="w3-btn w3-right w3-blue-grey"> Pagina successiva<i class="fa fa-arrow-right fa-fw w3-margin-left"></i></button>
|
||||||
|
</form>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Interests -->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- End Left Column -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- End Grid -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- End Page Container -->
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="w3-container w3-theme-d3 w3-padding-16">
|
||||||
|
<h5>Mattia Mascarello, MIT License, 2021</h5>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<footer class="w3-container w3-theme-d5">
|
||||||
|
<p>Repo <a href="https://www.w3schools.com/w3css/default.asp" target="_blank">github</a></p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Accordion
|
||||||
|
function myFunction(id) {
|
||||||
|
var x = document.getElementById(id);
|
||||||
|
if (x.className.indexOf("w3-show") == -1) {
|
||||||
|
x.className += " w3-show";
|
||||||
|
x.previousElementSibling.className += " w3-theme-d1";
|
||||||
|
} else {
|
||||||
|
x.className = x.className.replace("w3-show", "");
|
||||||
|
x.previousElementSibling.className =
|
||||||
|
x.previousElementSibling.className.replace(" w3-theme-d1", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used to toggle the menu on smaller screens when clicking on the menu button
|
||||||
|
function openNav() {
|
||||||
|
var x = document.getElementById("navDemo");
|
||||||
|
if (x.className.indexOf("w3-show") == -1) {
|
||||||
|
x.className += " w3-show";
|
||||||
|
} else {
|
||||||
|
x.className = x.className.replace(" w3-show", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
myFunction('Demo1')
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbh = new PDO('sqlite:db');
|
||||||
|
main($dbh, $_POST["page"] ?: 0);
|
||||||
|
?>
|
41
server/up.php
Normal file
41
server/up.php
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
require("processCsv.php");
|
||||||
|
function filterName($s){
|
||||||
|
$arr=str_split($s);
|
||||||
|
$fs="";
|
||||||
|
$allowedChars=str_split("ABCDEFGHIJLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-");
|
||||||
|
foreach($arr as $c){
|
||||||
|
if(in_array($c,$allowedChars)) $fs.=$c;
|
||||||
|
}
|
||||||
|
return $fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
$f=file("php://input");
|
||||||
|
$AUTH="xmeQCwqrQcSQ7TQX2Yyw";
|
||||||
|
if(trim($f[0])!=$AUTH) echo "UNAUTHORIZED";
|
||||||
|
$nonce=trim($f[1]);
|
||||||
|
$command=trim($f[2]);
|
||||||
|
switch($command){
|
||||||
|
case "BEGIN":
|
||||||
|
$files=glob("data/*.csv");
|
||||||
|
array_diff($files,["data/current.csv"]);
|
||||||
|
foreach($files as $ff){
|
||||||
|
unlink($ff);
|
||||||
|
}
|
||||||
|
echo "BEGIN";
|
||||||
|
break;
|
||||||
|
case "WRITE":
|
||||||
|
for($i=3;$i<count($f);$i++){
|
||||||
|
file_put_contents("data/".filterName($nonce).".csv",$f[$i],FILE_APPEND);
|
||||||
|
}
|
||||||
|
echo "PROCEED";
|
||||||
|
break;
|
||||||
|
case "CONCLUDE":
|
||||||
|
rename("data/".filterName($nonce).".csv","data/current.csv");
|
||||||
|
processCsv();
|
||||||
|
echo "OK";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
echo "UNKNOWN";
|
||||||
|
break;
|
||||||
|
}
|
Reference in New Issue
Block a user