#Event: CheckValidNewUsername(IsValid As Boolean)
#Event: UserRegistration(Success As Boolean, UserId As Long)
#Event: ServerError(ErrorCode As Int, ErrorMessage As String)
#Event: MandatoryError(Function As String, Field As String)
#Event: Login(Success As Boolean, UserId As Long)
#Event: UserData(UserData As B4AItaliaUserData, ErrorMessage As String)
#Event: EditUser(Success As Boolean, UserId As Long)
#Event: UserDeleted(Success As Boolean)
#Event: PasswordChanged(Success As Boolean)
#Event: UsersList(Users As List, ErrorMessage As String)
#Event: PictureSent(Success As Boolean)
#Event: PictureTaken(Picture As Bitmap, Thumb As Boolean)
'Class module
Private Sub Class_Globals
Public ERR_SERVER_UNREACHABLE As Int = -100
End Sub
' Inizializza l'oggetto
' EventName è il prefisso da utilizzare per sollevare gli eventi
' Caller è l'oggetto all'interno del quale sollevare gli eventi
Public Sub Initialize(EventName As String, Caller As Object)
' Calcola l'hash della password in modo da non far mai transitare nè memorizzare
' la password in chiaro.
' E' utilizzata internamente da tutte le funzioni che utilizzano la password.
' All'occorrenza può essere utilizzata anche esternamente.
Public Sub GetPasswordHash(Password As String) As String
' Verifica se un dato username esiste già nel db.
' Necessita che sia valorizzato solo UserData.Username
' Viene sollevato l'evento CheckValidNewUsername passando true se lo username NON esiste e quindi può essere utilizzato, false se ESISTE e non deve essere utilizzato.
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo codice di errore.
Public Sub CheckValidNewUser(Username As String)
' Registra un nuovo utente nel db.
' Necessita che siano valorizzati in UserData almeno i campi obbligatori:
' - Cognome
' - Nome
' - EMail
' - Username
' - Denominazione
' - Comune
' - Provincia
' - Nazione
' Anche la password è ovviamente obbligatoria
' Se uno dei campi obbligatori non è stato valorizzato viene sollevato l'evento MandatoryError specificando il nome della funzione andata in errore e il campo non valorizzato.
' Se lo username dell'utente che si sta registrando esiste già, viene sollevato l'evento CheckValidNewUsername con IsValid = false.
' Viene sollevato l'evento UserRegistration passando true se l'utente è stato registrato, false se NON è stato registrato e non deve essere utilizzato.
' Se in UserRegistration Success = true in UserId è presente l'id dell'utente registrato, altrimeni è presente -1 e non va utilizzato
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo codice di errore.
Public Sub RegisterNewUser(UserData As B4AItaliaUserData, Password As String)
' Effettua il login all'applicazione
' Viene sollevato l'evento Login passando true se l'utente è entrato (quindi username e password sono corretti), false se NON è entrato e non deve essere utilizzato.
' Se in Login Success = true in UserId è presente l'id dell'utente registrato, altrimeni è presente -1 e non va utilizzato
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo codice di errore.
Public Sub Login(Username As String, Password As String)
' Recupera tutte le informazioni di dettaglio di un utente
' Per recuperare le informazioni va indicato sia lo UserId recuperato in fase di login o di registrazione
' insieme allo username (doppio controllo per sicurezza - per evitare che un qualsiasi sistema automatico
' possa scaricare tutte le nostre informazioni)
' Se AllData = true vengono ritornate tutte le informazioni anche se l'utente ha richiesto il nascondimento
' dei dati sensibili (ad esempio per la modifica dei propri dati da parte del proprietario che deve
' comunque vederli), se AllData = false vengono ritornate le informazioni esattamente come deciso dal
' proprietario (per tutti gli altri utenti)
' Al ricevimento dei dati dal server viene sollevato l'evento UserData con l'oggetto contenente tutti i dati
' dell'utente.
' In caso di problemi nel recupero dei dati, nell'oggetto UserData ritornato nell'evento, il campo ID avrà
' valore -1 e nel campo Tag sarà possibile visualizzare il messaggio di errore del server.
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
Public Sub GetUser(UserId As Long, Username As String, AllData As Boolean)
' Modifica i dati di un utente
' E' necessario che all'interno dell'oggetto UserData passato siano valorizzati sia lo UserId (con il valore
' recuperato in fase di Login o di registrazione) che lo username (che deve essere quello effettivo
' dell'utente che non può essere diverso/modificato - doppio controllo per sicurezza - per evitare che un
' qualsiasi sistema automatico o terzo possa entrare e fare danni)
' Al termine della modifica viene sollevato l'evento EditUser in cui Success = true se la modifica è riuscita,
' false altrimenti.
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
Public Sub EditUser(UserData As B4AItaliaUserData)
' Elimina un utente
' Per eliminare l'utente va indicato sia lo UserId recuperato in fase di login o di registrazione
' insieme allo username (doppio controllo per sicurezza - per evitare che un qualsiasi sistema automatico
' o terzo possa eliminare gli utenti - Attenzione: solo all'utente loggato deve essere data la possibilità
' di eliminare SOLO se stesso)
' Al termine della modifica viene sollevato l'evento UserDeleter in cui Success = true se l'eliminazione
' è riuscita, false altrimenti.
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
Public Sub DeleteUser(UserId As Long, Username As String)
' Cambia la password dell'utente loggato
' Il cambio password deve essere consentito solo per l'utente loggato!
' I parametri sono autoesplicativi
' Al termine dell'operazione viene sollevato l'evento PasswordChanged con l'indicazione del
' successo (Success = True) o fallimento (Success = False) dell'operazione.
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
Public Sub ChangePassword(UserId As Long, Username As String, OldPassword As String, NewPassword As String)
' Richiede al server l'elenco degli utenti presenti nel db
' Viene restituita, nell'evento UsersList, una lista in cui gli item sono di tipo B4AItaliaUserData
' In caso di errori la lista restituita sarà vuota e in ErrorMessage sarà presente il messaggio di errore.
' In caso di db vuoto, la lista restituita sarà vuota e ErrorMessage sarà valorizzato a "".
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
' Nota: nella lista di ritorno non vengono restituiti tutti i campi dell'utente ma solo:
' ID, EMail, Sito, Username, Denominazione, Comune, Provincia, Nazione, Telefono, Consenti(dati sensibili),
' Lat, Lon e GoogleMaps (tutti compatibilmente con la disponibilità data dal proprietario dei dati)
Public Sub GetUsersList
' Invia una immagine per l'utente indicato.
' Al termine dell'operazione viene sollevato l'evento PictureSent con l'indicazione del
' successo (Success = True) o fallimento (Success = False) dell'operazione.
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
Public Sub SendPicture(UserID As Long, Username As String, Bmp As Bitmap)
' Recupera dal server l'immagine per l'utente indicato.
' Se thumb = true verrà ritornata una miniatura dell'immagine, altrimenti verrà ritornata l'immagine originale.
' Al termine dell'operazione viene sollevato l'evento PictureTaken con l'immagine ritornata e il valore passato in Thumb
' (per sapere se è stata restituita una miniatura (true) o l'immagine originale (false))
' In caso di problemi di connessione col server, viene sollevato l'evento ServerError passando il relativo
' codice di errore.
Public Sub GetPicture(UserId As Long, Username As String, Thumb As Boolean)