simulador.php — leitura técnica completa

sistema/painel/paginas/simulador.php
Tela principal do simulador com cadastro, AJAX, geração por IA, canvas e envio da imagem conforme o código enviado.

SimuladorTela principal do painel747 linhas

Responsabilidade do arquivo

Tela principal do simulador com cadastro, AJAX, geração por IA, canvas e envio da imagem conforme o código enviado.

Fonte conferida: sistema/painel/paginas/simulador.php
SHA-256: 279be211dfedaca05faa6bdb0f5ccace519fc002fe83eedd6e3be49f88cc6b36

Dependências extraídas do arquivo:
Include: __DIR__ . "/../verificar.php"Include: __DIR__ . "/../../conexao.php"Tabela: clientesTabela: proteses

Bytes inválidos em UTF-8 são exibidos como \xNN, sem alterar o arquivo original.

Tipo

Tela principal do painel

Grupo

Simulador

Total de linhas

747

Código completo

1<?php 2@session_start(); 3require_once(__DIR__ . "/../verificar.php"); 4require_once(__DIR__ . "/../../conexao.php"); 5 6$pag = 'simulador'; 7 8//verificar se ele tem a permissão de estar nessa página 9if(@$simulador == 'ocultar'){ 10 echo "<script>window.location='../index.php'</script>"; 11 exit(); 12} 13 14if(@$_POST['acao'] == 'enviar_whatsapp_imagem'){ 15 $telefone = preg_replace('/\D+/', '', (string) @$_POST['telefone']); 16 $cliente = trim((string) @$_POST['cliente']); 17 $nome_imagem = basename((string) @$_POST['imagem']); 18 19 if($telefone == ''){ 20 echo 'Telefone do cliente inválido.'; 21 exit(); 22 } 23 24 if(strlen($telefone) <= 11 && substr($telefone, 0, 2) != '55'){ 25 $telefone = '55' . $telefone; 26 } 27 28 if($nome_imagem == ''){ 29 echo 'Nenhuma imagem simulada disponível.'; 30 exit(); 31 } 32 33 $caminho_imagem = __DIR__ . '/../images/simulacoes/' . $nome_imagem; 34 35 if(!is_file($caminho_imagem)){ 36 echo 'Imagem simulada não encontrada no servidor.'; 37 exit(); 38 } 39 40 $base_sistema = rtrim($url_sistema, '/') . '/'; 41 $url_imagem = $base_sistema . 'sistema/painel/images/simulacoes/' . rawurlencode($nome_imagem); 42 43 if($cliente == ''){ 44 $cliente = 'cliente'; 45 } 46 47 $mensagem = 'Olá ' . $cliente . ', segue sua simulação de prótese capilar.'; 48 $response = ''; 49 $erro_curl = ''; 50 $http_code = 0; 51 52 if($api == 'menuia'){ 53 $curl = curl_init(); 54 curl_setopt_array($curl, array( 55 CURLOPT_URL => 'https://chatbot.menuia.com/api/create-message', 56 CURLOPT_RETURNTRANSFER => true, 57 CURLOPT_ENCODING => '', 58 CURLOPT_MAXREDIRS => 10, 59 CURLOPT_TIMEOUT => 30, 60 CURLOPT_FOLLOWLOCATION => true, 61 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 62 CURLOPT_CUSTOMREQUEST => 'POST', 63 CURLOPT_POSTFIELDS => array( 64 'appkey' => $token, 65 'authkey' => $instancia, 66 'to' => $telefone, 67 'licence' => 'hugocursos', 68 'message' => $mensagem, 69 'file' => $url_imagem, 70 'sandbox' => 'false' 71 ), 72 )); 73 74 $response = curl_exec($curl); 75 $erro_curl = curl_error($curl); 76 $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 77 curl_close($curl); 78 79 }else{ 80 $curl = curl_init(); 81 curl_setopt_array($curl, array( 82 CURLOPT_URL => 'http://api.wordmensagens.com.br/send-docnew', 83 CURLOPT_RETURNTRANSFER => true, 84 CURLOPT_ENCODING => '', 85 CURLOPT_MAXREDIRS => 10, 86 CURLOPT_TIMEOUT => 30, 87 CURLOPT_FOLLOWLOCATION => true, 88 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 89 CURLOPT_CUSTOMREQUEST => 'POST', 90 CURLOPT_POSTFIELDS => array( 91 'instance' => $instancia, 92 'to' => $telefone, 93 'token' => $token, 94 'message' => $mensagem, 95 'url' => $url_imagem 96 ), 97 )); 98 99 $response = curl_exec($curl); 100 $erro_curl = curl_error($curl); 101 $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); 102 curl_close($curl); 103 } 104 105 if($erro_curl != ''){ 106 echo 'Erro ao enviar imagem no WhatsApp: ' . $erro_curl; 107 exit(); 108 } 109 110 $resposta_api = json_decode((string) $response, true); 111 112 if(is_array($resposta_api) && isset($resposta_api['erro']) && ($resposta_api['erro'] === true || $resposta_api['erro'] === 'true' || $resposta_api['erro'] == 1)){ 113 $mensagem_erro = $resposta_api['message'] ?? $resposta_api['mensagem'] ?? 'API retornou erro no envio.'; 114 echo $mensagem_erro; 115 exit(); 116 } 117 118 if($http_code >= 400){ 119 echo 'Erro ao enviar imagem no WhatsApp. Código HTTP: ' . $http_code; 120 exit(); 121 } 122 123 echo 'Imagem enviada com sucesso'; 124 exit(); 125} 126 127?> 128 129<div class="row top-50"> 130 <div class="col-md-8 float-esq"> 131 <a class="btn btn-primary" onclick="inserir()" class="btn btn-primary btn-flat btn-pri"> 132 <i class="fa fa-plus" aria-hidden="true"></i> <span class="esc">Nova Simulação</span> 133 </a> 134 </div> 135 <div class="col-md-3 float-esq"> 136 <input onkeyup="listarSimulacoes()" class="form-control" type="text" name="buscar" id="buscar" placeholder="Buscar por Cliente ou Prótese" style="border-radius: 5px"> 137 <input type="hidden" id="pagina"> 138 </div> 139 <div class="col-md-1 float-esq"> 140 <button onclick="listarSimulacoes()" id="btn-buscar" class="btn btn-primary"><i class="fa fa-search"></i></button> 141 </div> 142</div> 143 144<div class="bs-example widget-shadow" style="padding:15px" id="listar"> 145 146</div> 147 148<div class="modal fade" id="modalForm" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> 149 <div class="modal-dialog modal-lg" role="document"> 150 <div class="modal-content"> 151 <div class="modal-header"> 152 <h4 class="modal-title"><span id="titulo_inserir"></span></h4> 153 <button id="btn-fechar" type="button" class="close" data-dismiss="modal" aria-label="Close" style="margin-top: -20px"> 154 <span aria-hidden="true">&times;</span> 155 </button> 156 </div> 157 158 <form id="form_simulacao" method="post" enctype="multipart/form-data"> 159 <div class="modal-body"> 160 161 <div class="row"> 162 <div class="col-md-6"> 163 <div class="form-group"> 164 <label>Cliente</label> 165 <select class="form-control sel2" name="cliente" id="cliente" style="width:100%" required> 166 <option value="">Selecione um Cliente</option> 167 <?php 168 $query = $pdo->query("SELECT * FROM clientes order by nome asc"); 169 $res = $query->fetchAll(PDO::FETCH_ASSOC); 170 $linhas = @count($res); 171 if($linhas > 0){ 172 for($i=0; $i<$linhas; $i++){ 173 ?> 174 <option value="<?php echo $res[$i]['id'] ?>"><?php echo $res[$i]['nome'] ?></option> 175 <?php } } ?> 176 </select> 177 </div> 178 </div> 179 180 <div class="col-md-6"> 181 <div class="form-group"> 182 <label>Prótese</label> 183 <select class="form-control sel2" name="id_protese" id="id_protese" style="width:100%" required> 184 <option value="">Selecione uma Prótese</option> 185 <?php 186 $query = $pdo->query("SELECT p.*, c.nome as nome_cliente FROM proteses p INNER JOIN clientes c ON p.cliente = c.id order by p.id desc"); 187 $res = $query->fetchAll(PDO::FETCH_ASSOC); 188 $linhas = @count($res); 189 if($linhas > 0){ 190 for($i=0; $i<$linhas; $i++){ 191 $descricao = $res[$i]['nome_cliente'].' - '.$res[$i]['modelo']; 192 ?> 193 <option value="<?php echo $res[$i]['id'] ?>"><?php echo $descricao ?></option> 194 <?php } } ?> 195 </select> 196 </div> 197 </div> 198 </div> 199 200 <div class="row"> 201 <div class="col-md-6"> 202 <div class="form-group"> 203 <label>Foto Original</label> 204 <input type="file" class="form-control" id="foto_original" name="foto_original"> 205 <small id="nome_foto_original_atual" class="text-muted"></small> 206 <div id="area_preview_foto_original" style="margin-top: 8px; display:none;"> 207 <img id="preview_foto_original" src="" style="max-width:100%; max-height:160px; border:1px solid #ddd; padding:3px; border-radius:4px;"> 208 </div> 209 </div> 210 </div> 211 212 <div class="col-md-6"> 213 <div class="form-group"> 214 <label>Imagem Simulada</label> 215 <input type="file" class="form-control" id="imagem_simulada" name="imagem_simulada"> 216 <small id="nome_imagem_simulada_atual" class="text-muted"></small> 217 <div id="area_preview_imagem_simulada" style="margin-top: 8px; display:none;"> 218 <img id="preview_imagem_simulada" src="" style="max-width:100%; max-height:160px; border:1px solid #ddd; padding:3px; border-radius:4px;"> 219 </div> 220 </div> 221 </div> 222 </div> 223 224 <div class="row"> 225 <div class="col-md-6"> 226 <div class="form-group"> 227 <label>Data da Simulação</label> 228 <input type="date" class="form-control" id="data_simulacao" name="data_simulacao" value="<?php echo date('Y-m-d') ?>" required> 229 </div> 230 </div> 231 232 <div class="col-md-6"> 233 <div class="form-group"> 234 <label>Observações</label> 235 <input type="text" class="form-control" id="observacoes" name="observacoes" placeholder="Observações"> 236 </div> 237 </div> 238 </div> 239 240 <input type="hidden" name="id" id="id"> 241 <input type="hidden" name="foto_original_atual" id="foto_original_atual"> 242 <input type="hidden" name="imagem_simulada_atual" id="imagem_simulada_atual"> 243 244 <hr> 245 246 <div class="row"> 247 <div class="col-md-6"> 248 <button id="btnGerarIA" type="button" class="btn btn-warning btn-block" onclick="gerarIAmodal()"> 249 <i id="iconGerarIA" class="fa fa-magic"></i> Gerar com IA 250 </button> 251 </div> 252 253 <div class="col-md-6"> 254 <button type="button" class="btn btn-info btn-block" onclick="abrirCanvas()"> 255 <i class="fa fa-image"></i> Abrir Canvas 256 </button> 257 </div> 258 </div> 259 260 <br> 261 <small><div id="mensagem_ia" align="center"></div></small> 262 <small><div id="mensagem" align="center"></div></small> 263 </div> 264 265 <div class="modal-footer"> 266 <button type="submit" class="btn btn-primary">Salvar</button> 267 </div> 268 </form> 269 270 </div> 271 </div> 272</div> 273 274<div class="modal fade" id="modalDados" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> 275 <div class="modal-dialog modal-lg" role="document"> 276 <div class="modal-content"> 277 <div class="modal-header"> 278 <h4 class="modal-title" id="exampleModalLabel"><span id="nome_dados"></span></h4> 279 <button id="btn-fechar-perfil" type="button" class="close" data-dismiss="modal" aria-label="Close" style="margin-top: -20px"> 280 <span aria-hidden="true" >&times;</span> 281 </button> 282 </div> 283 284 <div class="modal-body"> 285 286 <input type="hidden" id="telefone_whatsapp_cliente"> 287 288 <div class="row" style="margin-bottom: 15px"> 289 <div class="col-md-6" align="center"> 290 <label>Foto Original</label><br> 291 <img id="foto_original_dados" src="" width="220px"> 292 </div> 293 <div class="col-md-6" align="center"> 294 <label>Imagem Simulada</label><br> 295 <img id="imagem_simulada_dados" src="" width="220px"> 296 <div style="margin-top: 10px;"> 297 <a href="javascript:void(0)" onclick="enviarImagemWhatsapp(this)" class="btn btn-success btn-sm"> 298 <i class="fa fa-whatsapp"></i> Enviar no WhatsApp 299 </a> 300 </div> 301 </div> 302 </div> 303 304 <div class="row" style="border-bottom: 1px solid #cac7c7;"> 305 <div class="col-md-4"> 306 <span><b>Cliente: </b></span> 307 <span id="cliente_dados"></span> 308 </div> 309 310 <div class="col-md-4"> 311 <span><b>Prótese: </b></span> 312 <span id="protese_dados"></span> 313 </div> 314 315 <div class="col-md-4"> 316 <span><b>Data: </b></span> 317 <span id="data_simulacao_dados"></span> 318 </div> 319 </div> 320 321 <div class="row" style="border-bottom: 1px solid #cac7c7;"> 322 <div class="col-md-12"> 323 <span><b>Observações: </b></span> 324 <span id="observacoes_dados"></span> 325 </div> 326 </div> 327 328 </div> 329 </div> 330 </div> 331</div> 332 333<script type="text/javascript"> 334 var pag = "<?=$pag?>"; 335 var urlBaseSimulacoesWhatsapp = "<?=rtrim($url_sistema, '/')?>/sistema/painel/images/simulacoes/"; 336</script> 337<script src="js/ajax.js"></script> 338 339<script type="text/javascript"> 340 $(document).ready( function () { 341 listarSimulacoes(); 342 343 $('.sel2').select2({ 344 dropdownParent: $('#modalForm') 345 }); 346 } ); 347</script> 348 349<script type="text/javascript"> 350function listarSimulacoes(pagina){ 351 352 $("#pagina").val(pagina); 353 354 var busca = $("#buscar").val(); 355 $.ajax({ 356 url: 'paginas/' + pag + "/listar.php", 357 method: 'POST', 358 data: {busca, pagina}, 359 dataType: "html", 360 361 success:function(result){ 362 $("#listar").html(result); 363 } 364 }); 365} 366</script> 367 368<script type="text/javascript"> 369function mostrarNomeArquivosAtuais(){ 370 var foto_original_atual = $('#foto_original_atual').val(); 371 var imagem_simulada_atual = $('#imagem_simulada_atual').val(); 372 373 if(foto_original_atual != ""){ 374 $('#nome_foto_original_atual').text('Arquivo atual: ' + foto_original_atual); 375 }else{ 376 $('#nome_foto_original_atual').text(''); 377 } 378 379 if(imagem_simulada_atual != ""){ 380 $('#nome_imagem_simulada_atual').text('Arquivo atual: ' + imagem_simulada_atual); 381 }else{ 382 $('#nome_imagem_simulada_atual').text(''); 383 } 384} 385</script> 386 387<script type="text/javascript"> 388function mostrarPreviewAtual(){ 389 var foto_original_atual = $('#foto_original_atual').val(); 390 var imagem_simulada_atual = $('#imagem_simulada_atual').val(); 391 392 if(foto_original_atual != ""){ 393 $('#preview_foto_original').attr('src', 'images/simulacoes/' + foto_original_atual + '?v=' + new Date().getTime()); 394 $('#area_preview_foto_original').show(); 395 }else{ 396 $('#preview_foto_original').attr('src', ''); 397 $('#area_preview_foto_original').hide(); 398 } 399 400 if(imagem_simulada_atual != ""){ 401 $('#preview_imagem_simulada').attr('src', 'images/simulacoes/' + imagem_simulada_atual + '?v=' + new Date().getTime()); 402 $('#area_preview_imagem_simulada').show(); 403 }else{ 404 $('#preview_imagem_simulada').attr('src', ''); 405 $('#area_preview_imagem_simulada').hide(); 406 } 407} 408</script> 409 410<script type="text/javascript"> 411function mostrarPreviewArquivo(input, idImagem, idArea){ 412 if(input.files && input.files[0]){ 413 var reader = new FileReader(); 414 415 reader.onload = function(e){ 416 $(idImagem).attr('src', e.target.result); 417 $(idArea).show(); 418 } 419 420 reader.readAsDataURL(input.files[0]); 421 } 422} 423</script> 424 425<script type="text/javascript"> 426$('#foto_original').change(function(){ 427 var arquivo = $(this).val().split('\\').pop(); 428 429 if(arquivo != ""){ 430 $('#nome_foto_original_atual').text('Novo arquivo: ' + arquivo); 431 mostrarPreviewArquivo(this, '#preview_foto_original', '#area_preview_foto_original'); 432 }else{ 433 mostrarNomeArquivosAtuais(); 434 mostrarPreviewAtual(); 435 } 436}); 437</script> 438 439<script type="text/javascript"> 440$('#imagem_simulada').change(function(){ 441 var arquivo = $(this).val().split('\\').pop(); 442 443 if(arquivo != ""){ 444 $('#nome_imagem_simulada_atual').text('Novo arquivo: ' + arquivo); 445 mostrarPreviewArquivo(this, '#preview_imagem_simulada', '#area_preview_imagem_simulada'); 446 }else{ 447 mostrarNomeArquivosAtuais(); 448 mostrarPreviewAtual(); 449 } 450}); 451</script> 452 453<script type="text/javascript"> 454$('#modalForm').on('shown.bs.modal', function () { 455 mostrarNomeArquivosAtuais(); 456 mostrarPreviewAtual(); 457}); 458</script> 459 460<script type="text/javascript"> 461$('#modalForm').on('hidden.bs.modal', function () { 462 $('#nome_foto_original_atual').text(''); 463 $('#nome_imagem_simulada_atual').text(''); 464 $('#preview_foto_original').attr('src', ''); 465 $('#preview_imagem_simulada').attr('src', ''); 466 $('#area_preview_foto_original').hide(); 467 $('#area_preview_imagem_simulada').hide(); 468 $('#foto_original').val(''); 469 $('#imagem_simulada').val(''); 470 $('#mensagem').text(''); 471 $('#mensagem_ia').text(''); 472 $('#mensagem').removeClass(); 473 $('#mensagem_ia').removeClass(); 474 $('#btnGerarIA').data('processando', false); 475 $('#btnGerarIA').prop('disabled', false); 476 $('#iconGerarIA').removeClass(); 477 $('#iconGerarIA').addClass('fa fa-magic'); 478}); 479</script> 480 481<script type="text/javascript"> 482$("#form_simulacao").submit(function () { 483 484 event.preventDefault(); 485 var formData = new FormData(this); 486 487 $.ajax({ 488 url: 'paginas/' + pag + "/salvar.php", 489 type: 'POST', 490 data: formData, 491 492 success: function (mensagem) { 493 $('#mensagem').text(''); 494 $('#mensagem').removeClass() 495 if (mensagem.trim() == "Salvo com Sucesso") { 496 497 $('#btn-fechar').click(); 498 499 var pagina = $("#pagina").val(); 500 listarSimulacoes(pagina); 501 502 } else { 503 $('#mensagem').addClass('text-danger') 504 $('#mensagem').text(mensagem) 505 } 506 507 }, 508 509 cache: false, 510 contentType: false, 511 processData: false, 512 513 }); 514 515}); 516</script> 517 518<script type="text/javascript"> 519function excluir(id){ 520 $.ajax({ 521 url: 'paginas/' + pag + "/excluir.php", 522 method: 'POST', 523 data: {id}, 524 dataType: "text", 525 526 success: function (mensagem) { 527 if (mensagem.trim() == "Excluído com Sucesso") { 528 var pagina = $("#pagina").val(); 529 listarSimulacoes(pagina); 530 } else { 531 $('#mensagem-excluir').addClass('text-danger') 532 $('#mensagem-excluir').text(mensagem) 533 } 534 535 }, 536 537 }); 538} 539</script> 540 541<script type="text/javascript"> 542function gerarIAmodal(){ 543 544 var id = $('#id').val(); 545 var botao = $('#btnGerarIA'); 546 var icone = $('#iconGerarIA'); 547 548 $('#mensagem_ia').text(''); 549 $('#mensagem_ia').removeClass(); 550 551 if(id == ""){ 552 $('#mensagem_ia').addClass('text-danger'); 553 $('#mensagem_ia').text('Primeiro salve o registro para gerar a simulação com IA'); 554 return; 555 } 556 557 if(botao.data('processando') == true){ 558 return; 559 } 560 561 botao.data('processando', true); 562 botao.prop('disabled', true); 563 564 icone.removeClass(); 565 icone.addClass('fa fa-spinner fa-spin'); 566 567 $('#mensagem_ia').addClass('text-info'); 568 $('#mensagem_ia').text('Gerando simulação com IA...'); 569 570 $.ajax({ 571 url: 'paginas/simulador/gerar_ia.php', 572 method: 'POST', 573 data: {id}, 574 dataType: "text", 575 576 success: function (mensagem) { 577 578 botao.data('processando', false); 579 botao.prop('disabled', false); 580 581 icone.removeClass(); 582 icone.addClass('fa fa-magic'); 583 584 $('#mensagem_ia').removeClass(); 585 586 if (mensagem.trim() == "Salvo com Sucesso") { 587 588 $('#mensagem_ia').addClass('text-success'); 589 $('#mensagem_ia').text('Simulação gerada com sucesso'); 590 591 var pagina = $("#pagina").val(); 592 listarSimulacoes(pagina); 593 594 $.ajax({ 595 url: 'paginas/simulador/buscar.php', 596 method: 'POST', 597 data: {id}, 598 dataType: "json", 599 600 success: function (dados) { 601 602 if(dados.foto_original != undefined){ 603 $('#foto_original_atual').val(dados.foto_original); 604 } 605 606 if(dados.imagem_simulada != undefined){ 607 $('#imagem_simulada_atual').val(dados.imagem_simulada); 608 } 609 610 if(typeof mostrarNomeArquivosAtuais === 'function'){ 611 mostrarNomeArquivosAtuais(); 612 } 613 614 if(typeof mostrarPreviewAtual === 'function'){ 615 mostrarPreviewAtual(); 616 } 617 } 618 }); 619 620 }else{ 621 622 $('#mensagem_ia').addClass('text-danger'); 623 $('#mensagem_ia').text(mensagem); 624 625 } 626 }, 627 628 error: function () { 629 630 botao.data('processando', false); 631 botao.prop('disabled', false); 632 633 icone.removeClass(); 634 icone.addClass('fa fa-magic'); 635 636 $('#mensagem_ia').removeClass(); 637 $('#mensagem_ia').addClass('text-danger'); 638 $('#mensagem_ia').text('Erro ao processar a simulação com IA'); 639 640 } 641 }); 642} 643</script> 644 645<script type="text/javascript"> 646function abrirCanvas(){ 647 var id = $('#id').val(); 648 649 if(id == ""){ 650 $('#mensagem_ia').removeClass(); 651 $('#mensagem_ia').addClass('text-danger'); 652 $('#mensagem_ia').text('Primeiro salve o registro para abrir o canvas'); 653 return; 654 } 655 656 window.open('paginas/simulador/canvas.php?id=' + id, '_blank'); 657} 658</script> 659 660<script type="text/javascript"> 661function enviarImagemWhatsapp(botao){ 662 var telefone = $('#telefone_whatsapp_cliente').val(); 663 var imagem = $('#imagem_simulada_dados').attr('src'); 664 var cliente = $('#cliente_dados').text(); 665 var btn = $(botao); 666 var htmlBotao = btn.html(); 667 668 if(telefone == ""){ 669 alert('Cliente não possui telefone cadastrado.'); 670 return; 671 } 672 673 if(imagem == ""){ 674 alert('Nenhuma imagem simulada disponível.'); 675 return; 676 } 677 678 telefone = telefone.replace(/\D/g, ''); 679 680 if(telefone == ""){ 681 alert('Telefone do cliente inválido.'); 682 return; 683 } 684 685 var nome_imagem = imagem.split('/').pop().split('?')[0]; 686 687 if(nome_imagem == ""){ 688 alert('Nenhuma imagem simulada disponível.'); 689 return; 690 } 691 692 btn.html('<i class="fa fa-spinner fa-spin"></i> Enviando...'); 693 btn.css('pointer-events', 'none'); 694 695 $.ajax({ 696 url: 'paginas/' + pag + '.php', 697 method: 'POST', 698 data: { 699 acao: 'enviar_whatsapp_imagem', 700 telefone: telefone, 701 imagem: nome_imagem, 702 cliente: cliente 703 }, 704 dataType: "text", 705 706 success: function (mensagem) { 707 btn.html(htmlBotao); 708 btn.css('pointer-events', 'auto'); 709 710 if (mensagem.trim() == "Imagem enviada com sucesso") { 711 alert('Imagem enviada com sucesso para o cliente.'); 712 } else { 713 var url_imagem = urlBaseSimulacoesWhatsapp + encodeURIComponent(nome_imagem); 714 var texto = 'Olá ' + cliente + ', segue sua simulação de prótese capilar: ' + url_imagem; 715 var url = ''; 716 717 if(/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)){ 718 url = 'https://api.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto); 719 }else{ 720 url = 'https://web.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto); 721 } 722 723 alert(mensagem + '\n\nAbrindo WhatsApp com o link da imagem como alternativa.'); 724 window.open(url, '_blank'); 725 } 726 }, 727 728 error: function () { 729 btn.html(htmlBotao); 730 btn.css('pointer-events', 'auto'); 731 732 var url_imagem = urlBaseSimulacoesWhatsapp + encodeURIComponent(nome_imagem); 733 var texto = 'Olá ' + cliente + ', segue sua simulação de prótese capilar: ' + url_imagem; 734 var url = ''; 735 736 if(/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)){ 737 url = 'https://api.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto); 738 }else{ 739 url = 'https://web.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto); 740 } 741 742 alert('Erro ao enviar a imagem pela API. Abrindo WhatsApp com o link da imagem como alternativa.'); 743 window.open(url, '_blank'); 744 } 745 }); 746} 747</script>

