public function beforeAction($action)
    {
        //Load user's knight data
        if (!Yii::app()->user->isGuest) {
            $this->user_data['knights'] = Knights::model()->with('knightsCard', 'knightsStats')->find('id=:id', array(':id' => Yii::app()->user->knights_id));
            $this->user_data['knights_card'] =& $this->user_data['knights']->knightsCard;
            //Load stats of knight
            $this->user_data['knights_stats'] =& $this->user_data['knights']->knightsStats;
            //Load if user has new friendship request
            $sql = 'SELECT friends.id as id, k1.name as name, k1.avatars_id as avatars_id FROM friends
					INNER JOIN users ON users.id = friends.from_user
					INNER JOIN knights as k1 ON k1.users_id = users.id
					WHERE friends.status = :status AND to_user = :users_knights_id1
					ORDER BY start_date DESC';
            $command = Yii::app()->db->createCommand($sql);
            $command->bindValue(':status', Friends::STATUS_ONWAITING, PDO::PARAM_INT);
            $command->bindValue(':users_knights_id1', $this->user_data['knights']->id, PDO::PARAM_INT);
            $this->user_data['knights_new_friends'] = $command->queryAll();
            //Load last messages
            $this->user_data['new_messages'] = Messages::getNewMessages(Yii::app()->user->users_id);
            //Load all attributes name attributes
            $this->app_data['attribute_list'] = Constants::model()->findAll('type=:type', array(':type' => Constants::KNIGHTS_ATTRIBUTES));
            //Load settings
            $this->user_data['knight_settings'] = KnightsSettings::model()->findByPk(Yii::app()->user->knights_id);
            $this->user_data['user'] = Users::model()->findByPk(Yii::app()->user->users_id);
        } else {
            $this->redirect('/');
        }
        return true;
    }
    /**
     * Make a combat  with initial status.
     */
    public function actionSendChallenge()
    {
        //Check session is enable
        if (!Yii::app()->user->isGuest) {
            //Check if user is a cheater
            if ($this->user_data['knights']->name != $this->knight->name) {
                //Check if user has not a previous challenger enable
                $conditionParams = array(':status1' => Combats::STATUS_PENDING, ':status2' => Combats::STATUS_ENABLE, ':me1' => Yii::app()->user->users_id, ':me2' => Yii::app()->user->users_id, ':rival1' => $this->knight->id, ':rival2' => $this->knight->id);
                //Check if knights have a pending or enable combat
                if (!Combats::model()->exists('status != :status AND (from_knight = :knight1 AND to_knight = :rival1) OR (from_knight = :rival2 AND from_knight = :knight2)', array(':knight1' => Yii::app()->user->knights_id, ':rival1' => $this->knight->id, ':knight2' => Yii::app()->user->knights_id, ':rival2' => $this->knight->id, ':status' => Combats::STATUS_FINISHED))) {
                    //Insert a new combat
                    $combat = new Combats();
                    $combat->attributes = array('from_knight' => Yii::app()->user->knights_id, 'to_knight' => $this->knight->id, 'date' => date("Y-m-d H:i:s"), 'type' => Combats::TYPE_FRIENDLY, 'status' => Combats::STATUS_PENDING);
                    if ($combat->save()) {
                        //Insert a new combat knight event of both knights
                        $knightEventMe = new KnightsEvents();
                        $knightEventMe->attributes = array('knights_id' => Yii::app()->user->knights_id, 'type' => KnightsEvents::TYPE_COMBAT, 'identificator' => $combat->id);
                        if ($knightEventMe->save()) {
                            $knightEventRival = new KnightsEvents();
                            $knightEventRival->attributes = array('knights_id' => $this->knight->id, 'type' => KnightsEvents::TYPE_COMBAT, 'identificator' => $combat->id);
                            if ($knightEventRival->save()) {
                                //Update rows from knight events last
                                $sql = "UPDATE\n\t\t\t\t\t\t\t\t\t\tknights_events_last as k\n\t\t\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\t\tk.type = " . KnightsEvents::TYPE_COMBAT . ",\n\t\t\t\t\t\t\t\t\t\t\t\tk.identificator = " . $combat->id . ",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tk.date = '" . date('Y-m-d H:i:s') . "'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tk.id IN (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSELECT id FROM (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tknights_events_last\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tknights_id = " . Yii::app()->user->knights_id . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tORDER BY date ASC\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) as trick\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)";
                                //echo $sql;	die();
                                $command = Yii::app()->db->createCommand($sql);
                                //$command->bindValue( ':user_knights_id', Yii::app()->user->knights_id );
                                if ($command->query()) {
                                    $sql = "UPDATE\n\t\t\t\t\t\t\t\t\t\t\tknights_events_last\n\t\t\t\t\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\t\t\t\ttype = " . KnightsEvents::TYPE_COMBAT . ",\n\t\t\t\t\t\t\t\t\t\t\t\t\tidentificator = " . $combat->id . ",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype = " . KnightsEvents::TYPE_COMBAT . ",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdate = '" . date('Y-m-d H:i:s') . "'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid IN (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSELECT id FROM (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tknights_events_last\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tknights_id = " . $this->knight->id . "\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tORDER BY date ASC\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) as trick\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)";
                                    $command = Yii::app()->db->createCommand($sql);
                                    //$command->bindValue( ':knight_id', $this->knight->id );
                                    if ($command->execute()) {
                                        Yii::trace('[CHARACTER][sendChallenge] CHECK email');
                                        //Check email of challenge
                                        if ($knight_setting = KnightsSettings::model()->findByPk($this->knight->id)) {
                                            if ($knight_setting->emailToSendChallenge) {
                                                Yii::trace('[CHARACTER][sendChallenge] Send email');
                                                if ($knight_user = Users::model()->findByPk($this->knight->users_id)) {
                                                    Yii::trace('[CHARACTER][sendChallenge] Rival email' . $knight_user->email);
                                                    //cargamos la plantilla
                                                    $message = Yii::app()->controller->renderFile(Yii::app()->basePath . Yii::app()->params['email_templates_path'] . 'sendNewChallenge.tpl', array(), true);
                                                    // To send HTML mail, the Content-type header must be set
                                                    $headers = 'MIME-Version: 1.0' . "\r\n";
                                                    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
                                                    // Additional headers
                                                    $headers .= 'To: ' . $knight_user->email . "\r\n";
                                                    $headers .= 'From: <noreply@' . Yii::app()->params->url_domain . '>' . "\r\n";
                                                    $email = new Emails();
                                                    $email->attributes = array('destination' => $knight_user->email, 'headers' => $headers, 'title' => Yii::app()->name . ': tienes un reto pendiente.', 'body' => $message, 'status' => Emails::STATUS_PENDING, 'date' => date('Y-m-d H:i:s'));
                                                    if (!$email->save()) {
                                                        Yii::trace('[CHARACTER][actionSendChallenge] No se ha podido guardar el email');
                                                    }
                                                } else {
                                                    Yii::trace('[CHARACTER][actionSendChallenge] No se ha encontrado usuario del caballero ' . $this->knight->id, 'error');
                                                }
                                            }
                                        } else {
                                            Yii::trace('[CHARACTER][actionSendChallenge] No se ha encontrado setting del caballero ' . $this->knight->id, 'error');
                                        }
                                        echo '<p>El guantazo resuena por toda la sala.</p><p>Una multitud mirando y una mejilla con 5 dedos marcados no dejan lugar a dudas. El desafio ha sido lanzado</p>
												<p>La reacción del adversario no debería hacerse esperar...</p>';
                                    } else {
                                        echo '<p>Se ha producido un error al guardar el evento rival del combate en la cache.</p>';
                                    }
                                } else {
                                    echo '<p>Se ha producido un error al guardar el evento del combate en la cache.</p>';
                                }
                                //Update events
                                /*
                                $knightEventLastMe = new KnightsEventsLast();
                                $knightEventLastMe->attributes = array(
                                		'knights_id' => Yii::app()->user->knights_id,
                                		'type' => KnightsEvents::TYPE_COMBAT,
                                		'identificator' => $combat->id,
                                		'date' => $combat->date
                                );
                                
                                $criteria = new CDbCriteria();
                                $criteria->condition = 'knights_id = :knights_id';
                                $criteria->condition = 'knights_id = :knights_id';
                                $knightEventMe = KnightsEvents::model()->find(  );
                                
                                
                                if( $knightEventLastMe->save() ){
                                $knightEventLastMe = new KnightsEventsLast();
                                $knightEventLastMe->attributes = array(
                                		'knights_id' => $this->knight->id,
                                		'type' => KnightsEvents::TYPE_COMBAT,
                                		'identificator' => $combat->id,
                                		'date' => $combat->date
                                );
                                if( $knightEventLastMe->save() ){
                                echo '<p>El guantazo resuena por toda la sala.</p><p>Una multitud mirando y una mejilla con 5 dedos marcados no dejan lugar a dudas. El desafio ha sido lanzado</p>
                                <p>La reacción del adversario no debería hacerse esperar...</p>';
                                }else{
                                echo '<p>Se ha producido un error al guardar el evento rival en la caché .</p>' ;
                                }
                                }else{
                                echo '<p>Se ha producido un error al guardar el evento en la caché .</p>' ;
                                }
                                
                                
                                //Update table caché knights events las
                                $knightEventLastMe = KnightsEventsLast::model()->find( 'knights_id :knights_id' );
                                */
                            } else {
                                echo '<p>Se ha producido un error al guardar el evento rival del combate .</p>';
                            }
                        } else {
                            echo '<p>Se ha producido un error al guardar el evento del combate.</p>';
                        }
                    } else {
                        echo '<p>Se ha producido un error al guardar el desafio.</p>';
                    }
                } else {
                    //There is a combat pending or enable
                    echo '<p>No se puede desafiar a alguien con el que tienes un desafio pendiente o en curso.</p>';
                }
            } else {
                echo '<p>¿Cómo has llegado a retarte a ti mismo? En este momento no te parece tan buena idea.</p>';
            }
        } else {
            echo '<p>Tu sesión ha expirado. Tienes que volver a hacer login.</p>';
        }
    }
 public function actionTest()
 {
     var_dump(KnightsSettings::model()->findByPk(3));
 }