Exemplo n.º 1
0
 public function cambiarRol($idPar)
 {
     $vdt = new Validate\Validator();
     $vdt->addRule('idPar', new Validate\Rule\NumNatural())->addRule('idUsu', new Validate\Rule\NumNatural())->addRule('jefe', new Validate\Rule\InArray(array(1, 0)));
     $req = $this->request;
     $data = array_merge(array('idPar' => $idPar), $req->post());
     if (!$vdt->validate($data)) {
         throw new TurnbackException($vdt->getErrors());
     }
     $partido = Partido::findOrFail($vdt->getData('idPar'));
     // TODO que pasa si el usuario no está en el partido?
     $usuario = Usuario::where(array('id' => $vdt->getData('idUsu'), 'partido_id' => $vdt->getData('idPar')))->first();
     if ($usuario->id == $partido->creador_id) {
         throw new TurnbackException('No se puede cambiar el rol del creador del grupo.');
     } else {
         if (is_null($usuario)) {
             throw new TurnbackException($usuario->identidad . ' no pertenece al grupo.');
         } else {
             if (!($usuario->es_jefe xor $vdt->getData('jefe'))) {
                 throw new TurnbackException('Configuración inválida.');
             }
         }
     }
     $usuario->es_jefe = $vdt->getData('jefe');
     $usuario->save();
     $notificados = $partido->afiliados()->lists('id');
     $log = UserlogCtrl::createLog($usuario->es_jefe ? 'newJefPart' : 'delJefPart', $usuario->id, $partido);
     NotificacionCtrl::createNotif($notificados, $log);
     $msg = $usuario->es_jefe ? ' comenzó a ' : ' dejó de ';
     $this->flash('success', $usuario->identidad . $msg . 'ser jefe del grupo.');
     $this->redirectTo('shwModifRolPartido', array('idPar' => $idPar));
 }