Leitura linha por linha

LinhaCódigoExplicação técnica
1<?php Abre um bloco PHP executado no servidor.
2@session_start();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
3require_once(__DIR__ . "/../verificar.php");Carrega o arquivo ou a dependência indicada na própria linha.
4require_once(__DIR__ . "/../../conexao.php");Carrega o arquivo ou a dependência indicada na própria linha.
5 Linha em branco usada para separar blocos do arquivo.
6$pag = 'simulador';Atribui o valor ou resultado exibido à variável.
7 Linha em branco usada para separar blocos do arquivo.
8//verificar se ele tem a permissão de estar nessa páginaComentário existente no código-fonte.
9if(@$simulador == 'ocultar'){Avalia a condição escrita nesta linha.
10 echo "<script>window.location='../index.php'</script>";Envia conteúdo para a saída da requisição.
11 exit();Interrompe a execução neste ponto.
12}Fecha ou delimita a estrutura iniciada anteriormente.
13 Linha em branco usada para separar blocos do arquivo.
14if(@$_POST['acao'] == 'enviar_whatsapp_imagem'){Avalia a condição escrita nesta linha.
15 $telefone = preg_replace('/\D+/', '', (string) @$_POST['telefone']);Atribui o valor ou resultado exibido à variável.
16 $cliente = trim((string) @$_POST['cliente']);Atribui o valor ou resultado exibido à variável.
17 $nome_imagem = basename((string) @$_POST['imagem']);Atribui o valor ou resultado exibido à variável.
18 Linha em branco usada para separar blocos do arquivo.
19 if($telefone == ''){Avalia a condição escrita nesta linha.
20 echo 'Telefone do cliente inválido.';Envia conteúdo para a saída da requisição.
21 exit();Interrompe a execução neste ponto.
22 }Fecha ou delimita a estrutura iniciada anteriormente.
23 Linha em branco usada para separar blocos do arquivo.
24 if(strlen($telefone) <= 11 && substr($telefone, 0, 2) != '55'){Avalia a condição escrita nesta linha.
25 $telefone = '55' . $telefone;Atribui o valor ou resultado exibido à variável.
26 }Fecha ou delimita a estrutura iniciada anteriormente.
27 Linha em branco usada para separar blocos do arquivo.
28 if($nome_imagem == ''){Avalia a condição escrita nesta linha.
29 echo 'Nenhuma imagem simulada disponível.';Envia conteúdo para a saída da requisição.
30 exit();Interrompe a execução neste ponto.
31 }Fecha ou delimita a estrutura iniciada anteriormente.
32 Linha em branco usada para separar blocos do arquivo.
33 $caminho_imagem = __DIR__ . '/../images/simulacoes/' . $nome_imagem;Atribui o valor ou resultado exibido à variável.
34 Linha em branco usada para separar blocos do arquivo.
35 if(!is_file($caminho_imagem)){Avalia a condição escrita nesta linha.
36 echo 'Imagem simulada não encontrada no servidor.';Envia conteúdo para a saída da requisição.
37 exit();Interrompe a execução neste ponto.
38 }Fecha ou delimita a estrutura iniciada anteriormente.
39 Linha em branco usada para separar blocos do arquivo.
40 $base_sistema = rtrim($url_sistema, '/') . '/';Atribui o valor ou resultado exibido à variável.
41 $url_imagem = $base_sistema . 'sistema/painel/images/simulacoes/' . rawurlencode($nome_imagem);Atribui o valor ou resultado exibido à variável.
42 Linha em branco usada para separar blocos do arquivo.
43 if($cliente == ''){Avalia a condição escrita nesta linha.
44 $cliente = 'cliente';Atribui o valor ou resultado exibido à variável.
45 }Fecha ou delimita a estrutura iniciada anteriormente.
46 Linha em branco usada para separar blocos do arquivo.
47 $mensagem = 'Olá ' . $cliente . ', segue sua simulação de prótese capilar.';Atribui o valor ou resultado exibido à variável.
48 $response = '';Atribui o valor ou resultado exibido à variável.
49 $erro_curl = '';Atribui o valor ou resultado exibido à variável.
50 $http_code = 0;Atribui o valor ou resultado exibido à variável.
51 Linha em branco usada para separar blocos do arquivo.
52 if($api == 'menuia'){Avalia a condição escrita nesta linha.
53 $curl = curl_init();Inicializa uma requisição HTTP com cURL.
54 curl_setopt_array($curl, array(Configura uma opção da requisição cURL.
55 CURLOPT_URL => 'https://chatbot.menuia.com/api/create-message',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
56 CURLOPT_RETURNTRANSFER => true,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
57 CURLOPT_ENCODING => '',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
58 CURLOPT_MAXREDIRS => 10,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
59 CURLOPT_TIMEOUT => 30,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
60 CURLOPT_FOLLOWLOCATION => true,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
61 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
62 CURLOPT_CUSTOMREQUEST => 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
63 CURLOPT_POSTFIELDS => array(Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
64 'appkey' => $token,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
65 'authkey' => $instancia,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
66 'to' => $telefone,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
67 'licence' => 'hugocursos',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
68 'message' => $mensagem,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
69 'file' => $url_imagem,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
70 'sandbox' => 'false'Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
71 ),Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
72 ));Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
73 Linha em branco usada para separar blocos do arquivo.
74 $response = curl_exec($curl);Executa a requisição cURL.
75 $erro_curl = curl_error($curl);Atribui o valor ou resultado exibido à variável.
76 $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);Atribui o valor ou resultado exibido à variável.
77 curl_close($curl);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
78 Linha em branco usada para separar blocos do arquivo.
79 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
80 $curl = curl_init();Inicializa uma requisição HTTP com cURL.
81 curl_setopt_array($curl, array(Configura uma opção da requisição cURL.
82 CURLOPT_URL => 'http://api.wordmensagens.com.br/send-docnew',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
83 CURLOPT_RETURNTRANSFER => true,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
84 CURLOPT_ENCODING => '',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
85 CURLOPT_MAXREDIRS => 10,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
86 CURLOPT_TIMEOUT => 30,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
87 CURLOPT_FOLLOWLOCATION => true,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
88 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
89 CURLOPT_CUSTOMREQUEST => 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
90 CURLOPT_POSTFIELDS => array(Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
91 'instance' => $instancia,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
92 'to' => $telefone,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
93 'token' => $token,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
94 'message' => $mensagem,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
95 'url' => $url_imagemLinha do arquivo original; deve ser lida junto com o bloco em que está inserida.
96 ),Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
97 ));Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
98 Linha em branco usada para separar blocos do arquivo.
99 $response = curl_exec($curl);Executa a requisição cURL.
100 $erro_curl = curl_error($curl);Atribui o valor ou resultado exibido à variável.
101 $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);Atribui o valor ou resultado exibido à variável.
102 curl_close($curl);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
103 }Fecha ou delimita a estrutura iniciada anteriormente.
104 Linha em branco usada para separar blocos do arquivo.
105 if($erro_curl != ''){Avalia a condição escrita nesta linha.
106 echo 'Erro ao enviar imagem no WhatsApp: ' . $erro_curl;Envia conteúdo para a saída da requisição.
107 exit();Interrompe a execução neste ponto.
108 }Fecha ou delimita a estrutura iniciada anteriormente.
109 Linha em branco usada para separar blocos do arquivo.
110 $resposta_api = json_decode((string) $response, true);Converte JSON para uma estrutura usada pelo código.
111 Linha em branco usada para separar blocos do arquivo.
112 if(is_array($resposta_api) && isset($resposta_api['erro']) && ($resposta_api['erro'] === true || $resposta_api['erro'] === 'true' || $resposta_api['erro'] == 1)){Avalia a condição escrita nesta linha.
113 $mensagem_erro = $resposta_api['message'] ?? $resposta_api['mensagem'] ?? 'API retornou erro no envio.';Atribui o valor ou resultado exibido à variável.
114 echo $mensagem_erro;Envia conteúdo para a saída da requisição.
115 exit();Interrompe a execução neste ponto.
116 }Fecha ou delimita a estrutura iniciada anteriormente.
117 Linha em branco usada para separar blocos do arquivo.
118 if($http_code >= 400){Avalia a condição escrita nesta linha.
119 echo 'Erro ao enviar imagem no WhatsApp. Código HTTP: ' . $http_code;Envia conteúdo para a saída da requisição.
120 exit();Interrompe a execução neste ponto.
121 }Fecha ou delimita a estrutura iniciada anteriormente.
122 Linha em branco usada para separar blocos do arquivo.
123 echo 'Imagem enviada com sucesso';Envia conteúdo para a saída da requisição.
124 exit();Interrompe a execução neste ponto.
125}Fecha ou delimita a estrutura iniciada anteriormente.
126 Linha em branco usada para separar blocos do arquivo.
127?>Fecha o bloco PHP.
128 Linha em branco usada para separar blocos do arquivo.
129<div class="row top-50">Marca HTML presente na saída da página.
130 <div class="col-md-8 float-esq"> Marca HTML presente na saída da página.
131 <a class="btn btn-primary" onclick="inserir()" class="btn btn-primary btn-flat btn-pri">Marca HTML presente na saída da página.
132 <i class="fa fa-plus" aria-hidden="true"></i> <span class="esc">Nova Simulação</span>Marca HTML presente na saída da página.
133 </a>Marca HTML presente na saída da página.
134 </div>Marca HTML presente na saída da página.
135 <div class="col-md-3 float-esq">Marca HTML presente na saída da página.
136 <input onkeyup="listarSimulacoes()" class="form-control" type="text" name="buscar" id="buscar" placeholder="Buscar por Cliente ou Prótese" style="border-radius: 5px">Marca HTML presente na saída da página.
137 <input type="hidden" id="pagina">Marca HTML presente na saída da página.
138 </div>Marca HTML presente na saída da página.
139 <div class="col-md-1 float-esq">Marca HTML presente na saída da página.
140 <button onclick="listarSimulacoes()" id="btn-buscar" class="btn btn-primary"><i class="fa fa-search"></i></button>Marca HTML presente na saída da página.
141 </div>Marca HTML presente na saída da página.
142</div>Marca HTML presente na saída da página.
143 Linha em branco usada para separar blocos do arquivo.
144<div class="bs-example widget-shadow" style="padding:15px" id="listar">Marca HTML presente na saída da página.
145 Linha em branco usada para separar blocos do arquivo.
146</div>Marca HTML presente na saída da página.
147 Linha em branco usada para separar blocos do arquivo.
148<div class="modal fade" id="modalForm" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">Marca HTML presente na saída da página.
149 <div class="modal-dialog modal-lg" role="document">Marca HTML presente na saída da página.
150 <div class="modal-content">Marca HTML presente na saída da página.
151 <div class="modal-header">Marca HTML presente na saída da página.
152 <h4 class="modal-title"><span id="titulo_inserir"></span></h4>Marca HTML presente na saída da página.
153 <button id="btn-fechar" type="button" class="close" data-dismiss="modal" aria-label="Close" style="margin-top: -20px">Marca HTML presente na saída da página.
154 <span aria-hidden="true">&times;</span>Marca HTML presente na saída da página.
155 </button>Marca HTML presente na saída da página.
156 </div>Marca HTML presente na saída da página.
157 Linha em branco usada para separar blocos do arquivo.
158 <form id="form_simulacao" method="post" enctype="multipart/form-data">Marca HTML presente na saída da página.
159 <div class="modal-body">Marca HTML presente na saída da página.
160 Linha em branco usada para separar blocos do arquivo.
161 <div class="row">Marca HTML presente na saída da página.
162 <div class="col-md-6">Marca HTML presente na saída da página.
163 <div class="form-group">Marca HTML presente na saída da página.
164 <label>Cliente</label>Marca HTML presente na saída da página.
165 <select class="form-control sel2" name="cliente" id="cliente" style="width:100%" required>Marca HTML presente na saída da página.
166 <option value="">Selecione um Cliente</option>Marca HTML presente na saída da página.
167 <?php Abre um bloco PHP executado no servidor.
168 $query = $pdo->query("SELECT * FROM clientes order by nome asc");Executa uma consulta pelo objeto PDO.
169 $res = $query->fetchAll(PDO::FETCH_ASSOC);Lê dados retornados pela consulta.
170 $linhas = @count($res);Atribui o valor ou resultado exibido à variável.
171 if($linhas > 0){Avalia a condição escrita nesta linha.
172 for($i=0; $i<$linhas; $i++){Controla uma repetição conforme a expressão exibida.
173 ?>Fecha o bloco PHP.
174 <option value="<?php echo $res[$i]['id'] ?>"><?php echo $res[$i]['nome'] ?></option>Marca HTML presente na saída da página.
175 <?php } } ?>Abre um bloco PHP executado no servidor.
176 </select>Marca HTML presente na saída da página.
177 </div> Marca HTML presente na saída da página.
178 </div>Marca HTML presente na saída da página.
179 Linha em branco usada para separar blocos do arquivo.
180 <div class="col-md-6">Marca HTML presente na saída da página.
181 <div class="form-group">Marca HTML presente na saída da página.
182 <label>Prótese</label>Marca HTML presente na saída da página.
183 <select class="form-control sel2" name="id_protese" id="id_protese" style="width:100%" required>Marca HTML presente na saída da página.
184 <option value="">Selecione uma Prótese</option>Marca HTML presente na saída da página.
185 <?php Abre um bloco PHP executado no servidor.
186 $query = $pdo->query("SELECT p.*, c.nome as nome_cliente FROM proteses p INNER JOIN clientes c ON p.cliente = c.id order by p.id desc");Executa uma consulta pelo objeto PDO.
187 $res = $query->fetchAll(PDO::FETCH_ASSOC);Lê dados retornados pela consulta.
188 $linhas = @count($res);Atribui o valor ou resultado exibido à variável.
189 if($linhas > 0){Avalia a condição escrita nesta linha.
190 for($i=0; $i<$linhas; $i++){Controla uma repetição conforme a expressão exibida.
191 $descricao = $res[$i]['nome_cliente'].' - '.$res[$i]['modelo'];Atribui o valor ou resultado exibido à variável.
192 ?>Fecha o bloco PHP.
193 <option value="<?php echo $res[$i]['id'] ?>"><?php echo $descricao ?></option>Marca HTML presente na saída da página.
194 <?php } } ?>Abre um bloco PHP executado no servidor.
195 </select>Marca HTML presente na saída da página.
196 </div> Marca HTML presente na saída da página.
197 </div>Marca HTML presente na saída da página.
198 </div>Marca HTML presente na saída da página.
199 Linha em branco usada para separar blocos do arquivo.
200 <div class="row">Marca HTML presente na saída da página.
201 <div class="col-md-6">Marca HTML presente na saída da página.
202 <div class="form-group">Marca HTML presente na saída da página.
203 <label>Foto Original</label>Marca HTML presente na saída da página.
204 <input type="file" class="form-control" id="foto_original" name="foto_original">Marca HTML presente na saída da página.
205 <small id="nome_foto_original_atual" class="text-muted"></small>Marca HTML presente na saída da página.
206 <div id="area_preview_foto_original" style="margin-top: 8px; display:none;">Marca HTML presente na saída da página.
207 <img id="preview_foto_original" src="" style="max-width:100%; max-height:160px; border:1px solid #ddd; padding:3px; border-radius:4px;">Marca HTML presente na saída da página.
208 </div>Marca HTML presente na saída da página.
209 </div> Marca HTML presente na saída da página.
210 </div>Marca HTML presente na saída da página.
211 Linha em branco usada para separar blocos do arquivo.
212 <div class="col-md-6">Marca HTML presente na saída da página.
213 <div class="form-group">Marca HTML presente na saída da página.
214 <label>Imagem Simulada</label>Marca HTML presente na saída da página.
215 <input type="file" class="form-control" id="imagem_simulada" name="imagem_simulada">Marca HTML presente na saída da página.
216 <small id="nome_imagem_simulada_atual" class="text-muted"></small>Marca HTML presente na saída da página.
217 <div id="area_preview_imagem_simulada" style="margin-top: 8px; display:none;">Marca HTML presente na saída da página.
218 <img id="preview_imagem_simulada" src="" style="max-width:100%; max-height:160px; border:1px solid #ddd; padding:3px; border-radius:4px;">Marca HTML presente na saída da página.
219 </div>Marca HTML presente na saída da página.
220 </div> Marca HTML presente na saída da página.
221 </div>Marca HTML presente na saída da página.
222 </div>Marca HTML presente na saída da página.
223 Linha em branco usada para separar blocos do arquivo.
224 <div class="row">Marca HTML presente na saída da página.
225 <div class="col-md-6">Marca HTML presente na saída da página.
226 <div class="form-group">Marca HTML presente na saída da página.
227 <label>Data da Simulação</label>Marca HTML presente na saída da página.
228 <input type="date" class="form-control" id="data_simulacao" name="data_simulacao" value="<?php echo date('Y-m-d') ?>" required>Marca HTML presente na saída da página.
229 </div> Marca HTML presente na saída da página.
230 </div>Marca HTML presente na saída da página.
231 Linha em branco usada para separar blocos do arquivo.
232 <div class="col-md-6">Marca HTML presente na saída da página.
233 <div class="form-group">Marca HTML presente na saída da página.
234 <label>Observações</label>Marca HTML presente na saída da página.
235 <input type="text" class="form-control" id="observacoes" name="observacoes" placeholder="Observações">Marca HTML presente na saída da página.
236 </div> Marca HTML presente na saída da página.
237 </div>Marca HTML presente na saída da página.
238 </div>Marca HTML presente na saída da página.
239 Linha em branco usada para separar blocos do arquivo.
240 <input type="hidden" name="id" id="id">Marca HTML presente na saída da página.
241 <input type="hidden" name="foto_original_atual" id="foto_original_atual">Marca HTML presente na saída da página.
242 <input type="hidden" name="imagem_simulada_atual" id="imagem_simulada_atual">Marca HTML presente na saída da página.
243 Linha em branco usada para separar blocos do arquivo.
244 <hr>Marca HTML presente na saída da página.
245 Linha em branco usada para separar blocos do arquivo.
246 <div class="row">Marca HTML presente na saída da página.
247 <div class="col-md-6">Marca HTML presente na saída da página.
248 <button id="btnGerarIA" type="button" class="btn btn-warning btn-block" onclick="gerarIAmodal()">Marca HTML presente na saída da página.
249 <i id="iconGerarIA" class="fa fa-magic"></i> Gerar com IAMarca HTML presente na saída da página.
250 </button>Marca HTML presente na saída da página.
251 </div>Marca HTML presente na saída da página.
252 Linha em branco usada para separar blocos do arquivo.
253 <div class="col-md-6">Marca HTML presente na saída da página.
254 <button type="button" class="btn btn-info btn-block" onclick="abrirCanvas()">Marca HTML presente na saída da página.
255 <i class="fa fa-image"></i> Abrir CanvasMarca HTML presente na saída da página.
256 </button>Marca HTML presente na saída da página.
257 </div>Marca HTML presente na saída da página.
258 </div>Marca HTML presente na saída da página.
259 Linha em branco usada para separar blocos do arquivo.
260 <br>Marca HTML presente na saída da página.
261 <small><div id="mensagem_ia" align="center"></div></small>Marca HTML presente na saída da página.
262 <small><div id="mensagem" align="center"></div></small>Marca HTML presente na saída da página.
263 </div>Marca HTML presente na saída da página.
264 Linha em branco usada para separar blocos do arquivo.
265 <div class="modal-footer">Marca HTML presente na saída da página.
266 <button type="submit" class="btn btn-primary">Salvar</button>Marca HTML presente na saída da página.
267 </div>Marca HTML presente na saída da página.
268 </form>Marca HTML presente na saída da página.
269 Linha em branco usada para separar blocos do arquivo.
270 </div>Marca HTML presente na saída da página.
271 </div>Marca HTML presente na saída da página.
272</div>Marca HTML presente na saída da página.
273 Linha em branco usada para separar blocos do arquivo.
274<div class="modal fade" id="modalDados" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">Marca HTML presente na saída da página.
275 <div class="modal-dialog modal-lg" role="document">Marca HTML presente na saída da página.
276 <div class="modal-content">Marca HTML presente na saída da página.
277 <div class="modal-header">Marca HTML presente na saída da página.
278 <h4 class="modal-title" id="exampleModalLabel"><span id="nome_dados"></span></h4>Marca HTML presente na saída da página.
279 <button id="btn-fechar-perfil" type="button" class="close" data-dismiss="modal" aria-label="Close" style="margin-top: -20px">Marca HTML presente na saída da página.
280 <span aria-hidden="true" >&times;</span>Marca HTML presente na saída da página.
281 </button>Marca HTML presente na saída da página.
282 </div>Marca HTML presente na saída da página.
283 Linha em branco usada para separar blocos do arquivo.
284 <div class="modal-body">Marca HTML presente na saída da página.
285 Linha em branco usada para separar blocos do arquivo.
286 <input type="hidden" id="telefone_whatsapp_cliente">Marca HTML presente na saída da página.
287 Linha em branco usada para separar blocos do arquivo.
288 <div class="row" style="margin-bottom: 15px">Marca HTML presente na saída da página.
289 <div class="col-md-6" align="center">Marca HTML presente na saída da página.
290 <label>Foto Original</label><br>Marca HTML presente na saída da página.
291 <img id="foto_original_dados" src="" width="220px">Marca HTML presente na saída da página.
292 </div>Marca HTML presente na saída da página.
293 <div class="col-md-6" align="center">Marca HTML presente na saída da página.
294 <label>Imagem Simulada</label><br>Marca HTML presente na saída da página.
295 <img id="imagem_simulada_dados" src="" width="220px">Marca HTML presente na saída da página.
296 <div style="margin-top: 10px;">Marca HTML presente na saída da página.
297 <a href="javascript:void(0)" onclick="enviarImagemWhatsapp(this)" class="btn btn-success btn-sm">Marca HTML presente na saída da página.
298 <i class="fa fa-whatsapp"></i> Enviar no WhatsAppMarca HTML presente na saída da página.
299 </a>Marca HTML presente na saída da página.
300 </div>Marca HTML presente na saída da página.
301 </div>Marca HTML presente na saída da página.
302 </div>Marca HTML presente na saída da página.
303 Linha em branco usada para separar blocos do arquivo.
304 <div class="row" style="border-bottom: 1px solid #cac7c7;">Marca HTML presente na saída da página.
305 <div class="col-md-4"> Marca HTML presente na saída da página.
306 <span><b>Cliente: </b></span>Marca HTML presente na saída da página.
307 <span id="cliente_dados"></span>Marca HTML presente na saída da página.
308 </div> Marca HTML presente na saída da página.
309 Linha em branco usada para separar blocos do arquivo.
310 <div class="col-md-4"> Marca HTML presente na saída da página.
311 <span><b>Prótese: </b></span>Marca HTML presente na saída da página.
312 <span id="protese_dados"></span> Marca HTML presente na saída da página.
313 </div>Marca HTML presente na saída da página.
314 Linha em branco usada para separar blocos do arquivo.
315 <div class="col-md-4"> Marca HTML presente na saída da página.
316 <span><b>Data: </b></span>Marca HTML presente na saída da página.
317 <span id="data_simulacao_dados"></span> Marca HTML presente na saída da página.
318 </div>Marca HTML presente na saída da página.
319 </div>Marca HTML presente na saída da página.
320 Linha em branco usada para separar blocos do arquivo.
321 <div class="row" style="border-bottom: 1px solid #cac7c7;">Marca HTML presente na saída da página.
322 <div class="col-md-12"> Marca HTML presente na saída da página.
323 <span><b>Observações: </b></span>Marca HTML presente na saída da página.
324 <span id="observacoes_dados"></span>Marca HTML presente na saída da página.
325 </div> Marca HTML presente na saída da página.
326 </div>Marca HTML presente na saída da página.
327 Linha em branco usada para separar blocos do arquivo.
328 </div>Marca HTML presente na saída da página.
329 </div>Marca HTML presente na saída da página.
330 </div>Marca HTML presente na saída da página.
331</div>Marca HTML presente na saída da página.
332 Linha em branco usada para separar blocos do arquivo.
333<script type="text/javascript">Marca HTML presente na saída da página.
334 var pag = "<?=$pag?>";Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
335 var urlBaseSimulacoesWhatsapp = "<?=rtrim($url_sistema, '/')?>/sistema/painel/images/simulacoes/";Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
336</script>Marca HTML presente na saída da página.
337<script src="js/ajax.js"></script>Marca HTML presente na saída da página.
338 Linha em branco usada para separar blocos do arquivo.
339<script type="text/javascript">Marca HTML presente na saída da página.
340 $(document).ready( function () {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
341 listarSimulacoes();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
342 Linha em branco usada para separar blocos do arquivo.
343 $('.sel2').select2({Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
344 dropdownParent: $('#modalForm')Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
345 });Fecha ou delimita a estrutura iniciada anteriormente.
346 } );Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
347</script>Marca HTML presente na saída da página.
348 Linha em branco usada para separar blocos do arquivo.
349<script type="text/javascript">Marca HTML presente na saída da página.
350function listarSimulacoes(pagina){Declara a função e os parâmetros mostrados.
351 Linha em branco usada para separar blocos do arquivo.
352 $("#pagina").val(pagina);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
353 Linha em branco usada para separar blocos do arquivo.
354 var busca = $("#buscar").val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
355 $.ajax({Inicia ou configura uma requisição assíncrona no navegador.
356 url: 'paginas/' + pag + "/listar.php",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
357 method: 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
358 data: {busca, pagina},Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
359 dataType: "html",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
360 Linha em branco usada para separar blocos do arquivo.
361 success:function(result){Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
362 $("#listar").html(result);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
363 }Fecha ou delimita a estrutura iniciada anteriormente.
364 });Fecha ou delimita a estrutura iniciada anteriormente.
365}Fecha ou delimita a estrutura iniciada anteriormente.
366</script>Marca HTML presente na saída da página.
367 Linha em branco usada para separar blocos do arquivo.
368<script type="text/javascript">Marca HTML presente na saída da página.
369function mostrarNomeArquivosAtuais(){Declara a função e os parâmetros mostrados.
370 var foto_original_atual = $('#foto_original_atual').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
371 var imagem_simulada_atual = $('#imagem_simulada_atual').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
372 Linha em branco usada para separar blocos do arquivo.
373 if(foto_original_atual != ""){Avalia a condição escrita nesta linha.
374 $('#nome_foto_original_atual').text('Arquivo atual: ' + foto_original_atual);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
375 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
376 $('#nome_foto_original_atual').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
377 }Fecha ou delimita a estrutura iniciada anteriormente.
378 Linha em branco usada para separar blocos do arquivo.
379 if(imagem_simulada_atual != ""){Avalia a condição escrita nesta linha.
380 $('#nome_imagem_simulada_atual').text('Arquivo atual: ' + imagem_simulada_atual);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
381 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
382 $('#nome_imagem_simulada_atual').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
383 }Fecha ou delimita a estrutura iniciada anteriormente.
384}Fecha ou delimita a estrutura iniciada anteriormente.
385</script>Marca HTML presente na saída da página.
386 Linha em branco usada para separar blocos do arquivo.
387<script type="text/javascript">Marca HTML presente na saída da página.
388function mostrarPreviewAtual(){Declara a função e os parâmetros mostrados.
389 var foto_original_atual = $('#foto_original_atual').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
390 var imagem_simulada_atual = $('#imagem_simulada_atual').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
391 Linha em branco usada para separar blocos do arquivo.
392 if(foto_original_atual != ""){Avalia a condição escrita nesta linha.
393 $('#preview_foto_original').attr('src', 'images/simulacoes/' + foto_original_atual + '?v=' + new Date().getTime());Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
394 $('#area_preview_foto_original').show();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
395 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
396 $('#preview_foto_original').attr('src', '');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
397 $('#area_preview_foto_original').hide();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
398 }Fecha ou delimita a estrutura iniciada anteriormente.
399 Linha em branco usada para separar blocos do arquivo.
400 if(imagem_simulada_atual != ""){Avalia a condição escrita nesta linha.
401 $('#preview_imagem_simulada').attr('src', 'images/simulacoes/' + imagem_simulada_atual + '?v=' + new Date().getTime());Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
402 $('#area_preview_imagem_simulada').show();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
403 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
404 $('#preview_imagem_simulada').attr('src', '');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
405 $('#area_preview_imagem_simulada').hide();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
406 }Fecha ou delimita a estrutura iniciada anteriormente.
407}Fecha ou delimita a estrutura iniciada anteriormente.
408</script>Marca HTML presente na saída da página.
409 Linha em branco usada para separar blocos do arquivo.
410<script type="text/javascript">Marca HTML presente na saída da página.
411function mostrarPreviewArquivo(input, idImagem, idArea){Declara a função e os parâmetros mostrados.
412 if(input.files && input.files[0]){Avalia a condição escrita nesta linha.
413 var reader = new FileReader();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
414 Linha em branco usada para separar blocos do arquivo.
415 reader.onload = function(e){Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
416 $(idImagem).attr('src', e.target.result);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
417 $(idArea).show();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
418 }Fecha ou delimita a estrutura iniciada anteriormente.
419 Linha em branco usada para separar blocos do arquivo.
420 reader.readAsDataURL(input.files[0]);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
421 }Fecha ou delimita a estrutura iniciada anteriormente.
422}Fecha ou delimita a estrutura iniciada anteriormente.
423</script>Marca HTML presente na saída da página.
424 Linha em branco usada para separar blocos do arquivo.
425<script type="text/javascript">Marca HTML presente na saída da página.
426$('#foto_original').change(function(){Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
427 var arquivo = $(this).val().split('\\').pop();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
428 Linha em branco usada para separar blocos do arquivo.
429 if(arquivo != ""){Avalia a condição escrita nesta linha.
430 $('#nome_foto_original_atual').text('Novo arquivo: ' + arquivo);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
431 mostrarPreviewArquivo(this, '#preview_foto_original', '#area_preview_foto_original');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
432 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
433 mostrarNomeArquivosAtuais();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
434 mostrarPreviewAtual();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
435 }Fecha ou delimita a estrutura iniciada anteriormente.
436});Fecha ou delimita a estrutura iniciada anteriormente.
437</script>Marca HTML presente na saída da página.
438 Linha em branco usada para separar blocos do arquivo.
439<script type="text/javascript">Marca HTML presente na saída da página.
440$('#imagem_simulada').change(function(){Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
441 var arquivo = $(this).val().split('\\').pop();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
442 Linha em branco usada para separar blocos do arquivo.
443 if(arquivo != ""){Avalia a condição escrita nesta linha.
444 $('#nome_imagem_simulada_atual').text('Novo arquivo: ' + arquivo);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
445 mostrarPreviewArquivo(this, '#preview_imagem_simulada', '#area_preview_imagem_simulada');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
446 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
447 mostrarNomeArquivosAtuais();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
448 mostrarPreviewAtual();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
449 }Fecha ou delimita a estrutura iniciada anteriormente.
450});Fecha ou delimita a estrutura iniciada anteriormente.
451</script>Marca HTML presente na saída da página.
452 Linha em branco usada para separar blocos do arquivo.
453<script type="text/javascript">Marca HTML presente na saída da página.
454$('#modalForm').on('shown.bs.modal', function () {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
455 mostrarNomeArquivosAtuais();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
456 mostrarPreviewAtual();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
457});Fecha ou delimita a estrutura iniciada anteriormente.
458</script>Marca HTML presente na saída da página.
459 Linha em branco usada para separar blocos do arquivo.
460<script type="text/javascript">Marca HTML presente na saída da página.
461$('#modalForm').on('hidden.bs.modal', function () {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
462 $('#nome_foto_original_atual').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
463 $('#nome_imagem_simulada_atual').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
464 $('#preview_foto_original').attr('src', '');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
465 $('#preview_imagem_simulada').attr('src', '');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
466 $('#area_preview_foto_original').hide();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
467 $('#area_preview_imagem_simulada').hide();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
468 $('#foto_original').val('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
469 $('#imagem_simulada').val('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
470 $('#mensagem').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
471 $('#mensagem_ia').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
472 $('#mensagem').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
473 $('#mensagem_ia').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
474 $('#btnGerarIA').data('processando', false);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
475 $('#btnGerarIA').prop('disabled', false);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
476 $('#iconGerarIA').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
477 $('#iconGerarIA').addClass('fa fa-magic');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
478});Fecha ou delimita a estrutura iniciada anteriormente.
479</script>Marca HTML presente na saída da página.
480 Linha em branco usada para separar blocos do arquivo.
481<script type="text/javascript">Marca HTML presente na saída da página.
482$("#form_simulacao").submit(function () {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
483 Linha em branco usada para separar blocos do arquivo.
484 event.preventDefault();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
485 var formData = new FormData(this);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
486 Linha em branco usada para separar blocos do arquivo.
487 $.ajax({Inicia ou configura uma requisição assíncrona no navegador.
488 url: 'paginas/' + pag + "/salvar.php",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
489 type: 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
490 data: formData,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
491 Linha em branco usada para separar blocos do arquivo.
492 success: function (mensagem) {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
493 $('#mensagem').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
494 $('#mensagem').removeClass()Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
495 if (mensagem.trim() == "Salvo com Sucesso") {Avalia a condição escrita nesta linha.
496 Linha em branco usada para separar blocos do arquivo.
497 $('#btn-fechar').click();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
498 Linha em branco usada para separar blocos do arquivo.
499 var pagina = $("#pagina").val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
500 listarSimulacoes(pagina);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
501 Linha em branco usada para separar blocos do arquivo.
502 } else {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
503 $('#mensagem').addClass('text-danger')Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
504 $('#mensagem').text(mensagem)Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
505 }Fecha ou delimita a estrutura iniciada anteriormente.
506 Linha em branco usada para separar blocos do arquivo.
507 },Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
508 Linha em branco usada para separar blocos do arquivo.
509 cache: false,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
510 contentType: false,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
511 processData: false,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
512 Linha em branco usada para separar blocos do arquivo.
513 });Fecha ou delimita a estrutura iniciada anteriormente.
514 Linha em branco usada para separar blocos do arquivo.
515});Fecha ou delimita a estrutura iniciada anteriormente.
516</script>Marca HTML presente na saída da página.
517 Linha em branco usada para separar blocos do arquivo.
518<script type="text/javascript">Marca HTML presente na saída da página.
519function excluir(id){Declara a função e os parâmetros mostrados.
520 $.ajax({Inicia ou configura uma requisição assíncrona no navegador.
521 url: 'paginas/' + pag + "/excluir.php",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
522 method: 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
523 data: {id},Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
524 dataType: "text",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
525 Linha em branco usada para separar blocos do arquivo.
526 success: function (mensagem) { Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
527 if (mensagem.trim() == "Excluído com Sucesso") { Avalia a condição escrita nesta linha.
528 var pagina = $("#pagina").val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
529 listarSimulacoes(pagina);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
530 } else {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
531 $('#mensagem-excluir').addClass('text-danger')Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
532 $('#mensagem-excluir').text(mensagem)Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
533 }Fecha ou delimita a estrutura iniciada anteriormente.
534 Linha em branco usada para separar blocos do arquivo.
535 }, Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
536 Linha em branco usada para separar blocos do arquivo.
537 });Fecha ou delimita a estrutura iniciada anteriormente.
538}Fecha ou delimita a estrutura iniciada anteriormente.
539</script>Marca HTML presente na saída da página.
540 Linha em branco usada para separar blocos do arquivo.
541<script type="text/javascript">Marca HTML presente na saída da página.
542function gerarIAmodal(){Declara a função e os parâmetros mostrados.
543 Linha em branco usada para separar blocos do arquivo.
544 var id = $('#id').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
545 var botao = $('#btnGerarIA');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
546 var icone = $('#iconGerarIA');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
547 Linha em branco usada para separar blocos do arquivo.
548 $('#mensagem_ia').text('');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
549 $('#mensagem_ia').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
550 Linha em branco usada para separar blocos do arquivo.
551 if(id == ""){Avalia a condição escrita nesta linha.
552 $('#mensagem_ia').addClass('text-danger');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
553 $('#mensagem_ia').text('Primeiro salve o registro para gerar a simulação com IA');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
554 return;Retorna o valor indicado pela linha.
555 }Fecha ou delimita a estrutura iniciada anteriormente.
556 Linha em branco usada para separar blocos do arquivo.
557 if(botao.data('processando') == true){Avalia a condição escrita nesta linha.
558 return;Retorna o valor indicado pela linha.
559 }Fecha ou delimita a estrutura iniciada anteriormente.
560 Linha em branco usada para separar blocos do arquivo.
561 botao.data('processando', true);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
562 botao.prop('disabled', true);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
563 Linha em branco usada para separar blocos do arquivo.
564 icone.removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
565 icone.addClass('fa fa-spinner fa-spin');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
566 Linha em branco usada para separar blocos do arquivo.
567 $('#mensagem_ia').addClass('text-info');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
568 $('#mensagem_ia').text('Gerando simulação com IA...');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
569 Linha em branco usada para separar blocos do arquivo.
570 $.ajax({Inicia ou configura uma requisição assíncrona no navegador.
571 url: 'paginas/simulador/gerar_ia.php',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
572 method: 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
573 data: {id},Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
574 dataType: "text",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
575 Linha em branco usada para separar blocos do arquivo.
576 success: function (mensagem) {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
577 Linha em branco usada para separar blocos do arquivo.
578 botao.data('processando', false);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
579 botao.prop('disabled', false);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
580 Linha em branco usada para separar blocos do arquivo.
581 icone.removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
582 icone.addClass('fa fa-magic');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
583 Linha em branco usada para separar blocos do arquivo.
584 $('#mensagem_ia').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
585 Linha em branco usada para separar blocos do arquivo.
586 if (mensagem.trim() == "Salvo com Sucesso") {Avalia a condição escrita nesta linha.
587 Linha em branco usada para separar blocos do arquivo.
588 $('#mensagem_ia').addClass('text-success');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
589 $('#mensagem_ia').text('Simulação gerada com sucesso');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
590 Linha em branco usada para separar blocos do arquivo.
591 var pagina = $("#pagina").val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
592 listarSimulacoes(pagina);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
593 Linha em branco usada para separar blocos do arquivo.
594 $.ajax({Inicia ou configura uma requisição assíncrona no navegador.
595 url: 'paginas/simulador/buscar.php',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
596 method: 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
597 data: {id},Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
598 dataType: "json",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
599 Linha em branco usada para separar blocos do arquivo.
600 success: function (dados) {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
601 Linha em branco usada para separar blocos do arquivo.
602 if(dados.foto_original != undefined){Avalia a condição escrita nesta linha.
603 $('#foto_original_atual').val(dados.foto_original);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
604 }Fecha ou delimita a estrutura iniciada anteriormente.
605 Linha em branco usada para separar blocos do arquivo.
606 if(dados.imagem_simulada != undefined){Avalia a condição escrita nesta linha.
607 $('#imagem_simulada_atual').val(dados.imagem_simulada);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
608 }Fecha ou delimita a estrutura iniciada anteriormente.
609 Linha em branco usada para separar blocos do arquivo.
610 if(typeof mostrarNomeArquivosAtuais === 'function'){Avalia a condição escrita nesta linha.
611 mostrarNomeArquivosAtuais();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
612 }Fecha ou delimita a estrutura iniciada anteriormente.
613 Linha em branco usada para separar blocos do arquivo.
614 if(typeof mostrarPreviewAtual === 'function'){Avalia a condição escrita nesta linha.
615 mostrarPreviewAtual();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
616 }Fecha ou delimita a estrutura iniciada anteriormente.
617 }Fecha ou delimita a estrutura iniciada anteriormente.
618 });Fecha ou delimita a estrutura iniciada anteriormente.
619 Linha em branco usada para separar blocos do arquivo.
620 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
621 Linha em branco usada para separar blocos do arquivo.
622 $('#mensagem_ia').addClass('text-danger');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
623 $('#mensagem_ia').text(mensagem);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
624 Linha em branco usada para separar blocos do arquivo.
625 }Fecha ou delimita a estrutura iniciada anteriormente.
626 },Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
627 Linha em branco usada para separar blocos do arquivo.
628 error: function () {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
629 Linha em branco usada para separar blocos do arquivo.
630 botao.data('processando', false);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
631 botao.prop('disabled', false);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
632 Linha em branco usada para separar blocos do arquivo.
633 icone.removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
634 icone.addClass('fa fa-magic');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
635 Linha em branco usada para separar blocos do arquivo.
636 $('#mensagem_ia').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
637 $('#mensagem_ia').addClass('text-danger');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
638 $('#mensagem_ia').text('Erro ao processar a simulação com IA');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
639 Linha em branco usada para separar blocos do arquivo.
640 }Fecha ou delimita a estrutura iniciada anteriormente.
641 });Fecha ou delimita a estrutura iniciada anteriormente.
642}Fecha ou delimita a estrutura iniciada anteriormente.
643</script>Marca HTML presente na saída da página.
644 Linha em branco usada para separar blocos do arquivo.
645<script type="text/javascript">Marca HTML presente na saída da página.
646function abrirCanvas(){Declara a função e os parâmetros mostrados.
647 var id = $('#id').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
648 Linha em branco usada para separar blocos do arquivo.
649 if(id == ""){Avalia a condição escrita nesta linha.
650 $('#mensagem_ia').removeClass();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
651 $('#mensagem_ia').addClass('text-danger');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
652 $('#mensagem_ia').text('Primeiro salve o registro para abrir o canvas');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
653 return;Retorna o valor indicado pela linha.
654 }Fecha ou delimita a estrutura iniciada anteriormente.
655 Linha em branco usada para separar blocos do arquivo.
656 window.open('paginas/simulador/canvas.php?id=' + id, '_blank');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
657}Fecha ou delimita a estrutura iniciada anteriormente.
658</script>Marca HTML presente na saída da página.
659 Linha em branco usada para separar blocos do arquivo.
660<script type="text/javascript">Marca HTML presente na saída da página.
661function enviarImagemWhatsapp(botao){Declara a função e os parâmetros mostrados.
662 var telefone = $('#telefone_whatsapp_cliente').val();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
663 var imagem = $('#imagem_simulada_dados').attr('src');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
664 var cliente = $('#cliente_dados').text();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
665 var btn = $(botao);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
666 var htmlBotao = btn.html();Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
667 Linha em branco usada para separar blocos do arquivo.
668 if(telefone == ""){Avalia a condição escrita nesta linha.
669 alert('Cliente não possui telefone cadastrado.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
670 return;Retorna o valor indicado pela linha.
671 }Fecha ou delimita a estrutura iniciada anteriormente.
672 Linha em branco usada para separar blocos do arquivo.
673 if(imagem == ""){Avalia a condição escrita nesta linha.
674 alert('Nenhuma imagem simulada disponível.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
675 return;Retorna o valor indicado pela linha.
676 }Fecha ou delimita a estrutura iniciada anteriormente.
677 Linha em branco usada para separar blocos do arquivo.
678 telefone = telefone.replace(/\D/g, '');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
679 Linha em branco usada para separar blocos do arquivo.
680 if(telefone == ""){Avalia a condição escrita nesta linha.
681 alert('Telefone do cliente inválido.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
682 return;Retorna o valor indicado pela linha.
683 }Fecha ou delimita a estrutura iniciada anteriormente.
684 Linha em branco usada para separar blocos do arquivo.
685 var nome_imagem = imagem.split('/').pop().split('?')[0];Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
686 Linha em branco usada para separar blocos do arquivo.
687 if(nome_imagem == ""){Avalia a condição escrita nesta linha.
688 alert('Nenhuma imagem simulada disponível.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
689 return;Retorna o valor indicado pela linha.
690 }Fecha ou delimita a estrutura iniciada anteriormente.
691 Linha em branco usada para separar blocos do arquivo.
692 btn.html('<i class="fa fa-spinner fa-spin"></i> Enviando...');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
693 btn.css('pointer-events', 'none');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
694 Linha em branco usada para separar blocos do arquivo.
695 $.ajax({Inicia ou configura uma requisição assíncrona no navegador.
696 url: 'paginas/' + pag + '.php',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
697 method: 'POST',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
698 data: {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
699 acao: 'enviar_whatsapp_imagem',Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
700 telefone: telefone,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
701 imagem: nome_imagem,Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
702 cliente: clienteLinha do arquivo original; deve ser lida junto com o bloco em que está inserida.
703 },Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
704 dataType: "text",Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
705 Linha em branco usada para separar blocos do arquivo.
706 success: function (mensagem) {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
707 btn.html(htmlBotao);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
708 btn.css('pointer-events', 'auto');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
709 Linha em branco usada para separar blocos do arquivo.
710 if (mensagem.trim() == "Imagem enviada com sucesso") {Avalia a condição escrita nesta linha.
711 alert('Imagem enviada com sucesso para o cliente.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
712 } else {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
713 var url_imagem = urlBaseSimulacoesWhatsapp + encodeURIComponent(nome_imagem);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
714 var texto = 'Olá ' + cliente + ', segue sua simulação de prótese capilar: ' + url_imagem;Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
715 var url = '';Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
716 Linha em branco usada para separar blocos do arquivo.
717 if(/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)){Avalia a condição escrita nesta linha.
718 url = 'https://api.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
719 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
720 url = 'https://web.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
721 }Fecha ou delimita a estrutura iniciada anteriormente.
722 Linha em branco usada para separar blocos do arquivo.
723 alert(mensagem + '\n\nAbrindo WhatsApp com o link da imagem como alternativa.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
724 window.open(url, '_blank');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
725 }Fecha ou delimita a estrutura iniciada anteriormente.
726 },Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
727 Linha em branco usada para separar blocos do arquivo.
728 error: function () {Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
729 btn.html(htmlBotao);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
730 btn.css('pointer-events', 'auto');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
731 Linha em branco usada para separar blocos do arquivo.
732 var url_imagem = urlBaseSimulacoesWhatsapp + encodeURIComponent(nome_imagem);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
733 var texto = 'Olá ' + cliente + ', segue sua simulação de prótese capilar: ' + url_imagem;Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
734 var url = '';Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
735 Linha em branco usada para separar blocos do arquivo.
736 if(/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)){Avalia a condição escrita nesta linha.
737 url = 'https://api.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
738 }else{Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
739 url = 'https://web.whatsapp.com/send?phone=' + telefone + '&text=' + encodeURIComponent(texto);Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
740 }Fecha ou delimita a estrutura iniciada anteriormente.
741 Linha em branco usada para separar blocos do arquivo.
742 alert('Erro ao enviar a imagem pela API. Abrindo WhatsApp com o link da imagem como alternativa.');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
743 window.open(url, '_blank');Linha do arquivo original; deve ser lida junto com o bloco em que está inserida.
744 }Fecha ou delimita a estrutura iniciada anteriormente.
745 });Fecha ou delimita a estrutura iniciada anteriormente.
746}Fecha ou delimita a estrutura iniciada anteriormente.
747</script>Marca HTML presente na saída da página.

Navegação entre arquivos do grupo