public function actionMef($idTestContext)
 {
     $sql = "SELECT COUNT(*) FROM test_context_seq WHERE id_test_context = " . $idTestContext;
     $numSeqs = Yii::app()->db->createCommand($sql)->queryScalar();
     if ($numSeqs > 0) {
         $this->redirect("/mtcontrool/index.php/testContext/inidashboard?idTestContext=" . $idTestContext);
     }
     /*
     ESTA MATRIZ SERÁ PREENCHIDA NESTA FUNÇÃO E ENCAMINHA PARA O ALGORITIMO.
     */
     $matrixElementsInstances = array();
     //AQUI É FEITA UMA BUSCA POR TODOS OS ELEMENTOS CADASTRADOS NO BANCO.
     $elements = Element::model()->findAll();
     $sql_countElements = "SELECT * FROM test_context JOIN element_inst ON (test_context.id = element_inst.id_test_context)  WHERE test_context.id={$idTestContext} GROUP BY id_element";
     $result_countElements = Yii::app()->db->createCommand($sql_countElements)->queryAll();
     $totalElements = 0;
     foreach ($result_countElements as $item) {
         $totalElements = $totalElements + 1;
     }
     /*
     ESTE FOREACH, PERCORRE TODOS OS ELEMENTOS ENCONTRADOS NA BUSCA ACIMA, E PARA CADA
     ELEMENTO, ELE BUSCA TODOS AS INSTANCIAS DE ELEMENTOS QUE ESTÃO RELACIONADAS
     AO ELEMENTO DA VEZ NO FOREACH E AO TESTCONTEXT EM QUESTÃO CUJO SEU ID É REEBIDO NESTA
     FUNÇÃO POR PARÂMETRO.
     */
     foreach ($elements as $item) {
         $instances = ElementInst::model()->FindAllByAttributes(array("id_element" => $item->id, "id_test_context" => $idTestContext));
         if (sizeof($instances) > 0) {
             $matrixElementsInstances[$item->description] = $instances;
         }
     }
     /*
     		A PARTIR DAQUI VOCÊ PODE COMEÇAR A IMPLEMENTAR SEU ALGORÍTIMO.
     */
     # code ....
     /*
     		AQUI É APENAS UM TESTE DE EXIBIÇÃO, PARA QUE VOCÊ VEJA O COMPORTAMENTO DA MATRIZ.
     		AQUI VOCÊ PODE ENTENDER COMO PERCORRER ESTE ARRAY E CONSEGUIR EXTRAI AS INFORMAÇÕES.
     */
     $modelTestContext = TestContext::model()->findByPk($idTestContext);
     $vector = new ArrayObject();
     foreach ($matrixElementsInstances as $key => $element) {
         $vectorHelper = new Vetores();
         $vectorHelper->title = $key;
         foreach ($element as $model) {
             $vectorHelper->putElement($model);
         }
         $vector->append($vectorHelper);
     }
     //GERAR TABELA e XML
     //Inicializa Class Helper passando os vetores para estruturar o xml e a tabela
     $xmlGerator = new Helper($vector);
     $rawData = array();
     //condição que espera um parametro xml na URL
     if (isset($_GET['xml'])) {
         //ElementsParalax() retorna um array com o schema do xml já trabalhado
         $schema = $xmlGerator->ElementsParalax();
         //prepara o xml e inicia o download passando o schema e o título
         $this->BuildXml($schema, $modelTestContext->description);
     } else {
         //ElementsParalaxTable() retorna um array com os objetos já trabalhados contendo todo o modelo passado pelo BD
         $schema = $xmlGerator->ElementsParalaxTable();
         //mostrar para o raphael a construção da tabela
         //
         //inicia a construção da tabela
         $part1 = '<table border="1" style="width:100%">';
         $part2 = $part1 . "<tr><th>Variations</th><th>Behavior</th><th>Screenshots</th></th>";
         $totalTests = 0;
         $partBody = null;
         $contaOrdem = 1;
         foreach ($schema as $row) {
             $variatins = "";
             $behavior = "";
             $screen = "";
             $x = 1;
             foreach ($row as $model) {
                 //print_r($model);
                 //$model é uuma instância de ELEMENT_INST
                 //echo $model->iDELEMENT->DESCRIPTION;
                 $variatins .= $model->iDELEMENT->description . ": " . $model->description;
                 if ($model->element_type == "interval") {
                     $variatins .= " (START = " . $model->start_param . "; END = " . $model->end_param . ")";
                 }
                 $variatins .= "\n";
                 $behavior .= $model->behavior . ", ";
                 if ($model->behavior_screen != "") {
                     $screen .= $model->behavior_screen;
                 }
                 $x++;
             }
             $rowData = array($contaOrdem, $xmlGerator->str_lreplace(",", "", $variatins), "", "");
             $contaOrdem = $contaOrdem + 1;
             array_push($rawData, $rowData);
         }
         $part4 = $part2 . $partBody . "</table>";
     }
     /*
     ARQUI SERÁ A CHAMADA PARA A FUNÇÃO QUE MONTARA O XML.
     */
     $nomePlataforma = Platforms::model()->findByPk($modelTestContext->id_platform);
     $nomeApp = App::model()->findByPk($modelTestContext->id_app);
     $device = Device::model()->findByPk($modelTestContext->id_device);
     $user = Users::model()->findByPk($modelTestContext->id_user);
     $jsonPrint = json_encode($rawData);
     $dados_dashboard = array('model' => $modelTestContext, 'totalElements' => $totalElements, 'totalTests' => $totalTests, 'table' => $part4, 'nomeApp' => $nomeApp->name, 'nomePlataforma' => $nomePlataforma->name, 'dados' => $rawData, 'device' => $device, 'Image' => $nomePlataforma->image, 'json' => $jsonPrint, 'user' => $user->name);
     Yii::app()->user->setState('id_test_context', $idTestContext);
     Yii::app()->user->setState('sequencias_geradas', $rawData);
     Yii::app()->user->setState('dados_dashboard', $dados_dashboard);
     $this->redirect('/mtcontrool/index.php/testContextSeq/create');
 }
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer $id the ID of the model to be loaded
  * @return ElementInst the loaded model
  * @throws CHttpException
  */
 public function loadModel($id)
 {
     $model = ElementInst::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }