<?php
class User {
public $email, $password, $name = null;
public $is_logged = false;
public function __construct() {
$this->db_read = db::getInstance('read');
$this->db_write = db::getInstance('write');
}
public function is_logged() {
$user_cookie = Data::getCookie("user");
if( $user_cookie ) {
$values = explode(":", Encryption::decode($user_cookie));
if( isset($values[1]) ) {
$email = $values[0];
$password = $values[1];
$res = $this->db_read->select("SELECT name FROM users WHERE email = :email AND password = :password", array("email" => $email, "password" => $password));
if( count($res) > 0 ) {
$this->name = $res[0]['name'];
$this->email = $email;
return $this->is_logged = true;
}
}
}
return false;
}
public function is_valid($values) {
$res = $this->db_read->select("SELECT * FROM users WHERE email = :email", array("email" => $values['email']));
if (count($res) > 0) {
if (SHA1($values['password'] . $res[0]['salt']) == $res[0]['password']) {
$this->email = $values['email'];
$this->password = $res[0]['password'];
return true;
}
}
return false;
}
public function login() {
Data::setCookie("user", Encryption::encode($this->email . ':' . $this->password), 72);
}
public function get_name() {
return $this->name;
}
public function add_user($values) {
unset($values['repassword']);
$salt = Encryption::generateRandomKey(4);
$values['salt'] = $salt;
$values['password'] = SHA1($values['password'] . $salt);
$this->db_write->insert("users", $values);
}
public function can_use_email($email) {
$res = $this->db_read->select("SELECT count(id) as count FROM users WHERE email = :email", array("email" => $email));
// If count users with this email == 0 return true else return false
return $res[0]['count'] == 0;
}
public function get_user_data() {
$res = $this->db_read->select("SELECT * FROM users WHERE email = :email", array("email" => $this->email));
return $res[0];
}
public function send_email($email) {
$res = $this->db_read->select("SELECT name, password FROM users WHERE email = :email", array("email" => $email));
$hash = Encryption::encode($email . ":" . $res[0]['password']);
$tpl = new Template();
$tpl->addVar("name", $res[0]['name']);
$tpl->addVar("hash", $hash);
$message = $tpl->display("mails/forget_mail", true);
Data::setCookie("change-password", $hash, 2);
Mail::send("Password change", $message, $email);
}
public function check_link($hash) {
$values = explode(":", Encryption::decode($hash));
$email = $values[0];
$password = $values[1];
$res = $this->db_read->select("SELECT count(id) as count FROM users WHERE email = :email AND password = :password", array("email" => $email, "password" => $password));
return $res[0]['count'] > 0;
}
public function change_password($password) {
$ch_pass_cookie = Data::getCookie("change-password");
if( $ch_pass_cookie ) {
$values = explode(":", Encryption::decode($ch_pass_cookie));
$email = $values[0];
$res = $this->db_read->select("SELECT salt FROM users WHERE email = :email", array("email" => $email));
$this->db_write->update("users", array('password' => SHA1($password . $res[0]["salt"])), 'email = "' . $email . '"');
Data::deleteCookie('change-password');
return true;
}
return false;
}
public function update_profile_data($data) {
unset($data['password']);
$user_cookie = Data::getCookie("user");
$values = explode(":", Encryption::decode($user_cookie));
$email = $values[0];
$this->db_write->update("users", $data, 'email = "' . $email . '"');
if ($data['email'] != $email) {
$this->logout();
}
}
public function valid_password($password) {
$user_cookie = Data::getCookie("user");
$values = explode(":", Encryption::decode($user_cookie));
$email = $values[0];
if ($this->is_valid(array('email' => $email, 'password' => $password))) {
return true;
}
return false;
}
public function logout() {
if ($this->is_logged()) {
Data::deleteCookie("user");
}
}
}