94 lines
2.6 KiB
C#
94 lines
2.6 KiB
C#
using Firebase.Database;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.SceneManagement;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks; // Tambahan
|
|
|
|
public class DatabaseManager : MonoBehaviour
|
|
{
|
|
public InputField Name;
|
|
public InputField NomorAbsen;
|
|
|
|
private DatabaseReference dbReference;
|
|
|
|
void Start()
|
|
{
|
|
dbReference = FirebaseDatabase.DefaultInstance.RootReference;
|
|
NomorAbsen.contentType = InputField.ContentType.IntegerNumber;
|
|
|
|
Name.onValueChanged.AddListener(FilterNamaInput);
|
|
}
|
|
|
|
public async void CreateUser()
|
|
{
|
|
// Validasi input kosong
|
|
if (string.IsNullOrEmpty(Name.text) || string.IsNullOrEmpty(NomorAbsen.text))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Validasi nama
|
|
if (!Regex.IsMatch(Name.text, @"^[a-zA-Z\s]+$"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Validasi absen harus angka
|
|
int absen;
|
|
if (!int.TryParse(NomorAbsen.text, out absen))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Generate userID unik
|
|
string userID = Name.text.ToLower().Replace(" ", "_") + "_" + NomorAbsen.text;
|
|
|
|
PlayerPrefs.SetString("UserID", userID);
|
|
PlayerPrefs.Save();
|
|
|
|
DataSnapshot snapshot = await dbReference.Child("users").Child(userID).GetValueAsync();
|
|
|
|
if (snapshot.Exists)
|
|
{
|
|
// Ambil skor jika sudah ada
|
|
object scorePretestObj = snapshot.Child("score_pretest").Value;
|
|
int scorePretest = scorePretestObj != null ? int.Parse(scorePretestObj.ToString()) : 0;
|
|
|
|
object scoreQuisObj = snapshot.Child("score_quis").Value;
|
|
int scoreQuis = scoreQuisObj != null ? int.Parse(scoreQuisObj.ToString()) : 0;
|
|
|
|
PlayerPrefs.SetInt("ScorePretest", scorePretest);
|
|
PlayerPrefs.SetInt("ScoreQuis", scoreQuis);
|
|
PlayerPrefs.Save();
|
|
|
|
Debug.Log("User ditemukan. Skor dimuat dari Firebase.");
|
|
}
|
|
else
|
|
{
|
|
// Buat user baru
|
|
User newUser = new User(Name.text, absen);
|
|
string json = JsonUtility.ToJson(newUser);
|
|
|
|
await dbReference.Child("users").Child(userID).SetRawJsonValueAsync(json);
|
|
|
|
PlayerPrefs.SetInt("ScorePretest", 0);
|
|
PlayerPrefs.SetInt("ScoreQuis", 0);
|
|
PlayerPrefs.Save();
|
|
|
|
Debug.Log("User berhasil dibuat: " + Name.text);
|
|
}
|
|
|
|
SceneManager.LoadScene("PRETEST");
|
|
}
|
|
|
|
private void FilterNamaInput(string input)
|
|
{
|
|
string filtered = Regex.Replace(input, @"[^a-zA-Z\s]", "");
|
|
if (filtered != input)
|
|
{
|
|
Name.text = filtered;
|
|
}
|
|
}
|
|
}
|