コード例 #1
0
ファイル: Partido.php プロジェクト: rMarinf/JugadorNum12
 public function eliminaGrupales($id_equipo)
 {
     $grupales = AccionesGrupales::model()->findAllByAttributes(array('equipos_id_equipo' => $id_equipo, 'completada' => 1));
     foreach ($grupales as $gp) {
         Participaciones::model()->deleteAllByAttributes(array('acciones_grupales_id_accion_grupal' => $gp->id_accion_grupal));
         AccionesGrupales::model()->deleteByPk($gp->id_accion_grupal);
     }
 }
コード例 #2
0
 /**
  * Devuelve los recursos de las acciones grupales a los participantes
  *
  * Selecciona las acciones grupales finalizadas sin éxito y devuelve los recursos a sus
  * participantes y creador.
  *
  * @route JugadorNum12/scripts/finalizaGrupales
  *
  * @throws \Exception excepcion interna
  * @return void
  */
 public function actionFinalizaGrupales()
 {
     //Traer acciones y Helper
     Yii::import('application.components.Acciones.*');
     $tiempo = time();
     $busqueda = new CDbCriteria();
     $busqueda->addCondition(':bTiempo >= finalizacion');
     $busqueda->addCondition('completada = :bCompletada');
     $busqueda->params = array(':bTiempo' => $tiempo, ':bCompletada' => 0);
     $grupales = AccionesGrupales::model()->findAll($busqueda);
     //Iterar sobre las acciones grupales resultantes de la búsqueda
     foreach ($grupales as $gp) {
         $transaction = Yii::app()->db->beginTransaction();
         try {
             //Tomar participaciones
             $participantes = Participaciones::model()->findAllByAttributes(array('acciones_grupales_id_accion_grupal' => $gp->id_accion_grupal));
             //Recorro todos los participantes devolviendoles sus recursos.
             //Esto incluye el creador de la acción.
             foreach ($participantes as $participante) {
                 //Cojo el dinero,influencia y animo aportado por el usuario
                 $dinero = $participante->dinero_aportado;
                 $influencia = $participante->influencias_aportadas;
                 $animo = $participante->animo_aportado;
                 //Utilizo el helper para ingresarle al usuario los recursos
                 Recursos::aumentar_recursos($participante->usuarios_id_usuario, 'dinero', $dinero);
                 Recursos::aumentar_recursos($participante->usuarios_id_usuario, 'animo', $animo);
                 Recursos::aumentar_recursos($participante->usuarios_id_usuario, 'influencias', $influencia);
                 //Eliminar ese modelo
                 Participaciones::model()->deleteAllByAttributes(array('acciones_grupales_id_accion_grupal' => $gp->id_accion_grupal, 'usuarios_id_usuario' => $participante->usuarios_id_usuario));
             }
             //Borro esa accion grupal iniciada por el usuario que quiere cambiar de equipo
             AccionesGrupales::model()->deleteByPk($gp->id_accion_grupal);
             //Finalizar transacción con éxito
             $transaction->commit();
         } catch (Exception $ex) {
             //Rollback de la transacción en caso de error
             $transaction->rollback();
             throw $ex;
         }
     }
 }
コード例 #3
0
 /**
  * Usar una accion grupal
  *
  * @static
  * @param $usuario
  * @param $id_accion
  * @param $id_equipo
  * @param $res : recursos del jugador
  * @param $habilidad
  * @return int id de la nueva accion grupal
  */
 public static function usarGrupal($usuario, $id_accion, $id_equipo, $res, $habilidad)
 {
     $id_usuario = $usuario->id_usuario;
     /*
         Se deberia obtener la accion grupal mediante su PK (id_accion_grupal)
         Como $id_accion equivale $id_habilidad por como se redirige desde acciones/index
         para obtener la accion grupal debo buscar por id_equipo y id_habilidad
         NOTA: no se contempla la posibilidad de en un mismo equipo haya varias acciones iguales
         pero con distinto creador (aunque dicha posibilidad existe) ya que debe arreglarse la redireccion
     */
     $res['dinero'] -= $habilidad['dinero'];
     $res['animo'] -= $habilidad['animo'];
     $res['influencias'] -= $habilidad['influencias'];
     $res['influencias_bloqueadas'] += $habilidad['influencias'];
     //sumarselos al crear nueva accion grupal
     $accion_grupal = new AccionesGrupales();
     $accion_grupal->setAttributes(array('usuarios_id_usuario' => $id_usuario, 'habilidades_id_habilidad' => $id_accion, 'equipos_id_equipo' => $id_equipo, 'influencias_acc' => $habilidad['influencias'], 'animo_acc' => $habilidad['animo'], 'dinero_acc' => $habilidad['dinero'], 'jugadores_acc' => 1, 'finalizacion' => $habilidad['cooldown_fin'] + time(), 'completada' => 0));
     //guardar en los modelos
     $res->save();
     $accion_grupal->save();
     //Crear participación del creador
     $participacion = new Participaciones();
     $participacion->acciones_grupales_id_accion_grupal = $accion_grupal->id_accion_grupal;
     $participacion->usuarios_id_usuario = $id_usuario;
     $participacion->dinero_aportado = $habilidad['dinero'];
     $participacion->influencias_aportadas = $habilidad['influencias'];
     $participacion->animo_aportado = $habilidad['animo'];
     if (!$participacion->save()) {
         Yii::app()->user->setFlash('error', 'Participación no creada. (AccionesController,actionUsar.');
         throw new Exception("Participación no creada. (AccionesController,actionUsar)");
     }
     //Enviamos la notificación correspondiente
     $notificacion = new Notificaciones();
     $notificacion->fecha = time();
     $notificacion->mensaje = Usuarios::model()->findByPk($id_usuario)->nick . " ha abierto la acción " . Habilidades::model()->findByPk($id_accion)->nombre;
     $notificacion->imagen = "images/iconos/notificaciones/nueva_grupal.png";
     $notificacion->save();
     //Enviamos la notificación a la afición
     $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $id_equipo));
     foreach ($componentes as $componente) {
         $usrnotif = new Usrnotif();
         $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion;
         $usrnotif->usuarios_id_usuario = $componente->id_usuario;
         $usrnotif->save();
     }
     // EXP: sumar experencia al usuario
     $usuario->sumarExp(Usuarios::MEDIA_EXP);
     return $accion_grupal['id_accion_grupal'];
 }
