db = $db; $this->groups = $groups; } public function setDB(Database $db) { $this->db = $db; } public function getName(): string { return $this->name; } /** * @return bool */ function isLogged() { return \ctiso\Filter\Authorization::isLogged(); } public function getUserByQuery(Statement $stmt): ?PDOStatement { $result = $stmt->executeQuery(); if ($result->next()) { $this->access = $this->groups[$result->getString('access')]; $this->name = $result->getString('login'); $this->id = $result->getInt('id_user'); $this->password = $result->getString('password'); $this->fullname = implode(' ', [ $result->getString('surname'), $result->getString('firstname'), $result->getString('patronymic')]); return $result; } return null; } /** * @param PDOStatement $result * @return string */ function getUserPassword($result) { return $result->get('password'); } public function getUserByLogin(string $login): ?PDOStatement { $stmt = $this->db->prepareStatement("SELECT * FROM users WHERE login = ?"); $stmt->setString(1, $login); $result = $this->getUserByQuery($stmt); if ($result) { $time = time(); $id = $this->id; $this->db->executeQuery("UPDATE users SET lasttime = $time WHERE id_user = $id"); // Время входа } return $result; } public function getUserById(int $id): ?PDOStatement { $stmt = $this->db->prepareStatement("SELECT * FROM users WHERE id_user = ?"); $stmt->setInt(1, $_SESSION ['access']); $result = $this->getUserByQuery($stmt); if ($result) { $lasttime = $result->getInt('lasttime'); $time = time(); if ($time - $lasttime > self::LIFE_TIME) return null; // Вышло время сессии $id = $this->id; } return $result; } function setSID(string $random, $result) { return $this->db->executeQuery("UPDATE users SET sid = '$random', trie_count = 0 WHERE id_user = " . $result->getInt('id_user')); } function resetTries(string $login): void { $this->db->executeQuery( "UPDATE users SET trie_count = :count WHERE login = :login", ['count' => 0, 'login' => $login] ); } function updateTries(string $login): void { $user = $this->db->fetchOneArray("SELECT id_user, trie_count FROM users WHERE login = :login", ['login' => $login]); $this->db->executeQuery( "UPDATE users SET trie_time = :cur_time, trie_count = :count WHERE id_user = :id_user", ['cur_time' => time(), 'count' => $user['trie_count']+1, 'id_user' => $user['id_user']] ); } }