public function votar($idCom) { $vdt = new Validate\Validator(); $vdt->addRule('idCom', new Validate\Rule\NumNatural())->addRule('valor', new Validate\Rule\InArray(array(-1, 1))); $req = $this->request; $data = array_merge(array('idCom' => $idCom), $req->post()); if (!$vdt->validate($data)) { throw new TurnbackException($vdt->getErrors()); } $usuario = $this->session->getUser(); $comentario = Comentario::findOrFail($idCom); $voto = VotoComentario::firstOrNew(array('comentario_id' => $comentario->id, 'usuario_id' => $usuario->id)); if (!$voto->exists) { $voto->valor = $vdt->getData('valor'); $voto->save(); $comentario->increment('votos', $voto->valor); $comentario->autor()->increment('puntos', $voto->valor); } else { throw new TurnbackException('No puede votar dos veces el mismo comentario.'); } $this->flash('success', 'Su voto fue registrado exitosamente.'); $this->redirect($req->getReferrer()); }