Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

William Espindola

[Resolvido] Identificar usuário com o chamado aberto e bloquear e

Recommended Posts

Ola pessoal, tudo bem com vocês?

 

Galera, estou desenvolvendo um sistema de chamados, e estou com o seguinte problema.

 

Quando um usuário abre um chamado, se este chamados esta sendo editado por outro usuário, eu preciso avisar à aquele que esta tentando editar que o chamado esta sendo editado por outro usuário.

 

Será que consigo fazer isto com SESSION? Pois tem que ser algo bem dinâmico, para quando o usuário que esta editando o chamado sair do chamado, o liberar para outras edições.

 

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O session não vai funcionar, porque um usuário não tem acesso ao session do outro usuário. Eu utilizaria um flag no registro no banco, dizendo que o registro está indisponível para edição. O problema é se o cara sair da edição sem efetivamente editar (fechando o navegador, por exemplo). Você pode tentar utilizar um comando no document.unload do javascript que chamaria uma rotina Ajax. Esta rotina Ajax pode usar o ignore_user_abort(true); do PHP e liberar o registro para edição novamente.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa maravilha meu caro amigo Matias, foi esta mesmo a solução, obrigado :joia:

 

php, validação.

//no meu caso estou usando php orientado a objetos para o trabalhar com o banco de dados.
//aqui logo quando eu abro o chamado verifico se o chamado esta sendo editado e se sim ja pego o nome de quem esta editando.
$result = $ConfigPDO->read("cha.cha_busy,usu.usu_nome","tbl_chamados AS cha","cha_id = ".$_GET['cha_id']."","LEFT JOIN tbl_usuarios AS usu ON usu.usu_id = cha.cha_busy",NULL,NULL,NULL,"LAZY");

if ($result->cha_busy == 0){
	//se for igal a zero ou seja não tem niguem editando, eu gravo o ID da minha SESSION, que é do usuário que irá editar o chamado
	$result = $ConfigPDO->update("tbl_chamados",array("cha_busy"=>$_SESSION["id"]), "cha_id = ".$_GET['cha_id']."");
} else {
	//se diferente de zero então quer dizer que o chamado esta sendo editado por outro usuário. Informo o usuário atual que o chamado esta sendo editado e no meu caso terei que bloquear a edição.
	echo "<script>alert('Chamado sendo editado pelo usuário: ".$result->usu_nome."');</script>";
}

 

javascript, evendo ao fechar a janela ou mudar de janela.

//este vai no head do documento, e envia ia post para o php o ID do chamado para tirar o flag do banco.
<script type="text/javascript">
function finale(){
	//atribuo o ID do chamado, de um formulário
	var cha_id = $('#cha_id').val();
	$.post(	
		"QueryData.php",
		{cha_id:cha_id},
		function(data){}
	);
}
</script>	

//este vai no body com vemos, ele chama a função acima quando o documento é fechado:
<body onunload="finale()">

 

php, o arquivo QueryDapa.php que tira o flag do chamado e deixando livre par outro usuário.

$result = $ConfigPDO->update("tbl_chamados",array("cha_busy"=>'0'), "cha_id = ".$_POST['cha_id']."");

 

Sei que é muita coisa mais achei legal colocar, pois caso alguém tiver esta mesma dúvida ja esta ai para solucionar. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

É mais tem um problema, se a internet do cara for baixa .. e não der tempo de mandar a requisição, nem vai chegar no outro arquivo é não vai alterar no banco de dados, agora pense: o cara fecha a página, quem é mais rápido, a internet dele, ou ele fechando a página ? porque assim, no mesmo momento que o cara sai da página ou fecha, uma internet de 30 , 60 kbps , pode nem chegar a fazer o request . ainda mais que você tá usando jquery, se for fazer isso, apenas pra alterar no id, faça genericamente esse código aí, faz no ajax puro mesmo, no XMLHttpRequest

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem razão cara!! :)

 

A se fizessemos assim:

 

Além de usar o XMLHttpRequest, no arquivo que vai ser responsável por trabalhar com o banco colocamos a função que o Matias sugeril ignore_user_abort(true);

 

O que você acha? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.