From 82d27167637e88dc13c10075e7f45c5d11e439dc Mon Sep 17 00:00:00 2001 From: Felipe Guaycuru Date: Tue, 28 Mar 2017 18:06:28 -0300 Subject: [PATCH] Amizades funcionando! --- ajax/amigo.php | 28 +++++++ classes/GDE/Usuario.inc.php | 147 ++++++++++++++++++++++++++++++------ common/common.inc.php | 8 +- views/amigos.php | 20 ++--- views/index.php | 2 +- views/perfil.php | 4 +- web/js/gde.amizades.js | 18 ++--- 7 files changed, 178 insertions(+), 49 deletions(-) create mode 100644 ajax/amigo.php diff --git a/ajax/amigo.php b/ajax/amigo.php new file mode 100644 index 0000000..65f6b7d --- /dev/null +++ b/ajax/amigo.php @@ -0,0 +1,28 @@ +getID() == $_Usuario->getID()) + echo '1'; + else + echo ($_Usuario->Adicionar_Amigo($Usr, false, true)) ? '2' : '3'; +} elseif($_POST['tipo'] == 'h') { + // Aceitar pedido de amizade + echo ($_Usuario->Autorizar_Amigo($Usr, true)) ? '1' : '2'; +} elseif($_POST['tipo'] == 'r') { + // Remover amigo ou pedido de amizade + echo ($_Usuario->Remover_Amigo($Usr, true)) ? '1': '2'; +} diff --git a/classes/GDE/Usuario.inc.php b/classes/GDE/Usuario.inc.php index 815c42d..2d0a113 100644 --- a/classes/GDE/Usuario.inc.php +++ b/classes/GDE/Usuario.inc.php @@ -719,7 +719,7 @@ public function Verificar_Senha($senha, $codificada = true) { * * @param boolean $verificar (Opcional) Se for false, nao ira verificar o Usuario * @param $atualizar_acesso (Opcional) Se for true, ira atualizar o ultimo acesso - * @return Usuario O Usuario atualmente logado + * @return self O Usuario atualmente logado */ public static function Ping($verificar = true, $atualizar_acesso = true) { $Usuario = new self(); @@ -938,9 +938,9 @@ public static function Conta_Online($live = false) { public function Amigos_Em_Comum(Usuario $Usuario, &$total = 0) { $Lista = array(); $ids_amigos = array(); - foreach($Usuario->getAmigos() as $Amigo) + foreach($Usuario->Amigos() as $Amigo) $ids_amigos[$Amigo->getAmigo()->getID()] = true; - foreach($this->getAmigos() as $Amigo) // Pego do meu, pq tem os MEUS apelidos! + foreach($this->Amigos() as $Amigo) // Pego do meu, pq tem os MEUS apelidos! if(isset($ids_amigos[$Amigo->getAmigo()->getID()])) $Lista[] = $Amigo; $total = count($Lista); @@ -967,7 +967,7 @@ public function Amigos_Recomendacoes($minimo = '2', $limite = '-1', $start = '-1 * * Retorna a lista de amigos que ainda nao aceitaram o pedido de amizade * - * @return ArrayCollection + * @return ArrayCollection|UsuarioAmigo[] */ public function getQuase_Amigos() { $criteria = Criteria::create()->where(Criteria::expr()->eq("ativo", false)); @@ -977,32 +977,55 @@ public function getQuase_Amigos() { /** * @param Usuario $Usuario - * @return bool + * @return UsuarioAmigo|false */ public function Quase_Amigo(Usuario $Usuario) { // Se eu to esperando autorizacao dele... - foreach($this->getQuase_Amigos() as $Amigo) - if($Amigo->getAmigo()->getID() == $Usuario->getID()) - return $Amigo; - return false; + $criteria = Criteria::create()->where(Criteria::expr()->eq("amigo", $Usuario)); + $criteria->setMaxResults(1); + $Quase = $this->getQuase_Amigos()->matching($criteria); + return ($Quase->count() > 0) ? $Quase->first() : false; + } + + /** + * Amigos_Pendentes + * + * @return ArrayCollection|UsuarioAmigo[] Autorizacoes de amizades pendentes + */ + public function getAmigos_Pendentes() { + /*$criteria = Criteria::create()->where(Criteria::expr()->eq("ativo", false)); + $criteria->andWhere(Criteria::expr()->eq("amigo", $this)); + return $this->getAmigos()->matching($criteria);*/ + $dql = 'SELECT A FROM GDE\\UsuarioAmigo A WHERE A.amigo = ?1 AND A.ativo = FALSE'; + return self::_EM()->createQuery($dql) + ->setParameter(1, $this->getID()) + ->getResult(); } /** * @param Usuario $Usuario - * @return bool|UsuarioAmigo + * @return UsuarioAmigo|false */ public function Amigo_Pendente(Usuario $Usuario) { // Se ele ta esperando minha autorizacao... - $criteria = Criteria::create()->where(Criteria::expr()->eq("ativo", false)); - $criteria->andWhere(Criteria::expr()->eq("usuario", $Usuario)); + /*$criteria = Criteria::create()->where(Criteria::expr()->eq("usuario", $Usuario)); $criteria->setMaxResults(1); - $Amigo = $this->getAmigos()->matching($criteria); - return ($Amigo->count() > 0) ? $Amigo->first() : false; + $Quase = $this->getAmigos_Pendentes()->matching($criteria); + return ($Quase->count() > 0) ? $Quase->first() : false;*/ + $dql = 'SELECT A FROM GDE\\UsuarioAmigo A WHERE A.amigo = ?1 AND A.usuario = ?2 AND A.ativo = FALSE'; + $Pendente = self::_EM()->createQuery($dql) + ->setParameter(1, $this->getID()) + ->setParameter(2, $Usuario->getID()) + ->setMaxResults(1) + ->getOneOrNullResult(); + return ($Pendente !== null) ? $Pendente : false; } /** * @param Usuario $Usuario - * @return bool|UsuarioAmigo + * @return UsuarioAmigo|false */ public function Amigo(Usuario $Usuario) { // Se eh um amigo atualmente + if($this->getID() == $Usuario->getID()) + return true; $criteria = Criteria::create()->where(Criteria::expr()->eq("ativo", true)); $criteria->andWhere(Criteria::expr()->eq("amigo", $Usuario)); $criteria->setMaxResults(1); @@ -1011,7 +1034,7 @@ public function Amigo(Usuario $Usuario) { // Se eh um amigo atualmente } /** - * @return ArrayCollection Amizades ja autorizadas + * @return ArrayCollection|UsuarioAmigo[] Amizades ja autorizadas */ public function Amigos() { // Lista de amizades ja autorizadas $criteria = Criteria::create()->where(Criteria::expr()->eq("ativo", true)); @@ -1019,12 +1042,94 @@ public function Amigos() { // Lista de amizades ja autorizadas } /** - * Amigos_Pendentes - * - * @return ArrayColection Autorizacoes de amizades pendentes + * @param Usuario $Usuario + * @param bool $ativo + * @param bool $flush + * @return bool */ - public function getAmigos_Pendentes() { - return UsuarioAmigo::FindBy(array('amigo' => $this->getID(), 'ativo' => false)); + public function Adicionar_Amigo(Usuario $Usuario, $ativo = false, $flush = true) { + if(($this->Quase_Amigo($Usuario) !== false) || ($this->Amigo_Pendente($Usuario) !== false)) // Ja tem uma autorizacao pendente... + return false; + $Usuario_Amigo = new UsuarioAmigo(); + $Usuario_Amigo->setUsuario($this); + $Usuario_Amigo->setAmigo($Usuario); + $Usuario_Amigo->setAtivo($ativo); + if($Usuario_Amigo->Save(false) === false) + return false; + if($ativo === true) { + $Usuario_Amigo = new UsuarioAmigo(); + $Usuario_Amigo->setUsuario($Usuario); + $Usuario_Amigo->setAmigo($this); + $Usuario_Amigo->setAtivo(true); + if($Usuario_Amigo->Save(false) === false) + return false; + } + if(($flush) && (self::_EM()->flush() === false)) + return false; + return true; + } + + /** + * @param Usuario $Usuario + * @param bool $flush + * @return bool + */ + public function Remover_Amigo(Usuario $Usuario, $flush = true) { + $Usuario_Amigo = $this->Amigo($Usuario); + if($Usuario_Amigo === false) { + $Usuario_Amigo = $this->Quase_Amigo($Usuario); + if($Usuario_Amigo === false) { + $Usuario_Amigo = $this->Amigo_Pendente($Usuario); + } + } + + $Reverso = $Usuario->Amigo($this); + if($Reverso === false) { + $Reverso = $Usuario->Quase_Amigo($this); + if($Reverso === false) + $Reverso = $Usuario->Amigo($this); + } + + if(($Usuario_Amigo === false) && ($Reverso === false)) + // Nada a fazer... + return false; + + if($Usuario_Amigo !== false) + $Usuario_Amigo->Delete(false); + if($Reverso !== false) + $Reverso->Delete(false); + if(($flush) && (self::_EM()->flush() === false)) + return false; + return true; + } + + /** + * @param Usuario $Usuario + * @param bool $flush + * @return bool + */ + public function Autorizar_Amigo(Usuario $Usuario, $flush = true) { + $Quase_Amigo = $this->Amigo_Pendente($Usuario); + if($Quase_Amigo === false) + return false; + + $Quase_Amigo->setAtivo(true); + if($Quase_Amigo->Save(false) === false) + return false; + + $Reverso = $this->Quase_Amigo($Usuario); + if($Reverso === false) { + $Reverso = new UsuarioAmigo(); + $Reverso->setUsuario($this); + $Reverso->setAmigo($Usuario); + } + $Reverso->setAtivo(true); + if($Reverso->Save(false) === false) + return false; + + if(($flush) && (self::_EM()->flush() === false)) + return false; + return true; } /** diff --git a/common/common.inc.php b/common/common.inc.php index 11e70d9..17bafa5 100644 --- a/common/common.inc.php +++ b/common/common.inc.php @@ -60,10 +60,6 @@ } $_Usuario = null; - -//if((isset($_GET['w3c'])) && ($_GET['w3c'] == '17239853')) - //$_SESSION['id_usuario'] = 1; - if((!defined('NO_LOGIN_CHECK')) || (NO_LOGIN_CHECK === false)) { $_Usuario = Usuario::Ping(); if($_Usuario->getID() == null) { @@ -216,8 +212,8 @@
  • Avaliar Professores
  • Eliminar Disciplinas
  • Mapa do Campus
  • -
  • Planejador
  • -
  • Rankings
  • +
  • Planejador
  • +
  • Social diff --git a/views/amigos.php b/views/amigos.php index 099163c..2cedd2e 100644 --- a/views/amigos.php +++ b/views/amigos.php @@ -6,14 +6,14 @@ $Quase_Amigos = $_Usuario->getQuase_Amigos(); $Autorizacoes = $_Usuario->getAmigos_Pendentes(); -$Amigos = $_Usuario->getAmigos(true); +$Amigos = $_Usuario->Amigos(); ?>