<!-- Realisatsiooni aluseks on võetud:
Login Registration with Email Verification, Forgot Password using PHP
Kasutatud 6.04.2016
http://www.codingcage.com/2015/09/login-registration-email-verification-forgot-password-php.html
-->

<?php
/*
======================
Kasutaja klass
======================
*/
class Kasutaja
{
    
    private $conn;
    private $tabel = "kasutajad";
    
    public $id;
    public $eesnimi;
    public $perekonnanimi;
    public $isikukood;
    public $telefon;
    public $email;
    public $aadress;
    public $linn;
    public $maakond;
    public $postiindeks;
    public $riik;
    public $staatus;
    
    public function __construct()
    {
        $database   = new Database();
        $db         = $database->dbConnection();
        $this->conn = $db;
    }
    
    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }
    
    public function lasdID()
    {
        $stmt = $this->conn->lastInsertId();
        return $stmt;
    }
    
    function loeAndmed()
    {
        // Kasutaja ID järgi kõikide andmete lugemine
        $query = "SELECT eesnimi, perekonnanimi, isikukood, telefon, email, aadress, linn, maakond, postiindeks, riik, staatus FROM kasutajad WHERE id = ?";
        
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->id);
        $stmt->execute();
        
        return $stmt;
    }
        function muudaAndmed()
    {
        // Kasutaja ID järgi kasutaja andmete muutmine
        $query = "UPDATE kasutajad SET telefon = ?, email = ?, aadress = ?, linn = ?, maakond = ?, postiindeks = ?, riik = ? WHERE id = ?";
        
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->telefon);
        $stmt->bindParam(2, $this->email);
        $stmt->bindParam(3, $this->aadress);
        $stmt->bindParam(4, $this->linn);
        $stmt->bindParam(5, $this->maakond);
        $stmt->bindParam(6, $this->postiindeks);
        $stmt->bindParam(7, $this->riik);
        $stmt->bindParam(8, $this->id);

        if($stmt->execute()){
            return true;
        } else {
            return false;
        }
    }

    // Lisatud admin dashboardi jaoks.
    function readAll($page, $from_record_num, $records_per_page)
    {
        // Lehekülgede nummerduse tarvis
        $query = "SELECT id, eesnimi, perekonnanimi, staatus FROM kasutajad ORDER BY id ASC LIMIT {$from_record_num}, {$records_per_page}";
        
        $stmt = $this->conn->prepare($query);
        
        $stmt->execute();
        
        return $stmt;
        
    }
    
    public function countAll()
    {
        // Kõikide kirjete lugemine
        $query = "SELECT id FROM " . $this->tabel . "";
        
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        
        $num = $stmt->rowCount();
        
        return $num;
    }
    
    // Portaalis kasutajaks registreerumise vormi andmete sisestamine andmebaasi
    public function register($eesnimi, $perekonnanimi, $isikukood, $telefon, $email, $aadress, $linn, $maakond, $postiindeks, $riik, $parool, $code)
    {
        try {
            $parool = md5($parool);
            $stmt   = $this->conn->prepare("INSERT INTO kasutajad(eesnimi,perekonnanimi,isikukood,telefon,email,aadress,linn,maakond,postiindeks,riik,parool,token) 
			                                             VALUES(:eesnimi, :perekonnanimi, :isikukood, :telefon, :email, :aadress, :linn, :maakond, :postiindeks, :riik,:parool, :token)");
            $stmt->bindparam(":eesnimi", $eesnimi);
            $stmt->bindparam(":perekonnanimi", $perekonnanimi);
            $stmt->bindparam(":isikukood", $isikukood);
            $stmt->bindparam(":telefon", $telefon);
            $stmt->bindparam(":email", $email);
            $stmt->bindparam(":aadress", $aadress);
            $stmt->bindparam(":linn", $linn);
            $stmt->bindparam(":maakond", $maakond);
            $stmt->bindparam(":postiindeks", $postiindeks);
            $stmt->bindparam(":riik", $riik);
            $stmt->bindparam(":parool", $parool);
            $stmt->bindparam(":token", $code);
            $stmt->execute();
            return $stmt;
        }
        catch (PDOException $ex) {
            echo $ex->getMessage();
        }
    }
    
    // Sisselogmine
    public function login($email, $parool)
    {
        try {
            $stmt = $this->conn->prepare("SELECT * FROM kasutajad WHERE email=:email_id");
            $stmt->execute(array(
                ":email_id" => $email
            ));
            $userRow = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if ($stmt->rowCount() == 1) {
                if ($userRow['staatus'] == "Y") {
                    if ($userRow['parool'] == md5($parool)) {
                        $_SESSION['userSession'] = $userRow['id'];
                        if ($_SESSION['userSession'] == '1') {
                            $_SESSION['adminSession'] = $userRow['id'];
                        }
                        return true;
                    } else {
                        header("Location: login.php?error");
                        exit;
                    }
                } else {
                    header("Location: login.php?inactive");
                    exit;
                }
            } else {
                header("Location: login.php?error");
                exit;
            }
        }
        catch (PDOException $ex) {
            echo $ex->getMessage();
        }
    }
    
    // Kas kasutaja on sisselogitud?
    public function is_logged_in()
    {
        if (isset($_SESSION['userSession'])) {
            return true;
        }
    }
    
    // Ümbersuunamine
    public function redirect($url)
    {
        header("Location: $url");
    }
    
    // Välja logimine
    public function logout()
    {
        session_destroy();
        $_SESSION['userSession'] = false;
    }
    
    function send_mail($email, $message, $subject)
    {
        // PHPMaileri jaoks on loodud näidiskonto, mille andmed on toodud allpool.	
        require_once ROOT . 'scripts/mailer/class.phpmailer.php';
        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->SMTPDebug  = 0;
        $mail->SMTPAuth   = true;
        $mail->SMTPSecure = "ssl";
        $mail->Host       = "smtp.gmail.com";
        $mail->Port       = 465;
        $mail->AddAddress($email);
        $mail->Username = "oksjoniportaal@gmail.com";
        $mail->Password = "oksjoniportaal1";
        $mail->SetFrom('oksjoniportaal@gmail.com', 'Oksjoniportaal');
        $mail->AddReplyTo("oksjoniportaal@gmail.com", "Oksjoniportaal");
        $mail->Subject = $subject;
        $mail->MsgHTML($message);
        $mail->Send();
    }
}