Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?PHP
- /*
- * Ler Prop/ProjectInfo.txt para informações sobre a convenção usada para:
- * Variaveis Locais
- * Variaveis Globais
- * Objetos
- * Metodos
- * Funções
- * Nome de Classe
- * Arquivos
- */
- class UserManager
- {
- /*
- * Classe que interage com o banco de dados a respeito dos usuario em relação a:
- * Login
- * Logout
- * Criação de usuario
- * Mudança de permições
- * Inscrição em materias
- * Recuperação de senha
- * Mudança de senha, usuario e e-mail
- * Verificação da sessão
- */
- private $DatabaseConnection; // Objeto da classe DataBase que faz a conexão com o banco de dados e executa comandos
- private $CurrentUser; // Objeto da classe User que armazena as informções do usuario
- /*
- * Metodo construtor da classe UserManager
- * Recebe um objeto da classe DataBase, $db
- * Recebe um objeto da classe User, $User
- * Recebe o nome da pagina sem o tipo de arquivo, $nomepg
- * Inicia a sessão para ter acesso a variavel $_SESSION["Usuario"]
- * Não retorna nada
- */
- function __construct($Db)
- {
- $this->DatabaseConnection = $Db;
- $this->CurrentUser = new User();
- }
- /*
- * Metodo que loga o usuario e armazena o usuario na sessão
- * Recebe o nome do usuario, $nome_Usuario
- * Recebe a senha do usuario, $senha
- * Se o login for realizado com sucesso armazena o usuario atual na variavel $_SESSION["Usuario"]
- * Se o login fracassar limpa a variavel $_SESSION["Usuario"] por precaução
- * Retorna um array com 2 variaveis
- * $suc variavel que indica se o metodo teve sucesso ou não
- * $msg variavel que armazena a mensagem de erro ou sucesso
- */
- public function userLogin($nome_Usuario, $senha)
- {
- $this->DatabaseConnection->connect();
- $suc = false;
- $msg = "";
- $json = array('suc'=>$suc, 'msg'=>$msg);
- $nome_Usuario = $this->DatabaseConnection->escapeString($nome_Usuario);
- $sql = "SELECT * FROM Users WHERE Username = '".$nome_Usuario."'";
- $this->DatabaseConnection->executeCommand($sql);
- if($this->DatabaseConnection->getAffectedRows() == 1)
- {
- $data = $this->DatabaseConnection->getNextResultSetPosition();
- $this->CurrentUser->setDataFromRS($data);
- if(password_verify($senha, $this->CurrentUser->getPasswordHash()))
- {
- $_SESSION["Usuario"] = $this->CurrentUser;
- $json['suc'] = true;
- }
- else
- {
- $this->CurrentUser = Null;
- $json['msg'] = "Nome de usuario ou senha incorreta";
- }
- }
- else
- {
- $this->CurrentUser = Null;
- $json['msg'] = "Nome de usuario ou senha incorreta";
- }
- $this->DatabaseConnection->disconnect();
- return $json;
- }
- /*
- * Metodo que desloga o usuaro e limpa as variaveis de sessão
- *Limpa o objeto User, $CurrentUser
- *Não retorna nada
- */
- public function userLogout()
- {
- session_unset();
- session_destroy();
- unset($this->CurrentUser);
- }
- /*
- * Metodo que cria um usuario novo e o armazena no banco de dados
- * Recebe o nome do usuario, $nome_Usuario
- * Recebe a senha do usuario, $senha
- * Recebe o email do usuario, $email
- * Recebe o nome completo do usuario, $nome_Completo
- * Cria um objeto da classe User para armazenar o novo usuario temporariamente, $NewUser
- * Inspeciona o banco de dados verificando se ja existe um email ou nome de usuario iguais
- * Verifica se todos os campos estão de acordo com o padrão estabelecido
- * Se todas as verificações passarem armazena o novo usuario no banco de dados
- * Retorna um array com 2 variaveis
- * $suc variavel que indica se o metodo teve sucesso ou não
- * $msg variavel que indica a mensagem de erro ou sucesso
- */
- public function userCreate($nome_Usuario, $senha, $email, $nome_Completo)
- {
- $this->DatabaseConnection->connect();
- $NewUser = new User();
- $msg = "";
- $suc = false;
- $json = array('suc'=>$suc, 'msg'=>$msg);
- $nome_Usuario = $this->DatabaseConnection->escapeString($nome_Usuario);
- $email = $this->DatabaseConnection->escapeString($email);
- $senha = $this->DatabaseConnection->escapeString($senha);
- $nome_Completo = $this->DatabaseConnection->escapeString($nome_Completo);
- $this->DatabaseConnection->executeCommand("SELECT * FROM Users WHERE Username = '".$nome_Usuario."'");
- $qtd_Of_Same_User_Name = $this->DatabaseConnection->getSelectedRows();
- $this->DatabaseConnection->executeCommand("SELECT * FROM Users WHERE Email = '".$email."'");
- $qtd_Of_Same_Email = $this->DatabaseConnection->getSelectedRows();
- if(!$NewUser->setFullName($nome_Completo))
- $json['msg'] = "Nome completo deve possuir entre 4 e 64 caracteres";
- else if(!$NewUser->setUserName($nome_Usuario))
- $json['msg'] = "Nome de usuario deve possuir entre 4 e 16 caracteres";
- else if($qtd_Of_Same_User_Name > 0)
- $json['msg'] = "O nome de usuario escolhido ja existe.";
- else if(!$NewUser->setEmail($email))
- $json['msg'] = "Endereço de e-mail invalido";
- else if($qtd_Of_Same_Email > 0)
- $json['msg'] = "O email escolhido ja existe.";
- else if(!$NewUser->setPasswordHash($senha))
- $json['msg'] = "Senha deve possuir pelo menos 6 caracteres";
- if($json['msg'] == "")
- {
- $NewUser->setPermission(0);
- // Salva o registro no banco de dados
- $sql = "INSERT INTO Users
- (NomeCompleto, Username, Email, Password, Permission)
- VALUES (
- '".$nome_Completo."',
- '".$nome_Usuario."',
- '".$email."',
- '".$NewUser->getPasswordHash()."',
- '".$NewUser->getPermission()."'
- )";
- $this->DatabaseConnection->executeCommand($sql);
- if($this->DatabaseConnection->getAffectedRows() == 1)
- {
- $json['msg'] = "Usuario criado com sucesso!";
- $json['suc'] = true;
- }
- }
- $this->DatabaseConnection->disconnect();
- return $json;
- }
- /*
- * Metodo que verifica se existe um usuario logado e personaliza as paginas de acordo
- * Cria um array com 8 variaveis
- * $suc variavel que indica se o metodo teve sucesso ou não
- * $msg variavel que armazena a mensagem de erro ou sucesso
- * $id variavel que armazena o id do usuario atual
- * $nome_completo variavel que armazena o nome completo do usuario atual
- * $nome_Usuario variavel que armazena o nome de usuario do usuario atual
- * $perm variavel que indica a permição que o usuario atual tem
- * $logado variavel que indica se existe um usuario logado atualmente
- * $Nome_Materia variavel que armazena os nomes das materias que o usuaio esta inscrito ou que ele é responsavel
- * As variaveis $materias, $nomeMateria_P, $nomeMateria_A são variaveis auxiliares para o facilitar o acesso de tabelas diferentes no banco de dados
- * Verifica se a variavel $_SESSION["USuario"] esta setada
- * Se sim ele popula as variaveis do array com as informações do usuario logado no momento
- * Verifica se a permição do usuario é de professor ou maior(>2) ou se ela é de aluno ou poster(0-1)
- * Caso seja professor ou maior ele procura no banco de dados as materias que esse usuario é o responsavel e popula a variavel $materias
- * Caso seja aluno ou poster ele procura no banco de dados as materias que sse usuario é inscrito e popula a variavel $materias
- * Se não retorna o array com as variaveis nos valores default
- */
- public function userOn()
- {
- $this->DatabaseConnection->connect();
- $suc = false;
- $msg = "";
- $id = -1;
- $nome_Completo = "";
- $nome_Usuario = "";
- $perm = -1;
- $logado = false;
- $nome_Materia = array();
- $materias = array();
- $nome_Materia_Aux = array();
- $nome_Materia_P = array();
- $nome_Materia_A = array();
- $json = array('msg'=>$msg, 'suc'=>$suc, 'logado'=>$logado, 'perm'=>$perm, 'nomeCompleto'=>$nome_Completo, 'id'=>$id, 'username'=>$nome_Usuario);
- if(isset($_SESSION["Usuario"]))
- {
- $json['logado'] = true;
- $json['perm'] = $_SESSION["Usuario"]->getPermission();
- $json['nomeCompleto'] = $_SESSION["Usuario"]->getFullName();
- $json['id'] = $_SESSION["Usuario"]->getInternalID();
- $json['username'] = $_SESSION["Usuario"]->getUserName();
- if($json['perm'] > 1)
- {
- $this->DatabaseConnection->executeCommand("SELECT * FROM Materias WHERE UserID = '".$json['id']."' AND Username = '".$json['username']."'");
- while($val = $this->DatabaseConnection->getNextResultSetPosition())
- $nome_Materia_P[] = $val['NomeMateria'];
- $nome_Materia = $nome_Materia_P;
- }
- else if($json['perm'] >= 0)
- {
- $this->DatabaseConnection->executeCommand("SELECT NomeMateria FROM Materias");
- while($val = $this->DatabaseConnection->getNextResultSetPosition())
- $nome_Materia_Aux[] = $val['NomeMateria'];
- for($i = 0;$i < sizeof($nome_Materia_Aux);$i++)
- {
- $this->DatabaseConnection->executeCommand("SELECT * FROM ".$nome_Materia_Aux[$i]." WHERE UserID = '".$json['id']."'");
- if($this->DatabaseConnection->getAffectedRows() == 1)
- $nome_Materia_A[] = $nome_Materia_Aux[$i];
- }
- $nome_Materia = $nome_Materia_A;
- }
- $this->DatabaseConnection->executeCommand("SELECT * FROM Materias");
- while($val = $this->DatabaseConnection->getNextResultSetPosition())
- $materias[] = $val['NomeMateria'];
- $json["nomeMateria"] = $nome_Materia;
- $json["materias"] = $materias;
- $json['suc'] = true;
- }
- $this->DatabaseConnection->disconnect();
- return $json;
- }
- /*
- * Metodo recupera a senha de um usuario
- * Recebe o nome do usuario, $nome_Usuario
- * Recebe o email do usuario, $email
- * Verifica no banco de dados se o nome de usuario e email estão corretos
- * Cria uma nova senha randomica
- * Armazena essa nova senha no lugar da antiga // Envia um link para o usuario escolher uma nova senha
- * Envia a nova senha por e-mail para o usuario em questão
- * O Usuario deve mudar a senha antes de um periodo X de tempo
- */
- public function userPasswordRecovery($nome_Usuario, $email)
- {
- }
- /*
- * Metodo que muda a permissão de um usuario
- * Recebe o nome do usuario, $nome_Usuario
- * Recebe a nova permissão, $permissao
- * Verifica com o banco de dados se o nome e a permissão estão dentro dos valores corretos
- * Verifica se o usuario já tem a permissão escolhida
- * Verifica se o usuario atual tem permissão para mudar a permissão deste usuario
- * Verifica se o usuario é professor de alguma materia e se a nova permissão impede isso, caso impeça não muda a permissão
- * Se passar por todas as verificações muda a permissão do usuario para a escolhida
- * Retorna um array com 2 variaveis
- * $suc variavel que indica se o metodo teve sucesso ou não
- * $msg variavel que armazena a mensagem de erro ou sucesso
- */
- public function userChangePermission($nome_Usuario, $permissao)
- {
- $this->DatabaseConnection->connect();
- $suc = false;
- $msg = "";
- $json = array('msg'=>$msg, 'suc'=>$suc);
- switch ($permissao)
- {
- case ALUNO:
- $nome_Perm_N = "Aluno";
- break;
- case POSTER:
- $nome_Perm_N = "Poster";
- break;
- case PROFESSOR:
- $nome_Perm_N = "Professor";
- break;
- case PROFESSOR_ADMIN:
- $nome_Perm_N = "Professor-Admin";
- break;
- }
- if(strlen($nome_Usuario) < 3 || strlen($nome_Usuario) > 25)
- $json['msg'] = utf8_encode("O nome do usuário é invalido!");
- else if($permissao < 0 || $permissao > 3)
- $json['msg'] = utf8_encode("Escolha de permissão invalida");
- else
- {
- $nome_Usuario = $this->DatabaseConnection->escapeString($nome_Usuario);
- $this->DatabaseConnection->executeCommand("SELECT * FROM Users WHERE Username = '".$nome_Usuario."'");
- if($this->DatabaseConnection->getAffectedRows() == 0)
- $json['msg'] = utf8_encode("Esse nome de usuário não existe!");
- else
- {
- $val = $this->DatabaseConnection->getNextResultSetPosition();
- $perm_V = $val["Permission"];
- if($permissao == $perm_V)
- $json['msg'] = utf8_encode("Esse usuário já possui a permissão de ".$nome_Perm_N);
- else
- {
- switch ($perm_V)
- {
- case ALUNO:
- $nome_Perm_V = "Aluno";
- break;
- case POSTER:
- $nome_Perm_V = "Poster";
- break;
- case PROFESSOR:
- $nome_Perm_V = "Professor";
- break;
- case PROFESSOR_ADMIN:
- $nome_Perm_V = "Professor-Admin";
- break;
- }
- if($_SESSION["Usuario"]->getPermission() <= $perm_V)
- $json['msg'] = utf8_encode("Você não tem permissão para fazer alterações neste usuário!");
- else
- {
- $this->DatabaseConnection->executeCommand("SELECT * FROM Materias WHERE Username = '".$nome_Usuario."'");
- if($this->DatabaseConnection->getAffectedRows() > 0)
- {
- if($permissao < 2)
- $json['msg'] = utf8_encode("Esse usuário é professor de alguma(s) matéria(s) sua permissão não pode ser menor do que a de professor!");
- }
- else
- {
- $this->DatabaseConnection->executeCommand("UPDATE Users SET Permission = '".$permissao."' WHERE Username = '".$nome_Usuario."'");
- $json['suc'] = true;
- $json['msg'] = utf8_encode("A permissão do usuário ".$nome_Usuario." foi alterada de ".$nome_Perm_V." para ".$nome_Perm_N." com sucesso!");
- }
- }
- }
- }
- }
- $this->DatabaseConnection->disconnect();
- return $json;
- }
- /*
- * Metodo que muda as informações de um usuario
- * Recebe o nome completo, $nome_Completo
- * Recebe a data de nascimento, $data_Nascimento
- * Recebe o email, $email
- * Recebe o nome de usuario, $nome_Usuario
- * Limpa os dados recebidos
- * Verifica no banco de dados se o novo nome de usuario ou o email escolhido ja existem
- * Verifica se o nome completo e o email são validos
- * Verifica se a data de nascimento foi informada
- * Caso não atualiza o banco de dados sem a data de nascimento
- * Caso sim atualiza o banco de dados completo
- * Retorna um array com 2 variaveis
- * $suc variavel que indica se o metodo teve sucesso ou não
- * $msg variavel que armazena a mensagem de erro ou sucesso
- */
- public function userChangeInfo($nome_Completo, $data_Nascimento, $email, $nome_Usuario)
- {
- $this->DatabaseConnection->connect();
- $suc = false;
- $msg = "";
- $json = array('msg'=>$msg, 'suc'=>$suc);
- $strTempNC = $nome_Completo;
- $strTempNC = trim($strTempNC);
- $strTempE = $email;
- $strTempE = trim($strTempE);
- $strTempNU = $nome_Usuario;
- $strTempNU = trim($strTempNU);
- $strTempDN = $data_Nascimento;
- $strTempDN = trim($strTempDN);
- if($strTempNC !== '' && $strTempE !== '' && $strTempNU !== '')
- {
- $nome_Completo = $this->DatabaseConnection->escapeString($nome_Completo);
- $data_Nascimento = $this->DatabaseConnection->escapeString($data_Nascimento);
- $email = $this->DatabaseConnection->escapeString($email);
- $nome_Usuario = $this->DatabaseConnection->escapeString($nome_Usuario);
- $this->DatabaseConnection->executeCommand("SELECT ID FROM Users WHERE Username = '".$nome_Usuario."'");
- $Val = $this->DatabaseConnection->getNextResultSetPosition();
- if($this->DatabaseConnection->getAffectedRows() == 0 || $Val['ID'] == $this->CurrentUser->getInternalID() )
- {
- $this->DatabaseConnection->executeCommand("SELECT ID FROM Users WHERE Email = '".$email."'");
- $Val = $this->DatabaseConnection->getNextResultSetPosition();
- if($this->DatabaseConnection->getAffectedRows() == 0 || $Val['ID'] == $this->CurrentUser->getInternalID())
- {
- $regex = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+";
- $regex .= ")*[.][A-z]{2,4}$/";
- if(strlen($nome_Completo) < 4 || strlen($nome_Completo) > 64)
- $json['msg'] = "Nome completo deve possuir entre 4 e 64 caracteres";
- else if(strlen($nome_Usuario) < 4 || strlen($nome_Usuario) > 20)
- $json['msg'] = "Nome de usuario deve possuir entre 4 e 16 caracteres";
- else if(!preg_match($regex, $email) || strlen($email) > 128)
- $json['msg'] = "Endereço de e-mail invalido";
- else
- {
- if($strTempDN == '')
- $this->DatabaseConnection->executeCommand("UPDATE Users SET NomeCompleto = '".$nome_Completo."', Email = '".$email."', Username = '".$nome_Usuario."'
- WHERE ID = '".$this->CurrentUser->getInternalID()."'");
- else
- $this->DatabaseConnection->executeCommand("UPDATE Users SET NomeCompleto = '".$nome_Completo."', Email = '".$email."', Username = '".$nome_Usuario."',
- DataNascimento = '".$data_Nascimento."' WHERE ID = '".$this->CurrentUser->getInternalID()."'");
- $this->CurrentUser->setFullName($nome_Completo);
- $this->CurrentUser->setUserName($nome_Usuario);
- $this->CurrentUser->setEmail($email);
- $json['msg'] = "Informacoes alteradas com sucesso";
- $json['suc'] = true;
- }
- }
- else
- $json['msg'] = "Este email ja esta sendo usado";
- }
- else
- $json['msg'] = "Este nome de usuario ja existe";
- }
- else
- $json['msg'] = "Todos Os campos menos a data de nascimento precisao ser preenchidos";
- $this->DatabaseConnection->disconnect();
- return $json;
- }
- /*
- * Metodo que muda a senha do usuario
- * Recebe a senha nova do usuario, $senha_Nova
- * Recebe a senha velha do usuario, $senha_Velha
- * Limpa os dados recebidos
- * Verifica se as senhas foram informadas corretamente
- * Verifica se a senha velha esta correta
- * Verifica se a senha nova é valida
- * Criptografia a senha nova e atualiza o banco de dados
- * Retorna um array com 2 variaveis
- * $suc variavel que indica se o metodo teve sucesso ou não
- * $msg variavel que armazena a mensagem de erro ou sucesso
- */
- public function userChangePassword($senha_Nova, $senha_Velha)
- {
- $this->DatabaseConnection->connect();
- $suc = false;
- $msg = "";
- $json = array('msg'=>$msg, 'suc'=>$suc);
- $strTempSV = $senha_Velha;
- $strTempSV = trim($strTempSV);
- $strTempSN = $senha_Nova;
- $strTempSN = trim($strTempSN);
- if($strTempSV !== '' && $strTempSN !== '')
- {
- $senha_Nova = $this->DatabaseConnection->escapeString($senha_Nova);
- $senha_Velha = $this->DatabaseConnection->escapeString($senha_Velha);
- if(password_verify($senha_Velha, $this->CurrentUser->getPasswordHash()))
- {
- if(strlen($senha_Nova) < 6)
- $json['msg'] = "Senha nova invalida";
- else
- {
- $passwordHash = password_hash($senha_Nova, PASSWORD_DEFAULT, ['cost' => 11]);
- $this->DatabaseConnection->executeCommand("UPDATE Users SET Password = '".$passwordHash."' WHERE ID = '".$this->CurrentUser->getInternalID()."'");
- $this->CurrentUser->setPasswordHash($senha_Nova);
- $json['msg'] = "Senha alterada com sucesso";
- $json['suc'] = true;
- }
- }
- else
- $json['msg'] = "Senha incorreta";
- }
- else
- $json['msg'] = "Todos Os campos precisao ser preenchidos";
- $this->DatabaseConnection->disconnect();
- return $json;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement