Ejemplo n.º 1
0
 public function BuscaSaltosConteudo($strChaveAtual)
 {
     $sql = "select ";
     $sql .= "\t concat(dest.Organizador, '_', dest.TipoConteudo, '_', dest.ContReferencia, '_', salt.ChaveDestino) as ChaveDestino ";
     $sql .= "\t,salt.ChaveCond ";
     $sql .= "\t,cond.TipoConteudo as TipoContCond ";
     $sql .= "\t,salt.CodPergunta ";
     $sql .= "\t,salt.RespostaCond ";
     $sql .= "from mescasomontagemsaltos salt ";
     $sql .= "inner join mescasomontagem mont ";
     $sql .= "\t\ton mont.CodCaso = salt.CodCaso ";
     $sql .= "\t   and mont.CodMontagem = salt.CodMontagem ";
     $sql .= "\t   and mont.Chave = salt.ChaveAtual ";
     $sql .= "inner join mescasomontagem dest ";
     $sql .= "\t\ton dest.CodCaso = salt.CodCaso ";
     $sql .= "\t   and dest.CodMontagem = salt.CodMontagem ";
     $sql .= "\t   and dest.Chave = salt.ChaveDestino ";
     $sql .= "left outer join mescasomontagem cond ";
     $sql .= "\t\t\t on cond.CodCaso = salt.CodCaso ";
     $sql .= "\t\t\tand cond.CodMontagem = salt.CodMontagem ";
     $sql .= "\t\t\tand cond.Chave = salt.ChaveCond ";
     $sql .= "where salt.CodCaso = :pCodCaso ";
     $sql .= "  and salt.CodMontagem = 1 ";
     $sql .= "  and salt.ChaveAtual = :pChaveAtual;";
     $cnn = Conexao2::getInstance();
     $cmd = $cnn->prepare($sql);
     $cmd->bindParam(":pCodCaso", $this->codcaso, PDO::PARAM_INT);
     $cmd->bindParam(":pChaveAtual", $strChaveAtual, PDO::PARAM_STR);
     $cmd->execute();
     if ($cmd->errorCode() == Comuns::QUERY_OK) {
         if ($cmd->rowCount() > 0) {
             $strProximoItem = "";
             $sair = false;
             while ($salto = $cmd->fetch(PDO::FETCH_OBJ)) {
                 if (is_null($salto->ChaveCond)) {
                     $strProximoItem = $salto->ChaveDestino;
                     break;
                 } else {
                     if ($salto->TipoContCond != 'perg' && $salto->TipoContCond != 'grupo-perg') {
                         $respostas = $this->BuscaRespostas($salto->ChaveCond);
                         $itens = $this->BuscaConteudosAgrupador($salto->ChaveCond, $salto->RespostaCond);
                         foreach ($itens as $opcao) {
                             if ((intval($opcao->ValorOpt, 10) & intval($respostas, 10)) > 0) {
                                 $strProximoItem = $salto->ChaveDestino;
                                 $sair = true;
                                 break;
                             }
                         }
                     } else {
                         $respostas = $this->BuscaRespostas($salto->ChaveCond, $salto->CodPergunta);
                         $p = new Pergunta();
                         $p->setCodigo($salto->CodPergunta);
                         $itens = $p->BuscaAlternativasFiltradas($salto->RespostaCond);
                         if (count($itens) > 0) {
                             foreach ($itens as $opcao) {
                                 if ((intval($opcao->getCodBinario(), 10) & intval($respostas, 10)) > 0) {
                                     $strProximoItem = $salto->ChaveDestino;
                                     $sair = true;
                                     break;
                                 }
                             }
                         } else {
                             return 0;
                         }
                     }
                     if ($sair) {
                         break;
                     }
                 }
             }
             if ($strProximoItem != "") {
                 return $strProximoItem;
             } else {
                 return 0;
             }
         } else {
             return 0;
         }
     } else {
         $msg = $cmd->errorInfo();
         $this->msg_erro = $msg[2];
         return false;
     }
 }