コード例 #4
0
 /**
  * Permite participar en una accion grupal abierta por tu aficion.
  *
  * Muestra el formulario que define que recursos va a aportar a la accion que se recogen por $_POST 
  *
  * > El id del jugador se recoge de la variable de sesion
  * 
  * @param int $id_accion   id de la accion en la que se va a participar
  *
  * @route jugadorNum12/acciones/participar/{$id}
  * @redirect jugadorNum12/accion/participar/{$id_accion}
  * 
  * @throws \Exception      accion inexistente
  * @throws \Exception      habilidad inexistente
  * @throws \Excepcion      la accion no permite mas participantes
  * @throws \Excepcion      fallo en la transaccion
  *  
  * @return void
  */
 public function actionParticipar($id_accion)
 {
     // TODO: pasar logica al modelo
     /* Actualizar datos de usuario (recuros,individuales y grupales) */
     Usuarios::model()->actualizaDatos(Yii::app()->user->usIdent);
     /* Fin de actualización */
     // Saco el usuario
     $usuario = Yii::app()->user->usIdent;
     // Cojo la acción de la tabla acciones_grupales
     $accionGrupal = AccionesGrupales::model()->with('habilidades')->with('participaciones')->with('usuarios')->findByPk($id_accion);
     // Saco el propietario de la acción
     $propietarioAccion = $accionGrupal['usuarios_id_usuario'];
     //Iniciamos la transacción
     $transaccion = Yii::app()->db->beginTransaction();
     try {
         //Recojo los datos de la acción
         $accion = AccionesGrupales::model()->findByPK($id_accion);
         if ($accion === null) {
             Yii::app()->user->setFlash('accion', 'Acción inexistente.');
             throw new Exception('Acción inexistente.');
         }
         //Recojo los datos de la habilidad
         $habilidad = Habilidades::model()->findByPk($accion['habilidades_id_habilidad']);
         if ($habilidad == null) {
             Yii::app()->user->setFlash('habilidad', 'Habilidad inexistente.');
             throw new Exception('La habilidad no existe.');
         }
         //Saco el usuario que quiere participar en la acción
         $id_user = Yii::app()->user->usIdent;
         //Compuebo si el jugador ya ha participado en la acción
         $participacion = Participaciones::model()->findByAttributes(array('acciones_grupales_id_accion_grupal' => $id_accion, 'usuarios_id_usuario' => $id_user));
         $nuevo_participante = $participacion === null;
         if ($nuevo_participante) {
             //Compruebo que no se sobrepase el límite de jugadores
             if ($accion['jugadores_acc'] >= $habilidad['participantes_max']) {
                 Yii::app()->user->setFlash('participantes', 'La acción no permite más participantes.');
                 //$this-> redirect(array('acciones/index'));
                 throw new Exception('La acción no permite más participantes.');
             }
             //Saco el modelo que le voy a pasar a la vista
             $participacion = new Participaciones();
             $participacion['acciones_grupales_id_accion_grupal'] = $id_accion;
             $participacion['usuarios_id_usuario'] = $id_user;
         }
         $participacion->setScenario('participar');
         // Comprobar si hay recursos a aportar
         if (!isset($_POST['Participaciones'])) {
             $transaccion->rollback();
             //Petición GET: Muestro el formulario
             $this->render('participar', array('habilidad' => $habilidad, 'participacion' => $participacion, 'accion' => $accion, 'accionGrupal' => $accionGrupal, 'usuario' => $usuario, 'propietarioAccion' => $propietarioAccion));
             return;
         }
         //Petición POST
         $recursosAportados = $_POST['Participaciones'];
         // Llamar a función del modelo AccionesGrupales para participar en la misma
         AccionesGrupales::participar($id_accion, $recursosAportados, $accion, $habilidad, $participacion, $nuevo_participante);
         $transaccion->commit();
         $this->redirect(array('acciones/participar', 'id_accion' => $id_accion));
     } catch (Exception $exc) {
         $transaccion->rollback();
         $this->redirect(array('usuarios/index'));
         throw $exc;
     }
 }