prepare("SELECT * FROM users WHERE id=?");
    $stmt->bind_param("d", $id);
    $stmt->execute();
    $query = $stmt->get_result();
    if (!$query->num_rows)
    {
      throw new Exception("User doesn't exist.");
      return;
    }
    $result = $query->fetch_array();
    $this->id = $id;
    $this->active = $result['active'];
    $this->name = $result['name'];
    $this->email = $result['email'];
    $this->surname = $result['surname'];
    $this->username = $result['username'];
    $this->rank = $result['permission'];
  }
  public function get_username()
  {
    return $this->username;
  }
  public function get_rank()
  {
    return $this->rank;
  }
  public function get_name()
  {
    return $this->name . " " . $this->surname;
  }
  public function toggle()
  {
    global $mysqli, $message, $user;
    $id = $_SESSION['user'];
    $stmt = $mysqli->prepare("SELECT permission FROM users WHERE id=?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $query = $stmt->get_result();
    $permission = $result['permission'];
    $id = $_GET['id'];
    if ($this->id!=$_SESSION['user'] && $user->get_rank()<=1 && ($user->get_rank()<$this->rank))
    {
      $stmt = $mysqli->prepare("UPDATE users SET active = !active WHERE id=?");
      $stmt->bind_param("i", $this->id);
      $stmt->execute();
      $stmt->close();
      header("Location: /admin/?do=user&id=".$id);
    }else{
      $message = _("You don't have the permission to do that!");
    }
  }
  public static function add()
  {
    global $user, $message, $mysqli;
    if (INSTALL_OVERRIDE || $user->get_rank()==0)
    {
      if (strlen(trim($_POST['name']))==0 || strlen(trim($_POST['surname']))==0 || strlen(trim($_POST['email']))==0 || strlen(trim($_POST['password']))==0 || !isset($_POST['permission']))
      {
        $message = _("Please enter all data!");
      }else{
        $name = $_POST['name'];
        $surname = $_POST['surname'];
        $username = $_POST['username'];
        $email = $_POST['email'];
        $pass = $_POST['password'];
        $variables = array();
        if (strlen($name)>50){
          $variables[] = 'name: 50';
        }
        if (strlen($surname)>50){
          $variables[] = 'surname: 50';
        }
        if (strlen($username)>50){
          $variables[] = 'username: 50';
        }
        if (strlen($email)>60){
          $variables[] = 'email: 60';
        }
        if (!empty($variables))
        {
          $message = _("Please mind the following character limits: ");
          $message .= implode(", ", $variables);
          return;
        }
        $salt = uniqid(mt_rand(), true);
        $hash = hash('sha256', $pass.$salt);
        $permission = $_POST['permission'];
        
        $stmt = $mysqli->prepare("INSERT INTO users values (NULL, ?, ?, ?, ?, ?, ?, ?, 1)");
        $stmt->bind_param("ssssssi", $email, $username, $name, $surname, $hash, $salt, $permission);
        $stmt->execute();
        if ($stmt->affected_rows>0)
        {
          $to      = $email;
          $subject = _('User account created').' - '.NAME;
          $message = sprintf(_("Hi %s!
"."Your account has been created. You can login with your email address at %s with password %s - please change it as soon as possible."), $name." ".$surname,WEB_URL."/admin", WEB_URL."/admin", $pass);
          $headers = "Content-Type: text/html; charset=utf-8 ".PHP_EOL;
          $headers .= "MIME-Version: 1.0 ".PHP_EOL;
          $headers .= "From: ".MAILER_NAME.' <'.MAILER_ADDRESS.'>'.PHP_EOL;
          $headers .= "Reply-To: ".MAILER_NAME.' <'.MAILER_ADDRESS.'>'.PHP_EOL; 
          mail($to, $subject, $message, $headers);
          header("Location: /admin/?do=settings");
        }
        else{
          $message = _("Username or email already used");
        }
      }
    }
    else {
      $message = _("You don't have the permission to do that!");
    }
  }
  public static function login()
  {
    global $message, $mysqli;
    if (isset($_POST['email']))
    {
      $email = $_POST['email'];
      $pass = $_POST['pass'];
      $stmt = $mysqli->prepare("SELECT id,password_salt as salt,active FROM users WHERE email=?");
      $stmt->bind_param("s", $email);
      $stmt->execute();
      $query = $stmt->get_result();
      if ($query->num_rows)
      {
        $result = $query->fetch_assoc();
        $salt = $result["salt"];
        $id =  $result["id"];
        $active =  $result["active"];
        if (!$active)
        {
          $message = _("Your account has been disabled. Please contact administrator.");
        }
        else
        {
          $hash = hash('sha256', $pass.$salt);
          $stmt = $mysqli->prepare("SELECT count(*) as count FROM users WHERE id=? AND password_hash=?");
          $stmt->bind_param("is", $id, $hash);
          $stmt->execute();
          $query = $stmt->get_result();
          if (!$query->fetch_assoc()['count'])
          {
            $message = _("Wrong email or password");
          }else
          {
            if (isset($_POST['remember'])&&$_POST['remember'])
            {
              $year = strtotime('+356 days', time());
              $salt = uniqid(mt_rand(), true);
              $token = hash('sha256', $id.$salt);
              setcookie('token', $token, $year, "/");
              setcookie('user', $id, $year, "/");
              Token::new($id, 'remember', $year);
            }
            $_SESSION['user'] = $id;
            header("Location: /admin");
          }
        }
      }
      else{
        $message = _("Wrong email or password");
      }
    }
  }
  public static function restore_session()
  {
    global $mysqli, $message;
    $id = $_COOKIE['user'];
    $token = $_COOKIE['token'];
    $time = time();
    if (Token::validate_token($token, $id, "remember"))
    {
      $year = strtotime('+356 days', $timestamp);
      unset($_COOKIE['token']);
      $_SESSION['user'] = $id;
      $salt = uniqid(mt_rand(), true);
      $token = hash('sha256', $id.$salt);
      setcookie('token', $token, $year);
      Token::new($id, 'remember', $year);
    }
    else
    {
      unset($_COOKIE['user']);
      unset($_COOKIE['token']);
      setcookie('user', null, -1, '/');
      setcookie('token', null, -1, '/');
      $message = _("Invalid token detected, please login again!");
    }
    
    Token::delete($token);
  }
  public function render_user_settings()
  {
    global $permissions, $user;
    ?>