/** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */ public function actionCreate() { $model = new EquiposObservaciones(); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['EquiposObservaciones'])) { $idActivo = $_GET["idActivo"]; $elEstado = Equipos::model()->findByPk($idActivo); if ($elEstado->Estado == "Activo") { $nuevoEstado = "Inactivo"; } else { $nuevoEstado = "Activo"; } $model->attributes = $_POST['EquiposObservaciones']; $model->fecha = date("Y-m-d"); $model->equipo_id = $idActivo; $model->estado = $nuevoEstado; $model->personal_id = 1; if ($model->save()) { //Actualizar Activo $elEstado->Estado = $nuevoEstado; } $elEstado->save(); //$this->redirect(array('view','id'=>$model->id)); $this->redirect('index.php?r=equipos/view&id=' . $idActivo); } $this->render('create', array('model' => $model)); }
/** * Muestra el timeline principal de la pagina * * Informacion a mostrar * - Equipo del usuario * - Enlace al proximo partido del jugador * - Enlace a crear una nueva habilidad grupal * - Acciones grupales activas del equipo del usuario * * @route jugadorNum12/usuarios/index * @return void */ public function actionIndex() { // 1) recogemos id de la sesion $idUsuario = Yii::app()->user->usIdent; $idEquipo = Yii::app()->user->usAfic; // 2) actualizar datos de usuario Usuarios::model()->actualizaDatos($idUsuario); // 3) obtenemos las acciones grupales del equipo del usuario $modeloEquipo = Equipos::model()->with('accionesGrupales'); $equipo = $modeloEquipo->findByPK($idEquipo); // 4) obtenemos el proximo partido Yii::import('application.components.Partido'); $equipoUsuario = Equipos::model()->findByPk($idEquipo); $proximoPartido = $equipoUsuario->sigPartido; $primerTurno = Partido::PRIMER_TURNO; $ultimoTurno = Partido::ULTIMO_TURNO; // *) renderizar la vista $this->render('index', array('equipo' => $equipo, 'proximoPartido' => $proximoPartido, 'primerTurno' => $primerTurno, 'ultimoTurno' => $ultimoTurno)); }
public function jugarse() { switch ($this->turno) { case self::PRIMER_TURNO: //Turno inicial (preparar partido) $this->inicializaEncuentro(); $this->generaCronicaBase(); $this->guardaEstado(); break; case self::TURNO_DESCANSO: $this->generaEstadoDescanso(); $this->generaCronicaDescanso(); $this->guardaEstado(); break; case $this->turno > self::PRIMER_TURNO && $this->turno < self::ULTIMO_TURNO && $this->turno != self::TURNO_DESCANSO: //Este apartado incluye el descanso del partido! //Turnos de partido $this->generar_estado(); $this->guardaEstado(); break; case self::ULTIMO_TURNO: //Turno para generar el estado y crónica finales $this->generar_estado(); $this->generaCronicaUltimoTurno(); /****/ $this->finalizaEncuentro(); /****/ $this->guardaEstado(); /****/ $this->actualizaSiguientePartido($this->id_local); $this->actualizaSiguientePartido($this->id_visitante); $this->rellenaSiguientePartido($this->id_local); $this->rellenaSiguientePartido($this->id_visitante); $this->eliminaGrupales($this->id_local); $this->eliminaGrupales($this->id_visitante); //Creamos una notificación de fin de partido $notificacion = new Notificaciones(); $notificacion->fecha = time(); $notificacion->mensaje = Equipos::model()->findByPk($this->id_local)->nombre . " " . $this->goles_local . " - " . $this->goles_visitante . " " . Equipos::model()->findByPk($this->id_visitante)->nombre; $notificacion->imagen = "images/iconos/notificaciones/partido_terminado.png"; $notificacion->save(); //Enviamos la notificación a los interesados $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $this->id_local)); foreach ($componentes as $componente) { $usrnotif = new Usrnotif(); $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion; $usrnotif->usuarios_id_usuario = $componente->id_usuario; $usrnotif->save(); //Devuelvo la influencia a los participantes7 $componente->recursos->influencias_partido_bloqueadas = 0; $componente->recursos->save(); } $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo' => $this->id_visitante)); foreach ($componentes as $componente) { $usrnotif = new Usrnotif(); $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion; $usrnotif->usuarios_id_usuario = $componente->id_usuario; $usrnotif->save(); //Devuelvo la influencia a los participantes $componente->recursos->influencias_partido_bloqueadas = 0; $componente->recursos->save(); } /****/ break; /*case self::ULTIMO_TURNO: //Turno para permitir visualizar el fin de partido durante un tiempo extra //y cambiar los datos del siguiente partido $this->finalizaEncuentro(); $this->guardaEstado(); $this->actualizaSiguientePartido($this->id_local); $this->actualizaSiguientePartido($this->id_visitante); $this->rellenaSiguientePartido($this->id_local); $this->rellenaSiguientePartido($this->id_visitante); $this->eliminaGrupales($this->id_local); $this->eliminaGrupales($this->id_visitante); //Creamos una notificación de fin de partido $notificacion = new Notificaciones; $notificacion->fecha = time(); $notificacion->mensaje = Equipos::model()->findByPk($this->id_local)->nombre . "(local)" . " vs " . Equipos::model()->findByPk($this->id_visitante)->nombre . "(visitante)"; $notificacion->imagen = "images/iconos/notificaciones/partido_terminado.png"; $notificacion->save(); //Enviamos la notificación a los interesados $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_local)); foreach ($componentes as $componente){ $usrnotif = new Usrnotif; $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion; $usrnotif->usuarios_id_usuario = $componente->id_usuario; $usrnotif->save(); } $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_visitante)); foreach ($componentes as $componente){ $usrnotif = new Usrnotif; $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion; $usrnotif->usuarios_id_usuario = $componente->id_usuario; $usrnotif->save(); } break;*/ /*case self::ULTIMO_TURNO: //Turno para permitir visualizar el fin de partido durante un tiempo extra //y cambiar los datos del siguiente partido $this->finalizaEncuentro(); $this->guardaEstado(); $this->actualizaSiguientePartido($this->id_local); $this->actualizaSiguientePartido($this->id_visitante); $this->rellenaSiguientePartido($this->id_local); $this->rellenaSiguientePartido($this->id_visitante); $this->eliminaGrupales($this->id_local); $this->eliminaGrupales($this->id_visitante); //Creamos una notificación de fin de partido $notificacion = new Notificaciones; $notificacion->fecha = time(); $notificacion->mensaje = Equipos::model()->findByPk($this->id_local)->nombre . "(local)" . " vs " . Equipos::model()->findByPk($this->id_visitante)->nombre . "(visitante)"; $notificacion->imagen = "images/iconos/notificaciones/partido_terminado.png"; $notificacion->save(); //Enviamos la notificación a los interesados $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_local)); foreach ($componentes as $componente){ $usrnotif = new Usrnotif; $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion; $usrnotif->usuarios_id_usuario = $componente->id_usuario; $usrnotif->save(); } $componentes = Usuarios::model()->findAllByAttributes(array('equipos_id_equipo'=>$this->id_visitante)); foreach ($componentes as $componente){ $usrnotif = new Usrnotif; $usrnotif->notificaciones_id_notificacion = $notificacion->id_notificacion; $usrnotif->usuarios_id_usuario = $componente->id_usuario; $usrnotif->save(); } break;*/ default: // No debería llegar aquí echo "Jodimos algo"; } }
/* @var $model Equipos */ $this->menu = array(array('label' => 'Listar Equipos', 'url' => array('index')), array('label' => 'Crear Equipo', 'visible' => Yii::app()->user->perfil != 1, 'url' => array('create'))); Yii::app()->clientScript->registerScript('search', "\n\$('.search-button').click(function(){\n\t\$('.search-form').toggle();\n\treturn false;\n});\n\$('.search-form form').submit(function(){\n\t\$('#equipos-grid').yiiGridView('update', {\n\t\tdata: \$(this).serialize()\n\t});\n\treturn false;\n});\n"); ?> <h1>Equipos - <a href="#exportar" class="btn btn-warning" role="button" data-toggle="modal"><i class="icon-share-alt icon-white"></i> Exportar</a></h1> <div class="search-form" style="display:none"> <?php $this->renderPartial('_search', array('model' => $model)); ?> </div><!-- search-form --> <?php $this->widget('zii.widgets.grid.CGridView', array('id' => 'equipos-grid', 'dataProvider' => $model->search(), 'filter' => $model, 'columns' => array(array('header' => 'ID.', 'name' => 'id', 'value' => '$data->id', 'htmlOptions' => array('width' => '20')), array('header' => 'Nombre', 'name' => 'nombre', 'filter' => CHtml::listData(Equipos::model()->findAll(array('order' => 'nombre ASC')), 'nombre', 'nombre'), 'value' => '$data[\'nombre\']', 'htmlOptions' => array('width' => '250')), 'numero', array('name' => 'Estado', 'filter' => array('Activo' => 'Activo', 'Inactivo' => 'Inactivo'), 'value' => '$data->Estado', 'htmlOptions' => array('width' => '150')), array('class' => 'CButtonColumn', 'template' => '{view}')))); ?> <div id="exportar" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h3 id="myModalLabel">Exportar a un archivo de Excel </h3> </div> <div class="modal-body"> <p>Seleccione las opciones de Exportar</p> <form id="frmExportar" name="frmExportar" action="index.php?r=equipos/exportar&tipo=<?php $elTipo; ?> " method = "post"> <div class="span5"> <label>Filtro:</label>
/* @var $this CitasEquipoController */ /* @var $model CitasEquipo */ $this->menu = array(); Yii::app()->clientScript->registerScript('search', "\n\$('.search-button').click(function(){\n\t\$('.search-form').toggle();\n\treturn false;\n});\n\$('.search-form form').submit(function(){\n\t\$('#citas-equipo-grid').yiiGridView('update', {\n\t\tdata: \$(this).serialize()\n\t});\n\treturn false;\n});\n"); ?> <h1>Agenda de Equipos</h1> <div class="search-form" style="display:none"> <?php $this->renderPartial('_search', array('model' => $model)); ?> </div><!-- search-form --> <?php $this->widget('zii.widgets.grid.CGridView', array('id' => 'citas-equipo-grid', 'dataProvider' => $model->search(), 'afterAjaxUpdate' => 'reinstallDatePicker', 'filter' => $model, 'columns' => array(array('header' => 'Cita', 'name' => 'cita_id', 'value' => '$data->cita_id', 'htmlOptions' => array('width' => '50')), array('header' => 'Fecha', 'name' => 'fecha', 'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array('language' => 'es', 'model' => $model, 'attribute' => 'fecha', 'options' => array('showAnim' => 'fold', 'language' => 'es', 'dateFormat' => 'dd-mm-yy', 'changeMonth' => true, 'changeYear' => true, 'yearRange' => '2014:2025'), 'htmlOptions' => array('id' => 'datepicker_for_fecha_cita', 'style' => 'height:20px;width:80px;'), 'defaultOptions' => array('showOn' => 'focus', 'showOtherMonths' => true, 'selectOtherMonths' => true, 'changeMonth' => true, 'changeYear' => true, 'showButtonPanel' => true)), true), 'value' => 'Yii::app()->dateformatter->format("dd-MM-yyyy",$data[\'fecha\']);', 'htmlOptions' => array('width' => '80')), array('name' => 'hora_inicio', 'filter' => CHtml::listData(HorasServicio::model()->findAll(), 'id', 'hora'), 'value' => '$data[\'horaInicio\'][\'hora\']', 'htmlOptions' => array('width' => '85')), array('name' => 'hora_fin_mostrar', 'filter' => CHtml::listData(HorasServicio::model()->findAll(), 'id', 'hora'), 'value' => '$data[\'horaFinMostrar\'][\'hora\']', 'htmlOptions' => array('width' => '85')), array('name' => 'equipo_id', 'filter' => CHtml::listData(Equipos::model()->findAll(array('order' => 'nombre ASC')), 'id', 'nombre'), 'value' => '$data[\'equipo\'][\'nombre\']', 'htmlOptions' => array('width' => '210')), 'equipo.numero', array('name' => 'linea_servicio_id', 'filter' => CHtml::listData(LineaServicio::model()->findAll(array('order' => 'nombre ASC')), 'id', 'nombre'), 'value' => '$data[\'lineaServicio\'][\'nombre\']', 'htmlOptions' => array('width' => '210')), array('name' => 'nombre_paciente', 'filter' => CHtml::listData(Paciente::model()->findAll(array('order' => 'nombre ASC')), 'id', 'nombreCompleto'), 'value' => '$data->cita->paciente->nombreCompleto', 'htmlOptions' => array('width' => '210')), array('name' => 'nombre_asistente', 'filter' => CHtml::listData(Personal::model()->findAll(array('order' => 'nombres ASC')), 'id', 'nombreCompleto'), 'value' => '$data->cita->personal->nombreCompleto', 'htmlOptions' => array('width' => '210')), array('class' => 'CButtonColumn', 'template' => '{view}')))); Yii::app()->clientScript->registerScript('re-install-date-picker', "\nfunction reinstallDatePicker(id, data) {\n //use the same parameters that you had set in your widget else the datepicker will be refreshed by default\n \$('#datepicker_for_fecha_cita').datepicker(jQuery.extend({showMonthAfterYear:false},jQuery.datepicker.regional['es'],{'dateFormat':'dd-mm-yy'}));\n}\n"); ?> <script> $(document).ready(function() { $('body').on('dblclick', '#citas-equipo-grid tbody tr', function(event) { var rowNum = $(this).index(), keys = $('#citas-equipo-grid > div.keys > span'), rowId = keys.eq(rowNum).text(); location.href = '<?php echo Yii::app()->createUrl('citasEquipo/view');
/** * Muestra el segundo formulario para registrarse en la pagina * * Registro - Paso 2 * * - Eleccion del equipo * * > Si hay datos en $_POST procesa el formulario y almacena el nuevo usuario en la tabla <usuarios> * * @param int $id_usuario id del usuario que esta completando el registro * * @route jugadorNum12/registro/equipo/{$id_usuario} * @redirect jugadorNum12/registro/personaje/{$id_usuario} * * @throws \Exception Fallo al actualizar el usuario en la BD * @return void */ public function actionEquipo($id_usuario) { $modelo = Usuarios::model()->findByPk($id_usuario); $modelo->scenario = 'update'; $error = false; $equip = Equipos::model()->findAll(); foreach ($equip as $equipo) { $equipos[$equipo['id_equipo']] = $equipo['nombre']; } $seleccionado = 0; $transaction = Yii::app()->db->beginTransaction(); try { if (isset($_POST['ocup'])) { $seleccionado = $_POST['ocup']; $modelo->setAttributes(array('equipos_id_equipo' => $seleccionado)); if ($modelo->save()) { $transaction->commit(); $this->redirect(array('registro/personaje', 'id_usuario' => $modelo->id_usuario)); } else { $error = true; } } else { $error = true; } } catch (Exception $e) { $transaction->rollback(); } $this->render('equipo', array('error' => $error, 'equipos' => $equipos, 'seleccionado' => $seleccionado)); }
/** * Devuelve el modelo de datos basado en la clave primaria dada por la variable GET * * > Funcion predeterminada de Yii * * @param int $id id del modelo que se va a cargar * @throws \CHttpException El modelo de datos no se encuentra * @return \AccionesGrupales modelo de datos */ public function loadModel($id) { $model = Equipos::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
/** Funcion auxiliar que modifica la tabla de equipos * * @paremetro equipo al que modificamos sus recursos * @parametro columna sobre la que modificamos (dinero, dinero_gen, ...) * @parametro cantidad de recursos que aumentamos * @devuelve flag de error * @ejemplo Recursos::aumentar_recursos(3, "animo", 30); */ public static function aumentar_recursos_equipo($id_equipo, $columna, $cantidad) { /* ROBER */ /*Recupero el usuario del que voy a aumentar los recursos*/ $equipo = Equipos::model()->findByPK($id_equipo); //Comprobación de seguridad if ($equipo === null) { throw new CHttpException(404, "Equipo no encontrado. (aumentar_recursos_equipo,Helper.php)"); } /*Cojo la columna a modificar del modelo, para modificarla despues*/ $actuales = $equipo->{$columna}; $valor_nuevo = $actuales + $cantidad; /*Debo comprobar que no esta o sobrepasa en su máximo el atributo*/ /*En el caso del animo*/ if ($columna === 'aforo_base' && $valor_nuevo >= $equipo->aforo_max) { $equipo->{$columna} = $equipo->aforo_max; } else { $equipo->{$columna} = $valor_nuevo; } /*Si save() no lanza error entonces se realizo correctamente la actualizacion sino devuelves error*/ if ($equipo->save()) { return 0; } else { return -1; } }
/** * * renderiza el estado completo de un partido * * - marcador * - tiempo * - crónica * * @param int $id_partido id del partido * * @route jugadorNum12/partidos/actPartido/{$id_partido} * @return void */ public function actionActPartido($id_partido) { // FIXME: ¿misma logica que actionAsistir? // Obtener el equipo del usuario $equipoUsuario = Equipos::model()->findByPk(Yii::app()->user->usAfic); // Obtener la informacion restante necesaria $partido = Partidos::model()->findByPk($id_partido); $equipoLocal = Equipos::model()->findByPk($partido->equipos_id_equipo_1); $equipoVisitante = Equipos::model()->findByPk($partido->equipos_id_equipo_2); //Comprobación de datos if ($partido === null || $equipoUsuario === null || $equipoLocal === null || $equipoVisitante === null) { Yii::app()->user->setFlash('datos', 'Datos suministrados incorrectos - partido/equipo/local/visitante -. (actionActPartido).'); } // Un usuario no puede asisitir a un partido en el que su equipo no participa if ($partido->equipos_id_equipo_1 != $equipoUsuario->id_equipo && $partido->equipos_id_equipo_2 != $equipoUsuario->id_equipo) { Yii::app()->user->setFlash('partido', 'No puedes acceder a un partido en el que no participe tu equipo. (actionActPartido).'); //throw new Exception("No puedes acceder a un partido en el que no participe tu equipo. (actionActPartido)", 401); } else { if ($equipoUsuario->partidos_id_partido != $id_partido) { Yii::app()->user->setFlash('partido', 'Este no es el próximo partido de tu equipo. (actionActPartido).'); //throw new Exception("Este no es el próximo partido de tu equipo. (actionActPartido)", 401); } else { //pasar los datos del partido y los equipos $data = array('golesLocal' => (int) $partido->goles_local, 'golesVisit' => (int) $partido->goles_visitante, 'turno' => (int) $partido->turno, 'estado' => (int) $partido->estado, 'tiempo' => (int) $partido->tiempoRestantePartido(), 'tiempoTurno' => (int) $partido->tiempoRestanteTurno(), 'cronica' => (string) $partido->cronica, 'ambiente' => (int) $partido->ambiente, 'nivel_local' => (int) $partido->nivel_local, 'nivel_visitante' => (int) $partido->nivel_visitante, 'ofensivo_local' => (int) $partido->ofensivo_local, 'ofensivo_visitante' => (int) $partido->ofensivo_visitante, 'defensivo_local' => (int) $partido->defensivo_local, 'defensivo_visitante' => (int) $partido->defensivo_visitante, 'aforo_local' => (int) $partido->aforo_local, 'aforo_visitante' => (int) $partido->aforo_visitante, 'moral_local' => (int) $partido->moral_local, 'moral_visitante' => (int) $partido->moral_visitante); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } } }
/** * Añade un nuevo partido entre los equipos indicados en la fecha indicada. * * >ADVERTENCIA: * Los datos (dif_niveles, indOfens, ...) puden cambiar hasta que empiece el partido, * aqui se rellenan (porque se me ha pedido explicitamente), * pero deberían actualizarse en el primer turno de partido. * * >ATENCION los partidos empiezan con sigpartido -> id = 0 !!!! * * @param int $id_local id del equipo local * @param int $id_visitande id del equipo visitante * @param int $time hora del partido * @param int $jornada jornada de la liga * @param bool $generateNewTransaction generar nueva transaccion * * @throws \Exception Los viajes en el tiempo no esta implemetados en esta version del juego. * @throws \Exception excepcion interna * @return void */ public function generaPartido($id_local, $id_visitande, $time, $jornada = 0, $generateNewTransaction = true) { if ($time < time()) { throw new Exception("Los viajes en el tiempo no esta implemetados en esta version del juego."); } if ($generateNewTransaction) { $transaction = Yii::app()->db->beginTransaction(); } $equipo_local = Equipos::model()->findByPk($id_local); $equipo_visitante = Equipos::model()->findByPk($id_visitande); if ($equipo_local === null || $equipo_visitante === null) { return; } try { $partido = new Partidos(); $partido->setAttributes(array('equipos_id_equipo_1' => $id_local, 'equipos_id_equipo_2' => $id_visitande, 'hora' => $time, 'jornada' => $jornada, 'nivel_local' => $equipo_local->nivel_equipo, 'nivel_visitante' => $equipo_visitante->nivel_equipo, 'dif_niveles' => $equipo_local->nivel_equipo - $equipo_visitante->nivel_equipo, 'aforo_local' => $equipo_local->aforo_base, 'aforo_visitante' => $equipo_visitante->aforo_base, 'ofensivo_local' => $equipo_local->factor_ofensivo, 'ofensivo_visitante' => $equipo_visitante->factor_ofensivo, 'defensivo_local' => $equipo_local->factor_defensivo, 'defensivo_visitante' => $equipo_visitante->factor_defensivo)); $partido->save(); if ($equipo_local->partidos_id_partido == 0 || $time < $equipo_local->sigPartido->hora) { $equipo_local->setAttributes(array('partidos_id_partido' => $partido->id_partido)); $equipo_local->save(); } if ($equipo_visitante->partidos_id_partido == 0 || $time < $equipo_visitante->sigPartido->hora) { $equipo_visitante->setAttributes(array('partidos_id_partido' => $partido->id_partido)); $equipo_visitante->save(); } if ($generateNewTransaction) { $transaction->commit(); } } catch (Exception $ex) { if ($generateNewTransaction) { $transaction->rollback(); } throw $ex; } }
/** * Ejecuta la accion de partido pulsada. Este método será llamado por Ajax durante el partido, * de modo que lo único que hará será devolver los datos de éxito o fallo para informar al * usuario. * * Cualquier habilidad resta los recursos iniciales al jugador, además, * * - Por ser una habilidad de partido se ejecuta al momento * * > El id del jugador y la aficion a la que pertence se recogen de la variable de sesion * * - CODIGOS DEVUELTOS - * * 0 -> Habilidad no encontrada * 1 -> Habilidad no desbloqueada * 2 -> Habilidad en cooldown * 3 -> Recursos insuficientes * 4 -> Error de equipo * 5 -> Error de partido, puede ser que no esté en juego o que no sea el siguiente del equipo * 6 -> La acción no es de partido * 7 -> Acción ejecutada con éxito * 8 -> Error general * * @param int $id_accion id de la habilidad que se ejecuta * * @return void */ public function actionUsarPartido($id_accion) { // Actualizar recursos de usuario Recursos::model()->actualizaRecursos(Yii::app()->user->usIdent); //Comenzar transaccion $trans = Yii::app()->db->beginTransaction(); try { // Importar elementos necesarios Yii::import('application.components.Acciones.*'); Yii::import('application.components.Partido'); //Cojo el id_usuario $id_usuario = Yii::app()->user->usIdent; //Obtener modelo de Habilidades $habilidad = Habilidades::model()->findByPk($id_accion); //Habilidad no encontrada if ($habilidad === null) { $trans->rollback(); // Devolver error de acción no encontrada $data = array('ok' => false, 'error' => 'Habilidad incorrecta'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } //Habilidad encontrada //Obtener modelo de Desbloqueadas $desbloqueada = Desbloqueadas::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario, 'habilidades_id_habilidad' => $id_accion)); //Si no esta desbloqueada para el usuario, error if ($desbloqueada === null) { $trans->rollback(); // Devolver error de habilidad no desbloqueada $data = array('ok' => false, 'error' => 'Acción no desbloqueada'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } //Si esta desbloqueada //Comprovar que no esta en cooldown if ($desbloqueada['fin_del_cooldown'] > ($now = time())) { $trans->rollback(); // Devolver error de cooldown $data = array('ok' => false, 'error' => 'Habilidad en cooldown', 'cooldownEnd' => $desbloqueada['fin_del_cooldown']); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } else { //se actualiza el cooldown $desbloqueada['fin_del_cooldown'] = $now + $habilidad['cooldown_fin']; $desbloqueada->save(); } //Si esta disponible //Obtener modelo de Recursos $res = Recursos::model()->findByAttributes(array('usuarios_id_usuario' => $id_usuario)); //Si no son suficientes recursos cancelar transaccion y notificar al usuario if ($res['dinero'] < $habilidad['dinero'] || $res['animo'] < $habilidad['animo'] || $res['influencias'] < $habilidad['influencias']) { $trans->rollback(); // Devolver error de recursos insuficientes $data = array('ok' => false, 'error' => 'Recursos insuficientes'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } $usuario = Usuarios::model()->findByPk($id_usuario); //Si tenemos suficientes recursos comprobamos el tipo de acción if ($habilidad['tipo'] == Habilidades::TIPO_PARTIDO) { //Sacar id de equipo y partido para poder ejecutar la accion $id_equipo = Yii::app()->user->usAfic; $equipo = Equipos::model()->findByAttributes(array('id_equipo' => $id_equipo)); if ($equipo === null) { $trans->rollback(); // Devolver error de equipo incorrecto $data = array('ok' => false, 'error' => 'Equipo incorrecto'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } $siguientepartido = $equipo->sigPartido; $id_partido = $siguientepartido->id_partido; // Comprobar si el partido está en juego if ($siguientepartido->turno <= Partido::PRIMER_TURNO || $siguientepartido->turno > Partido::ULTIMO_TURNO) { $trans->rollback(); // Devolver error de partido incorrecto $data = array('ok' => false, 'error' => 'Partido incorrecto'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } // Todo correcto, ejecutar acción de partido AccionesTurno::usarPartido($id_usuario, $id_equipo, $id_partido, $habilidad, $res); // EXP: sumar experencia al usuario $usuario->sumarExp(Usuarios::MEDIA_EXP); } else { // Tipo inválido $trans->rollback(); // Devolver error de tipo inválido $data = array('ok' => false, 'error' => 'Acción incorrecta'); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } // Finalizar transacción $trans->commit(); // Todo correcto $data = array('ok' => true, 'message' => 'Acción ejecutada correctamente', 'cooldownEnd' => $desbloqueada['fin_del_cooldown']); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } catch (Exception $e) { $trans->rollback(); // Devolver error general $data = array('ok' => false, 'error' => 'Error al ejecutar la acción '); echo CJavaScript::jsonEncode($data); Yii::app()->end(); } }
<?php echo $form->dropDownList($model, 'restringido', array('SI' => 'SI', 'NO' => 'NO'), array('class' => 'input-small')); ?> <?php echo $form->error($model, 'restringido'); ?> </div> </div> <div class="span6"> <div class="row"> <?php echo $form->labelEx($model, 'equipo_id'); ?> <?php echo $form->dropDownList($model, 'equipo_id', CHtml::listData(Equipos::model()->findAll(), 'id', 'nombre'), array('class' => 'input-xlarge', 'empty' => '')); ?> <a href="index.php?r=equipos/create" class="btn btn-small btn-primary"><i class="icon-plus-sign icon-white"></i> Agregar</a> <?php echo $form->error($model, 'equipo_id'); ?> </div> </div> </div> <div class="row buttons"> <?php echo CHtml::submitButton($model->isNewRecord ? 'Crear' : 'Guardar', array('class' => 'btn btn-info')); ?> </div>