Miglioramento della documentazione

This commit is contained in:
Thomas Zilio 2017-09-04 11:53:30 +02:00
parent 10da3933ca
commit 396524eb50
5 changed files with 89 additions and 22 deletions

View File

@ -1,22 +1,30 @@
<?php
// Impostazioni di base per l'accesso al database
$db_host = '|host|';
$db_username = '|username|';
$db_password = '|password|';
$db_name = '|database|';
// Percorso della cartella di backup
$backup_dir = __DIR__.'/backup/';
// Tema selezionato per il front-end
$theme = 'default';
// Redirect automatico delle richieste da HTTP a HTTPS
$redirectHTTPS = false;
// Impostazioni di debug
$debug = false;
$strict = false;
// Personalizzazione dei gestori dei tag personalizzati
$HTMLWrapper = null;
$HTMLHandlers = [];
$HTMLManagers = [];
// Lingua del progetto
$lang = 'it';
// Personalizzazione della formattazione di date e numeri
$formatter = [];

View File

@ -8,14 +8,18 @@ currentMenu: api
>
> \-- <cite>[Wikipedia](https://it.wikipedia.org/wiki/Application_programming_interface)</cite>
L'API del progetto è attualmente ancora in sviluppo, e pertanto le funzioni disponibili potrebbero essere piuttosto ridotte. Di seguito sono elencate le basi per connettersi al sistema e ottenere i dati a cui si è interessati.
L'API del progetto è attualmente ancora in sviluppo, e pertanto le funzioni disponibili potrebbero essere piuttosto ridotte.
Di seguito sono elencate le basi per connettersi al sistema e ottenere i dati a cui si è interessati.
<!-- TOC depthFrom:2 depthTo:6 orderedList:false updateOnSave:true withLinks:true -->
- [Accesso](#accesso)
- [Standard di comunicazione](#standard-di-comunicazione)
- [Ottenere la chiave](#ottenere-la-chiave)
- [Formato dei componenti](#formato-dei-componenti)
- [Output](#output)
- [Messaggi](#messaggi)
- [Formato dei componenti](#formato-dei-componenti)
- [Stati](#stati)
- [Lettura](#lettura)
- [Personalizzazione](#personalizzazione)
- [Richieste di lettura](#richieste-di-lettura)
- [Interventi](#interventi)
- [Anagrafiche](#anagrafiche)
@ -25,29 +29,38 @@ L'API del progetto è attualmente ancora in sviluppo, e pertanto le funzioni dis
<!-- /TOC -->
## Accesso
## Standard di comunicazione
L'accesso all'API viene effettuato concatenendo la chiave dell'utenza all'URL del sito su cui è ospitato il progetto.
Il funzionamento dell'API si basa fondamentalmente sull'utilizzo di una chiave di accesso, ospitata all'interno della tabella `zz_tokens` del database del progetto, univoca per ogni istanza dell'utente.
http://<url_osm>/api/?token=<token>
Ogni richiesta all'API deve contenere la chiave di accesso (campo `token`) e l'operazione richiesta (campo `resource`), inserendo questi elementi tra gli ulteriori contenuti che si intendono inviare.
I contenuti della richiesta devono quindi essere convertiti in formato JSON ed inviati all'API secondo uno specifico schema:
La chiave di accesso è ottenibile eseguendo la seguente query all'interno del database del progetto:
- `POST` - Richieste di creazione (**Create**).
- `GET` - Richieste di informazioni (**Retrieve**).
- `PUT` - Richieste di modifica (**Update**).
- `DELETE` - Richieste di eliminazione (**Delete**).
```sql
SELECT `token` FROM `zz_tokens` WHERE `id_utente` = <id_utente>
```
### Ottenere la chiave
La chiave di accesso può essere ottenuta sfruttando l'operazione di accesso nativa dell'API, che prevede l'invio di una richiesta **POST** corrispondente alla seguente struttura:
- `resource` - login.
- `username` - &lt;username dell'account>.
- `password` - &lt;password dell'account>.
### Formato dei componenti
I seguenti componenti delle richieste devono seguire una rigida struttura:
- `page` - intero.
- `upd` - yyyy-MM-dd hh:mm:ss.
## Output
L'API del progetto permette di ottenere le informazioni attraverso un array in formato JSON.
Per poter interpretare correttamente i dati, si devono ignorare gli indici numerici di primo livello (non rilevanti all'interno del formato) e sfruttare in particolare i seguenti campi generici:
- `records`, rappresentante il numero totale dei record richiesti;
- `pages`, indicante il numero totale della pagine disponibili.
Si ricorda che l'API prevede la restituzione di un insieme di dati limitato rispetto alla richiesta effettuatua: per ottenere l'intero insieme di informazioni è necessario eseguire molteplici richieste consecutive basate sul campo `page`.
## Messaggi
### Stati
Ogni richiesta effettuata all'API viene accompagnata da un messaggio predefinito che permette di interpretare in modo più preciso la risposta.
In particolare, sono presenti i seguenti _status_:
@ -57,13 +70,29 @@ In particolare, sono presenti i seguenti _status_:
- `401: Non autorizzato` - Accesso non autorizzato.
- `404: Non trovato` - La risorsa richiesta non risulta disponibile.
- `500: Errore del server` - Il gestionale non è in grado di completare la richiesta.
- `503: Servizio non disponibile` - L'API del gestionale non è abilitata.
## Formato dei componenti
### Lettura
I seguenti componenti delle richieste devono seguire una rigida struttura:
Le richieste di lettura sono solitamente completate con l'invio di un numero predefinito di informazioni.
Per poter interpretare correttamente i dati, si devono ignorare gli indici numerici di primo livello (non rilevanti all'interno del formato) e sfruttare in particolare i seguenti campi generici:
- `page` (intero).
- `upd` (yyyy-MM-dd hh:mm:ss).
- `records`, rappresentante il numero totale dei record richiesti;
- `pages`, indicante il numero totale della pagine disponibili.
Si ricorda che l'API prevede la restituzione di un insieme di dati limitato rispetto alla richiesta effettuatua: per ottenere l'intero insieme di informazioni è necessario eseguire molteplici richieste consecutive basate sul campo `page`.
## Personalizzazione
L'API sfrutta una struttura modulare per poter funzionare in modo completo e garantire al tempo stesso il possibile ampliamento delle sue funzioni.
In particolare, ogni modulo può specificare una determinata serie di operazioni che lo riguardano e che possono essere richiamate in vari modi.
Di seguito lo schema attraverso cui l'API individua la presenza delle possibili richieste supportate dai moduli (cartelle **api/** e **custom/api/**):
- `POST` - File `create.php`.
- `GET` - File `eetrieve.php`.
- `PUT` - File `update.php`.
- `DELETE` - File `delete.php`.
## Richieste di lettura

View File

@ -377,6 +377,7 @@ class Auth extends \Util\Singleton
if (!isset(self::$is_brute)) {
$results = $database->fetchArray('SELECT COUNT(*) AS tot FROM zz_logs WHERE ip = '.prepare(get_client_ip()).' AND stato = '.prepare(self::getStatus()['failed']['code']).' AND DATE_ADD(created_at, INTERVAL '.self::$brute['timeout'].' SECOND) >= NOW()');
self::$is_brute = $results[0]['tot'] > self::$brute['attemps'];
}

View File

@ -328,6 +328,30 @@ if (!empty($records[0]['idcontratto_prev'])) {
}
?>
<script type="text/javascript">
$(document).ready(function(){
$('#data_accettazione').on("dp.change", function(){
if($(this).val()){
$('#data_rifiuto').attr('disabled', true);
}else{
$('#data_rifiuto').attr('disabled', false);
}
});
$('#data_rifiuto').on("dp.change", function(){
console.log($(this).val());
if($(this).val()){
$('#data_accettazione').attr('disabled', true);
}else{
$('#data_accettazione').attr('disabled', false);
}
});
$("#data_accettazione").trigger("dp.change");
$("#data_rifiuto").trigger("dp.change");
});
</script>
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo _('Elimina'); ?>
</a>

View File

@ -2,6 +2,7 @@
switch ($resource) {
case 'login':
// Controllo sulle credenziali
if (Auth::getInstance()->attempt($request['username'], $request['password'])) {
$user = Auth::user();
@ -17,6 +18,7 @@ switch ($resource) {
$token = $tokens[0]['token'];
}
// Informazioni da restituire tramite l'API
$results = $dbo->fetchArray('SELECT `ragione_sociale`, `codice`, `piva`, `codice_fiscale`, `indirizzo`, `citta`, `provincia`, (SELECT `nome` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione, `telefono`, `fax`, `cellulare`, `an_anagrafiche`.`email` FROM `zz_users` LEFT JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica` WHERE `id` = '.prepare($user['id_utente']))[0];
$results['token'] = $token;
@ -25,6 +27,7 @@ switch ($resource) {
'status' => API::getStatus()['unauthorized']['code'],
];
// Se è in corso un brute-force, aggiunge il timeout
if (Auth::isBrute()) {
$results['timeout'] = Auth::getBruteTimeout();
}
@ -32,6 +35,7 @@ switch ($resource) {
break;
// Operazione di logout
case 'logout':
if (!empty($request['token']) && !empty($user)) {
$database->query('DELETE FROM `zz_tokens` WHERE `token` = '.prepare($request['token']).' AND `id_utente` = '.prepare($user['id_utente']));
@ -46,4 +50,5 @@ switch ($resource) {
return [
'login',
'logout',
];