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)); }