<repo_name>marcos4503/windsoft-site<file_sep>/browser/microsite/painel/paginas/listar-arquivos-expansao.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados de todos os jogos cadastrados
$consultaDeJogos = mysqli_query($DB_Metadados, "SELECT JogoID, Nome, UltimaVersao, PacoteOuNamespace, Plataforma FROM JogosDaWindsoft WHERE JogoID > 0");
$i = 0;
while($linha = mysqli_fetch_assoc($consultaDeJogos)) {
    $jogoId[$i] = $linha["JogoID"];
    $nome[$i] = $linha["Nome"];
    $ultimaVersao[$i] = $linha["UltimaVersao"];
    $pacote[$i] = $linha["PacoteOuNamespace"];
    $plataforma[$i] = $linha["Plataforma"];
    
    $i += 1;
}
?>

<center>
    <h3>Listar Arquivos de Expansão</h3>
</center>

<center>
    <form autocomplete="off" style="margin-bottom: 0px;">
        <select id="selectSlide" onchange="aoTrocarJogo();">
            <?php
                for ($ii = 0; $ii < $i; $ii++) {
                    echo('<option value="'.$jogoId[$ii].'">'.$nome[$ii].' (v'.$ultimaVersao[$ii].') ('.$plataforma[$ii].')</option>');
                }
            ?>
        </select>
    </form>
    <input type="button" value="Listar" onclick="buscarArquivos();" />
</center>

<style>
.arquivo{
  display: grid;
  grid-template-columns: 10% 70% 20%;
  background-color: #D6D6D6;
  transition: all 200ms;
  border-radius: 4px;
  padding: 10px;
  margin-bottom: 4px;
}
.arquivo:hover{
  background-color: #BCBCBC;
}
.iconeArquivo{
  display: flex;
  align-items: center;
}
</style>

<div id="resultado" style="display: none; background-color: #F2F2F2; border-radius: 4px; margin-top: 10px; margin-bottom: 10px; padding: 10px;">
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    //Função que obtem os dados, ao trocar de jogo selecionado
    plataformaDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$plataforma[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    pacoteDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$pacote[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    jogoSelect = document.getElementById("selectSlide");
    jogoSelecionadoId = 1;
    function aoTrocarJogo(){
        jogoSelecionadoId = jogoSelect.value;
    }
    
    //Função que estabelece conexão para pesquisar os arquivos
    function buscarArquivos(){
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/buscar-arquivos-expansao.php");
            conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                    
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                document.getElementById("resultado").style.display = "block";
                document.getElementById("resultado").innerHTML = parent.textoDaConexao(conexao);
                parent.redimensionarIframe();
            });
        };
        parent.iniciarConexaoPost(conexao, "plataforma=" + plataformaDosJogos[parseInt(jogoSelecionadoId)] +
                                            "&pacote=" + pacoteDosJogos[parseInt(jogoSelecionadoId)]);
    }
    
    aoTrocarJogo();
</script>

<?php
$conteudoQuadroDeAviso = ('
• Selecione o jogo ao qual você deseja visualizar os arquivos de expansão, associados a ele.
<br/>
• Os arquivos de expansão listados aqui, serão baixados pelo Windsoft Launcher automaticamente. O Launcher irá localizar a versão do arquivo de expansão automaticamente.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/paginas/registrar-novo-asset.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<center>
    <h3>Cadastrar Novo Asset</h3>
</center>

<div id="formulario">
    <center>
        <form autocomplete="off">
            <input id="titulo" type="text" placeholder="Nome do Asset" onkeyup="validarNome();" />
            <div id="tituloStatus" class="statusCampo"></div>
            
            <input id="preco" type="text" placeholder="Preço" onkeyup="validarPreco();" />
            <div id="precoStatus" class="statusCampo"></div>
            
            <textarea id="descricao" placeholder="Descrição" onkeyup="validarDescricao();"></textarea>
            <div id="descricaoStatus" class="statusCampo"></div>
            
            <input id="urlVideo" type="text" placeholder="URL do Vídeo Embed" onkeyup="validarUrlVideo();" />
            <div id="urlVideoStatus" class="statusCampo"></div>
            
            <input id="urlAs" type="text" placeholder="URL na Asset Store" onkeyup="validarUrlAs();" />
            <div id="urlAsStatus" class="statusCampo"></div>
            
            <input type="button" value="Cadastrar" onclick="salvarEdicao();" />
        </form>
    </center>
</div>

<div id="assetCadastrado" style="display: none;">
    <center>
        <img src="../imagens/sucesso.png" width="128px" />
        <br>
        <br>
        O novo asset foi cadastrado com sucesso no Banco de Dados!
        <br>
        <br>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    campoNome = document.getElementById("titulo");
    statusNome = document.getElementById("tituloStatus");
    nomeValido = false;
    function validarNome(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoNome.value.length, 30);
        
        //Desvalida
        campoNome.style.borderColor = "#990000";
        campoNome.style.borderWidth = "1px";
        statusNome.style.color = "#990000";
        nomeValido = false;
        
        if(campoNome.value == ""){
            statusNome.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoNome.value.length > 30){
            statusNome.innerHTML = "Nome muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoNome.value) == true){
            statusNome.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoNome.style.borderColor = "";
        campoNome.style.borderWidth = "";
        statusNome.innerHTML = "";
        nomeValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoPreco = document.getElementById("preco");
    statusPreco = document.getElementById("precoStatus");
    precoValido = false;
    function validarPreco(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoPreco.value.length, 5);
        
        //Desvalida
        campoPreco.style.borderColor = "#990000";
        campoPreco.style.borderWidth = "1px";
        statusPreco.style.color = "#990000";
        precoValido = false;
        
        if(campoPreco.value == ""){
            statusPreco.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoPreco.value.length > 5){
            statusPreco.innerHTML = "Preço muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComNumeroFloat(campoPreco.value) == false || campoPreco.value.indexOf(',') > -1){
            statusPreco.innerHTML = "Utilize apenas números e pontos.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoPreco.style.borderColor = "";
        campoPreco.style.borderWidth = "";
        statusPreco.innerHTML = "";
        precoValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoDescricao = document.getElementById("descricao");
    statusDescricao = document.getElementById("descricaoStatus");
    descricaoValido = false;
    function validarDescricao(){        
        //Desvalida
        campoDescricao.style.borderColor = "#990000";
        campoDescricao.style.borderWidth = "1px";
        statusDescricao.style.color = "#990000";
        descricaoValido = false;
        
        if(campoDescricao.value == ""){
            statusDescricao.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoDescricao.value) == true){
            statusDescricao.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoDescricao.style.borderColor = "";
        campoDescricao.style.borderWidth = "";
        statusDescricao.innerHTML = "";
        descricaoValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlVideo = document.getElementById("urlVideo");
    statusUrlVideo = document.getElementById("urlVideoStatus");
    urlVideoValido = false;
    function validarUrlVideo(){
        //Desvalida
        campoUrlVideo.style.borderColor = "#990000";
        campoUrlVideo.style.borderWidth = "1px";
        statusUrlVideo.style.color = "#990000";
        urlVideoValido = false;
        
        if(campoUrlVideo.value == ""){
            statusUrlVideo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlVideo.value) == false){
            statusUrlVideo.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlVideo.style.borderColor = "";
        campoUrlVideo.style.borderWidth = "";
        statusUrlVideo.innerHTML = "";
        urlVideoValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlAs = document.getElementById("urlAs");
    statusUrlAs = document.getElementById("urlAsStatus");
    urlAsValido = false;
    function validarUrlAs(){
        //Desvalida
        campoUrlAs.style.borderColor = "#990000";
        campoUrlAs.style.borderWidth = "1px";
        statusUrlAs.style.color = "#990000";
        urlAsValido = false;
        
        if(campoUrlAs.value == ""){
            statusUrlAs.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlAs.value) == false){
            statusUrlAs.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlAs.style.borderColor = "";
        campoUrlAs.style.borderWidth = "";
        statusUrlAs.innerHTML = "";
        urlAsValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarNome();
        validarPreco();
        validarDescricao();
        validarUrlVideo();
        validarUrlAs();
        
        if(nomeValido == true && precoValido == true && descricaoValido == true && urlVideoValido == true && urlAsValido == true){
            return true;
        }
        if(nomeValido == false || precoValido == false || descricaoValido == false || urlVideoValido == false || urlAsValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que cadastra o asset
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/cadastrar-novo-asset.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "nome=" + document.getElementById("titulo").value +
                                      "&preco=" + document.getElementById("preco").value +
                                      "&descricao=" + document.getElementById("descricao").value +
                                      "&urlVideo=" + document.getElementById("urlVideo").value +
                                      "&urlAssetStore=" + document.getElementById("urlAs").value);
        }
    }
    
    //Função que exibe a mensagem de sucesso após cadastrar asset
    function exibirMensagemAssetCadastrado(){
        document.getElementById("assetCadastrado").style.display = "block";
        document.getElementById("formulario").style.display = "none";
        document.getElementById("quadroDeAvisos").style.display = "none";
        parent.redimensionarIframe();
    }
    
    //Redimensiona as textarea de acordo com seus conteúdos, automaticamente
    var textAreas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textAreas.length; i++){
        textAreas[i].style.height = (textAreas[i].scrollHeight) + "px";
        textAreas[i].style.overflow = "hidden";
        textAreas[i].style.resize = "none";
        textAreas[i].style.minHeight = "80px";
        textAreas[i].addEventListener("input", AoDigitarNasTextArea, false);
    }
    function AoDigitarNasTextArea(){
        this.style.height = "auto";
        this.style.height = (this.scrollHeight) + "px";
        this.style.minHeight = "80px";
        parent.redimensionarIframe();
    }
</script>

<?php
$conteudoQuadroDeAviso = ('
• SOMENTE cadastre o Asset aqui, caso a Unity já tenha aceitado e publicado a sua primeira versão.
<br/>
• O Asset cadastrado aqui, também será exibido na Home Page do microsite da MT Assets.
<br/>
• Ao cadastrar um Asset aqui, será possível reportar suas vendas e etc.
<br/>
• Deixe o preço em zero, caso o Asset seja gratuíto.
<br/>
• Após cadastrar um Asset aqui, não se esqueça de carregar a Imagem de arte do mesmo. A arte também será exibida na Home Page da MT Assets.
<br/>
• Por favor, insira os dados (como Descrição) apenas em Inglês.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/ajax-query/editar-autoridade-staff.php
<?php
/*
 * script que edita a autoridade do staff
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);
$autoridade = mysqli_real_escape_string($DB_Registros, $_POST["autoridade"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Caso não tenha permissão total, cancela o script
    if($_SESSION["autoridade"] < 4){
echo("".
'parent.mostrarNotificacao("Você não tem permissão para fazer isso.", "#7F0000", 3000);'
."");
        exit();
    }
    
    //edita o cargo do staff
    $consultaEdicao = mysqli_query($DB_Metadados, "UPDATE Staff SET Autoridade=$autoridade WHERE Nick='$nick'");
    
echo("".
'parent.mostrarNotificacao("A autoridade do usuário, foi editado com sucesso! O usuário deve se relogar para usufruir da nova autoridade.", "#1E7200", 3000);'
."autoridade = ".$autoridade.";"
."exibirPainelDeEdicao();"
."");
}

?><file_sep>/browser/politica-de-privacidade.php
<?php
/*
 * Essa página HTML contém as informações de Política de Privacidade da Windsoft Games. Sempre que ela for atualizada, deve-ser 
 * atualizada a data de atualização.
 */

$tituloPagina = "Política de Privacidade - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
?>

    <br/>
    <center><b>Política de privacidade da Windsoft Games</b>
    <br/>
    <br/>
    <font color="#545454"><i>Esta Política de Privacidade é válida a partir de 21 de maio de 2018 e teve sua última modificação em 14 de dezembro de 2018.</i></font></center>
    <br/>
    <br/>
    A Windsoft Games ("nós", "nosso(s)", "nos", "conosco") acredita que sua privacidade é muito importante. Essa política de privacidade demonstra os tipos de
     informações privadas e outros dados que coletamos atráves de nossos jogos e aplicativos que distribuímos (serão referidos como serviços), como usamos estes
      dados e quando poderemos revelá-los a terceiros. A instalação e/ou o uso dos nossos serviços e/ou o envio de informação constitui seu consentimento a esta
       política de privacidade e a possibilidade de utilização dessa informação (pessoal e não pessoal) como descrito nesta política de privacidade.
    <br/>
    <br/>
    <b>I. Tipos de informações que podemos colher com nossos serviços</b>
    <br/>
    <br/>
    <b>1. Informação pessoal: </b>que pode ser usada para te contatar on-line, como o seu primeiro nome, endereço de e-mail, ID de usuário do Windsoft ID e
     nome de usuário.
    <br/>
    <b>2. Informação não pessoal: </b>que não pode te identificar especificamente e que não pode ser usada para te contatar, como por exemplo, como data de
     nascimento, idade, CEP, geolocalização imprecisa (como por exemplo sua cidade) e sexo. Assim como informações do seu dispositivo, como o ID de dispositivo,
      endereço IP e outros identificadores de hardware(especificações do processador, ram e etc), software(dados técnicos do sistema operacional) e firmware.
       Informação não pessoal tambem inclui dados de como você usa os nossos serviços, como ações tomadas dentro dos nossos serviços, hora e data de uso dos
        nossos serviços, tempo de jogo, conquistas e etc.
    <br/>
    <br/>
    <b>II. Como coletamos a sua informação pessoal e não pessoal</b>
    <br/>
    <br/>
    <b>1. </b>Se você decidir criar uma conta na nossa rede (Windsoft ID), pedir ajuda ou realizar qualquer ato que necessite o envio de informações
     pessoais e não pessoais.
    <br/>
    <b>2. </b>Se você decidir se conectar a um de nossos serviços atráves de terceiros como Facebook, Google Play Games e etc, poderemos coletar seus dados de
     perfil nestas redes, como nome de usuário, foto, sexo e data de nascimento.
    <br/>
    <b>3. </b>Podemos coletar informações como o ID do seu aparelho para enviar notificações.
    <br/>
    <b>4. </b>Se você nos enviar sua informação pessoal por qualquer outra razão, nós coletaremos esta informação e a usaremos somente para o próposito ao qual
     ela foi enviada.
    <br/>
    <b>5. </b>Não coletamos nenhuma informação pessoal se você apenas visitar nosso site.
    <br/>
    <b>6. </b>Tambem podemos coletar informações não pessoais enquanto você utiliza nossos serviços.
    <br/>
    <br/>
    <b>III. Uso da informação não pessoal coletada</b>
    <br/>
    <br/>
    As informações não pessoais podem ser utilizada para própositos de administração, análise, pesquisa, otimização, segurança e outros. Especificamente, poderemos
     utilizar suas informações não pessoais para:
    <br/>
    <b>1. </b>Monitorar seu uso dos nossos serviços para entedermos suas preferências e tendências, o que nós ajudara a personalizar a experiência, ofertas e notificações
     nos nossos serviços feitas sob medida para melhorar sua experiência nos nossos serviços.
    <br/>
    <b>2. </b>Personalizar seu conteúdo e ofertas.
    <br/>
    <b>3. </b>Compilar estatísitcas.
    <br/>
    <b>4. </b>Responder às perguntas do suporte.
    <br/>
    <b>5. </b>Proteger contra trapaça, crime, fraude ou outras medidas de segurança.
    <br/>
    <b>6. </b>Enviar notificações Push (se você permitir).
    <br/>
    <br/>
    <b>IV. Uso da informação pessoal coletada</b>
    <br/>
    <br/>
    Usaremos suas informações pessoais para:
    <br/>
    <b>1. </b>Fornecer bens, serviços ou funcionalidades requisitadas por você.
    <br/>
    <b>2. </b>Responder a qualquer pergunta feita atráves do suporte.
    <br/>
    <b>3. </b>Exibir informações superficias(como primeiro nome e nome de usuário) da sua conta do Windsoft ID(caso tenha uma) na sua página de perfil
     em nossos serviços.
    <br/>
    <b>4. </b>Contratá-lo e promover nossos serviços, ou ofertas especiais.
    <br/>
    <br/>
    <b>V. Quando revelamos informações pessoais ou não pessoais coletadas</b>
    <br/>
    <br/>
    <b>1. </b>Não venderemos, alugaremos ou transferiremos suas informações pessoais para terceiros sem seu concentimento.
    <br/>
    <b>2. </b>Nossos serviços podem oferecer funções sociais de compartilhamento como "publicar" ou "curtir" no Facebook. Se você decidiu usar estas funções,
     você permite o compartilhamento e coleta de informações pessoais e não pessoais com estas redes sociais. Você deve ler as políticas de privacidade destes
      terceiros para mais informações sobre suas práticas coleta de informações.
    <br/>
    <b>3. </b>Podemos revelar suas informações pessoais ou outras informações coletadas se requeridas por lei ou ordem judicial, caso a informação esteja
     ligada a ameaça ou real conduta de dano, servir para investigação e/ou tomada de ação contra atividades ilegais, suspeita de abuso ou uso
      desautorizado dos serviçso ou para proteger a propriedade ou segurança de outrem.
    <br/>
    <b>4. </b>Em caso de venda da companhia ou de qualquer linha de negócios (incluindo os recursos relacionados aqui), as informações dos clientes são
     geralmente recursos transferidos e tais informações (incluindo suas informações pessoais) serão transferidas ou vendidas ao comprador no evento da
      compra de parte ou de todo o negócio.
    <br/>
    <br/>
    <b>VI. Propaganda</b>
    <br/>
    <br/>
    Ao usar nossos aplicativos/jogos, você pode encontrar conteúdo de propaganda. Nós ou a rede de publicidade que usamos podemos utilizar tecnologia de
     publicidade que usa cookies, beacons, tracking pixels ou outras tecnologias que são colocadas nas propagandas e permitem a coleta de informações
      não pessoais. Informações não pessoais como idade e sexo podem ser usadas para que propagandas apropriadas sejam oferecidas a você. Dados de uso
       e informações não pessoais como identificadores de propaganda podem ser usados para determinar quantos cliques uma propaganda recebeu para medir
        a eficácia de campanhas, determinar a quantidades de revisitas e/ou entregar as propagandas que melhor se enquadram nos seus interesses. Dependendo
         do seu aparelho e sistema operacional, você pode impedir que o identificador de propaganda do seu aparelho seja usado para propagandas que
          visem a lucro ou pode redefinir seu identificador de propaganda, mudando as configurações do seu aparelho.
    <br/>
    <br/>
    <b>VII. Retenção de arquivos</b>
    <br/>
    <br/>
    Nos reservamos o direito de reter um arquivo de sua informação pessoal por um tempo comercialmente razoável para assegurarmo-nos de que sua
     remoção não venha afetar a integridade de nossos dados. Além disso, nos reservamos o direito de manter uma versão anônima desta informação em nosso
      arquivo.
    <br/>
    <br/>
    <b>VIII. Parcerias e fontes externas</b>
    <br/>
    <br/>
    Nossos serviços podem apresentar links para sites externos que fogem ao nosso controle. Esta política de privacidade se aplica apenas à forma como
     tratamos a informação pessoal e dados de uso coletados em nossos serviços. Ao acessar sites externos, você concorda com a política de privacidade
      destes sites. Entenda que sites externos podem ter políticas diferentes no que diz respeito à coleta, uso e publicação de sua informação pessoal.
       Não temos controle ou responsabilidade sobre as práticas de privacidade de terceiros. Portanto, o encorajamos a ler as políticas de privacidade
        de todos os websites e aplicativos de terceiros. Sem limitar o apresentado na seção a seguir, não somos responsáveis de forma alguma pelas ações,
         inações ou políticas de qualquer serviço externo.
    <br/>
    <br/>
    <b><NAME></b>
    <br/>
    <br/>
    Muitos de nossos serviços são de classificação livre e nós não coletamos ou usamos voluntariamente nenhuma informação pessoal de crianças com menos
     de 13 anos. Quando usuários forem identificados como menores de 13 anos, nós bloquearemos este usuário de fornecer qualquer informação pessoal
      ou garantir que a autorização dos pais seja dada antes de colher qualquer informação pessoal. Quando nossos serviços forem direcionados para
       crianças menores de 13 anos, não colheremos nenhuma informação pessoal dos usuários destes serviços. Caso você seja responsável por uma criança
        menor de 13 anos e julgue que esta criança tenha fornecido informações pessoais, entre em contato pelo e-mail <EMAIL> e nós apagaremos
         os dados em nosso sistema. Nós podemos coletar informação não pessoal como um identificador do aparelho ou qualquer outra forma de identificação
          não pessoal relevante relacionada ao dispositivo usado pela criança para utilizar nossos serviços. Os dados coletados serão anônimos e não serão
           vinculados a qualquer informação pessoal. Além disso, estes dados serão utilizados unicamente para objetivos internos, como personalização de
            conteúdo, segurança e publicidade contextual (não comportamental). Alguns de nossos serviços podem permitir compras no jogo, mesmo que o download
             e instalação do jogo sejam gratuitos. Elas podem ser realizadas via uma conta de terceiros (por exemplo, uma conta Google Play). Caso você seja
              responsável por uma criança e esteja preocupado com esta função, você pode desativar a possibilidade de compras no nosso serviços ao acessar
               a guia de configurações do aplicativo/jogo e seguir os passos necessários para tal efeito. Caso você tenha entre 13 e 18 anos de idade, favor
                obter a permissão dos seus pais antes de se registrar em nossa plataforma ou de fornecer informações pessoais.
    <br/>
    <br/>
    <b>X. Alterações</b>
    <br/>
    <br/>
    Nós nos reservamos o direito de alterar esta política de privacidade a qualquer momento. Caso façamos alterações materiais a esta política
     de privacidade, tal política será republicada na seção Privacidade de nossos serviços e a data da alteração será informada no topo da página.
      Portanto, favor revisar esta política de privacidade de tempos em tempos para tomar conhecimento de todas as alterações. O uso continuado de
       nossos serviços após tais alterações representa que você as aceita. Caso você não aceite as alterações realizadas, você tem o direito de
        escolher não utilizar mais os serviços.
    <br/>
    <br/>
    <b>XI. Segurança dos serviços</b>
    <br/>
    <br/>
    Fornecer ou não suas informações pessoais é uma decisão integralmente sua. Nós disponibilizamos procedimentos eletrônicos e gerenciais com o objetivo
     de prevenir acesso não autorizado, manter a segurança dos dados e assegurar a utilização correta das informações pessoais recolhidas por nossos
      serviços. Entretanto, esteja ciente de que nenhuma transmissão de dados via internet ou qualquer rede sem fio é 100% segura. Como resultado, por mais
       que nós nos esforcemos para proteger suas informações pessoais, não podemos garantir a segurança de qualquer informação que nos é enviada ou que
        nós enviamos, de forma que o risco do envio é seu. Não podemos garantir a segurança de qualquer informação enviada por e-mail. Envie por seu próprio
         risco. Caso você acredite que suas informações pessoais estejam sendo usadas indevidamente por nós, favor enviar uma notificação imediata a
          <EMAIL>. Caso você escolha ter uma conta conosco, você não deve compartilhar seus dados de acesso com ninguém.
    <br/>
    <br/>
    <b>XII. Aviso legal</b>
    <br/>
    <br/>
    Nossos serviços operam da forma em que são apresentados, e nós não representamos ou garantimos que nossos serviços estarão sempre disponíveis, ou que
     o seu uso dos serviços será ininterrupto ou livre de falhas. Não nos responsabilizamos por sua capacidade de acessar os serviços ou por outros aspectos
      que fogem ao nosso controle. Esta política de privacidade é governada pela lei do Brasil, excluídas suas provisões de escolha de lei. Caso você tenha
       alguma questão geral sobre nossa política de privacidade, entre em contato pelo e-mail <EMAIL>. 
    <br/>
    <br/>

<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/ajax-query/cadastrar-novo-asset.php
<?php
/*
 * script que insere o novo jogo no banco de dados
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nome = mysqli_real_escape_string($DB_Metadados, $_POST["nome"]);
$preco = mysqli_real_escape_string($DB_Metadados, $_POST["preco"]);
$descricao = mysqli_real_escape_string($DB_Metadados, $_POST["descricao"]);
$urlVideo = mysqli_real_escape_string($DB_Metadados, $_POST["urlVideo"]);
$urlAssetStore = mysqli_real_escape_string($DB_Metadados, $_POST["urlAssetStore"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Filtra o nome do asset para gerar o URL de imagem sem caracteres especiais, e minusculo
    $nomeSemEspacos = str_replace(" ", "-", $nome);
    $nomeParaUrl = strtolower(preg_replace("/[^A-Za-z0-9\-]/", "", $nomeSemEspacos));
    $urlImagem = "https://windsoft.xyz/browser/microsite/mt-assets/asset-images/" . $nomeParaUrl . ".png";
    $nomeArquivoArte = $nomeParaUrl . ".png";
    
    //Obtem a data atual
    $dataDePublicacao = date("Y")."-".date("m")."-".date("d");
    
    //Insere o novo asset no banco de dados
    $consultaCadastro = mysqli_query($DB_Metadados, "INSERT INTO AssetStore(Nome, PrecoAtual, VendasPorData_Json, Descricao, UrlImagem, NomeArquivoArte, UrlVideo, UrlAssetStore, DataPublicacao) VALUES('$nome', '$preco', '', '$descricao', '$urlImagem', '$nomeArquivoArte', '$urlVideo', '$urlAssetStore', '$dataDePublicacao')"); 
    
echo("".
'parent.mostrarNotificacao("'.$nome.' foi cadastrado com sucesso!", "#117700", 2500);'.
'exibirMensagemAssetCadastrado();'
."");
}

?><file_sep>/browser/links/you-tube.php
<?php
/*
 * Essa página funciona como um redirecionamento para a página da Windsoft Games no Youtube.
 * O arquivo .htaccess possui uma configuração para que seja possível acessa-la com uma URL mais curta.
 */

$tituloPagina = "Youtube - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("../includes/cabecalho.inc");
RedirecionarPara("https://www.youtube.com/channel/UCehJit--43uLtn_sf4ELVJg", 3);
?>

    <center>
        <br/>
        Por favor, aguarde, estamos lhe redirecionando para nosso canal do YouTube!
        <br/>
        <br/>
        <small>
            <a href="https://www.youtube.com/channel/UCehJit--43uLtn_sf4ELVJg">Clique aqui caso não seja redirecionado</a>
        </small>
    </center>

<?php
include("../includes/rodape.inc");
?><file_sep>/browser/microsite/painel/ajax-query/tornar-membro-da-staff.php
<?php
/*
 * script que adiciona o usuario a staff
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Caso não tenha permissão total, cancela o script
    if($_SESSION["autoridade"] < 4){
echo("".
'parent.mostrarNotificacao("Você não tem permissão para fazer isso.", "#7F0000", 3000);'
."");
        exit();
    }
    
    //Verifica se o usuário já está cadastrado como staff
    $consultaUsuario = mysqli_query($DB_Metadados, "SELECT Cargo, Autoridade FROM Staff WHERE Nick='$nick'");
    
    //Caso não esteja cadastrado
    if(mysqli_num_rows($consultaUsuario) == 0){
        $consultaInsercao = mysqli_query($DB_Metadados, "INSERT INTO Staff(Nick, Cargo, Autoridade) VALUES('$nick', 'Sem Cargo', 0)");
    }
    
echo("".
'parent.mostrarNotificacao("O usuário foi adicionado a Staff, com êxito!", "#1E7200", 3000);'
."staff = true;"
."cargo = 'Sem Cargo';"
."autoridade = 0;"
."exibirPainelDeEdicao();"
."");
}

?><file_sep>/browser/ajax-query/editar-perfil.php
<?php
/*
 * script que faz consulta de edição do perfil
 */

include("../../global/sessoes/verificador-de-sessao.inc");
include("../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Obtem as variaveis
$nome = mysqli_real_escape_string($DB_Registros, $_POST["nome"]);
$genero = mysqli_real_escape_string($DB_Registros, $_POST["genero"]);
$idade = mysqli_real_escape_string($DB_Registros, $_POST["idade"]);

//obtem o id do usuário
$id = $_SESSION["id"];

//Obtem o ano de nascimento
$anoNascimento = date("Y") - $idade;

//Faz a consulta de edição
$consultaEdicao = mysqli_query($DB_Registros, "UPDATE Perfis SET Nome='$nome', Genero='$genero', AnoNascimento=$anoNascimento WHERE ID=$id");

echo("".
"mostrarNotificacao(\"O perfil foi editado com sucesso!\", \"#117700\", 5000); ".
"trocarModoExibicao();".
"");

?><file_sep>/browser/microsite/painel/paginas/criar-noticia.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Função que verifica se o arquivo temporário de edição, existe, caso exista, retorna o seu conteúdo, se não retorna uma string vazia
function arquivoExiste($nome){
    //Configura o diretorio
    $diretorioDoArquivo = "noticias/temp/" . $nome;
    
    //Verifica sua existência
    if(file_exists($diretorioDoArquivo) == false){
        return "";
    }
    if(file_exists($diretorioDoArquivo) == true){
        return file_get_contents($diretorioDoArquivo);
    }
}

//Função que verifica se existe uma edição salva
$existeEdicaoSalva = false;
if(arquivoExiste($_SESSION["id"] . "_noticia-existeEdicaoSalva.tmp") == true){
    if(arquivoExiste($_SESSION["id"] . "_noticia-existeEdicaoSalva.tmp") == "true"){
        $existeEdicaoSalva = true;
    }
}
?>

<center>
    <h3>Criar Arquivo de Notícia</h3>
</center>

<div id="formulario" style="display: block;">
    <center>
        <form autocomplete="off">
            <input id="titulo" type="text" placeholder="Título da Notícia" onkeyup="validarTitulo();"
                   value="<?php
                        $nome = $_SESSION["id"] . "_noticia-titulo.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
            <div id="tituloStatus" class="statusCampo"></div>
            
            <input id="urlCapa" type="text" placeholder="URL Imagem de Capa" onkeyup="validarUrlCapa();"
                   value="<?php
                        $nome = $_SESSION["id"] . "_noticia-urlCapa.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
            <div id="urlCapaStatus" class="statusCampo"></div>
            
            <textarea id="descricao" placeholder="Descrição da Notícia" onkeyup="validarDescricao();"><?php
    $nome = $_SESSION["id"] . "_noticia-descricao.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
            <div id="descricaoStatus" class="statusCampo"></div>
            
            <textarea id="intro" placeholder="Introdução da Notícia" onkeyup="validarIntroducao();"
            onfocus="parent.exibirIconeEmote(true, true, this);" onblur="parent.exibirIconeEmote(false, true, this);"><?php
    $nome = $_SESSION["id"] . "_noticia-introducao.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
            <div id="introStatus" class="statusCampo"></div>
            
            <input id="subtitulo1" type="text" placeholder="Subtítulo 1" onkeyup="validarSubtitulo1();"
                   value="<?php
                        $nome = $_SESSION["id"] . "_noticia-subtitulo1.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
            <div id="subtitulo1status" class="statusCampo"></div>
            
            <textarea id="texto1" placeholder="Texto do subtítulo 1"
            onfocus="parent.exibirIconeEmote(true, true, this);" onblur="parent.exibirIconeEmote(false, true, this);"><?php
    $nome = $_SESSION["id"] . "_noticia-texto1.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
            <div id="texto1status" class="statusCampo"></div>
            
            <div id="item2" style="<?php if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo2.tmp") == true || arquivoExiste($_SESSION["id"]."_noticia-texto2.tmp") == true && $existeEdicaoSalva == true){if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo2.tmp") == false || arquivoExiste($_SESSION["id"]."_noticia-texto2.tmp") == false || $existeEdicaoSalva == false)("opacity: 1;");} if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo2.tmp") == false || arquivoExiste($_SESSION["id"]."_noticia-texto2.tmp") == false || $existeEdicaoSalva == false){echo("opacity: 0; max-height: 0px;");} ?> overflow: hidden; transition: 0.5s;">
                <input id="subtitulo2" type="text" placeholder="Subtítulo 2" onkeyup="validarSubtitulo2();"
                     value="<?php
                        $nome = $_SESSION["id"] . "_noticia-subtitulo2.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
                <div id="subtitulo2status" class="statusCampo"></div>
                
                <textarea id="texto2" placeholder="Texto do subtítulo 2"
                onfocus="parent.exibirIconeEmote(true, true, this);" onblur="parent.exibirIconeEmote(false, true, this);"><?php
    $nome = $_SESSION["id"] . "_noticia-texto2.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
                <div id="texto2status" class="statusCampo"></div>
            </div>
            
            <div id="item3" style="<?php if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo3.tmp") == true || arquivoExiste($_SESSION["id"]."_noticia-texto3.tmp") == true && $existeEdicaoSalva == true){echo("opacity: 1;");} if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo2.tmp") == false || arquivoExiste($_SESSION["id"]."_noticia-texto2.tmp") == false || $existeEdicaoSalva == false){echo("opacity: 0; max-height: 0px;");} ?> overflow: hidden; transition: 0.5s;">
                <input id="subtitulo3" type="text" placeholder="Subtítulo 3" onkeyup="validarSubtitulo3();"
                    value="<?php
                        $nome = $_SESSION["id"] . "_noticia-subtitulo3.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
                <div id="subtitulo3status" class="statusCampo"></div>
                
                <textarea id="texto3" placeholder="Texto do subtítulo 3"
                onfocus="parent.exibirIconeEmote(true, true, this);" onblur="parent.exibirIconeEmote(false, true, this);"><?php
    $nome = $_SESSION["id"] . "_noticia-texto3.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
                <div id="texto3status" class="statusCampo"></div>
            </div>
            
            <div id="item4" style="<?php if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo4.tmp") == true || arquivoExiste($_SESSION["id"]."_noticia-texto4.tmp") == true && $existeEdicaoSalva == true){echo("opacity: 1;");} if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo2.tmp") == false || arquivoExiste($_SESSION["id"]."_noticia-texto2.tmp") == false || $existeEdicaoSalva == false){echo("opacity: 0; max-height: 0px;");} ?> overflow: hidden; transition: 0.5s;">
                <input id="subtitulo4" type="text" placeholder="Subtítulo 4" onkeyup="validarSubtitulo4();"
                    value="<?php
                        $nome = $_SESSION["id"] . "_noticia-subtitulo4.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
                <div id="subtitulo4status" class="statusCampo"></div>
                
                <textarea id="texto4" placeholder="Texto do subtítulo 4"
                onfocus="parent.exibirIconeEmote(true, true, this);" onblur="parent.exibirIconeEmote(false, true, this);"><?php
    $nome = $_SESSION["id"] . "_noticia-texto4.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
                <div id="texto4status" class="statusCampo"></div>
            </div>
            
            <div id="item5" style="<?php if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo5.tmp") == true || arquivoExiste($_SESSION["id"]."_noticia-texto5.tmp") == true && $existeEdicaoSalva == true){echo("opacity: 1;");} if(arquivoExiste($_SESSION["id"]."_noticia-subtitulo2.tmp") == false || arquivoExiste($_SESSION["id"]."_noticia-texto2.tmp") == false || $existeEdicaoSalva == false){echo("opacity: 0; max-height: 0px;");} ?> overflow: hidden; transition: 0.5s;">
                <input id="subtitulo5" type="text" placeholder="Subtítulo 5" onkeyup="validarSubtitulo5();"
                    value="<?php
                        $nome = $_SESSION["id"] . "_noticia-subtitulo5.tmp";
                        if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                            echo(arquivoExiste($nome));
                        }
                    ?>"/>
                <div id="subtitulo5status" class="statusCampo"></div>
                
                <textarea id="texto5" placeholder="Texto do subtítulo 5"
                onfocus="parent.exibirIconeEmote(true, true, this);" onblur="parent.exibirIconeEmote(false, true, this);"><?php
    $nome = $_SESSION["id"] . "_noticia-texto5.tmp";
    if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
        echo(arquivoExiste($nome));
    }
    ?></textarea>
                <div id="texto5status" class="statusCampo"></div>
            </div>
            
            <img id="adicionarEspaco" src="../imagens/adicionar.png" style="display: block; margin-left: auto; margin-right: auto; width: 32px; cursor: pointer; opacity: 0.6; margin-bottom: 32px;" onclick="adicionarSlot();" />
            
            <br>
            <br>
            
            <div id="alteracoes" style="text-align: center;">
                <?php
                    if($existeEdicaoSalva == false){
                        echo("Nenhuma alteração salva.");
                    }
                    if($existeEdicaoSalva == true){
                        echo(arquivoExiste($_SESSION["id"] . "_noticia-dataSalvamento.tmp"));
                    }
                ?>
            </div>
            
            <br>
            <br>
            
            <div style="display: grid; grid-template-columns: 50% 50%; width: 80%; max-width: 300px;">
                <input type="button" value="Salvar" style="width: calc(100% - 8px); margin: 8px 8px 8px 0px;" onclick="salvarEdicao();" />
                <input type="button" value="Pré-Visualizar" style="width: calc(100% - 8px); margin: 8px 0px 8px 8px;" onclick="previsualizar();" />
            </div>
            <input type="button" value="Criar Arquivo" onclick="criarArquivo();" />
        </form>
    </center>
</div>

<div id="noticiaCriada" style="display: none;">
    <center>
        <img src="../imagens/sucesso.png" width="128px" />
        <br>
        <br>
        O arquivo de notícia foi criado com sucesso! Você pode obter o link para o arquivo abaixo.
        <br>
        <br>
        <input type="text" id="urlDaNoticia" onfocus="copiarConteudo();" style="width: 100%;" readonly/>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">    
    campoTitulo = document.getElementById("titulo");
    statusTitulo = document.getElementById("tituloStatus");
    tituloValido = false;
    function validarTitulo(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoTitulo.value.length, 40);
        
        //Desvalida
        campoTitulo.style.borderColor = "#990000";
        campoTitulo.style.borderWidth = "1px";
        statusTitulo.style.color = "#990000";
        tituloValido = false;
        
        if(campoTitulo.value == ""){
            statusTitulo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoTitulo.value.length > 40){
            statusTitulo.innerHTML = "Título muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoTitulo.value) == true){
            statusTitulo.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoTitulo.style.borderColor = "";
        campoTitulo.style.borderWidth = "";
        statusTitulo.innerHTML = "";
        tituloValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlCapa = document.getElementById("urlCapa");
    statusUrlCapa = document.getElementById("urlCapaStatus");
    urlCapaValido = false;
    function validarUrlCapa(){
        //Desvalida
        campoUrlCapa.style.borderColor = "#990000";
        campoUrlCapa.style.borderWidth = "1px";
        statusUrlCapa.style.color = "#990000";
        urlCapaValido = false;
        
        if(campoUrlCapa.value == ""){
            statusUrlCapa.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlCapa.value) == false){
            statusUrlCapa.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlCapa.style.borderColor = "";
        campoUrlCapa.style.borderWidth = "";
        statusUrlCapa.innerHTML = "";
        urlCapaValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoDescricao = document.getElementById("descricao");
    statusDescricao = document.getElementById("descricaoStatus");
    descricaoValido = false;
    function validarDescricao(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoDescricao.value.length, 160);
        
        //Desvalida
        campoDescricao.style.borderColor = "#990000";
        campoDescricao.style.borderWidth = "1px";
        statusDescricao.style.color = "#990000";
        descricaoValido = false;
        
        if(campoDescricao.value == ""){
            statusDescricao.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoDescricao.value.length > 160){
            statusDescricao.innerHTML = "Descrição muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoDescricao.value) == true){
            statusDescricao.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoDescricao.style.borderColor = "";
        campoDescricao.style.borderWidth = "";
        statusDescricao.innerHTML = "";
        descricaoValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoIntro = document.getElementById("intro");
    statusIntro = document.getElementById("introStatus");
    introValido = false;
    function validarIntroducao(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoIntro.value.length, 250);
        
        //Desvalida
        campoIntro.style.borderColor = "#990000";
        campoIntro.style.borderWidth = "1px";
        statusIntro.style.color = "#990000";
        introValido = false;
        
        if(campoIntro.value == ""){
            statusIntro.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoIntro.value.length > 250){
            statusIntro.innerHTML = "Introdução muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoIntro.value) == true){
            statusIntro.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoIntro.style.borderColor = "";
        campoIntro.style.borderWidth = "";
        statusIntro.innerHTML = "";
        introValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoSubtitulo1 = document.getElementById("subtitulo1");
    statusSubtitulo1 = document.getElementById("subtitulo1status");
    subtitulo1Valido = false;
    function validarSubtitulo1(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoSubtitulo1.value.length, 80);
        
        //Desvalida
        campoSubtitulo1.style.borderColor = "#990000";
        campoSubtitulo1.style.borderWidth = "1px";
        statusSubtitulo1.style.color = "#990000";
        subtitulo1Valido = false;
        
        if(campoSubtitulo1.value.length > 80){
            statusSubtitulo1.innerHTML = "Subtítulo muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoSubtitulo1.value) == true){
            statusSubtitulo1.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSubtitulo1.style.borderColor = "";
        campoSubtitulo1.style.borderWidth = "";
        statusSubtitulo1.innerHTML = "";
        subtitulo1Valido = true;
    
        parent.redimensionarIframe();
    }
    
    campoSubtitulo2 = document.getElementById("subtitulo2");
    statusSubtitulo2 = document.getElementById("subtitulo2status");
    subtitulo2Valido = true;
    function validarSubtitulo2(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoSubtitulo2.value.length, 80);
        
        //Desvalida
        campoSubtitulo2.style.borderColor = "#990000";
        campoSubtitulo2.style.borderWidth = "1px";
        statusSubtitulo2.style.color = "#990000";
        subtitulo2Valido = false;
        
        if(campoSubtitulo2.value.length > 80){
            statusSubtitulo2.innerHTML = "Subtítulo muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoSubtitulo2.value) == true){
            statusSubtitulo2.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSubtitulo2.style.borderColor = "";
        campoSubtitulo2.style.borderWidth = "";
        statusSubtitulo2.innerHTML = "";
        subtitulo2Valido = true;
    
        parent.redimensionarIframe();
    }
    
    campoSubtitulo3 = document.getElementById("subtitulo3");
    statusSubtitulo3 = document.getElementById("subtitulo3status");
    subtitulo3Valido = true;
    function validarSubtitulo3(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoSubtitulo3.value.length, 80);
        
        //Desvalida
        campoSubtitulo3.style.borderColor = "#990000";
        campoSubtitulo3.style.borderWidth = "1px";
        statusSubtitulo3.style.color = "#990000";
        subtitulo3Valido = false;
        
        if(campoSubtitulo3.value.length > 80){
            statusSubtitulo3.innerHTML = "Subtítulo muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoSubtitulo3.value) == true){
            statusSubtitulo3.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSubtitulo3.style.borderColor = "";
        campoSubtitulo3.style.borderWidth = "";
        statusSubtitulo3.innerHTML = "";
        subtitulo3Valido = true;
    
        parent.redimensionarIframe();
    }
    
    campoSubtitulo4 = document.getElementById("subtitulo4");
    statusSubtitulo4 = document.getElementById("subtitulo4status");
    subtitulo4Valido = true;
    function validarSubtitulo4(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoSubtitulo4.value.length, 80);
        
        //Desvalida
        campoSubtitulo4.style.borderColor = "#990000";
        campoSubtitulo4.style.borderWidth = "1px";
        statusSubtitulo4.style.color = "#990000";
        subtitulo4Valido = false;
        
        if(campoSubtitulo4.value.length > 80){
            statusSubtitulo4.innerHTML = "Subtítulo muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoSubtitulo4.value) == true){
            statusSubtitulo4.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSubtitulo4.style.borderColor = "";
        campoSubtitulo4.style.borderWidth = "";
        statusSubtitulo4.innerHTML = "";
        subtitulo4Valido = true;
    
        parent.redimensionarIframe();
    }
    
    campoSubtitulo5 = document.getElementById("subtitulo5");
    statusSubtitulo5 = document.getElementById("subtitulo5status");
    subtitulo5Valido = true;
    function validarSubtitulo5(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoSubtitulo5.value.length, 80);
        
        //Desvalida
        campoSubtitulo5.style.borderColor = "#990000";
        campoSubtitulo5.style.borderWidth = "1px";
        statusSubtitulo5.style.color = "#990000";
        subtitulo5Valido = false;
        
        if(campoSubtitulo5.value.length > 80){
            statusSubtitulo5.innerHTML = "Subtítulo muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoSubtitulo5.value) == true){
            statusSubtitulo5.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSubtitulo5.style.borderColor = "";
        campoSubtitulo5.style.borderWidth = "";
        statusSubtitulo5.innerHTML = "";
        subtitulo5Valido = true;
    
        parent.redimensionarIframe();
    }
    
    //Adicionar slot
    function adicionarSlot(){
        var slot2 = document.getElementById("item2");
        var slot3 = document.getElementById("item3");
        var slot4 = document.getElementById("item4");
        var slot5 = document.getElementById("item5");
        
        if(slot2.style.maxHeight == "0px"){
            slot2.style.maxHeight = "";
            slot2.style.opacity = "1";
            parent.redimensionarIframe();
            return;
        }
        if(slot3.style.maxHeight == "0px"){
            slot3.style.maxHeight = "";
            slot3.style.opacity = "1";
            parent.redimensionarIframe();
            return;
        }
        if(slot4.style.maxHeight == "0px"){
            slot4.style.maxHeight = "";
            slot4.style.opacity = "1";
            parent.redimensionarIframe();
            return;
        }
        if(slot5.style.maxHeight == "0px"){
            slot5.style.maxHeight = "";
            slot5.style.opacity = "1";
            document.getElementById("adicionarEspaco").style.display = "none";
            parent.redimensionarIframe();
            return;
        }
    }
    
    //Verifica se todos os slots já estão sendo exibidos, para ocultar o botão de adicionar
    function ocultarBotaoDeAdicionarSlotCasoNaoSejaNecessario(){
        var slot2 = document.getElementById("item2");
        var slot3 = document.getElementById("item3");
        var slot4 = document.getElementById("item4");
        var slot5 = document.getElementById("item5");
        
        if(slot2.style.maxHeight == "" && slot3.style.maxHeight == "" &&
           slot4.style.maxHeight == "" && slot5.style.maxHeight == ""){
            document.getElementById("adicionarEspaco").style.display = "none";
            parent.redimensionarIframe();
            return;
        }
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarTitulo();
        validarUrlCapa();
        validarDescricao();
        validarIntroducao();
        validarSubtitulo1();
        validarSubtitulo2();
        validarSubtitulo3();
        validarSubtitulo4();
        validarSubtitulo5();
        
        if(tituloValido == true && urlCapaValido == true && descricaoValido == true && introValido == true &&
           subtitulo1Valido == true && subtitulo2Valido == true && subtitulo3Valido == true && subtitulo4Valido == true && subtitulo5Valido == true){
            return true;
        }
        if(tituloValido == false || urlCapaValido == false || descricaoValido == false || introValido == false ||
           subtitulo1Valido == false || subtitulo2Valido == false || subtitulo3Valido == false || subtitulo4Valido == false || subtitulo5Valido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que salva o conteúdo digitado, no servidor, através do ajax
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/salvar-edicao-criar-noticia.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {                    
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "titulo=" + document.getElementById("titulo").value +
                                      "&urlCapa=" + document.getElementById("urlCapa").value +
                                      "&descricao=" + document.getElementById("descricao").value +
                                      "&introducao=" + document.getElementById("intro").value +
                                      "&subtitulo1=" + document.getElementById("subtitulo1").value +
                                      "&texto1=" + document.getElementById("texto1").value +
                                      "&subtitulo2=" + document.getElementById("subtitulo2").value +
                                      "&texto2=" + document.getElementById("texto2").value +
                                      "&subtitulo3=" + document.getElementById("subtitulo3").value +
                                      "&texto3=" + document.getElementById("texto3").value +
                                      "&subtitulo4=" + document.getElementById("subtitulo4").value +
                                      "&texto4=" + document.getElementById("texto4").value +
                                      "&subtitulo5=" + document.getElementById("subtitulo5").value +
                                      "&texto5=" + document.getElementById("texto5").value);
        }
    }
    
    //Função que comando o servidor para gerar uma página temporária somente para pre-visualização da notícia
    function previsualizar(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/gerar-arquivo-noticia.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "titulo=" + document.getElementById("titulo").value +
                                      "&urlCapa=" + document.getElementById("urlCapa").value +
                                      "&descricao=" + document.getElementById("descricao").value +
                                      "&introducao=" + document.getElementById("intro").value +
                                      "&subtitulo1=" + document.getElementById("subtitulo1").value +
                                      "&texto1=" + document.getElementById("texto1").value +
                                      "&subtitulo2=" + document.getElementById("subtitulo2").value +
                                      "&texto2=" + document.getElementById("texto2").value +
                                      "&subtitulo3=" + document.getElementById("subtitulo3").value +
                                      "&texto3=" + document.getElementById("texto3").value +
                                      "&subtitulo4=" + document.getElementById("subtitulo4").value +
                                      "&texto4=" + document.getElementById("texto4").value +
                                      "&subtitulo5=" + document.getElementById("subtitulo5").value +
                                      "&texto5=" + document.getElementById("texto5").value +
                                      "&modoPrevia=true");
        }
    }
    
    //Função que comando o servidor para gerar a página da notícia
    function criarArquivo(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/gerar-arquivo-noticia.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "titulo=" + document.getElementById("titulo").value +
                                      "&urlCapa=" + document.getElementById("urlCapa").value +
                                      "&descricao=" + document.getElementById("descricao").value +
                                      "&introducao=" + document.getElementById("intro").value +
                                      "&subtitulo1=" + document.getElementById("subtitulo1").value +
                                      "&texto1=" + document.getElementById("texto1").value +
                                      "&subtitulo2=" + document.getElementById("subtitulo2").value +
                                      "&texto2=" + document.getElementById("texto2").value +
                                      "&subtitulo3=" + document.getElementById("subtitulo3").value +
                                      "&texto3=" + document.getElementById("texto3").value +
                                      "&subtitulo4=" + document.getElementById("subtitulo4").value +
                                      "&texto4=" + document.getElementById("texto4").value +
                                      "&subtitulo5=" + document.getElementById("subtitulo5").value +
                                      "&texto5=" + document.getElementById("texto5").value +
                                      "&modoPrevia=false");
        }
    }
    
    //Função que seleciona e copia a URL automaticamente, da caixa de texto
    function copiarConteudo(){
        document.getElementById("urlDaNoticia").select();
        document.execCommand("Copy");
        parent.mostrarNotificacao("URL copiado para a área de trasferência!", "#467200", 2500);
    }
    
    //Função que exibe a mensagem de sucesso após criar arquivo de notícia
    function exibirMensagemArquivoCriado(url){
        document.getElementById("urlDaNoticia").value = url;
        document.getElementById("noticiaCriada").style.display = "block";
        document.getElementById("formulario").style.display = "none";
        document.getElementById("quadroDeAvisos").style.display = "none";
        parent.redimensionarIframe();
    }
    
    //Redimensiona as textarea de acordo com seus conteúdos, automaticamente
    var textAreas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textAreas.length; i++){
        textAreas[i].style.height = (textAreas[i].scrollHeight) + "px";
        textAreas[i].style.overflow = "hidden";
        textAreas[i].style.resize = "none";
        textAreas[i].style.minHeight = "80px";
        textAreas[i].addEventListener("input", AoDigitarNasTextArea, false);
    }
    function AoDigitarNasTextArea(){
        this.style.height = "auto";
        this.style.height = (this.scrollHeight) + "px";
        this.style.minHeight = "80px";
        parent.redimensionarIframe();
    }
    
    <?php
        //Caso encontre uma edição salva, avisa
        if($existeEdicaoSalva == true){
            echo('parent.mostrarNotificacao("Sua última edição da notícia, foi restaurada.", "#167200", 3500);'.
                 'todosOsCamposEstaoValidos();'.
                 'ocultarBotaoDeAdicionarSlotCasoNaoSejaNecessario();'.
                 'parent.redimensionarIframe();');
        }
    ?>
</script>

<?php
$conteudoQuadroDeAviso = ('
• Para inserir imagens neste arquivo de notícia, primeiro faça upload delas usando a função de carregar imagem.
<br/>
• Lembre-se de salvar as alterações caso precise deixar esta página.
<br/>
• Após criar o arquivo de notícia, você precisa publica-lo para que ele apareça nos slides.
<br/>
• O campo de "Breve descrição" será a descrição da notícia, exibida nas redes sociais, quando o usuário compartilhar o link desta notícia.
<br/>
• Caso não precise usar algum campo, basta deixa-lo vazio, por exemplo, deixe os campos de subtítulos vazios se sua notícia não terá subtítutlos, e somente um texto único.
<br/>
• O código HTML é livre para uso nos campos de texto.
<br/>
• Quebras de linhas serão formatadas para código &ltbr&gt automaticamente.
<br/>
• Se houver uma notícia com o mesmo título na mesma data, a mesma será sobrescrita pela nova notícia.
<br/>
• Fornecer uma imagem de capa inválida, ou inexistente fará com que a página da notícia seja carregada duas vezes pelo navegador.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/paginas/listar-jogos-cadastrados.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados de todos jogos cadastrados
$jogosConsulta = mysqli_query($DB_Metadados, "SELECT JogoID, Nome, UrlIconeJogo, UltimaVersao, PacoteOuNamespace, UrlIconePlataforma FROM JogosDaWindsoft WHERE JogoID > 0");
$i = 0;
while($linha = mysqli_fetch_assoc($jogosConsulta)) {
    $jogoId[$i] = $linha["JogoID"];
    $nome[$i] = $linha["Nome"];
    $urlIconeJogo[$i] = $linha["UrlIconeJogo"];
    $ultimaVersao[$i] = $linha["UltimaVersao"];
    $pacote[$i] = $linha["PacoteOuNamespace"];
    $urlIconePlataforma[$i] = $linha["UrlIconePlataforma"];
    $i += 1;
}
?>

<center>
    <h3>Listar Jogos Cadastrados</h3>
</center>

<?php
    for ($ii = 0; $ii < $i; $ii++) {
        //Imprime o código HTML para representar este jogo
        echo('
        <div style="display: grid; grid-template-columns: 30px 75px auto; background-color: #DBDBDB; padding: 4px; border-radius: 4px; margin-bottom: 4px;">
            <div style="display: flex; justify-content: center; align-items: center; font-weight: bolder;">
                #'.$jogoId[$ii].'
            </div>
            <div style="height: 60px; width: 60px;">
                <img src="'.$urlIconeJogo[$ii].'" width="100%" height="100%" style="border-radius: 50%;" />
                <div style="width: 25px; height: 25px; position: relative; border-radius: 25px; top: -25px; left: 40px; background-color: #ffffff;">
                    <div style="width: 17px; height: 17px; padding: 4px;">
                        <img src="'.$urlIconePlataforma[$ii].'" width="100%" height="100%" />
                    </div>
                </div>
            </div>
            <div style="display: grid; grid-template-rows: 50% 50%;">
                <div style="padding-top: 14px; font-weight: bold; font-size: 18px;">
                    '.$nome[$ii].'
                </div>
                <div style="padding-top: 4px; font-size: 12px; color: #828282;">
                    Versão '.$ultimaVersao[$ii].' ('.$pacote[$ii].')
                </div>
            </div>
        </div>');
        }
    ?>

<!-- código javascript desta página -->
<script type="text/javascript">
</script>

<?php
$conteudoQuadroDeAviso = ('
• Todos os jogos cadastrados no banco de dados da Windsoft, são mostrados aqui.
<br/>
• Quando um jogo é cadastrado no banco de dados da Windsoft, os dados sobre o mesmo são todos reunidos em um só lugar. Assim o Windsoft Launcher dos jogos, podem obter metadados e saber informações, como última versão lançada e etc.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/global/mysql/metadados.inc
<?php 
/*
 * Essa classe é responsável por fazer a conexão ao banco de dados "metadados"
 */

//Este script deve ser incluído no topo dos scripts.

//Abre a conexão para o banco de dados "Metadados"
$DB_Metadados = mysqli_connect("metadados.mysql.uhserver.com", "metadata", "45032978m@rC", "metadados");

mysqli_query($DB_Metadados, "SET NAMES 'utf8'");
mysqli_query($DB_Metadados, 'SET character_set_connection=utf8');
mysqli_query($DB_Metadados, 'SET character_set_client=utf8');
mysqli_query($DB_Metadados, 'SET character_set_results=utf8');

?><file_sep>/browser/noticias/por-data/2019/08/19/a.php
<?php
/*
 * Essa é a página de código base para a geração dos arquivos de notícia da Windsoft.
 * Ao gerar os arquivos PHP de notícia, as variaveis com %ALGO% serão substituidas por conteudo.
 */

$tituloPagina = "a - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
$aplicarHtmlMetaTagsAdicionais = true;
$metaTitulo = "a - Windsoft Notícias";
$metaCapaUrl = "https://a.cp";
$metaCapaWidth = "400px";
$metaCapaHeight = "400px";
$metaUrlPagina = "https://windsoft.xyz/browser/noticias/por-data/2019/08/19/".basename($_SERVER['PHP_SELF']);
$metaDescricao = "";
include("../../../../../includes/cabecalho.inc");
?>

</div>



<div class="paginaDeNoticiaCapaFundo" style="background-image: url(https://a.cp);">
    <div class="paginaDeNoticiaCapaEscurecimento">
        <div class="paginaDeNoticiaCapaTitulo">
            a
        </div>
    </div>
</div>

<div class="content">
    <center>
        <div style="height: auto; display: inline-block;">
            <div style="float: left;">
                <img src="https://windsoft.xyz/browser/noticias/arquivos/data.png" width="20px" height="20px" style="opacity: 0.4;" title="Escrito em" />
                <div style="font-size: 10px; line-height: 20px; vertical-align: middle; color: #afafaf; float: right;">
                    19 de Ago de 2019 as 14:55
                </div>
            </div>
            <div style="margin-left: 5px; float: left;">
                <img src="https://windsoft.xyz/browser/noticias/arquivos/autor.png" width="20px" height="20px" style="opacity: 0.4;" title="Escrito por" />
                <div style="font-size: 10px; line-height: 20px; vertical-align: middle; color: #afafaf; float: right;">
                    marcos4503 (CEO)
                </div>
            </div>
        </div>
    </center>
    <center>
        <div class="fb-like" data-href="https://facebook.com/windsoft.games" data-layout="button_count" data-action="like" data-size="small" data-show-faces="false" data-share="true"></div>
    </center>
    <br/>
    <br/>
    <center>
        fd
    </center>
    <br/>
    <br/>
    <center>
        <h2></h2>
    </center>
    
    <center>
        <h2></h2>
    </center>
    
    <center>
        <h2></h2>
    </center>
    
    <center>
        <h2></h2>
    </center>
    
    <center>
        <h2></h2>
    </center>
    
    <br/>
    <br/>
    <br/>
    <center>
        <div class="paginaDeNoticiaBotoesShare">
                <!-- Botao Facebook -->
                <img class="paginaDeNoticiaBotaoShare" src="https://windsoft.xyz/browser/noticias/arquivos/facebook.png" width="40px" height="40px"
                onclick="AbrirPopUp('https://www.facebook.com/sharer/sharer.php?u=https://windsoft.xyz/browser/noticias/por-data/2019/08/19/<?php echo basename($_SERVER['PHP_SELF']); ?>')"/>
                <!-- Botao LinkedIn -->
                <img class="paginaDeNoticiaBotaoShare" src="https://windsoft.xyz/browser/noticias/arquivos/linked-in.png" width="40px" height="40px"
                onclick="AbrirPopUp('https://www.linkedin.com/shareArticle?mini=true&url=https://windsoft.xyz/browser/noticias/por-data/2019/08/19/<?php echo basename($_SERVER['PHP_SELF']); ?>&title=Veja esta notícia do Windsoft Notícias!')" />
                <!-- Botao Twitter -->
                <img class="paginaDeNoticiaBotaoShare" src="https://windsoft.xyz/browser/noticias/arquivos/twitter.png" width="40px" height="40px"
                onclick="AbrirPopUp('https://twitter.com/intent/tweet?text=Veja esta notícia do Windsoft Notícias! https://windsoft.xyz/browser/noticias/por-data/2019/08/19/<?php echo basename($_SERVER['PHP_SELF']); ?>')" />
                <!-- Botao WhatsApp -->
                <a href="whatsapp://send?text=Veja está notícia do Windsoft Notícias! https://windsoft.xyz/browser/noticias/por-data/2019/08/19/<?php echo basename($_SERVER['PHP_SELF']); ?>" data-action="share/whatsapp/share">
                    <img class="paginaDeNoticiaBotaoShare" src="https://windsoft.xyz/browser/noticias/arquivos/whatsapp.png" width="40px" height="40px" />
                </a>
        </div>
    </center>
    <!-- Abrir popup script -->
    <script>
        function AbrirPopUp(URL){
            window.open(URL, 'targetWindow', 'toolbar=no, location=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=450px, height=450px')
        }
    </script>
    <!-- script do facebook -->
    <div id="fb-root"></div>
    <script>(function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return;
      js = d.createElement(s); js.id = id;
      js.src = 'https://connect.facebook.net/pt_BR/sdk.js#xfbml=1&version=v3.2&appId=1100512010112474&autoLogAppEvents=1';
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));</script>
        
<?php
include("../../../../../includes/rodape.inc");

//Registra a estatística de notícia aberta. Fica no fim para não influenciar a renderição do documento e suas META TAGS
include("../../../../../../global/mysql/metadados.inc");
$consultaEstatistica = mysqli_query($DB_Metadados, "UPDATE NoticiasStats SET NewsAbertasDia = NewsAbertasDia + 1, NewsAbertasSem = NewsAbertasSem + 1, NewsAbertasMes = NewsAbertasMes + 1 WHERE Idade='Atual'");
?><file_sep>/browser/links/facebook.php
<?php
/*
 * Essa página funciona como um redirecionamento para a página da Windsoft Games no Facebook.
 * O arquivo .htaccess possui uma configuração para que seja possível acessa-la com uma URL mais curta.
 */

$tituloPagina = "Facebook - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("../includes/cabecalho.inc");
RedirecionarPara("https://facebook.com/windsoft.games", 3);
?>

    <center>
        <br/>
        Por favor, aguarde, estamos lhe redirecionando para nossa página do Facebook!
        <br/>
        <br/>
        <small>
            <a href="https://facebook.com/windsoft.games">Clique aqui caso não seja redirecionado</a>
        </small>
    </center>

<?php
include("../includes/rodape.inc");
?><file_sep>/browser/microsite/painel/paginas/home.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<!-- Código da página inicial-->
<center>
    <h3>Página Inicial</h3>
    <img src="../imagens/android.png" style="width: 200px;" />
    <br>
    Olá
    <?php
    $id = $_SESSION["id"];
    $consultaPerfil = mysqli_query($DB_Registros, "SELECT Nome FROM Perfis WHERE ID=$id");
    $dadosPerfil = mysqli_fetch_array($consultaPerfil);
    echo($dadosPerfil[0]);
    ?>! Boas vindas ao painel de administração do servidor da Windsoft Games, lembre-se de verificar a anotação atual no Post-it abaixo e atualizar a Documentação do servidor sempre que mudar algo (se necessário). Tenha um bom dia!
    <br>
    <br>
    <br>
    <br>
</center>

<?php
//Faz a consulta de contagem de tickets
$consultaBugs = mysqli_query($DB_Feedbacks, "SELECT TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_NAME='Bugs'");
$dadosBugs = mysqli_fetch_array($consultaBugs);
$consultaOpinioes = mysqli_query($DB_Feedbacks, "SELECT TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_NAME='Opinioes'");
$dadosOpinioes = mysqli_fetch_array($consultaOpinioes);
?>

<center>
    <div style="padding: 10px; border-radius: 4px; background-color: #016F91; margin-bottom: 20px; color: #F2F2F2;">
        Total de tickets enviados por usuários
        <div style="overflow: auto; display: grid; grid-template-columns: 50% 50%; width: 100%;">
            <div>
                <font style="font-size: 20px; font-style: bolder;"><?php echo($dadosOpinioes[0]); ?></font><br>
                <font style="font-size: 12px;">Opiniões</font>
            </div>
            <div>
                <font style="font-size: 20px; font-style: bolder;"><?php echo($dadosBugs[0]); ?></font><br>
                <font style="font-size: 12px;">Bugs</font>
            </div>
        </div>
    </div>
</center>

<?php
//Faz a consulta e obtem os dados do post-it
$consultaPostIt = mysqli_query($DB_Metadados, "SELECT Texto, CorPostIt, CorFonte FROM StaffPostIt WHERE ID=0");
$dadosPostIt = mysqli_fetch_array($consultaPostIt);
?>

<center>
<div style="position: relative; margin-left: auto; margn-right: auto; width: 100%; min-height: 80px;">
<textarea id="post-it" disabled style="border-radius: 4px; background-color: <?php echo($dadosPostIt[1]); ?>; color: #262626; width: 100%; resize: vertical; padding-bottom: 20px; padding-top: 30px; border-style: none; border-width: 0px; max-width: 100%; margin: 0px; padding-left: 0px; padding-right: 0px; min-height: 120px; display: block; border: none; padding-left: 10px; padding-right: 10px;">
<?php echo($dadosPostIt[0]); ?>
</textarea>
<?php
    $codigoEdicaoPostIt = '
    <div id="edicao" style="display: none; position: absolute; height: 18px; width: 200px; bottom: 0px; left: 0px; margin-bottom: 4px; margin-left: 4px;">
        <div style="float: left; margin-right: 5px; background-color: #2A91C9; width: 18px; height: 18px; cursor: pointer;" onclick="alterarCorPostIt(\'0\');">
        </div>
        <div style="float: left; margin-right: 5px; background-color: #E4E800; width: 18px; height: 18px; cursor: pointer;" onclick="alterarCorPostIt(\'1\');">
        </div>
        <div style="float: left; margin-right: 5px; background-color: #FFAC30; width: 18px; height: 18px; cursor: pointer;" onclick="alterarCorPostIt(\'2\');">
        </div>
        <div style="float: left; margin-right: 5px; background-color: #3BC61B; width: 18px; height: 18px; cursor: pointer;" onclick="alterarCorPostIt(\'3\');">
        </div>
        <div style="float: left; margin-right: 5px; background-color: #DB00C9; width: 18px; height: 18px; cursor: pointer;" onclick="alterarCorPostIt(\'4\');">
        </div>
        <img src="../imagens/icones/salvar.png" style="float: left; height: 18px; width: 18px; cursor: pointer;" onclick="salvarPostIt();">
    </div>
    <div id="editor" style="display: block; position: absolute; height: 18px; width: 200px; bottom: 0px; left: 0px; margin-bottom: 4px; margin-left: 4px;">
        <img src="../imagens/icones/editar.png" style="float: left; height: 18px; width: 18px; cursor: pointer;" onclick="modoEdicaoPostIt();">
    </div>
    <div id="editor" style="display: block; position: absolute; height: 30px; width: 100%; top: 0px; margin-bottom: 4px; text-align: center; line-height: 30px;">
        Post-It
    </div>
    ';
    
    if($_SESSION["autoridade"] == 4){
        echo($codigoEdicaoPostIt);
    }
?>
</div>
</center>

<?php
if($_SESSION["autoridade"] == 4){
    echo('
         <br>
         <br>
        <center><h3 style="margin-bottom: 0px;">Requisições diárias feitas pelo MT Assets Patcher Updater</h3></center>
        <div id="chart" style="width: 100%; height: 250px;"></div>
        <center><small>* Sempre que uma requisição for feita no ínicio do mês, os dados dos dias seguintes serão excluídos. Sempre que o MT Assets Patcher Updater se conecta ao servidor, seja para verificar se há uma atualização, ou para atualizar o Patcher do projeto do cliente, o acesso é contato como uma Requisição.</small></center>
         ');
}
?>

<!-- código javascript desta página -->
<script type="text/javascript">
    function modoEdicaoPostIt(){
        document.getElementById("edicao").style.display = "block";
        document.getElementById("editor").style.display = "none";
        document.getElementById("post-it").disabled = false;
    }
    
    function salvarPostIt(){
        parent.mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = parent.novaConexaoPost("ajax-query/atualizar-post-it.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                document.getElementById("edicao").style.display = "none";
                document.getElementById("editor").style.display = "block";
                document.getElementById("post-it").disabled = true;
                
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "texto=" + document.getElementById("post-it").value + "&corDeFundo=" + document.getElementById("post-it").style.backgroundColor);
    }
    
    function alterarCorPostIt(cor){
        if(cor == 0){
            document.getElementById("post-it").style.color = "#262626";
            document.getElementById("post-it").style.backgroundColor = "#227CAD";
        }
        if(cor == 1){
            document.getElementById("post-it").style.color = "#262626";
            document.getElementById("post-it").style.backgroundColor = "#d2d600";
        }
        if(cor == 2){
            document.getElementById("post-it").style.color = "#262626";
            document.getElementById("post-it").style.backgroundColor = "#EAA02A";
        }
        if(cor == 3){
            document.getElementById("post-it").style.color = "#262626";
            document.getElementById("post-it").style.backgroundColor = "#34A81A";
        }
        if(cor == 4){
            document.getElementById("post-it").style.color = "#262626";
            document.getElementById("post-it").style.backgroundColor = "#BF00B2";
        }
    }

    <?php
    //Obtem a contagem de requisições
    $consultaStatsMTPatcherUpdater = mysqli_query($DB_Metadados, "SELECT DadosDestaEstatistica FROM AssetStoreStats WHERE TipoDeEstatistica='MTAssets-PatcherUpdater-Requisicoes'");
    $dadosStats = mysqli_fetch_array($consultaStatsMTPatcherUpdater);
    $armazenamentoStats = json_decode($dadosStats[0]);
    $arrayRequisicoesDiarias = $armazenamentoStats->diasDoMes;
    ?>
    
    //Desenha o gráfico de requisições efetuadas pelo MT Assets Patcher Updater
    google.charts.load('current', {'packages':['corechart', 'bar']});
    google.charts.setOnLoadCallback(desenharGrafico);
    
    //Dados de exibição diário
    dadosPorDia = [["Dia", "Requisições"],<?php
    for ($i = 0; $i < 31; $i++) {
        echo("["."'".($i + 1)."'".",".$arrayRequisicoesDiarias[$i]->requisicoes."]");
        if($i >= 0){
            echo(",");
        }
    }
    ?>];
    
     function desenharGrafico() {
        var chart = new google.visualization.ColumnChart(document.getElementById('chart'));
        chart.draw(google.visualization.arrayToDataTable(dadosPorDia), {legend: {position: "none"}, "chartArea": {"width": "100%", "height": "300px"}});
    }
</script>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/client/metadados/noticias/noticias-metadata.php
<?php
/*
 * Essa classe é responsável por fornecer os metadados de notícias ao client
 */

include("../../../global/sessoes/verificador-de-sessao.inc");
include("../../../global/mysql/metadados.inc");

IgnorarSessaoImprimirMensagemDeConteudoCarregado();
$tempoInicio = microtime(true);
$jsonResposta = new stdClass();

//<!---------------------- Inicio do Script ----------------------------->
$noticiasConsulta = mysqli_query($DB_Metadados, "SELECT Titulo, UrlDaPagina, UrlDaCapa FROM Noticias WHERE Noticia IN (".implode(',', $a=array(1, 2, 3, 4, 5)).")");

$i = 0;
while($linha = mysqli_fetch_assoc($noticiasConsulta)) {
    $titulo[$i] = $linha["Titulo"];
    $urlPagina[$i] = $linha["UrlDaPagina"]
    $urlCapa[$i] = $linha["UrlDaCapa"];
	
    $i += 1;
}

//Retorna os metadados da noticia 1
$jsonResposta->tituloNoticia1 = $titulo[0];
$jsonResposta->urlPaginaNoticia1 = $urlPagina[0];
$jsonResposta->urlImgCapaNoticia1 = $urlCapa[0];
//Retorna os metadados da noticia 2
$jsonResposta->tituloNoticia2 = $titulo[1];
$jsonResposta->urlPaginaNoticia2 = $urlPagina[1];
$jsonResposta->urlImgCapaNoticia2 = $urlCapa[1];
//Retorna os metadados da noticia 3
$jsonResposta->tituloNoticia3 = $titulo[2];
$jsonResposta->urlPaginaNoticia3 = $urlPagina[2];
$jsonResposta->urlImgCapaNoticia3 = $urlCapa[2];
//Retorna os metadados da noticia 4
$jsonResposta->tituloNoticia4 = $titulo[3];
$jsonResposta->urlPaginaNoticia4 = $urlPagina[3];
$jsonResposta->urlImgCapaNoticia4 = $urlCapa[3];
//Retorna os metadados da noticia 5
$jsonResposta->tituloNoticia5 = $titulo[4];
$jsonResposta->urlPaginaNoticia5 = $urlPagina[4];
$jsonResposta->urlImgCapaNoticia5 = $urlCapa[4];

//Insere o tempo da duração das contas no JSON Resposta
$jsonResposta->tempoExecucaoDoScript = number_format(microtime(true) - $tempoInicio, 5) . "ms";
//Imprime o JSON resposta
echo("<pre>" . json_encode($jsonResposta, JSON_PRETTY_PRINT) . "</pre>");

?><file_sep>/browser/javascript/funcoes-ajax.js
/*
 * Essa código force métodos e funções úteis para usar no AJAX do site
 */

function mostrarSpinner(mostrar){
    //Exibe ou oculta o spinner de carregamento
    if(mostrar == true){
        document.getElementById("loadSpinner").style.opacity = "1";
        document.getElementById("blockPointerEvents").style.display = "block";
    }
    if(mostrar == false){
        document.getElementById("loadSpinner").style.opacity = "0";
        document.getElementById("blockPointerEvents").style.display = "none";
    }
}

var funcaoDeCancelamentoNotificacao;
function mostrarNotificacao(mensagem, corDeFundo, tempo){
    //Reseta a notificação, a fazendo reaparecer caso já esteja na tela
    clearTimeout(funcaoDeCancelamentoNotificacao);
    document.getElementById("notificacao").style.transition = "max-height 0ms";
    document.getElementById("notificacao").style.maxHeight = "0px";
    
    //Exibe uma mensagem de notificação (apos um curto periodo)
    setTimeout(function () {
        document.getElementById("notificacao").style.transition = "max-height 300ms";
        document.getElementById("notificacao").style.backgroundColor = corDeFundo;
        document.getElementById("notificacao").innerHTML = "<center><div style=\"height: 10px;\"></div>" + mensagem + "<div style=\"height: 10px;\"></div></center>";
        document.getElementById("notificacao").style.maxHeight = "200px";
    }, 25);
    
    //Define a função para limpar a notificação após um tempo
    funcaoDeCancelamentoNotificacao = setTimeout(function () {
        document.getElementById("notificacao").style.maxHeight = "0px";
    }, tempo);
}

function novaConexaoPost(url){
    //Criar um novo objeto XML
    var xmlreq = new XMLHttpRequest();
    
    //Inicia a conexão
    xmlreq.open("POST", url, true);
    xmlreq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    
    //Processa a conexão de acordo com a função criada e retorna o XMLRequest
    return xmlreq;
}

function definirFuncaoDeSucessoOuErro(xmlreq, funcaoErro, funcaoSucesso){
    //Aguarda a conexão completar
    if(xmlreq.readyState === 4){
        //Verifica o código de resposta
        if(xmlreq.status === 200){
            funcaoSucesso();
        }
        else{
            funcaoErro();
        }
    }
}

function iniciarConexaoPost(xmlreq, dadosPost){
    //Inicia a conexão
    setTimeout(function () { xmlreq.send(dadosPost); }, 2000);
}

function textoDaConexao(xmlreq){
    //Obtem o texto resposta da conexão
    return xmlreq.responseText;
}

//método que exibe o contador de caracteres por alguns segundos
var funcaoEsconderContador;
function exibirContadorDeCaracteres(quantia, quantiaMaxima){
    var contador = document.getElementById("contadorDeCaracteres");
    var contadorTexto = document.getElementById("contadorDeCaracteresTexto");

    contador.style.left = "0px";
    if(quantiaMaxima > 0 && quantia <= quantiaMaxima){
        contadorTexto.innerHTML = quantia + " / " + quantiaMaxima;
        contador.style.backgroundColor = "#319B00";
    }
    if(quantiaMaxima > 0 && quantia > quantiaMaxima){
        contadorTexto.innerHTML = quantia + " / " + quantiaMaxima;
        contador.style.backgroundColor = "#990000";
    }
    if(quantiaMaxima == 0){
        contadorTexto.innerHTML = quantia;
        contador.style.backgroundColor = "#319B00";
    }
        
    clearTimeout(funcaoEsconderContador);
        
    funcaoEsconderContador = setTimeout(function(){
        contador.style.left = "-300px";
    }, 2500);
}

//Método que exibe ou oculta o ícone de emote
var textAreaAlvo;
var ocultarIconeEmoteAposTempo;
function exibirIconeEmote(exibir, textAreaDentroDeUmIframe, textarea){
    //Caso o input esteja dentro do documento principal
    if(textAreaDentroDeUmIframe == false){
        textAreaAlvo = textarea;
    }
    //Caso o input não esteja dentro do documento principal, mas dentro de um iframe
    if(textAreaDentroDeUmIframe == true){
        var iframe = document.getElementsByTagName("iframe")[0];
        textAreaAlvo = iframe.contentWindow.document.getElementById(textarea.id);
    }
    
    if(exibir == true){
        clearTimeout(ocultarIconeEmoteAposTempo);
        document.getElementById("gavetaDeEmotesRaiz").style.opacity = "1";
        document.getElementById("gavetaDeEmotesRaiz").style.pointerEvents = "auto";
    }
    if(exibir == false){
        ocultarIconeEmoteAposTempo = setTimeout(function(){
            document.getElementById("gavetaDeEmotesRaiz").style.opacity = "0";
            document.getElementById("gavetaDeEmotesRaiz").style.pointerEvents = "none";
            document.getElementById("gavetaDeEmotesRaiz").style.bottom = "-100px";
        }, 150);
    }
}

//Método que abre ou fecha a gaveta de emotes
function abrirFecharGavetaDeEmotes(){
    var gaveta = document.getElementById("gavetaDeEmotesRaiz");
    
    if(gaveta.style.bottom == "-100px"){
        gaveta.style.bottom = "0px";
        textAreaAlvo.focus();
        return;
    }
    if(gaveta.style.bottom == "0px"){
        gaveta.style.bottom = "-100px";
        textAreaAlvo.focus();
        return;
    }
}

//Método que adiciona o emote desejado no campo de texto
function adicionarEmote(emote){
    textAreaAlvo.focus();
    
    if (textAreaAlvo.selectionStart || textAreaAlvo.selectionStart == '0') {
        var startPos = textAreaAlvo.selectionStart;
        var endPos = textAreaAlvo.selectionEnd;
        textAreaAlvo.value = textAreaAlvo.value.substring(0, startPos) + emote + textAreaAlvo.value.substring(endPos, textAreaAlvo.value.length);
    }    
    else {
        textAreaAlvo.value += emote;
    }
    
    textAreaAlvo.focus();
}

<file_sep>/browser/microsite/painel/paginas/reportar-venda-asset.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<!-- Código PHP que processa o armazenamento de dados de vendas dos assets e carrega todos os dados dos assets -->
<?php include("includes/mt-assets-historico-de-vendas.inc"); ?>

<center>
    <h3>Reportar Nova Venda</h3>
</center>

<div id="formulario" style="display: block;">
    <center>
        <form autocomplete="off">
            <select id="selectSlide" onchange="aoTrocarAsset();">
                <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('<option value="'.$id[$x].'">'.$nome[$x].'</option>');
                    }
                ?>
            </select>
            
            <input id="copias" type="text" placeholder="Cópias Vendidas" onkeyup="validarCopias();" />
            <div id="copiasStatus" class="statusCampo"></div>
            
            <input type="button" value="Reportar" onclick="salvarReporte();" />
        </form>
    </center>
</div>

<br>
<br>

<center>
    <h3 id="tituloAssetSelecionado"></h3>
</center>

<table style="width: 100%; border-collapse: collapse; font-size: 14px;">
    <tr>
        <th style="width: 33.3%; border: 1px solid #ddd; padding: 4px; text-align: left;">Este Mês</th>
        <th style="width: 33.3%; border: 1px solid #ddd; padding: 4px; text-align: center;">Hoje</th>
        <th style="width: 33.3%; border: 1px solid #ddd; padding: 4px; text-align: right;">Gerado Hoje</th>
    </tr>
    <tr>
        <td style="border: 1px solid #ddd; padding: 4px; text-align: left;" id="vendasDesteAssetMes"></td>
        <td style="border: 1px solid #ddd; padding: 4px; text-align: center;" id="vendasDesteAssetHoje"></td>
        <td style="text-align: right; border: 1px solid #ddd; padding: 4px;" id="receitaDesteAssetHoje"></td>
    </tr>
</table>

<br>

<center>
    <small id="dataPublicacao">Data de Publicação</small>
</center>

<!-- código javascript desta página -->
<script type="text/javascript">
    //Obtem os dados de cada asset
    nomesDosAssets = ["", <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('"'.$nome[$x].'"');
                        if($x != $i){
                            echo(",");
                        }
                    }
                ?>];
    vendasDeHojeCadaAsset = ["", <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('"'.ObterVendasDeHoje($vendasPorDataJson[$x]).'"');
                        if($x != $i){
                            echo(",");
                        }
                    }
                ?>];
    receitaDeHojeCadaAsset = ["", <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('"'.ObterReceitaDeHoje($vendasPorDataJson[$x]).'"');
                        if($x != $i){
                            echo(",");
                        }
                    }
                ?>];
    vendasDesteMesCadaAsset = ["", <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('"'.ObterVendasDesteMes($vendasPorDataJson[$x]).'"');
                        if($x != $i){
                            echo(",");
                        }
                    }
                ?>];
    precoDosAssets = ["", <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('"'.$precoAtual[$x].'"');
                        if($x != $i){
                            echo(",");
                        }
                    }
                ?>];
    dataPublicacaoAssets = ["", <?php
                    for ($x = 1; $x < $i; $x++) {
                        echo('"'.$dataPublicacao[$x].'"');
                        if($x != $i){
                            echo(",");
                        }
                    }
                ?>];
    
    //Preenche os campos ao trocar o asset
    assetSelect = document.getElementById("selectSlide");
    assetSelecionadoId = 1;
    function aoTrocarAsset(){
        assetSelecionadoId = assetSelect.value;
        document.getElementById("tituloAssetSelecionado").innerHTML = "Vendas de " + nomesDosAssets[assetSelecionadoId];
        document.getElementById("receitaDesteAssetHoje").innerHTML = "US$ " + Number(receitaDeHojeCadaAsset[assetSelecionadoId]).toFixed(2);
        document.getElementById("vendasDesteAssetHoje").innerHTML = vendasDeHojeCadaAsset[assetSelecionadoId];
        document.getElementById("vendasDesteAssetMes").innerHTML = vendasDesteMesCadaAsset[assetSelecionadoId];
        var dataPublicacao = dataPublicacaoAssets[assetSelecionadoId].split("-");
        document.getElementById("dataPublicacao").innerHTML = nomesDosAssets[assetSelecionadoId] + " foi publicado na Asset Store pela primeira vez em " + dataPublicacao[2] + "/" + dataPublicacao[1] + "/" + dataPublicacao[0] + ".";
    }
    
    campoCopias = document.getElementById("copias");
    statusCopias = document.getElementById("copiasStatus");
    copiasValido = false;
    function validarCopias(){
        //Desvalida
        campoCopias.style.borderColor = "#990000";
        campoCopias.style.borderWidth = "1px";
        statusCopias.style.color = "#990000";
        copiasValido = false;
        
        if(campoCopias.value == ""){
            statusCopias.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComNumeroFloat(campoCopias.value) == false || campoCopias.value.indexOf(',') > -1 || campoCopias.value.indexOf('.') > -1){
            statusCopias.innerHTML = "Utilize apenas números inteiros.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoCopias.style.borderColor = "";
        campoCopias.style.borderWidth = "";
        statusCopias.innerHTML = "";
        copiasValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarCopias();
        
        if(copiasValido == true){
            return true;
        }
        if(copiasValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que reporta a venda
    function salvarReporte(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/reportar-venda-asset.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "id=" + assetSelecionadoId +
                                      "&copiasVendidas=" + document.getElementById("copias").value +
                                      "&precoAsset=" + precoDosAssets[assetSelecionadoId]);
        }
    }
    
    //Função que atualiza os dados na tela
    function AtualizarDadosNaTela(id, quantidadeVendida, precoVenda){
        document.getElementById("copias").value = "";
        vendasDeHojeCadaAsset[id] = parseInt(vendasDeHojeCadaAsset[id]) + quantidadeVendida;
        receitaDeHojeCadaAsset[id] = parseInt(receitaDeHojeCadaAsset[id]) + precoVenda;
        vendasDesteMesCadaAsset[id] = parseInt(vendasDesteMesCadaAsset[id]) + quantidadeVendida;
        document.getElementById("vendasDesteAssetHoje").innerHTML = vendasDeHojeCadaAsset[assetSelecionadoId];
        document.getElementById("vendasDesteAssetMes").innerHTML = vendasDesteMesCadaAsset[assetSelecionadoId];
        document.getElementById("receitaDesteAssetHoje").innerHTML = "US$ " + Number(receitaDeHojeCadaAsset[assetSelecionadoId]).toFixed(2);
    }
    
    aoTrocarAsset();
</script>
    
<?php
$conteudoQuadroDeAviso = ('
• Utilize essa tela para informar que uma ou mais cópias de um determinado asset, foram vendidas.
<br>
• Utilize um número negativo para reduzir a quantidade de vendas hoje.
<br>
• Caso já haja uma venda para o determinado asset, na data de hoje, e uma nova venda for informada, a venda será somada com as vendas existentes na data de hoje.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/javascript/validadores-regex.js
/*
 * Classe responsável por fornecer métodos para validar strings
 */

function contemNumeros(string) {
    var regex = /[0-9]/;
    return regex.test(string);
}

function contemLetrasMaiusculas(string) {
    var regex = /[A-Z]/;
    return regex.test(string);
}

function contemCaracteresEspeciais(string) {
    var regex = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/;
    return regex.test(string);
}

function pareceComEmail(string) {
    var regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return regex.test(string);
}

function somenteLetrasNumeros(string) {
    var regex = /^[0-9a-zA-Z]+$/;
    return regex.test(string);
}

function somenteLetras(string) {
    var regex = /^[a-zA-Z]+$/;
    return regex.test(string);
}

function somenteNumeros(string) {
    var regex = /^[0-9]+$/;
    return regex.test(string);
}

function contemHtml(string) {
    var regex = /<(\"[^\"]*\"|'[^']*'|[^'\">])*>/;
    return regex.test(string);
}

function pareceComUrl(string) {
    var regex = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/;
    return regex.test(string);
}

function pareceComNumeroFloat(string) {
    var regex = /^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/;
    return regex.test(string);
}<file_sep>/browser/includes/cabecalho.inc
<?php
/*
 * Essa classe é responsável por fornecer o cabeçalho das páginas. Essa classe fornece um cabeçalho diferente para 
 * usuários não logados e um cabeçalho diferente para usuários logados.
 * 
 * É possível esconder o cabeçalho setando a variavel "?modoApp" no fim da URL
 */

//A OPÇÃO ABAIXO, DESABILITA TODAS AS MENSAGENS DE ERRO GERADAS PELO PHP. É ÚTIL QUANDO
//UMA PÁGINA ESTÁ PÚBLICA E NÃO É DESEJADO A EXIBIÇÃO DAS MENSAGENS DE DEPURAÇÃO
//QUANDO UMA PÁGINA ESTIVER EM DESENVOLVIMENTO, NÃO É RECOMENDADO A UTILIZAÇÃO DISTO.
if($exibirLogsDeDepuracaoDoPHP == false){
    error_reporting(E_ERROR | E_PARSE);
}

include __DIR__ . ("/../../global/sessoes/verificador-de-sessao.inc");

//Método para redirecionar o usuário
function RedirecionarPara($url, $tempoSegundos){
    header( "refresh:".$tempoSegundos.";url=".$url);
}


//Verificar se já está logado. Redireciona o usuário para a página inicial, caso possua sessão
function RedirecionarParaHomeCasoEstejaLogado(){
    if(VerificarSessao(false, false) == true){
        header("Location:"."https://windsoft.xyz");
        exit();
    }
}


//Verificar se não está logado. Redireciona o usuário para a página de login, caso não possua sessão
function RedirecionarParaLoginCasoNaoEstejaLogado(){
    if(VerificarSessao(false, false) == false){
        header("Location:"."https://windsoft.xyz/browser/login.php");
        exit();
    }
}

//Verifica a sessão (A inicializa e obtem os dados)
VerificarSessao(false, false);

//------------- Codigo do menu da direita, quando o usuário não estiver logado
$htmlMenuSemSessao = ('
<a href="https://windsoft.xyz/browser/registrar.php">
   <div style="height: 100%; float: left; margin-right: 10px"> 
      <div class="botoesTopbar">
         Registrar
      </div>
   </div>
</a>
<a href="https://windsoft.xyz/browser/login.php">
   <div style="height: 100%; float: left;">
      <div class="botoesTopbar">
         Entrar
      </div>
   </div>
</a>
');
//------------- Codigo do menu da direita, quando o usuário estiver logado
//Caso a autoridade seja maior que 0, cria o código HTML para a opção de acessar o painel
if($_SESSION["autoridade"] > 0){
   $codigoDeAcessoPainel = "<a href=\"https://windsoft.xyz/browser/microsite/painel/client.php\">Admin Painel</a>";
}
$htmlMenuComSessao = ('
<div style="height: 100%; float: left; margin-right: 4px"> 
    <img src="https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_'.$_SESSION["idIcone"].'.png" heigth="30px" width="30px" onclick="myFunction()" class="botaoMenuLogado" id="iconeTopbar" />
</div>
<div style="height: 100%; float: left;"> 
    <img src="https://windsoft.xyz/browser/imagens/menu.png" heigth="30px" width="30px" onclick="myFunction()" class="botaoMenuLogado" />
</div>
<div class="menuLogado">
    <div id="menuLogadoId" class="menuLogadoConteudo">
        <a href="#"><font color="#686868">'. $_SESSION["nick"] .'</font></a>
        <a href="https://windsoft.xyz/">Página Inicial</a>
        '.$codigoDeAcessoPainel.'
        <a href="https://windsoft.xyz/browser/perfil.php">Meu Perfil</a>
        <a href="https://windsoft.xyz/browser/preferencias.php">Preferências</a>
        <a href="https://windsoft.xyz/browser/logout.php">Desconectar</a>
    </div>
</div>
');


//Cria o código para meta tags das redes sociais, caso seja executado a função
if($aplicarHtmlMetaTagsAdicionais == false){
   $htmlMetaTagsAdicionais = "";
}
if($aplicarHtmlMetaTagsAdicionais == true){
   $htmlMetaTagsAdicionais = '
        <meta property="og:title" content="'.$metaTitulo.'" />
        <meta property="og:type" content="article" />
        <meta property="og:image" content="'.$metaCapaUrl.'" />
        <meta property="og:image:width" content="'.$metaCapaWidth.'" />
        <meta property="og:image:height" content="'.$metaCapaHeight.'" />
        <meta property="og:url" content="'.$metaUrlPagina.'" />
        <meta property="og:description" content="'.$metaDescricao.'" />
        <meta property="fb:app_id" content="1100512010112474" />
    ';
}


//------------- Codigo base do cabeçalho
$htmlCabecalho = ('
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>'.$tituloPagina.'</title>
    <link rel="icon" href="'. __DIR__ . '/../favicons/favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="'. __DIR__ . '/../favicons/favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" href="' . __DIR__ . '/../estilos/estilo-base.css" media="screen and (min-width: 128px)" />
    <link rel="stylesheet" href="' . __DIR__ . '/../estilos/estilo-scrollbar.css" media="screen and (min-width: 128px)" />
    <link rel="stylesheet" href="' . __DIR__ . '/../estilos/estilo-inputs.css" media="screen and (min-width: 128px)" />
    <link rel="stylesheet" href="' . __DIR__ . '/../estilos/estilo-divs.css" media="screen and (min-width: 128px)" />
    <link rel="stylesheet" href="' . __DIR__ . '/../estilos/estilo-pag-noticia.css" media="screen and (min-width: 128px)" />
    <link rel="stylesheet" href="' . __DIR__ . '/../estilos/estilo-animations.css" media="screen and (min-width: 128px)" />
    <meta name="viewport" content="width=device-width" />
    <meta name="theme-color" content="#0055A5" />
    %METATAGS_ADICIONAIS%
    
    <script src="' . __DIR__ . '/../javascript/funcoes-ajax.js" type="text/javascript"></script>
    <script src="' . __DIR__ . '/../javascript/validadores-regex.js" type="text/javascript"></script>
</head>
<body>
   <div id="blockPointerEvents"></div>
   <div id="loadSpinner" class="loadingSpinner">
      <div style="position: absolute; background-color: #F2F2F2; border-radius: 6px; padding: 10px; display: flex; justify-content: center; align-items: center;">
         <img src="' . __DIR__ .'/../imagens/spinner.gif" width="40px" height="40px" />
      </div>
   </div>
    <div class="topBar">
        <div style="width: 100%; max-width: 640px; margin-left: auto; margin-right: auto; display: block; overflow: visible;">
            <a href="https://windsoft.xyz">
                <img src="' . __DIR__ . '/../imagens/logotipo.png' . '" title="Logotipo da Windsoft" class="logoImg" height="30px" style="margin-left: 10px; margin-top: 5px; margin-bottom: 5px;" />
            </a>
            <div style="float: right; display: inline-block; height: 30px; margin-right: 10px; margin-top: 5px; margin-bottom: 5px;">
                %MENU%
            </div>
        </div>
    </div>
   <div class="notificacao" id="notificacao"></div>
   <div id="contadorDeCaracteres" class="contadorDeCaracteres">
       <div class="contadorDeCaracteresConteudo">
           <small>
               Chars
           </small>
           <div id="contadorDeCaracteresTexto">
               0/0
           </div>
       </div>
   </div>
   <div id="gavetaDeEmotesRaiz" class="gavetaDeEmotesRaiz" style="bottom: -100px; opacity: 0; pointer-events: none;">
      <div class="botaoDaGavetaDeEmotes" onclick="abrirFecharGavetaDeEmotes();">
         <center>
            <img src="' . __DIR__ . '/../imagens/emote.png" width="20px" height="20px"/>
         </center>
      </div>
      <div class="gavetaDeEmotes">
         <div style="padding: 10px; display: grid; grid-template-columns: 20% 20% 20% 20% 20%;">
            <div class="emoteDaGaveta" onclick="adicionarEmote(\'☺\');">☺</div>
            <div class="emoteDaGaveta" onclick="adicionarEmote(\'☹\');">☹</div>
            <div class="emoteDaGaveta" onclick="adicionarEmote(\'✌\');">✌</div>
            <div class="emoteDaGaveta" onclick="adicionarEmote(\'★\');">★</div>
            <div class="emoteDaGaveta" onclick="adicionarEmote(\'♫\');">♫</div>
            <div class="emoteDaGaveta" onclick="adicionarEmote(\'♥\');">♥</div>
         </div>
      </div>
   </div>
   <div class="content">
        <div style="height: 50px;"></div>
');


//Imprime o código de cabeçalho com o código de MENU se o usuário estiver logado, ou não
if(VerificarSessao(false, false) == false){
   echo(str_replace(array("%MENU%", "%METATAGS_ADICIONAIS%"), array($htmlMenuSemSessao, $htmlMetaTagsAdicionais), $htmlCabecalho));
}
if(VerificarSessao(false, false) == true){
   echo(str_replace(array("%MENU%", "%METATAGS_ADICIONAIS%"), array($htmlMenuComSessao, $htmlMetaTagsAdicionais), $htmlCabecalho));
}

?><file_sep>/browser/termos-de-uso.php
<?php
/*
 * Essa página HTML contém as informações de Termos de Uso da Windsoft Games. Sempre que ela for atualizada, deve-ser 
 * atualizada a data de atualização.
 */
 
$tituloPagina = "Termos de Uso - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
?>

    <br/>
    <center><b>Termos de uso da Windsoft Games</b>
    <br/>
    <br/>
    <font color="#545454"><i>Este termo de uso está em vigor desde 22 de maio de 2018 e foi modificado pela última vez em 14 de dezembro de 2018.</i></font></center>
    <br/>
    <br/>
    <b>1. </b>Se você quiser remover todos os seus dados que a Windsoft Games acessa atráves da sua conta Windsoft ID, de acordo com seu concentimento,
     entre em contato em nosso e-mail (<EMAIL>) para fazer isso. Para obter ajuda, utilize tambem o suporta da Windsoft ou entre em contato atráves
      do e-mail <EMAIL>.
    <br/>
    <br/>
    Windsoft Games ("nós" ou "nosso(s)"), oferece aplicativos, jogos ("os apps") ou conteúdos adicionais que adiante serão referidos como "Serviços".
    <br/>
    Estes termos de uso ("Acordo") incluem noss política de uso dos nossos serviços, obrigações e restrições em relação ao uso dos mesmos. Você
     só pode usar este serviços se concordar com estes termos. Ao usar os nossos serviços você concorda em estar vinculado a estes termos.
    <br/>
    <br/>
    Sua privacidade é importante para nós. Este acordo inclui também nossa política de privacidade (https://windsoft.xyz/privacy), que explica
     como coletamos seus dados sob seu concentimento e como o processamos. Por favor, leia nossa política de privacidade.
    <br/>
    <br/>
    Podemos modificar estes termos de tempos em tempos. Você irá concordar com qualquer modificação ao continuar utilizando nossos serviços. Por isso é
     importante que você revise este acordo sempre que possível. Caso não concorde com algum termo ou modificação, interrompa o uso dos nossos serviços.
    <br/>
    <br/>
    <b>I. Nosso centro dos serviços o "Windsoft ID" / Sua conta / Suspensão e Banimento</b>
    <br/>
    <br/>
    A Windsoft Games possui uma central, o Windsoft ID, onde todos os nossos clientes podem pedir ajuda, ter notícias e notificações sobre nós,
     criarem perfis e obter recursos exclusivos como suporte rápido, recebimento gratuito de itens virtuais (será explicado mais adiante) e etc.
      Essa central pode ser acessada atráves do nosso site (windsoft.xyz) ou atráves dos nossos jogos (que por sua vez, podem ser baixados em mercados como o Google Play).
      Alguns de nossos serviços possuem conexão com o Windsoft ID permitindo que nossos clientes possam fazer uso destes recursos atráves de nossos serviços.
       Para utilizar um ID você precisa registrar uma conta "uma conta, ou Windsoft ID". Ao criar ou utilizar uma conta você concorda que:
    <br/>
    <b>1. </b>Tem 13 (treze) anos ou mais;
    <br/>
    <b>2. </b>Você possui permissão de um dos seus pais ou de um guardião legal para utiliza-lo caso tenha entre 13 e 18 anos;
    <br/>
    <b>3. </b>Podemos recolher algumas informações pessoais superficiais para o registro (como nome, idade, gênero e endereço de e-mail) como definido
     em nossa política de privacidade (https://windsoft.xyz/privacy);
    <br/>
    <b>4. </b>Assume total responsabilidade pelo uso indevido de sua conta, feita por outras pessoas com ou sem sua autorização;
    <br/>
    <b>5. </b>Assume responsabilidade por manter confidencial suas credencias de acesso (login, senha e etc).
    <br/>
    Sem limitar qualquer coisa neste acordo, nos reservamos o direito de excluir, suspender, ou encerrar o acesso total a sua conta caso constatemos a nosso
     exclusivo critério que você descumpriu qualquer um dos termos presentes neste acordo, tambem podemos fazer isso por qualquer motivo, a qualquer
      momento ou sem motivo, com ou sem aviso prévio e sem responsabilidade, inclusive no momento que determinarmos que não iremos mais oferecer este serviço.
       O Windsoft ID tambem é considerado um de nossos serviços.
    <br/>
    <br/>
    <b>II. Compras / Pagamentos / Reembolsos</b>
    <br/>
    <br/>
    Podemos vender itens virtuais, ou desbloqueio de conteúdos adicionais em nossos serviços (vamos referir a esses itens e conteúdos como "produtos")
     como determinado abaixo neste termo. Essas vendas ocorrem dentro dos nossos serviços. O preço de qualquer um desses produtos é especificado no momento 
      da compra. Nós vendemos estes produros atráves de terceiros (como o Google Play), e estes processam seus dados (como numero de cartão de crédito) 
      e permitem a compra via cartão de crédito ou outros meios.
       Você concorda que não somos responsáveis por qualquer erro na compra ou no débito causadas por terceiros. Estes terceiros tem seus próprios termos
        e política de privacidade, ao utilizar um deles para fazer a compra de nossos produtos, leia seus termos e política de privacidade.
         Nossos produtos podem estar disponíveis a venda dentro dos nossos aplicativos ou jogos, gratuitos para download ou não. Alguns de nossos serviços
          gratuitos ou não, podem conter anúncios de terceiros que podem te redirecionar para o site dos mesmos. Nenhum reembolso é concedido na compra de
           itens virtuais, mas um reembolso pode ou não ser concedido na compra de um serviço pago para download em um mercado de terceiros (como o Gooogle Play).
            Lembre-se de ler as políticas e termos destes para saber quais são suas políticas de reembolso e compra.
    <br/>
    <br/>
    <b>III. Itens virtuais</b>
    <br/>
    <br/>
    Alguns de nossos serviços podem permitir que você "ganhe" ou "compre":
    <br/>
    <b>1. </b>a moeda virtual, incluindo, mas não limitando, a moedas, cédulas, fichas, diamantes ou pontos, todos para uso de nossos serviços;
    <br/>
    <b>2. </b>itens virtuais no jogo(justamente com moeda virtual ou dinheiro real);
    <br/>
    <b>3. </b>determinados beneficios em nossos serviços ("itens virtuais").
    <br/>
    Itens virtuais não tem valor no mundo real e não podem ser trocados por moeda real, bens ou outros itens de valor monetário. Mesmo no caso de você ter
     itens virtuais não utilizados em sua conta no momento do banimento, encerramento ou fechamento da mesma, quer tenha acontecido voluntáriamente ou
      não, todas as vendas são finais, nenhum reembolso será concedido a não ser em nosso exclusivo e absoluto critério. A compra de qualquer item virtual
       é apenas a aquisição de uma licensa para usar o item virtual nos serviços aplicáveis e não transfere a propríedade do item virtual a você. Esta licensa
        é pessoal e não pode ser comercializada ou transferida, cedida, dada ou sublicenciada. Dessa forma, não reconhecemos qualquer venda, transferência,
         atribuição, presente comercialização ou subliciamento destes itens virtuais, seja por "dinheiro real", bens ou por troca de serviços ou favores.
          Qualquer transferência pode estar sujeita a encerramento de sua conta nos nossos serviços.
    <br/>
    <br/>
    <b>IV. Conduta online</b>
    <br/>
    <br/>
    Como usuário de qualquer um dos nossos serviços, você concorda em usa-los somente para fins legais. Atividades proibidas específicas incluem, mas não se
     limitam a:
    <br/>
    <b>1. </b>tentativa de burlar, desativar ou de qualquer forma interferir com as características relacionadas à segurança dos nossos serviços ou caracterísitcas
     que previnam ou restrinjam o uso ou cópia de qualquer conteúdo ou imponham limitação sobre o uso dos serviços ou conteúdo nele;
    <br/>
    <b>2. </b>uso de trapaças, tirar proveito de vulnerabilidades, softwares de automação, bots, hacks ou qualquer outro software não autorizado projetado
     para interferir ou modificar com os serviços e se aproveitar dessas trapaças ou vunerabilidades;
    <br/>
    <b>3. </b>uso de qualquer software que intercepte, processe ou de alguma forma colete informações sobre outros usuários ou cópias;
    <br/>
    <b>4. </b>interferir, interromper ou criar uma sobrecarga em nossos serviços, servidores ou rede de dos serviços conectados;
    <br/>
    <b>5. </b>tentar se passar por outro usuário ou pessoa;
    <br/>
    <b>6. </b>coletar, solicitar ou postar senhas ou informações de identificação de pessoas;
    <br/>
    <b>7. </b>usar o nome de usuário e senha de outro titular da conta em qualquer momento ou divulgar estas credencias a terceiros;
    <br/>
    <b>8. </b>sublicenciar, vender, trocar, alugar, arrendar, presentear, transmitir ou transferir itens virtuais na sua conta ou sua própria conta a terceiros;
    <br/>
    <b>9. </b>usar várias contas, procedimentos manuais, bots, scripts ou outros processos a fim de acumular itens virtuais;
    <br/>
    <b>10. </b>usar os serviços de forma comercial, incluindo transferência de itens virtuais em troca de dinheiro real.
    <br/>
    Você terá qualquer conta de nossos serviços encerrada caso participe de alguma dessas atividades.
    <br/>
    <br/>
    <b>V. Conteúdo</b>
    <br/>
    <br/>
    <b>1. Direitos de propriedade</b>
    <br/>
    Com exceção de conteúdos postados por usuários em nossos serviços ("conteúdo de usuário"), todos os materiais contidos nos serviços, itens virtuais,
     e o software, gráficos e todas as marcas (incluido Windsoft Games, Windsoft ID e o titúlo dos nossos serviços) são de propríedade ou controladas pela
      Windsoft Games. Você não pode remover, apagar, publicar, transmitir, participar na transferência ou venda de, ou de qualquer forma explorar quaisquer
       materiais de propriedade total ou em parte. Sujeito à sua conformidade com este acordo e quaisquer outras políticas pertinentes relacionadas a nossos
        serviços, nós lhe concedemos uma licensa limitada não-exclusiva, intransferível e revogável sujeita às limitações aqui para acessar e usar os serviços
         e materiais de propriedade para os próprios fins de entretenimento não comerciais compativéis e com finalidade dos serviços. Você concorda
          em não utilizar os serviços para qualquer outra finalidade.
    <b>2. Distribuição/Envio de conteúdo</b>
    <br/>
    Ao nos enviar conteúdo ou materiais ("seu conteúdo") por meio dos serviços, incluindo, sem limitação, o upload de quaisquer materiais, você nos concede
     automaticamente, ou garante que o propietário de tal conteúdo expressamente nos concedeu direito livre e licença de royalties irrevogável, sublicenciavel,
      transferível e não-exclusivo para utilizar, reproduzir, publicar, traduzir, preparar trabalhos derivados, copiar, executar, e distribuir o seu conteúdo,
       incluindo todas as patentes, marcas, segredo comercial, direitos autorais ou outros direitos de propriedade, bem como conteúdo e seu nome de usuário,
        nome real e semelhança (se submetido), no todo ou em parte, em todo o mundo. Você também concede a cada usuário dos serviços uma licensa não-exclusiva
         para acessar o seu conteúdo, por meio dos serviços e usar, reproduzir, distribuir, exibir e executar seu conteúdo conforme permitido pela funcionalidade
          dos serviços e nos termos deste contrato. As licensas concedidas acima em seu conteúdo são perpétuas e só terminarão se você remover ou solicitar a remoção
           do conteúdo dos serviços (tal licença terminará dentro de um tempo rasoável após o seu pedido para remover, ou remoção do conteúdo).
            Você entende e concorda, porém, que podemos reter, mas não exibir, distribuir ou executar as cópias do servidor, de seu conteúdo que foram removidas
             ou apagadas. Sujeito a estas concessões, você retém todos e qualquer direitos que possam existir em seu conteúdo. Podemos divulgar qualquer
              um dos seus conteúdos ou comunicação eletrônica de qualquer tipo (I) para satisfazer qualquer lei, regulamento ou solicitação governamenta,
               (II) se tal revelação for necessária ou apropriada para operar os nossos serviços, (III) para proteger os direitos de propriedade da Windsoft Games
                e nossos integrantes ou (IV) para proteger qualquer usuário.
    <br/>
    <b>3. Publicidade</b>
    <br/>
    Ao usar nossos serviços, você poderá encontrar publicidade. Assim, você concorda com nossa Política de Privacidade em relação a publicidade. Para
     mais informações leia nossa política de privacidade, disponível em https://windsoft.xyz/privacy. A Windsoft Games não é responsável pelos produtos
      e serviços mostrados por terceiros.
    <br/>
    <b>4. Envios não solicitados</b>
    <br/>
    Nós gostamos de ouvir nossos usuários e receber comentários sobre nossos serviços. Infelizmente porém, não podemos simplesmente aceitar ideias criativas,
     sugestões ou algo parecido que não foram solicitadas. Esperamos que você entenda que a intenção desta política é evitar mal-entendidos futuros quando
      projetos desenvolvidos por nós sejam semelhantes a outros trabalhos criativos. Portanto, devemos, infelizmente, pedir que você não nos envie quaisquer
       materiais criativo originais, tais como ideias de jogo ou arte original. Valorizamos seus comentários sobre nossos serviços e produtos. Se apesar
        de nossa solicitação que você não envie quaisquer outros materiais criativos, você nos enviar sugestões, ideias, notas, desenhos, conceitos ou outras
         informações (coletivamente, os "envios não solicitados"), os envios não-solicitados serão considerados, devendo permanecer de propriedade da Windsoft Games.
          Nenhum dos envios não-solicitados ficará sujeito a qualquer obrigação de confiança por parte de nós, e não seremos responsáveis por qualquer uso ou
           divulgação de quaisquer envios não solicitados. Sem limitação do acima exposto, seremos proprietários exclusivos de todos os direitos existentes
            atualmente conhecidos ou futuros para os envios não-solicitados de qualquer tipo de natureza. Você renuncia a todos e  quaisquer direitos morais
             em tais envios não-solicitados, bem como qualquer reinvidicação de direito de crédito ou de aprovação. O anterior é igualmente aplicável a todos
              os envios criativos que você fizer a nosso pedido específico, salvo acordo em contrário por escrito.
    <br/>
    <br/>
    <b>VI. Aviso de infração</b>
    <br/>
    <br/>
    Sem limitar precedente, se você acredita que qualquer conteúdo, incluindo o conteúdo do usuário ou outros materiais publicados nos nossos serviços constitui,
     uma violação dos seus direitos autorais ou marcas registradas, vamos responder protamente a qualquer notificação devidamente apresentada contendo as informações
      detalhadas abaixo. Por favor, envie todos os avisos para o seguinte endereço de e-mail <EMAIL>.
    <br/>
    <b>1. </b>Uma assinatura física ou eletrônica da pessoa autorizada a agir em nome do proprietário de um direito exclusivo que supostamente foi violado.
    <br/>
    <b>2. </b>Identificação da obra cujos direitos se alega terem sido violados.
    <br/>
    <b>3. </b>Identificação do material tido como violado ou como objeto de atividade ilícita que deve ser removido ou cujo acesso deve ser desativado, alem de informações
     suficientes para que possamos localizar o material.
    <br/>
    <b>4. </b>Informações razoavelmente suficientes para nos permitir entrar em contato com o reclamante, tais como e-mail ou rede social.
    <br/>
    <b>5. </b>Uma declaração de que a parte reclamante acredita de boa fé de que o uso do material da forma reclamada não está autorizado pelo proprietário dos
     direitos autorais, seu agente ou pela lei;
    <br/>
    <b>6. </b>Uma declaração de que as informações contidas na notificação são precisas e, sob pena de perjúrio, que a parte reclamante está autorizada a
     agir em nome do proprietário de um direito exclusivo que supostamente está sendo infringido.
    <br/>
    <br/>
    <b>VII. Comunicações eletrônicas</b>
    <br/>
    <br/>
    Quando você usa os serviços ou envia e-mails para nós, você esta se comunicando eletrônicamente conosoco. Você concorda em receber nossas comunicações
     eletrônicamente. Nós iremos nos comunicar com você por e-mail ou postando notícias no aplicativo Windsoft. Você concorda que todos os acordos,
      notificações, divulgações e outras comunicações que fornecemos eletronicamente satisfazem quaisquer requisitos legais tanto quanto comunicações que sejam
       feitas por escrito.
    <br/>
    <br/>
    <b>VIII. Links</b>
    <br/>
    <br/>
    Os serviços podem conter links para sites operados por terceiros, inclusive por meio de anúncios dentro dos serviços. Nós não monitoramos ou controlamos
     os sites linkados e não responsabilizamos pela exatidão, integridade, pontualidade, confiabilidade ou disponibilidade de qualquer parte do conteúdo carregado,
      exibido, ou distribuído, ou dos produtos ou serviços disponíveis nestes locais. Se você optar por acessar qualquer site de terceiros, você o faz por sua
       conta e risco. A presença de um link para um site de terceiro não constitui ou implica a nossa aprovação, patrocínio ou recomendação do terceiro ou do
        conteúdo, dos produtos ou dos serviços contidos ou disponíveis no site de terceiros. Reservamo-nos o direito de desabilitar links de ou para site de
         terceiros.
    <br/>
    <br/>
    <b>IX. Isenções e limitações de responsabilidades</b>
    <br/>
    <br/>
    Os serviços são prestados por nós e baseado em nossa hospedagem "como está" e "como disponível". Até ao limite máximo permitido pela lei aplicável, isentamos
     todas as garantias implícitas, incluindo, mas não limitados a garantias de comercialização e adequado a um determinado fim. Sem limitar o precedente, nós
      não fazemos qualquer representação ou garantia de qualquer tipo, expressa ou implícita: (I) Quanto ao funcionamento dos serviços ou a informação, conteúdo,
       materiais ou produtos incluídos nela; (II) Que o uso dos serviços será 100% seguro, initerrupto ou livre de erros; (III) Quanto à precisão, confiabilidade,
        ou atualidade de qualquer informação, conteúdo ou serviço providos; ou (IV) que os servidores ou e-mails enviados a partir ou em nome da Windsoft Games
         estão livres de vírus ou outros componentes nocivos.
          Sob nenhuma circustância nós nos responsabilizamos por quaisquer danos que resultem do uso ou da incapacidade de utilizar os serviços, incluindo, mas
           não limitando a confiança de um usuário em qualquer informação obtida a partir dos serviços ou que resultem de erros, omissões, interrupções, exclusão
            de arquivos ou e-mail, defeitos, vírus, atrasos na operação ou transmissão ou qualquer falha de desempenho, resultantes ou não de forma maior, falha
             de comunicação, roubo, destruição ou acesso não autorizado aos registros, programas ou serviços da Windsoft Games. Você reconhece que este parágrafo
              assim como todo este termo é aplicável a todos os conteúdos, produtos e serviços disponíveis por meio de serviços.
               Nós não seremos responsáveis por quaisquer danos indiretos, incidentais, especiais ou consequentes decorrentes da utilização dos serviços ou a
                compra de qualquer produto, real ou virtual, ainda que nós tenhamos sido avisados da possibilidade de tais danos.
    <br/>
    <br/>
    <b>X. Legalidade</b>
    <br/>
    <br/>
    Você está sujeito a todas as leis do(s) estado(s) e país(es) em que você reside a partir do qual você acessa os serviços e é o único resposável por obedecer
     essas leis. Você concorda que não podemos ser responsabilizados se as leis aplicáveis a você restringem ou proíbem a sua participação. Nós não fazemos
      representações ou garantias, implícitas ou explícitas, a partir de seu direito legal de participar de quaisquer aplicativos e passatempos oferecidos por
       meio dos serviços nem qualquer pessoa afiliada ou aleganddo afiliação com os serviços têm autoridade para fazer tais representações ou garantias.
    <br/>
    <br/>
    <b>XI. Leis aplicáveis / Jurisdição</b>
    <br/>
    <br/>
    Os serviços são criados e controlados por nós no seu país de residência. Como tal, as leis do seu páis de residência irão reger estes termos de uso sem dar
     efeito a quaisquer disposições de lei que direciona a escolha das leis de outro Estado.
      Você de forma irrevogável e incondicional, concorda em submeter à exclusiva jurisdição dos tribunais do seu país de residência para qualquer litígio emergente
       ou relacionado ao uso ou compra feita por meio dos serviços (e concorda em não iniciar qualquer litígio que lhe diz respeito, exceto em tais tribunais).
        Você concorda em indenizar e insentar a Windsoft Games, e/ou nossos respectivos integrantes, funcionários, agentes, parceiros e funcionários, de qualquer
         perda, responsabilidade, reclamação, ou demanda, incluindo honorários advocáticos razoáveis, feitos por qualquer terceiro devido a ou resultantes da sua
          utilização dos serviços em violação do presente acordo e/ou decorrente de uma violação do presente acordo e/ou qualquer violação de seus representações
           e garantias estabelecidas acima e/ou se o seu conteúdo nos atribui a responsabilidade de terceiros.
    <br/>
    <br/>
    <b>XII. Separação</b>
    <br/>
    <br/>
    As disposições do presente acordo destinam-se a ser divisíveis. Se por algum motivo qualquer disposição do presente acordo for considerada inválida ou
     inexequível, no todo ou em parte, em qualquer jurisdição, tal disposição, como tal jursidição, ser ineficaz na medida de tal invalidade ou inéficacia de
      qualquer forma, isso não afeta a válidade ou mesmo aplicabilidade em qualquer outra jurisdição ou as demais disposições deste acordo em qualquer jurisdição.
    <br/>
    <br/>
    <b>XIII. Suporte</b>
    <br/>
    <br/>
    Sem prejuízo das demais disposições do presente acordo, nós tentaremos lhe ajuda-lo da maneira que pudermos e como nós é possivel, em qualquer dúvidas ou
     problemas que você pode ter com os serviços ou qualquer uma de suas compras por meio dos serviços. Para nos contatar, envie um e-mail para <EMAIL>.
      Ele vai acelerar seu pedido de assistência, proporcionando a nós todas informações necessárias para resolver seu problema o mais rápido possível.
    <br/>
    <br/>
    <b>XIV. Outro</b>
    <br/>
    <br/>
    Este acordo é considerado aceito no momento em que qualquer um dos nossos serviços for utilizado. Este acordo constitui a totalidade do acordo entre você
     e nós em relação ao uso dos serviços. Nossa incapacidade de exercer ou executar qualquer direito ou disposição do presente acordo não deverá funcionar
      como renúncia de tal direito ou disposição. Os títulos das seções deste acordo são apenas para conveniência e não tem efeito legal ou contratual.
    <br/>
    <br/>
    <b>XV. Mercados de terceiros</b>
    <br/>
    <br/>
    Estes termos de uso são entre você e Windsoft Games apenas, não com a Apple, Google, Facebook ou qualquer outro terceiro por meio do qual você pode ter
     comprado qualquer um dos aplicativos ("mercados"). Os mercados não são responsáveis pelo aplicativo que você comprou ou pelos nossos serviços. Os mercados
      não têm obrigação de fornecer qualquer serviço de manutenção ou suporte com relação aos aplicativos. Até o limite máximo aplicável pela lei, os mercados
       não têm outra obrigação ou garantia em relação aos aplicativos.
    <br/>
    <br/>
    <b>XVI. Modificação</b>
    <br/>
    <br/>
    Reservamo-nos o direito de fazer alterações nos serviços, políticas e nos termos de uso a qualquer momento sem aviso prévio. A continuação da utilização
     dos serviços representará a sua aceitação de tais alterações. Entre em contato com <EMAIL> se tiver qualquer dúvida sobre nossas relações
      com os consumidores e sobre qualquer problema na atividade de nossos serviços.
    <br/>
    <br/>
 
<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/paginas/listar-arquivos-noticia.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<center>
    <h3>Listar Arquivos de Notícia</h3>
</center>

<center>
    <form autocomplete="off" style="margin-bottom: 0px;">
        <input type="text" id="data" placeholder="Data dos Arquivos DD/MM/YYYY" onkeypress="formatarComoData(this);" />
    </form>
    <div style="display: grid; grid-template-columns: 50% 50%; width: 80%; max-width: 300px;">
        <input type="button" value="Data de Hoje" style="width: calc(100% - 8px); margin: 8px 8px 8px 0px;" onclick="definirDataDeHoje();" />
        <input type="button" value="Pesquisar" style="width: calc(100% - 8px); margin: 8px 0px 8px 8px;" onclick="buscarArquivos();" />
    </div>
</center>

<style>
.arquivo{
  display: grid;
  grid-template-columns: 10% 70% 10% 10%;
  background-color: #D6D6D6;
  transition: all 200ms;
  border-radius: 4px;
  padding: 10px;
  margin-bottom: 4px;
}
.arquivo:hover{
  background-color: #BCBCBC;
}
.iconeArquivo{
  display: flex;
  align-items: center;
}
</style>

<div id="resultado" style="display: none; background-color: #F2F2F2; border-radius: 4px; margin-top: 10px; margin-bottom: 10px; padding: 10px;">
</div>

<input type="text" style="display: none;" id="campoDeTexto" />

<!-- código javascript desta página -->
<script type="text/javascript">
    //Função que insere a data de hoje
    function definirDataDeHoje(){
        var data = new Date();
        var dia = data.getDate();
        var mes = data.getMonth();
        var ano = data.getFullYear();
        if(dia < 10){
            dia = "0" + dia;
        }
        mes += 1;
        if(mes < 10){
            mes = "0" + mes;
        }
        document.getElementById("data").value = dia + "/" + mes + "/" + ano;
    }
    
    //Função que estabelece conexão para pesquisar os arquivos
    function buscarArquivos(){
        if(document.getElementById("data").value == ""){
            parent.mostrarNotificacao("Por favor, insira uma data.", "#750000", 3500);
            return;
        }
        
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/buscar-arquivos-noticia.php");
            conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                    
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                document.getElementById("resultado").style.display = "block";
                document.getElementById("resultado").innerHTML = parent.textoDaConexao(conexao);
                parent.redimensionarIframe();
            });
        };
        parent.iniciarConexaoPost(conexao, "data=" + document.getElementById("data").value);
    }
    
    //Função que copia o link
    function copiarUrl(url){
        var tempInput = document.createElement("input");
        tempInput.style = "position: absolute; left: -1000px; top: -1000px";
        tempInput.value = url;
        document.body.appendChild(tempInput);
        tempInput.select();
        document.execCommand("copy");
        document.body.removeChild(tempInput);
        parent.mostrarNotificacao("URL copiado para a área de trasferência!", "#467200", 2500);
    }
    
    //Função que abre o arquivo numa nova aba
    function abrirEmNovaAba(url){
        window.open(url, '_blank');
    }
    
//Função que transforma o conteúdo digitado para formato de data
function formatarComoData(val) {
    var pass = val.value;
    var expr = /[0123456789]/;
  
    for (i = 0; i < pass.length; i++) {
      var lchar = val.value.charAt(i);
      var nchar = val.value.charAt(i + 1);
  
      if (i == 0) {
        if ((lchar.search(expr) != 0) || (lchar > 3)) {
          val.value = "";
        }
    }
      else if (i == 1) {
        if (lchar.search(expr) != 0) {
          var tst1 = val.value.substring(0, (i));
          val.value = tst1;
          continue;
        }
        if ((nchar != '/') && (nchar != '')) {
          var tst1 = val.value.substring(0, (i) + 1);
          if (nchar.search(expr) != 0){
            var tst2 = val.value.substring(i + 2, pass.length);
          }
          else{
            var tst2 = val.value.substring(i + 1, pass.length);
          }
          val.value = tst1 + '/' + tst2;
        }
    }
    else if (i == 4) {
        if (lchar.search(expr) != 0) {
          var tst1 = val.value.substring(0, (i));
          val.value = tst1;
          continue;
        }
        if ((nchar != '/') && (nchar != '')) {
          var tst1 = val.value.substring(0, (i) + 1);
          if (nchar.search(expr) != 0){
            var tst2 = val.value.substring(i + 2, pass.length);
          }
          else{
            var tst2 = val.value.substring(i + 1, pass.length);
          }
          val.value = tst1 + '/' + tst2;
        }
    }
    if (i >= 6) {
        if (lchar.search(expr) != 0) {
          var tst1 = val.value.substring(0, (i));
          val.value = tst1;
        }
      }
    }
    if (pass.length > 10){
      val.value = val.value.substring(0, 10);
    }
    return true;
  }
</script>

<?php
$conteudoQuadroDeAviso = ('
• Digite a data ao qual você deseja obter os arquivos ligados a ela e clique em pesquisar.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/global/mysql/registros.inc
<?php 
/*
 * Essa classe é responsável por fazer a conexão ao banco de dados "registros"
 */

//Este script deve ser incluído no topo dos scripts.

//Abre a conexão para o banco de dados "Registros"
$DB_Registros = mysqli_connect("registros.mysql.uhserver.com", "account", "<KEY>", "registros");

mysqli_query($DB_Registros, "SET NAMES 'utf8'");
mysqli_query($DB_Registros, 'SET character_set_connection=utf8');
mysqli_query($DB_Registros, 'SET character_set_client=utf8');
mysqli_query($DB_Registros, 'SET character_set_results=utf8');

?><file_sep>/browser/microsite/painel/ajax-query/remover-membro-da-staff.php
<?php
/*
 * script que remove o usuario da staff
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Caso não tenha permissão total, cancela o script
    if($_SESSION["autoridade"] < 4){
echo("".
'parent.mostrarNotificacao("Você não tem permissão para fazer isso.", "#7F0000", 3000);'
."");
        exit();
    }
    
    //Verifica se o usuário já está cadastrado como staff
    $consultaUsuario = mysqli_query($DB_Metadados, "SELECT Cargo, Autoridade FROM Staff WHERE Nick='$nick'");
    
    //Caso esteja cadastrado
    if(mysqli_num_rows($consultaUsuario) == 1){
        $consultaRemocao = mysqli_query($DB_Metadados, "DELETE FROM Staff WHERE Nick='$nick'");
    }
    
echo("".
'parent.mostrarNotificacao("O usuário foi removido da Staff, com êxito!", "#1E7200", 3000);'
."staff = false;"
."cargo = '';"
."autoridade = 0;"
."exibirPainelDeEdicao();"
."");
}

?><file_sep>/browser/microsite/painel/ajax-query/editar-versao-jogo.php
<?php
/*
 * script que atualiza a versão do jogo, no banco de dados
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$id = mysqli_real_escape_string($DB_Metadados, $_POST["id"]);
$ultimaVersao = mysqli_real_escape_string($DB_Metadados, $_POST["ultimaVersao"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Atualiza a versão do jogo no banco de dados
    $consulta = mysqli_query($DB_Metadados, "UPDATE JogosDaWindsoft SET UltimaVersao='$ultimaVersao' WHERE JogoID=$id"); 
    
echo("".
'parent.mostrarNotificacao("A versão do jogo foi atualizada com sucesso!", "#117700", 5000);'
."");
}

?><file_sep>/browser/ajax-query/alterar-senha.php
<?php
/*
 * script que faz consulta de alteração da senha
 */

include("../../global/sessoes/verificador-de-sessao.inc");
include("../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Obtem as variaveis
$senha = md5($_POST["senha"]);
$senhaNova = md5($_POST["senhaNova"]);

//obtem o id do usuário
$id = $_SESSION["id"];

//Verifica se a senha informada bate com a senha da conta
$verificaSenha = mysqli_query($DB_Registros, "SELECT Senha FROM Acesso WHERE ID=$id");
$dadosSenha = mysqli_fetch_array($verificaSenha);

//Caso a senha não bata
if($senha != $dadosSenha[0]){
    echo("exibirSenhaErrada();");
    exit();
}

//Realiza a alteração do email
$consultaTroca = mysqli_query($DB_Registros, "UPDATE Acesso SET Senha='$senhaNova' WHERE ID=$id");

echo("".
"mostrarNotificacao(\"Sua senha foi alterada com sucesso!\", \"#117700\", 5000);".
"limparCamposDeSenha();".
"");

?><file_sep>/browser/microsite/painel/ajax-query/buscar-arquivos-noticia.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$dataParaPesquisar = $_POST["data"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Divide a string de data
    $data = explode("/", $dataParaPesquisar);
    
    //Verifica se o formato de data está correto
    if(strlen($dataParaPesquisar) != 10 || strpos($dataParaPesquisar, "/") == false){
        echo("<br/><center>A data \"".$dataParaPesquisar."\" digitada está no formato incorreto. O formato da data precisa ser númerico, no seguinte formato DD/MM/YYYY.</center><br/>");
        return;
    }
    
    //Obtem o diretório alvo com base na data digitada pelo usuario
    $diretorioAlvoString = ("../../../noticias/por-data/".$data[2]."/".$data[1]."/".$data[0]);
    
    //Verifica se o diretório existe ou não
    if(is_dir($diretorioAlvoString) == false){
        echo("<br/><center>Nenhum arquivo encontrado para a data de ".$dataParaPesquisar.".</center><br/>");
    }
    if(is_dir($diretorioAlvoString) == true){
        //Escaneia o diretório alvo
        $listaDeArquivos = scandir($diretorioAlvoString);
        
        //Conta a quantidade de arquivos no diretorio
        if(count($listaDeArquivos) <= 2){
            echo("<br/><center>A pasta referente a data de ".$dataParaPesquisar.", está vazia.</center><br/>");
        }
        if(count($listaDeArquivos) > 2){
            echo("<center>Listando arquivos referentes a data de ".$dataParaPesquisar.".</center><br/>");
            
            //Rastreia os arquivos do diretório
            foreach($listaDeArquivos as $arquivo){
                //Verifica se o arquivo é apenas um ponto, ou dois pontos
                if($arquivo != "." && $arquivo != ".."){
                    //Obtem a extensão do arquivo
                    $extensao = pathinfo($diretorioAlvoString . "/" . $arquivo, PATHINFO_EXTENSION);
                    
                    //Gera o código do ícone
                    if($extensao == "php"){
                        $codigoIcone = '<img src="../imagens/documento.png" width="16px" />';
                    }
                    if($extensao == "jpg" || $extensao == "jpeg"){
                        $codigoIcone = '<img src="../imagens/imagem.png" width="16px" />';
                    }
                    
                    //Gera a URL do arquivo
                    $url = "https://windsoft.xyz/browser/noticias/por-data/" . $data[2] . "/" . $data[1] . "/" . $data[0] . "/" . $arquivo;
                    
                    //Imprime o código HTML para representar este arquivo
                    echo('<div class="arquivo">
                            <div class="iconeArquivo" style="justify-content: flex-start;">
                                '.$codigoIcone.'
                            </div>
                            <div>'.$arquivo.'</div>
                            <div class="iconeArquivo" style="justify-content: flex-end; cursor: pointer;">
                                <img src="../imagens/copiar.png" width="16px" title="Copiar URL" onclick="copiarUrl(\''.$url.'\');" />
                            </div>
                            <div class="iconeArquivo" style="justify-content: flex-end; cursor: pointer;">
                                <img src="../imagens/visualizar.png" width="16px" title="Visualizar Arquivo" onclick="abrirEmNovaAba(\''.$url.'\');" />
                            </div>
                          </div>');
                }
            }
        }
    }
}

?><file_sep>/browser/gerador-de-senha.php
<?php
/*
 * Essa página é responsável por gerar uma nova senha ao usuário, com base no seu token de
 * recuperação e ID
 */

$tituloPagina = "Gerador de Senha - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
?>
 
<?php
include("../global/mysql/registros.inc");

function RetornarCaractereAleatorio(){
    $arrayDeCaracteres = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
                               "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
    $numeroAleatorio = rand(0, count($arrayDeCaracteres));
    return $arrayDeCaracteres[$numeroAleatorio];
}

$codigoErro = '
<br>
<br>
<div style="width: 60%; margin-left: auto; margin-right: auto; display: table;">
    <img src="imagens/erro.png" width="30px" style="float: left; margin-right: 10px; display: table-cell; vertical-align: middle;" />
    <div style="display: table-cell; vertical-align: middle;">
        Este link de recuperação de senha está expirado, é inválido ou já foi usado.
    </div>
</div>
';

//Variaveis do script
$id = mysqli_real_escape_string($DB_Registros, $_GET["id"]);
$tokenRecuperacao = mysqli_real_escape_string($DB_Registros, $_GET["tokenRecuperacao"]);

//Verifica se as variaveis estão definidas
if($id != "" && $tokenRecuperacao != ""){
    //Consulta o token pertencente a este ID
    $consultaToken = mysqli_query($DB_Registros, "SELECT Nick, TokenRecuperacao FROM Acesso WHERE ID = $id");
    
    //Verifica se encontrou resultados para este ID
    if(mysqli_num_rows($consultaToken) == 1){
        //Obtem os dados
        $consultaTokenResultado = mysqli_fetch_array($consultaToken);
        
        //Analisa se o token do banco de dados é igual o informado
        if($consultaTokenResultado[1] == $tokenRecuperacao && $consultaTokenResultado[1] != ""){
            //Cria uma senha aleatória de 6 dígitos
            $senhaCriada = "";
            for($i = 0; $i < 6; ++$i){
                $senhaCriada .= RetornarCaractereAleatorio();
            }
            $senhaCriadaMd5 = md5($senhaCriada);
            
            //Limpa o token do servidor e altera a senha do usuário para a senha criada
            $consultaAlteracaoSenha = mysqli_query($DB_Registros, "UPDATE Acesso SET Senha='$sen<PASSWORD>', TokenRecuperacao='' WHERE ID = $id");
            
            //Exibe a senha do usuário
            echo('
                <br>
                <br>
                <div style="width: 80%; margin-left: auto; margin-right: auto; display: table;">
                    <img src="imagens/sucesso.png" width="30px" style="float: left; margin-right: 10px; display: table-cell; vertical-align: middle;" />
                    <div style="display: table-cell; vertical-align: middle;">
                        Ok, tudo certo! Conseguimos gerar uma nova senha de acesso para sua conta!
                    </div>
                </div>
                <br>
                <br>
                <center>
                    Nome de usuário
                    <br>
                    <div style="width: 80%; max-width: 200px; background-color: #4a5e84; color: #fcfcfc; border-radius: 4px; padding: 10px; margin-top: 4px; font-size: 18px;">
                        '.$consultaTokenResultado[0].'
                    </div>
                    <br>
                    Sua nova senha
                    <br>
                    <div style="width: 80%; max-width: 200px; background-color: #4a5e84; color: #fcfcfc; border-radius: 4px; padding: 10px; margin-top: 4px; font-size: 18px;">
                        '.$senhaCriada.'
                    </div>
                    <br>
                    <br>
                    Anote e utilize os dados acima para fazer login na sua conta do Windsoft ID. Depois de ter feito login, por favor, altere a senha de sua conta para uma senha que você consiga memorizar, combinado?
                </center>
                ');
        }
        if($consultaTokenResultado[1] != $tokenRecuperacao || $consultaTokenResultado[1] == ""){
            echo($codigoErro);
        }
    }
    if(mysqli_num_rows($consultaToken) == 0){
        echo($codigoErro);
    }
}
if($id == "" || $tokenRecuperacao == ""){
    echo($codigoErro);
}

?>
 
<?php
include("includes/rodape.inc");
?><file_sep>/client/mtassets-patcher/Patcher.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

namespace MTAssets
{
    /*
     * This is the MT Assets Patcher. This file is responsible for applying emergency fixes, enhancements,
     * or feature additions to your MT Assets tools without having to update anything.
     * 
     * This file is updated automatically. No Patcher files will be included in your game builds.
     */

    [InitializeOnLoad]
    public class Patcher
    {
        static Patcher()
        {
            //Run the patcher code after Unity compiles
            EditorApplication.delayCall += StartPatcherCode;
        }

        //<------- Start of code -------->
        public static void StartPatcherCode()
        {
            //Run garbage collector
            CreateTempFolderAndClearUnusefulFiles();

            //Warn about NAT bug
            if (AssetDatabase.LoadAssetAtPath("Assets/MT Assets/_AssetsData/Greetings/GreetingsData.Nat.ini", typeof(object)) != null)
            {
                if(AssetDatabase.LoadAssetAtPath("Assets/MT Assets/_AssetsData/Patcher/Temp/NatOk0.ini", typeof(object)) == null)
                {
                    int option = EditorUtility.DisplayDialogComplex("MT Assets Warning", "The latest version of Native Android Toolkit (2.2.1) is now available for download from the Asset Store. This update fixes problems saving preferences and brings enhancements to NAT, it's worth download it!", "Ok", "Do not show again", "Close");
                    switch (option)
                    {
                        case 1:
                            File.WriteAllText("Assets/MT Assets/_AssetsData/Patcher/Temp/NatOk0.ini", System.DateTime.Now.Day.ToString());
                            break;
                    }
                    AssetDatabase.Refresh();
                }
            }
        }

        public static void CreateTempFolderAndClearUnusefulFiles()
        {
            //Create temp folder for patcher data
            if (!AssetDatabase.IsValidFolder("Assets/MT Assets/_AssetsData/Patcher/Temp"))
            {
                AssetDatabase.CreateFolder("Assets/MT Assets/_AssetsData/Patcher", "Temp");
            }

            //Clear unuseful files
            if (AssetDatabase.LoadAssetAtPath("Assets/MT Assets/_AssetsData/Patcher/Temp/NatWarn.ini", typeof(object)) != null)
                AssetDatabase.DeleteAsset("Assets/MT Assets/_AssetsData/Patcher/Temp/NatWarn.ini");
            if (AssetDatabase.LoadAssetAtPath("Assets/MT Assets/_AssetsData/Patcher/Temp/NatOk.ini", typeof(object)) != null)
                AssetDatabase.DeleteAsset("Assets/MT Assets/_AssetsData/Patcher/Temp/NatOk.ini");
        }
    }
}<file_sep>/browser/registrar.php
<?php
/*
 * Essa página é responsável pela criação de contas Windsoft no site
 */

$tituloPagina = "Registro - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
RedirecionarParaHomeCasoEstejaLogado();
?>

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<center>
    <h3>Criar sua conta da Windsoft</h3>
    Crie sua conta e aproveite todos os serviços e funções do site e dos jogos da Windsoft!
    <br>
    <br>
    <br>
    <form autocomplete="off">
        
        <h3>Dados da Conta</h3>
        
        <input type="text" id="nick" placeholder="Nome de Usuário" onKeyUp="validarNick();">
        <div id="nickStatus" class="statusCampo"></div>
        
        <input type="password" id="senha" placeholder="Senha" onKeyUp="validarSenha(); validarRepetirSenha();">
        <div id="senhaStatus" class="statusCampo"></div>
        
        <input type="password" id="repetirSenha" placeholder="Repita a Senha" onKeyUp="validarRepetirSenha();">
        <div id="repetirSenhaStatus" class="statusCampo"></div>
        
        <input type="email" id="email" placeholder="E-mail" onKeyUp="validarEmail(); validarRepetirEmail();">
        <div id="emailStatus" class="statusCampo"></div>
        
        <input type="email" id="repetirEmail" placeholder="Repita o E-mail" onKeyUp="validarRepetirEmail();">
        <div id="repetirEmailStatus" class="statusCampo"></div>
        
        <h3>Dados de Perfil</h3>
        
        <input type="text" id="nome" placeholder="Nome" onKeyUp="validarNome();">
        <div id="nomeStatus" class="statusCampo"></div>
        
        <select id="genero" onChange="validarGenero();">
            <option value="">Gênero</option>
            <option value="F">Feminino</option>
            <option value="M">Masculino</option>
            <option value="V">Não Informar</option>
        </select>
        <div id="generoStatus" class="statusCampo"></div>
        
        <input type="text" id="idade" placeholder="Sua Idade" onKeyUp="validarIdade();">
        <div id="idadeStatus" class="statusCampo"></div>
        
        <br>
        <br>
        
        <div class="checkboxMainContainer">
           <label class="container">
              <div>
              Concordo com os <a href="https://windsoft.xyz/terms">termos de uso</a> e <a href="https://windsoft.xyz/policy">política de privacidade</a> da Windsoft.
              </div>
              <input type="checkbox" id="contrato" onclick="validarContrato();">
              <span class="checkmark"></span>
           </label>
        </div>
        <div id="contratoStatus" class="statusCampo"></div>
        
        <br>
        <br>
        <div class="g-recaptcha"
             data-sitekey="<KEY>"
             data-callback="aoObterRespostaCaptcha"
             data-expired-callback="aoExpirarCaptcha"
             data-error-callback="aoOcorrerErro"></div>
        <div id="captchaStatus" class="statusCampo"></div>
        
        <input type="button" value="Criar Conta" onclick="processarRegistro();">
    </form>
 </center>

<!-- Javascript da página -->
<script type"text/javascript">
    //Inicio
    campoNick = document.getElementById("nick");
    statusNick = document.getElementById("nickStatus");
    campoSenha = document.getElementById("senha");
    statusSenha = document.getElementById("senhaStatus");
    campoRepetirSenha = document.getElementById("repetirSenha");
    statusRepetirSenha = document.getElementById("repetirSenhaStatus");
    campoEmail = document.getElementById("email");
    statusEmail = document.getElementById("emailStatus");
    campoRepetirEmail = document.getElementById("repetirEmail");
    statusRepetirEmail = document.getElementById("repetirEmailStatus");
    campoNome = document.getElementById("nome");
    statusNome = document.getElementById("nomeStatus");
    campoGenero = document.getElementById("genero");
    statusGenero = document.getElementById("generoStatus");
    campoIdade = document.getElementById("idade");
    statusIdade = document.getElementById("idadeStatus");
    statusCaptcha = document.getElementById("captchaStatus");
    campoContrato = document.getElementById("contrato");
    statusContrato = document.getElementById("contratoStatus");
    
    nickValido = false;
    senhaValida = false;
    repetirSenhaValida = false;
    emailValido = false;
    repetirEmailValido = false;
    nomeValido = false;
    generoValido = false;
    idadeValida = false;
    contratoValido = false;
    tokenDoCaptcha = "";
    
    function validarNick(){
        //Desvalida
        campoNick.style.borderColor = "#990000";
        campoNick.style.borderWidth = "1px";
        statusNick.style.color = "#990000";
        nickValido = false;
        
        if(campoNick.value == ""){
            statusNick.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoNick.value.length < 2){
            statusNick.innerHTML = "Nome de usuário muito curto.";
            return;
        }
        
        if(campoNick.value.length > 12){
            statusNick.innerHTML = "Nome de usuário muito longo.";
            return;
        }
        
        if(somenteLetrasNumeros(campoNick.value) == false){
            statusNick.innerHTML = "O nome de usuário só pode conter letras e números.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoNick.style.borderColor = "";
        campoNick.style.borderWidth = "";
        statusNick.innerHTML = "";
        nickValido = true;
    }
    
    function validarSenha(){
        var pontuacao = 0;
        
        if(campoSenha.value.length >= 6){
             pontuacao += 1;
        }
        
        if(campoSenha.value.length >= 12){
             pontuacao += 1;
        }
        
        if(contemNumeros(campoSenha.value) == true && campoSenha.value.length >= 6){
             pontuacao += 1;
        }
        
        if(contemLetrasMaiusculas(campoSenha.value) == true && campoSenha.value.length >= 6){
             pontuacao += 1;
        }
        
        if(contemCaracteresEspeciais(campoSenha.value) == true && campoSenha.value.length >= 6){
             pontuacao += 1;
        }
        
        //Cria a barra de força
        if(statusSenha.innerHTML == ""){
            statusSenha.innerHTML = "<div style=\"border-radius: 2px; width: 100%; background-color: #DBDBDB; height: 4px;\"><div id=\"barraForca\" style=\"border-radius: 2px; transition: width 500ms; width: 0%; height: 100%;\"></div></div>";
        }
        
        if(pontuacao == 0){
            document.getElementById("barraForca").style.width = "0%";
            document.getElementById("barraForca").style.backgroundColor = "#770000";
            campoSenha.style.borderColor = "#990000";
            campoSenha.style.borderWidth = "1px";
            senhaValida = false;
        }
        if(pontuacao == 1){
            document.getElementById("barraForca").style.width = "20%";
            document.getElementById("barraForca").style.backgroundColor = "#770000";
            campoSenha.style.borderColor = "";
            campoSenha.style.borderWidth = "";
            senhaValida = true;
        }
        if(pontuacao == 2){
            document.getElementById("barraForca").style.width = "40%";
            document.getElementById("barraForca").style.backgroundColor = "#CE7800";
            campoSenha.style.borderColor = "";
            campoSenha.style.borderWidth = "";
            senhaValida = true;
        }
        if(pontuacao == 3){
            document.getElementById("barraForca").style.width = "60%";
            document.getElementById("barraForca").style.backgroundColor = "#B7B400";
            campoSenha.style.borderColor = "";
            campoSenha.style.borderWidth = "";
            senhaValida = true;
        }
        if(pontuacao == 4){
            document.getElementById("barraForca").style.width = "80%";
            document.getElementById("barraForca").style.backgroundColor = "#159100";
            campoSenha.style.borderColor = "";
            campoSenha.style.borderWidth = "";
            senhaValida = true;
        }
        if(pontuacao == 5){
            document.getElementById("barraForca").style.width = "100%";
            document.getElementById("barraForca").style.backgroundColor = "#0092BF";
            campoSenha.style.borderColor = "";
            campoSenha.style.borderWidth = "";
            senhaValida = true;
        }
    }
    
    function validarRepetirSenha(){
        //Desvalida
        campoRepetirSenha.style.borderColor = "#990000";
        campoRepetirSenha.style.borderWidth = "1px";
        statusRepetirSenha.style.color = "#990000";
        repetirSenhaValida = false;
        
        if(campoRepetirSenha.value == ""){
            statusRepetirSenha.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoRepetirSenha.value != campoSenha.value){
            statusRepetirSenha.innerHTML = "A senha não bate com a digitada acima.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoRepetirSenha.style.borderColor = "";
        campoRepetirSenha.style.borderWidth = "";
        statusRepetirSenha.innerHTML = "";
        repetirSenhaValida = true;
    }
    
    function validarEmail(){
        //Desvalida
        campoEmail.style.borderColor = "#990000";
        campoEmail.style.borderWidth = "1px";
        statusEmail.style.color = "#990000";
        emailValido = false;
        
        if(campoEmail.value == ""){
            statusEmail.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(pareceComEmail(campoEmail.value) == false){
            statusEmail.innerHTML = "O conteúdo digitado não parece com um e-mail!";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoEmail.style.borderColor = "";
        campoEmail.style.borderWidth = "";
        statusEmail.innerHTML = "";
        emailValido = true;
    }
    
    function validarRepetirEmail(){
        //Desvalida
        campoRepetirEmail.style.borderColor = "#990000";
        campoRepetirEmail.style.borderWidth = "1px";
        statusRepetirEmail.style.color = "#990000";
        repetirEmailValido = false;
        
        if(campoRepetirEmail.value == ""){
            statusRepetirEmail.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoRepetirEmail.value != campoEmail.value){
            statusRepetirEmail.innerHTML = "O e-mail digitado não bate com o de cima.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoRepetirEmail.style.borderColor = "";
        campoRepetirEmail.style.borderWidth = "";
        statusRepetirEmail.innerHTML = "";
        repetirEmailValido = true;
    }
    
    function validarNome(){
        //Desvalida
        campoNome.style.borderColor = "#990000";
        campoNome.style.borderWidth = "1px";
        statusNome.style.color = "#990000";
        nomeValido = false;
        
        if(campoNome.value == ""){
            statusNome.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoNome.value.length > 18){
            statusNome.innerHTML = "Nome muito longo.";
            return;
        }
        
        if(somenteLetras(campoNome.value) == false){
            statusNome.innerHTML = "O nome só pode conter letras.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoNome.style.borderColor = "";
        campoNome.style.borderWidth = "";
        statusNome.innerHTML = "";
        nomeValido = true;
    }
    
    function validarGenero(){
        //Desvalida
        campoGenero.style.borderColor = "#990000";
        campoGenero.style.borderWidth = "1px";
        statusGenero.style.color = "#990000";
        generoValido = false;
        
        if(campoGenero.options[campoGenero.selectedIndex].value == ""){
            statusGenero.innerHTML = "Por favor, escolha uma opção.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoGenero.style.borderColor = "";
        campoGenero.style.borderWidth = "";
        statusGenero.innerHTML = "";
        generoValido = true;
    }
    
    function validarIdade(){
        //Desvalida
        campoIdade.style.borderColor = "#990000";
        campoIdade.style.borderWidth = "1px";
        statusIdade.style.color = "#990000";
        idadeValida = false;
        
        if(campoIdade.value == ""){
            statusIdade.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoIdade.value.lenght > 3 ){
            statusIdade.innerHTML = "Idade inválida.";
            return;
        }
        
        if(campoIdade.value < 13 ){
            statusIdade.innerHTML = "Você precisa ter 13 anos ou mais para se registrar.";
            return;
        }
        
        if(somenteNumeros(campoIdade.value) == false){
            statusIdade.innerHTML = "A idade só pode conter números.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoIdade.style.borderColor = "";
        campoIdade.style.borderWidth = "";
        statusIdade.innerHTML = "";
        idadeValida = true;
    }
    
    function validarContrato(){
        //Desvalida
        
        if(campoContrato.checked == false){
            statusContrato.style.color = "#990000";
            statusContrato.innerHTML = "Você precisa concordar com os Termos de Uso e Política de Privacidade para criar sua conta.";
        }
        if(campoContrato.checked == true){
            statusContrato.style.color = "#990000";
            statusContrato.innerHTML = "";
        }
        
        contratoValido = campoContrato.checked;
    }
    
    //Callback que recebe a resposta do reCaptcha v2
    var aoObterRespostaCaptcha = function(response) {
        tokenDoCaptcha = response;
        statusCaptcha.innerHTML = "";
    };
    
    //Callback processado ao expirar resposta captcha
    var aoExpirarCaptcha = function() {
        tokenDoCaptcha = "";
        statusCaptcha.style.color = "#990000";
        statusCaptcha.innerHTML = "Por favor, resolva novamente.";
    };
    
    //Callback processado ao ocorrer erro no captcha
    var aoOcorrerErro = function() {
        tokenDoCaptcha = "";
        statusCaptcha.style.color = "#990000";
        statusCaptcha.innerHTML = "Erro ao resolver. Tente novamente.";
    };

    //Envia todos os dados do formulario e re-captcha para validação
    function processarRegistro(){
        validarNick();
        validarSenha();
        validarRepetirSenha();
        validarEmail();
        validarRepetirEmail();
        validarNome();
        validarIdade();
        validarContrato();
     
        //Verifica se os campos forão preenchidos
        if(nickValido == false || senhaValida == false || repetirSenhaValida == false || emailValido == false ||
           repetirEmailValido == false || nomeValido == false || idadeValida == false){
            mostrarNotificacao("Por favor, preencha e verifique cada campo em busca de erros.", "#750000", 2000);
            return;
        }
        
        if(generoValido == false){
            mostrarNotificacao("Por favor, selecione uma opção de gênero.", "#750000", 2000);
            return;
        }
        
        if(contratoValido == false){
            mostrarNotificacao("Você precisa concordar com os Termos de Uso e Política de Privacidade.", "#750000", 2000);
            return;
        }
        
        if(tokenDoCaptcha == ""){
            statusCaptcha.style.color = "#990000";
            statusCaptcha.innerHTML = "Por favor, resolva o captcha.";
            mostrarNotificacao("Por favor, resolva o captcha.", "#750000", 2000);
            return;
        }
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/processar-registro.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(textoDaConexao(conexao));
                
                //Reseta o reCaptcha após a solicitação, pois cada chave só pode ser validade uma vez.
                grecaptcha.reset();
                tokenDoCaptcha = "";
            });
        };
        iniciarConexaoPost(conexao, "tokenCaptcha=" + tokenDoCaptcha +
                           "&nick=" + campoNick.value + "&senha=" + campoSenha.value +
                           "&email=" + campoEmail.value + "&nome=" + campoNome.value +
                           "&genero=" + campoGenero.options[campoGenero.selectedIndex].value +
                           "&idade=" + campoIdade.value);
    }
    
    function exibirNickEmUso(){
        //Exibe a mensagem de nome de usuário em uso
        
        statusNick.style.color = "#990000";
        statusNick.innerHTML = "Este nome de usuário já está em uso!";
        mostrarNotificacao("Por favor, verifique cada campo em busca de erros.", "#750000", 2000);
        nickValido = false;
    }
    
    function exibirEmailEmUso(){
        //Exibe a mensagem de email em uso
        
        statusEmail.style.color = "#990000";
        statusEmail.innerHTML = "Este e-mail já está em uso!";
        mostrarNotificacao("Por favor, verifique cada campo em busca de erros.", "#750000", 2000);
        emailValido = false;
    }
</script>

<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/paginas/lancar-notificacao.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Configura a data
date_default_timezone_set('America/Sao_Paulo');
$Date = date('Y-m-d H:i:s', time());
$data = date('Y-m-d', time());
$hora = date('H:i:s', time());

//Obtem os dados da ultima notificação enviada aos usuários
$consultaNotificacao = mysqli_query($DB_Metadados, "SELECT Texto, DataDeEnvio_Millis FROM Notificacao WHERE Canal='Global'");
$dadosUltimaNotificacao = mysqli_fetch_array($consultaNotificacao);
?>

<center>
    <h3>Lançar Nova Notificação</h3>
</center>

<center>
    <form autocomplete="off">
        <textarea id="texto" placeholder="Texto da Notificação" onkeyup="validarTexto();"></textarea>
        <div id="textoStatus" class="statusCampo"></div>
        
        <input type="button" value="Lançar" onclick="salvarEdicao();" />
    </form>
</center>

<!-- exibidor da ultima notificação enviada -->
<center>
    <h3>Última Notificação Enviada</h3>
</center>
<div id="textoNotificacao" style="margin-left: auto; margin-right: auto; width: 80%; max-width: 300px; padding: 10px; background-color: #F2F2F2; border-radius: 4px; min-height: 100px;">
    <?php
        echo($dadosUltimaNotificacao[0]);
    ?>
</div>
<center><small><div id="horarioNotificacao" style="color: #606060; margin-top: 2px;">Enviada em <?php echo(date("d/m/Y", ($dadosUltimaNotificacao[1] / 1000) ) . " às " . date("H:i", ($dadosUltimaNotificacao[1] / 1000) )); ?></div></small></center>

<!-- código javascript desta página -->
<script type="text/javascript">
    campoTexto = document.getElementById("texto");
    statusTexto = document.getElementById("textoStatus");
    textoValido = false;
    function validarTexto(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoTexto.value.length, 160);
        
        //Desvalida
        campoTexto.style.borderColor = "#990000";
        campoTexto.style.borderWidth = "1px";
        statusTexto.style.color = "#990000";
        textoValido = false;
        
        if(campoTexto.value == ""){
            statusTexto.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoTexto.value.length > 160){
            statusTexto.innerHTML = "Descrição muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoTexto.value) == true){
            statusTexto.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoTexto.style.borderColor = "";
        campoTexto.style.borderWidth = "";
        statusTexto.innerHTML = "";
        textoValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarTexto();
        
        if(textoValido == true){
            return true;
        }
        if(textoValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que salva o conteúdo digitado, no servidor, através do ajax
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/lancar-nova-notificacao.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {                    
                    eval(parent.textoDaConexao(conexao));
                    document.getElementById("textoNotificacao").innerHTML = document.getElementById("texto").value;
                    var today = new Date();
                    var dd = String(today.getDate()).padStart(2, '0');
                    var mm = String(today.getMonth() + 1).padStart(2, '0');
                    var yyyy = today.getFullYear();
                    var hh = String(today.getHours()).padStart(2, '0');
                    var ii = String(today.getMinutes()).padStart(2, '0');
                    document.getElementById("horarioNotificacao").innerHTML = "Enviada em " + dd + "/" + mm + "/" + yyyy + " às " + hh + ":" + ii;
                    document.getElementById("texto").value = "";
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "texto=" + document.getElementById("texto").value);
        }
    }
    
    //Redimensiona as textarea de acordo com seus conteúdos, automaticamente
    var textAreas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textAreas.length; i++){
        textAreas[i].style.height = (textAreas[i].scrollHeight) + "px";
        textAreas[i].style.overflow = "hidden";
        textAreas[i].style.resize = "none";
        textAreas[i].style.minHeight = "80px";
        textAreas[i].addEventListener("input", AoDigitarNasTextArea, false);
    }
    function AoDigitarNasTextArea(){
        this.style.height = "auto";
        this.style.height = (this.scrollHeight) + "px";
        this.style.minHeight = "80px";
        parent.redimensionarIframe();
    }
</script>

<?php
$conteudoQuadroDeAviso = ('
• As notificações emitidas aqui, serão exibidas dentro dos jogos da Windsoft, no site ou no Windsoft Launcher.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/ajax-query/obter-graficos-desta-data.php
<?php
/*
 * script que adiciona a venda ao historico de vendas do asset
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Código PHP que processa o armazenamento de dados de vendas dos assets e carrega todos os dados dos assets
include("../paginas/includes/mt-assets-historico-de-vendas.inc");

//Variaveis do script
$ano = mysqli_real_escape_string($DB_Metadados, $_POST["ano"]);
$mes = mysqli_real_escape_string($DB_Metadados, $_POST["mes"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //----- Receitas deste ano
    $receitaTotalPorMes = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    for($x = 1; $x < $i; $x++){
        $armazenamentoDesteAsset = json_decode($vendasPorDataJson[$x]);
        $arrayAnos = $armazenamentoDesteAsset->anosArmazenados;
        for ($w = 0; $w < count($arrayAnos); $w++) {
            if($arrayAnos[$w]->numeroAno == $ano){
                $anoSelecionado = $arrayAnos[$w];
            }
        }
        for($y = 0; $y < 12; $y++){
            $mesAtual = $anoSelecionado->mesesDoAno[$y];
            $receitaMesAtual = 0;
            for($z = 0; $z < 31; $z++){
                $receitaMesAtual += $mesAtual->diasDoMes[$z]->receitaDoDia;
            }
            $receitaTotalPorMes[$y] += $receitaMesAtual;
        }
    }
    $codigoJsArray_receitaDesteAno = '["Mês", "US$"],';
    $codigoJsArray_receitaDesteAno .= '["Janeiro", '.($receitaTotalPorMes[0] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Fevereiro", '.($receitaTotalPorMes[1] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Março", '.($receitaTotalPorMes[2] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Abril", '.($receitaTotalPorMes[3] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Maio", '.($receitaTotalPorMes[4] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Junho", '.($receitaTotalPorMes[5] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Julho", '.($receitaTotalPorMes[6] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Agosto", '.($receitaTotalPorMes[7] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Setembro", '.($receitaTotalPorMes[8] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Outubro", '.($receitaTotalPorMes[9] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Novembro", '.($receitaTotalPorMes[10] * 0.7).'],';
    $codigoJsArray_receitaDesteAno .= '["Dezembro", '.($receitaTotalPorMes[11] * 0.7).']';
    
    
    //-------- Vendas de cada asset por mes
    $codigoJsArray_vendasMensaisPorAsset = '["Asset", "Quantidade"]';
    for($x = 1; $x < $i; $x++){
        $armazenamentoDesteAsset = json_decode($vendasPorDataJson[$x]);
        $arrayAnos = $armazenamentoDesteAsset->anosArmazenados;
        for ($w = 0; $w < count($arrayAnos); $w++) {
            if($arrayAnos[$w]->numeroAno == $ano){
                $anoSelecionado = $arrayAnos[$w];
            }
        }
        $mesSelecionado = $anoSelecionado->mesesDoAno[$mes];
        $vendasDesteMes = 0;
        for($z = 0; $z < 31; $z++){
            $vendasDesteMes += $mesSelecionado->diasDoMes[$z]->quantiaDeVendas;
        }
        $codigoJsArray_vendasMensaisPorAsset .= ',["'.$nome[$x].'", '.$vendasDesteMes.']';
    }
    
    //----------- Vendas diárias de ada asset
    $codigoJsArray_vendasDiariasTodosAsset = "";
    for($x = 1; $x < $i; $x++){
        $codigoJsArray_vendasDiariasTodosAsset .= ", ";
        $armazenamentoDesteAsset = json_decode($vendasPorDataJson[$x]);
        $arrayAnos = $armazenamentoDesteAsset->anosArmazenados;
        for ($w = 0; $w < count($arrayAnos); $w++) {
            if($arrayAnos[$w]->numeroAno == $ano){
                $anoSelecionado = $arrayAnos[$w];
            }
        }
        $mesSelecionado = $anoSelecionado->mesesDoAno[$mes];
        $vendasDesteMesArrayJs = "[['Dia', 'Quantidade']";
        for($z = 0; $z < 31; $z++){
            $vendasDesteMesArrayJs .= ",['".($z + 1)."', ".$mesSelecionado->diasDoMes[$z]->quantiaDeVendas."]";
        }
        $vendasDesteMesArrayJs .= "]";
        $codigoJsArray_vendasDiariasTodosAsset .= $vendasDesteMesArrayJs;
    }
    
echo("".
'atualizarDadosDosGraficos(['.$codigoJsArray_receitaDesteAno.'], ['.$codigoJsArray_vendasMensaisPorAsset.']'.$codigoJsArray_vendasDiariasTodosAsset.');'
."");
}
?><file_sep>/browser/microsite/painel/paginas/includes/rodape.inc
<?php
    
//Exibe o quadro de aviso da página, caso a variavel não seja vazia
if(empty($conteudoQuadroDeAviso) == false){
echo('<div id="quadroDeAvisos" style="margin-top: 30px; background-color: #E5E5E5; padding: 10px; border-radius: 4px;">'
.$conteudoQuadroDeAviso.
'</div>');
}

?>
    </body>
</html><file_sep>/browser/links/termos-de-uso.php
<?php
/*
 * Essa página funciona como um redirecionamento para a página da Windsoft Games dos Termos de Uso.
 * O arquivo .htaccess possui uma configuração para que seja possível acessa-la com uma URL mais curta.
 */

$tituloPagina = "Termos de Uso - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("../includes/cabecalho.inc");
RedirecionarPara("../termos-de-uso.php", 3);
?>

    <center>
        <br/>
        Por favor, aguarde, estamos lhe redirecionando para nossa página de Termos de Uso!
        <br/>
        <br/>
        <small>
            <a href="../termos-de-uso.php">Clique aqui caso não seja redirecionado</a>
        </small>
    </center>

<?php
include("../includes/rodape.inc");
?><file_sep>/browser/home.php
<?php
/*
 * Essa é a página inicial do site da Windsoft Games
 */

$tituloPagina = "Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
?>

<?php
include("../global/mysql/metadados.inc");

//Consulta as noticias
$noticiasConsulta = mysqli_query($DB_Metadados, "SELECT Titulo, UrlDaPagina, UrlDaCapa FROM Noticias WHERE Noticia IN (".implode(',', $a=array(1, 2, 3, 4, 5)).")");
$i = 0;
while($linha = mysqli_fetch_assoc($noticiasConsulta)) {
    $titulo[$i] = $linha["Titulo"];
    $urlPagina[$i] = $linha["UrlDaPagina"];
    $urlCapa[$i] = $linha["UrlDaCapa"];
	
    $i += 1;
}

?>

<a href="<?php echo($urlPagina[0]); ?>">
    <div class="noticiaContainer" style="background-image: url(<?php echo($urlCapa[0]); ?>); border-top-left-radius: 20px; border-top-right-radius: 20px;">
        <div class="noticiaEscurecimento" style="border-top-left-radius: 20px; border-top-right-radius: 20px;">
            <div class="noticiaTxt">
                <?php echo($titulo[0]); ?>
            </div>
        </div>
    </div>
</a>
<a href="<?php echo($urlPagina[1]); ?>">
    <div class="noticiaContainer" style="background-image: url(<?php echo($urlCapa[1]); ?>);">
        <div class="noticiaEscurecimento">
            <div class="noticiaTxt">
                <?php echo($titulo[1]); ?>
            </div>
        </div>
    </div>
</a>
<a href="<?php echo($urlPagina[2]); ?>">
    <div class="noticiaContainer" style="background-image: url(<?php echo($urlCapa[2]); ?>);">
        <div class="noticiaEscurecimento">
            <div class="noticiaTxt">
                <?php echo($titulo[2]); ?>
            </div>
        </div>
    </div>
</a>
<a href="<?php echo($urlPagina[3]); ?>">
    <div class="noticiaContainer" style="background-image: url(<?php echo($urlCapa[3]); ?>);">
        <div class="noticiaEscurecimento">
            <div class="noticiaTxt">
                <?php echo($titulo[3]); ?>
            </div>
        </div>
    </div>
</a>
<a href="<?php echo($urlPagina[4]); ?>">
    <div class="noticiaContainer" style="background-image: url(<?php echo($urlCapa[4]); ?>); border-bottom-left-radius: 20px; border-bottom-right-radius: 20px;">
        <div class="noticiaEscurecimento" style="border-bottom-left-radius: 20px; border-bottom-right-radius: 20px;">
            <div class="noticiaTxt">
                <?php echo($titulo[4]); ?>
            </div>
        </div>
    </div>
</a>
    
<?php
    
//Consulta os jogos
$jogosConsulta = mysqli_query($DB_Metadados, "SELECT Nome, UrlIconeJogo, LinkNaLoja, UrlIconePlataforma, ExibirNaHomePage FROM JogosDaWindsoft");
//Gera o HTML de items para a lista de jogos
$codigoJogosHTML = "";
while($linhaJogos = mysqli_fetch_assoc($jogosConsulta)) {
    if((bool)$linhaJogos["ExibirNaHomePage"] == true){
        $codigoJogosHTML .= '
            <div style="width: auto; height: 80px; padding: 5px; display: grid; grid-template-columns: 80px auto 20%;">
                <div style="height: 80px; width: auto;">
                    <img src="'.$linhaJogos["UrlIconeJogo"].'" width="100%" height="100%" style="border-radius: 50%;" />
                    <div style="width: 35px; height: 35px; position: relative; border-radius: 35px; top: -35px; left: 55px; background-color: #ffffff;">
                        <div style="width: auto; height: auto; padding: 8px;">
                            <img src="'.$linhaJogos["UrlIconePlataforma"].'" width="100%" height="100%" />
                        </div>
                    </div>
                </div>
                <div style="width: auto;">
                    <div style="position: relative; top: 50%; transform: translateY(-50%); font-size: 18px; font-weight: bolder; margin-left: 10px;">
                       '.$linhaJogos["Nome"].'
                    </div>
                </div>
                <div style="height: 80px;">
                    <div class="listaDeJogosBotaoBaixar">
                        <a href="'.$linhaJogos["LinkNaLoja"].'"><font style="vertical-align: middle; line-height: 40px;"><center>Baixar</center></font></a>
                    </div>
                </div>
            </div>
        '; 
    }
}
  
?>

<br/>
<center>Conheça mais projetos da Windsoft Games!</center>
<br/>
<?php echo($codigoJogosHTML); ?>
 
<?php
include("includes/rodape.inc");
?><file_sep>/global/sessoes/verificador-de-sessao.inc
<?php
/*
 * Essa classe é responsável por verificar a validade da sessão do usuário, mostrar a mensagem de página carregada
 * e retornar os dados atuais da sessão do usuário.
 */

//Este script deve ser incluído no topo dos scripts, na PRIMEIRA linha do script, para que todos os métodos funcionem.

function IgnorarSessaoImprimirMensagemDeConteudoCarregado(){
    //Mostra a mensagem de arquivo carregado
    echo("[Loaded Json Document]");
}

function VerificarSessao($pararScriptEmCasoDeSessaoInvalida, $imprimirMensagemSobreValidadeSessao){
    //Obtem o Cookie enviado pelo usuário, verifica e válida a sessão referente a ele.
    //Inicializa as sessões
    if(session_status() == PHP_SESSION_NONE){
    	session_start();
    }
    //------------ Caso a sessão não seja válida --------------
    //Verifica se todos os dados estão setados na sessão.
    if(!isset($_SESSION["nick"]) || !isset($_SESSION["id"])){
    	//Destroi a sessão
        session_destroy();
        //Mostra a mensagem sobre a sessão caso seja desejado
        if($imprimirMensagemSobreValidadeSessao == true){
            echo("[Session Expired]");
        }
        //Para o script, caso seja desejado
        if($pararScriptEmCasoDeSessaoInvalida == true){
            exit();
        }
        //Retorna que a sessão é inválida caso a interrupção não seja desejada
        if($pararScriptEmCasoDeSessaoInvalida == false){
            return false;
        }
    }
    //------------ Caso a sessão seja válida --------------
    //Caso os dados estejam setados
    if(isset($_SESSION["nick"]) && isset($_SESSION["id"])){
        //Mostra a mensagem de arquivo carregado
        if($imprimirMensagemSobreValidadeSessao == true){
            echo("[Loaded Json Document]");
        }
        //Retorna que a sessão é válida
        return true;
    }
}

?><file_sep>/browser/microsite/painel/ajax-query/editar-asset.php
<?php
/*
 * script que edita um asset no banco de dados
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$id = mysqli_real_escape_string($DB_Metadados, $_POST["id"]);
$nome = mysqli_real_escape_string($DB_Metadados, $_POST["nome"]);
$preco = mysqli_real_escape_string($DB_Metadados, $_POST["preco"]);
$descricao = mysqli_real_escape_string($DB_Metadados, $_POST["descricao"]);
$urlVideo = mysqli_real_escape_string($DB_Metadados, $_POST["urlVideo"]);
$urlAssetStore = mysqli_real_escape_string($DB_Metadados, $_POST["urlAssetStore"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Edita o asset
    $consultaEdicao = mysqli_query($DB_Metadados, "UPDATE AssetStore SET Nome='$nome', PrecoAtual='$preco', Descricao='$descricao', UrlVideo='$urlVideo', UrlAssetStore='$urlAssetStore' WHERE ID=$id"); 
    
echo("".
'parent.mostrarNotificacao("'.$nome.' foi editado com sucesso!", "#117700", 2500);'
."");
}

?><file_sep>/browser/microsite/painel/ajax-query/aplicar-suspensao.php
<?php
/*
 * script que remove o banimento de um usuario
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$id = mysqli_real_escape_string($DB_Registros, $_POST["id"]);
$dias = mysqli_real_escape_string($DB_Registros, $_POST["diasSuspensao"]);
$motivo = mysqli_real_escape_string($DB_Registros, $_POST["motivoSuspensao"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Atualiza a versão do jogo no banco de dados
    $consulta = mysqli_query($DB_Registros, "UPDATE Acesso SET SuspensaoDias=$dias, SuspensaoMotivo='$motivo' WHERE ID=$id");
    
echo("".
'parent.mostrarNotificacao("A conta foi suspensa com sucesso.", "#1E7200", 3000);'
."diasDeSuspensao = '".$dias."';"
."motivoDeSuspensao = '".$motivo."';"
."exibirPainelDeEdicao();"
."");
}

?><file_sep>/browser/sobre-nos.php
<?php
/*
 * Essa página HTML contém as informações de Sobre a Windsoft Games.
 */

$tituloPagina = "Sobre Nós - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
?>

    <br/>
    <center><b>Sobre nós</b></center>
    <br/>
    <br/>
    A Windsoft Games é uma empresa Indie Brasileira que tem como objetivo, desenvolver jogos intuitivos e cativantes. 
    <br/>
    <br/>
    Fundada por <NAME> em 20 de maio de 2015 a Windsoft Games almeja alcançar mais e mais jogadores. Desejamos ver mais jogadores felizes com jogos
     de qualidade!
    <br/>
    <br/>
    Até o momento a equipe da Windsoft Games é integrada somente por <NAME>.
    <br/>
    <br/>

<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/ajax-query/salvar-edicao-publicar-noticia.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$titulo = $_POST["titulo"];
$urlPagina = $_POST["urlPagina"];
$urlCapa = $_POST["urlCapa"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Configura a data
    date_default_timezone_set('America/Sao_Paulo');
    $ano = date('Y');
    $mesNumero = date('m');
    $dia = date('d');
    $hora = date('H');
    $minuto = date('i');
    
    //Cria os arquivos temporários de texto da noticia
    salvarArquivoTemporario($_SESSION["id"] . "_publicacao-titulo.tmp", $titulo);
    salvarArquivoTemporario($_SESSION["id"] . "_publicacao-urlPagina.tmp", $urlPagina);
    salvarArquivoTemporario($_SESSION["id"] . "_publicacao-urlCapa.tmp", $urlCapa);
    salvarArquivoTemporario($_SESSION["id"] . "_publicacao-dataSalvamento.tmp", "Alterações salvas em " . $dia . "/" . $mesNumero . "/" . $ano . " às " . $hora . ":" . $minuto);
    salvarArquivoTemporario($_SESSION["id"] . "_publicacao-existeEdicaoSalva.tmp", "true");

echo("".
'parent.mostrarNotificacao("Alterações salvas com sucesso.", "#117700", 2500);'.
'document.getElementById("alteracoes").innerHTML = "' . "Alterações salvas em " . $dia . "/" . $mesNumero . "/" . $ano . " às " . $hora . ":" . $minuto . '";'.
"");
}

function salvarArquivoTemporario($nome, $conteudo){
    //Configura o diretorio para salvar os arquivos de texto da edição
    $diretorioDosArquivosTemporarios = "../paginas/noticias/temp";
    
    //Salva o arquivo, o escrevendo
    $arquivo = fopen($diretorioDosArquivosTemporarios . "/" . $nome, 'w');
    fwrite($arquivo, $conteudo);
    fclose($arquivo);
}

?><file_sep>/browser/microsite/painel/paginas/php-info.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php

phpinfo();

?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/preferencias.php
<?php
/*
 * Essa página é responsável por configurações de preferências da conta do usuário
 */

$tituloPagina = "Preferências - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
RedirecionarParaLoginCasoNaoEstejaLogado();

include("../global/mysql/registros.inc");

?>

<center>
    <h3>Preferências da Conta</h3>
    <br>
    <br>
    <h3>Alteração de E-mail</h3>
    Altere o e-mail vinculado a sua conta, inserindo o novo e-mail abaixo.<br><div id="emailAtual"><?php echo("Seu e-mail atual é \"" . $_SESSION["email"] . "\"."); ?></div>
    <br>
    <br>
    <form autocomplete="off">
        <input type="email" id="email" placeholder="Novo E-mail" onKeyUp="validarEmail(); validarRepetirEmail();">
        <div id="emailStatus" class="statusCampo"></div>
        
        <input type="email" id="repetirEmail" placeholder="Repita o E-mail" onKeyUp="validarRepetirEmail();">
        <div id="repetirEmailStatus" class="statusCampo"></div>
        
        <input type="button" value="Salvar" onclick="salvarAlteracaoEmail();">
    </form>
    
    <br>
    <br>
    <h3>Alteração de Senha</h3>
    Altere a senha de sua conta, inserindo os dados abaixo.
    <br>
    <br>
    <form autocomplete="off">
        <input type="password" id="senhaAntiga" placeholder="Senha Atual" onKeyUp="validarSenha();">
        <div id="senhaAntigaStatus" class="statusCampo"></div>
        
        <input type="password" id="novaSenha" placeholder="Nova Senha" onKeyUp="validarNovaSenha(); validarRepetirSenhaNova();">
        <div id="senhaNovaStatus" class="statusCampo"></div>
        
        <input type="password" id="repetirSenha" placeholder="Repita a Nova Senha" onKeyUp="validarRepetirSenhaNova();">
        <div id="senhaNovaRepetirStatus" class="statusCampo"></div>
        
        <input type="button" value="Salvar" onclick="salvarAlteracaoSenha();">
    </form>
</center>

<!-- Javascript da página -->
<script type"text/javascript">
    //Inicio
    campoEmail = document.getElementById("email");
    statusEmail = document.getElementById("emailStatus");
    campoRepetirEmail = document.getElementById("repetirEmail");
    statusRepetirEmail = document.getElementById("repetirEmailStatus");
    campoSenhaAntiga = document.getElementById("senhaAntiga");
    statusSenhaAntiga = document.getElementById("senhaAntigaStatus");
    campoSenhaNova = document.getElementById("novaSenha");
    statusSenhaNova = document.getElementById("senhaNovaStatus");
    campoSenhaNovaRepetir = document.getElementById("repetirSenha");
    statusSenhaNovaRepetir = document.getElementById("senhaNovaRepetirStatus");
    
    emailValido = false;
    repetirEmailValido = false;
    senhaAntigaValida = false;
    senhaNovaValida = false;
    senhaNovaRepetirValida = false;
    
    function validarEmail(){
        //Desvalida
        campoEmail.style.borderColor = "#990000";
        campoEmail.style.borderWidth = "1px";
        statusEmail.style.color = "#990000";
        emailValido = false;
        
        if(campoEmail.value == ""){
            statusEmail.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(pareceComEmail(campoEmail.value) == false){
            statusEmail.innerHTML = "O conteúdo digitado não parece com um e-mail!";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoEmail.style.borderColor = "";
        campoEmail.style.borderWidth = "";
        statusEmail.innerHTML = "";
        emailValido = true;
    }
    
    function validarRepetirEmail(){
        //Desvalida
        campoRepetirEmail.style.borderColor = "#990000";
        campoRepetirEmail.style.borderWidth = "1px";
        statusRepetirEmail.style.color = "#990000";
        repetirEmailValido = false;
        
        if(campoRepetirEmail.value == ""){
            statusRepetirEmail.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoRepetirEmail.value != campoEmail.value){
            statusRepetirEmail.innerHTML = "O e-mail digitado não bate com o de cima.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoRepetirEmail.style.borderColor = "";
        campoRepetirEmail.style.borderWidth = "";
        statusRepetirEmail.innerHTML = "";
        repetirEmailValido = true;
    }
    
    //Salva a alteração do e-mail
    function salvarAlteracaoEmail(){
        //Verifica se os campos forão preenchidos
        if(emailValido == false || repetirEmailValido == false){
            mostrarNotificacao("Por favor, verifique e preencha cada campo.", "#750000", 2000);
            return;
        }
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/alterar-email.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(textoDaConexao(conexao));
            });
        };
        iniciarConexaoPost(conexao, "email=" + campoEmail.value);
    }
    
    function exibirEmailEmUso(){
        //Exibe a mensagem de email em uso
        
        statusEmail.style.color = "#990000";
        statusEmail.innerHTML = "Este e-mail já está em uso!";
        mostrarNotificacao("Por favor, verifique cada campo em busca de erros.", "#750000", 2000);
        emailValido = false;
    }
    
    function limparCamposDeEmailExibirNovoEmail(email){
        //Limpa os campos de email
        
        campoEmail.value = "";
        campoRepetirEmail.value = "";
        document.getElementById("emailAtual").innerHTML = "Seu e-mail atual é \"" + email + "\".";
        emailValido = false;
        repetirEmailValido = false;
    }
    
    function validarSenha(){
        //Desvalida
        campoSenhaAntiga.style.borderColor = "#990000";
        campoSenhaAntiga.style.borderWidth = "1px";
        statusSenhaAntiga.style.color = "#990000";
        senhaAntigaValida = false;
        
        if(campoSenhaAntiga.value == ""){
            statusSenhaAntiga.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSenhaAntiga.style.borderColor = "";
        campoSenhaAntiga.style.borderWidth = "";
        statusSenhaAntiga.innerHTML = "";
        senhaAntigaValida = true;
    }
    
    function validarNovaSenha(){
        var pontuacao = 0;
        
        if(campoSenhaNova.value.length >= 6){
             pontuacao += 1;
        }
        
        if(campoSenhaNova.value.length >= 12){
             pontuacao += 1;
        }
        
        if(contemNumeros(campoSenhaNova.value) == true && campoSenhaNova.value.length >= 6){
             pontuacao += 1;
        }
        
        if(contemLetrasMaiusculas(campoSenhaNova.value) == true && campoSenhaNova.value.length >= 6){
             pontuacao += 1;
        }
        
        if(contemCaracteresEspeciais(campoSenhaNova.value) == true && campoSenhaNova.value.length >= 6){
             pontuacao += 1;
        }
        
        //Cria a barra de força
        if(statusSenhaNova.innerHTML == ""){
            statusSenhaNova.innerHTML = "<div style=\"border-radius: 2px; width: 100%; background-color: #DBDBDB; height: 4px;\"><div id=\"barraForca\" style=\"border-radius: 2px; transition: width 500ms; width: 0%; height: 100%;\"></div></div>";
        }
        
        if(pontuacao == 0){
            document.getElementById("barraForca").style.width = "0%";
            document.getElementById("barraForca").style.backgroundColor = "#770000";
            campoSenhaNova.style.borderColor = "#990000";
            campoSenhaNova.style.borderWidth = "1px";
            senhaNovaValida = false;
        }
        if(pontuacao == 1){
            document.getElementById("barraForca").style.width = "20%";
            document.getElementById("barraForca").style.backgroundColor = "#770000";
            campoSenhaNova.style.borderColor = "";
            campoSenhaNova.style.borderWidth = "";
            senhaNovaValida = true;
        }
        if(pontuacao == 2){
            document.getElementById("barraForca").style.width = "40%";
            document.getElementById("barraForca").style.backgroundColor = "#CE7800";
            campoSenhaNova.style.borderColor = "";
            campoSenhaNova.style.borderWidth = "";
            senhaNovaValida = true;
        }
        if(pontuacao == 3){
            document.getElementById("barraForca").style.width = "60%";
            document.getElementById("barraForca").style.backgroundColor = "#B7B400";
            campoSenhaNova.style.borderColor = "";
            campoSenhaNova.style.borderWidth = "";
            senhaNovaValida = true;
        }
        if(pontuacao == 4){
            document.getElementById("barraForca").style.width = "80%";
            document.getElementById("barraForca").style.backgroundColor = "#159100";
            campoSenhaNova.style.borderColor = "";
            campoSenhaNova.style.borderWidth = "";
            senhaNovaValida = true;
        }
        if(pontuacao == 5){
            document.getElementById("barraForca").style.width = "100%";
            document.getElementById("barraForca").style.backgroundColor = "#0092BF";
            campoSenhaNova.style.borderColor = "";
            campoSenhaNova.style.borderWidth = "";
            senhaNovaValida = true;
        }
    }
    
    function validarRepetirSenhaNova(){
        //Desvalida
        campoSenhaNovaRepetir.style.borderColor = "#990000";
        campoSenhaNovaRepetir.style.borderWidth = "1px";
        statusSenhaNovaRepetir.style.color = "#990000";
        senhaNovaRepetirValida = false;
        
        if(campoSenhaNovaRepetir.value == ""){
            statusSenhaNovaRepetir.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoSenhaNovaRepetir.value != campoSenhaNova.value){
            statusSenhaNovaRepetir.innerHTML = "A senha não bate com a digitada acima.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoSenhaNovaRepetir.style.borderColor = "";
        campoSenhaNovaRepetir.style.borderWidth = "";
        statusSenhaNovaRepetir.innerHTML = "";
        senhaNovaRepetirValida = true;
    }
    
    //Salva a alteração da senha
    function salvarAlteracaoSenha(){
        //Verifica se os campos forão preenchidos
        if(senhaAntigaValida == false || senhaNovaValida == false || senhaNovaRepetirValida == false){
            mostrarNotificacao("Por favor, verifique e preencha cada campo.", "#750000", 2000);
            return;
        }
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/alterar-senha.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(textoDaConexao(conexao));
            });
        };
        iniciarConexaoPost(conexao, "senha=" + campoSenhaAntiga.value + "&senhaNova=" + campoSenhaNova.value);
    }
    
    function exibirSenhaErrada(){
        //Exibe a mensagem de senha incorreta
        
        statusSenhaAntiga.style.color = "#990000";
        statusSenhaAntiga.innerHTML = "Senha informada não bate com a senha atual da conta.";
        mostrarNotificacao("Por favor, verifique cada campo em busca de erros.", "#750000", 2000);
        senhaAntigaValida = false;
    }
    
    function limparCamposDeSenha(){
        //Limpa os campos de senha
        
        campoSenhaAntiga.value = "";
        campoSenhaNova.value = "";
        campoSenhaNovaRepetir.value = "";
        statusSenhaNova.innerHTML = "";
        senhaNovaValida = false;
        senhaNovaRepetirValida = false;
        senhaAntigaValida = false;
    }
</script>

<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/ajax-query/editar-slide.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$id = mysqli_real_escape_string($DB_Metadados, $_POST["id"]);
$titulo = mysqli_real_escape_string($DB_Metadados, $_POST["titulo"]);
$urlPagina = mysqli_real_escape_string($DB_Metadados, $_POST["urlPagina"]);
$urlCapa = mysqli_real_escape_string($DB_Metadados, $_POST["urlCapa"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Edita o slide desejado
    $consultaEditarSlide = mysqli_query($DB_Metadados, "UPDATE Noticias SET Titulo='$titulo', UrlDaPagina='$urlPagina', UrlDaCapa='$urlCapa' WHERE Noticia=$id");
    
echo("".
'parent.mostrarNotificacao("Slide '.$id.' editado com sucesso!", "#117700", 2500);'.
'exibirMensagemSlideEditado();'.
"");
}

?><file_sep>/browser/recuperar.php
<?php
/*
 * Essa é a página de recuperação de conta da Windsoft Games
 */

$tituloPagina = "Recuperação de conta - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
RedirecionarParaHomeCasoEstejaLogado();
?>

<center>
    <h3>Esqueceu a senha da sua conta? Podemos te ajudar!</h3>
    <div id="respostaConsulta">
        Digite o e-mail vinculado a sua conta. Caso a encontremos, iremos lhe enviar um e-mail com um link
        para que você possa gerar uma nova senha, ok?
        <br>
        <br>
        <br>
        <form autocomplete="off" id="formularioLogin">
            <input type="text" id="email" placeholder="E-mail">
            <input type="button" value="Recuperar" onclick="consultarLogin();">
        </form>
    </div>
</center>

<!-- Javascript da página -->
<script type"text/javascript">
    //Inicio
    campoEmail = document.getElementById("email");
    respostaConsulta = document.getElementById("respostaConsulta");
    
    function consultarLogin(){
        campoEmail = document.getElementById("email");
        
        //Verifica se os campos forão preenchidos
        if(campoEmail.value == ""){
            mostrarNotificacao("Por favor, preencha todos os campos.", "#750000", 2000);
            return;
        }
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/consulta-recuperacao.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                respostaConsulta.innerHTML = textoDaConexao(conexao);
                eval(document.getElementById("scriptResposta").innerHTML);
            });
        };
        iniciarConexaoPost(conexao, "email=" + campoEmail.value);
    }
</script>

<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/ajax-query/editar-anuncio-intersticial.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$ativarAnuncio = mysqli_real_escape_string($DB_Metadados, $_POST["ativarAnuncio"]);
$textoBotao = mysqli_real_escape_string($DB_Metadados, $_POST["textoBotao"]);
$urlImagem = mysqli_real_escape_string($DB_Metadados, $_POST["urlImagem"]);
$urlPagina = mysqli_real_escape_string($DB_Metadados, $_POST["urlPagina"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Obtem os dados do slide selecionado
    $consultaAtualizarAnuncio = mysqli_query($DB_Metadados, "UPDATE AdIntersticial SET AtivarAnuncio=$ativarAnuncio, TextoBotao='$textoBotao', UrlImagem='$urlImagem', UrlDaPagina='$urlPagina' WHERE Anuncio='Global'"); 
    
echo("".
'parent.mostrarNotificacao("O Anúncio Intersticial, foi editar com sucesso!", "#117700", 2500);'
."");
}

?><file_sep>/browser/microsite/painel/ajax-query/receber-arquivo-expansao.php
<?php
/*
 * script que recebe a imagem enviada através da função de carregar imagem
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$arquivo = $_FILES["arquivo"];
$plataforma = strtolower($_POST["plataforma"]);
$pacote = $_POST["pacote"];
$versao = $_POST["versao"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Obtem a extensão do arquivo
    $extensaoDoArquivo = pathinfo($arquivo["name"], PATHINFO_EXTENSION);
    
    //Cria o diretorio dos arquivos de expansão para este jogo, caso não exista
    if(!is_dir("../../../../global/repositorio/arquivos-de-jogos/".$plataforma."/".$pacote)){
        mkdir("../../../../global/repositorio/arquivos-de-jogos/".$plataforma."/".$pacote, 0777, true);
    }
    
    //Monta o nome do arquivo e diretorio
    $diretorioFinal = "../../../../global/repositorio/arquivos-de-jogos/".$plataforma."/".$pacote."/".$arquivo["name"];
    
    //Caso o upload ocorra bem
    if(move_uploaded_file($arquivo["tmp_name"], $diretorioFinal)){
        //Renomeia o arquivo enviado
        rename($diretorioFinal, "../../../../global/repositorio/arquivos-de-jogos/".$plataforma."/".$pacote."/expansion(".$versao.").".$extensaoDoArquivo);
        
echo(""
."parent.mostrarNotificacao(\"Arquivo de expansão carregado com sucesso!\", \"#467200\", 3500);"
."exibirMensagemArquivoEnviado();"
."");
    }
}

?><file_sep>/browser/microsite/mt-assets/home.php
<?php
/*
 * Essa é a página inicial do portfolio MT Assets
 */

$TituloPagina = "Home - MT Assets";
include("includes/cabecalho.inc");
?>

<div class="titulo">
    About MT Assets
</div>
<br/>
MT Assets is a developer of assets for Unity. MT Assets refers directly to me, <NAME>! I am an Indie programmer and game developer,
I always like to learn something new and I've been working with Unity since 2014. I'm at the Asset Store to provide useful and helpful tools for Unity Engine
developers. Get to know my assets, and visit my <a href="https://assetstore.unity.com/publishers/40306">Asset Store page!</a> If you need contact or support for my assets, please contact me at <EMAIL>.
<br/>
<br/>
<div class="titulo">
    See My Assets
</div>
<br/>
<div class="grid-assets">
    <?php
    include("../../../global/mysql/metadados.inc");
    //Consulta os assets
    $assetsConsulta = mysqli_query($DB_Metadados, "SELECT Nome, PrecoAtual, Descricao, UrlImagem, UrlVideo, UrlAssetStore FROM AssetStore");
    //Gera o HTML de items para a lista de assets
    $codigoAssetsHtml = "";
    while($linhaAssets = mysqli_fetch_assoc($assetsConsulta)) {
        $codigoAssetsHtml .= '
        <div>
            <div class="grid-item">
                <div class="grid-item-image" style="background-image: url('.$linhaAssets["UrlImagem"].');">
                </div>
                <div class="grid-item-title">
                    <center>'.$linhaAssets["Nome"].'</center>
                </div>
                <div class="grid-item-text">
                    '.$linhaAssets["Descricao"].'
                </div>
                <iframe width="100%" height="180" src="'.$linhaAssets["UrlVideo"].'" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
                <a target="_blank" href="'.$linhaAssets["UrlAssetStore"].'">
                    <div class="grid-item-button">
                        <center>View In Asset Store</center>
                    </div>
                </a>
                <center><small>Available for US$ '.$linhaAssets["PrecoAtual"].'</small></center>
                <br/>
            </div> 
        </div>
        ';
    }
    echo($codigoAssetsHtml);
    ?>
</div>
<br/>
<br/>
<?php
include("includes/rodape.inc");
?><file_sep>/browser/ajax-query/alterar-email.php
<?php
/*
 * script que faz consulta de email
 */

include("../../global/sessoes/verificador-de-sessao.inc");
include("../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Obtem as variaveis
$email = mysqli_real_escape_string($DB_Registros, $_POST["email"]);

//Verifica se é o mesmo e-mail da conta
if($email == $_SESSION["email"]){
    echo("mostrarNotificacao(\"Sua conta já está usando este e-mail!\", \"#117700\", 5000);s");
    exit();
}

//Verifica se já existe alguem usando este e-mail, caso exista para o script
$verificaEmail = mysqli_query($DB_Registros, "SELECT ID FROM Acesso WHERE Email='$email'");
if(mysqli_num_rows($verificaEmail) == 1){
    echo("exibirEmailEmUso();");
    exit();
}

//obtem o id do usuário
$id = $_SESSION["id"];

//Realiza a alteração do email
$consultaTroca = mysqli_query($DB_Registros, "UPDATE Acesso SET Email='$email' WHERE ID=$id");

$_SESSION["email"] = $email;

echo("".
"mostrarNotificacao('Seu e-mail foi alterado com sucesso para \"".$email."\".', \"#117700\", 5000);".
"limparCamposDeEmailExibirNovoEmail('".$email."');".
"");

?><file_sep>/browser/microsite/painel/ajax-query/receber-arte-asset.php
<?php
/*
 * script que recebe a arte enviada através da página de edição de arte
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$arquivo = $_FILES["imagem"];
$nomeDoArquivoArte = $_POST["nomeDoArquivoArte"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    $podeContinuarComCarregamento = true;
    
    //Verifica o tipo de arquivo
    $extensoesPermitidas = array("png");
    $extensaoDoArquivo = pathinfo($arquivo["name"], PATHINFO_EXTENSION);
    if(in_array($extensaoDoArquivo, $extensoesPermitidas) == false && $podeContinuarComCarregamento == true){
        echo("
             parent.mostrarNotificacao('O arquivo enviado, não é do formato PNG.', \"#750000\", 5000);
             redefinirInterface();
             ");
    	$podeContinuarComCarregamento = false;
    }
	
    //Verifica o tamanho maximo do arquivo
    $tamanhoMaxEmKb = 512 * 1024;
    if($arquivo["size"] > $tamanhoMaxEmKb && $podeContinuarComCarregamento == true){
        echo("
             parent.mostrarNotificacao('O arquivo enviado excede o tamanho limite de 512Kb.', \"#750000\", 5000);
             redefinirInterface();
             ");
    	$podeContinuarComCarregamento = false;
    }
	
    //Verifica se o arquivo é uma imagem
    if(!getimagesize($arquivo["tmp_name"]) && $podeContinuarComCarregamento == true){
        echo("
             parent.mostrarNotificacao('O arquivo enviado não é uma imagem, ou está corrompido.', \"#750000\", 5000);
             redefinirInterface();
             ");
    	$podeContinuarComCarregamento = false;
    }
    
    //Inicia o upload do arquivo, caso seja possível
    if($podeContinuarComCarregamento == true){
        //Monta o nome do arquivo e diretorio
        $diretorioFinal = "../../mt-assets/asset-images/".$arquivo["name"];
        
        //Caso o upload ocorra bem
        if(move_uploaded_file($arquivo["tmp_name"], $diretorioFinal)){
            //Renomeia o arquivo enviado
            rename($diretorioFinal, "../../mt-assets/asset-images/".$nomeDoArquivoArte);
                
echo("".
"parent.mostrarNotificacao(\"Arte carregada com sucesso!\", \"#467200\", 8000);".
"parent.carregarPagina('editar-arte-asset.php');"
."");
        }
    }
}

?><file_sep>/client/metadados/dados-do-jogo/obter-dados.php
<?php
/*
 * Essa classe é responsável por obter a versão de um determinado jogo
 * com base no nome do pacote informado
 */

include("../../../global/sessoes/verificador-de-sessao.inc");
include("../../../global/mysql/metadados.inc");

IgnorarSessaoImprimirMensagemDeConteudoCarregado();
$tempoInicio = microtime(true);
$jsonResposta = new stdClass();

//Variaveis base do json
$jsonResposta->ultimaVersao = "";

//Variaveis do script
$pacote = mysqli_real_escape_string($DB_Metadados, $_POST["pacote"]);

//<!---------------------- Inicio do Script ----------------------------->
//Inicia a consulta da obtenção da versão
$dadosDoJogoConsulta = mysqli_query($DB_Metadados, "SELECT UltimaVersao FROM JogosDaWindsoft WHERE PacoteOuNamespace = '$pacote'");

if(mysqli_num_rows($dadosDoJogoConsulta) == 1){
    $dadosDoJogo = mysqli_fetch_array($dadosDoJogoConsulta);
   
    //Insere as informações do anuncio no JSON resposta
    $jsonResposta->ultimaVersao = $dadosDoJogo[0];
}
if(mysqli_num_rows($dadosDoJogoConsulta) == 0){
    //Insere as variaveis vazias, para evitar crashs, no client
    $jsonResposta->ultimaVersao = "0.0.1";
}

//Insere o tempo da duração da execução do script no JSON Resposta
$jsonResposta->tempoExecucaoDoScript = number_format(microtime(true) - $tempoInicio, 5) . "ms";
//Imprime o JSON resposta
echo("<pre>" . json_encode($jsonResposta, JSON_PRETTY_PRINT) . "</pre>");

?><file_sep>/browser/ajax-query/trocar-capa.php
<?php
/*
 * script que faz consulta de alteração do icone
 */

include("../../global/sessoes/verificador-de-sessao.inc");
include("../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Obtem as variaveis
$novaCapa = mysqli_real_escape_string($DB_Registros, $_POST["capa"]);

//obtem o id do usuário
$id = $_SESSION["id"];

//Altera o icone
$consulta = mysqli_query($DB_Registros, "UPDATE Perfis SET IdCapa=$novaCapa WHERE ID=$id");

$_SESSION["idCapa"] = $novaCapa;

echo("".
"mostrarNotificacao(\"Capa de perfil alterado com sucesso!\", \"#117700\", 5000); ".
"document.getElementById(\"capaPagPerfil\").style.backgroundImage = \"url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/capas-de-perfil/capa_".$novaCapa.".png)\";".
"");

?><file_sep>/browser/microsite/painel/ajax-query/obter-dados-do-usuario.php
<?php
/*
 * script que obtem os dados da conta de um determinado usuário
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Atualiza a versão do jogo no banco de dados
    $consultaAcesso = mysqli_query($DB_Registros, "SELECT ID, Email, Ativada, ConcordouContrato, DataCriacao_Millis, Banimento, SuspensaoDias, SuspensaoMotivo FROM Acesso WHERE Nick='$nick'");
    
    //Caso encontre este usuário
    if(mysqli_num_rows($consultaAcesso) == 1){
        $dadosAcesso = mysqli_fetch_array($consultaAcesso);
        $id = $dadosAcesso[0];
        $email = $dadosAcesso[1];
        $ativada = boolval($dadosAcesso[2]) ? 'true' : 'false';
        $concordouContrato = boolval($dadosAcesso[3]) ? 'true' : 'false';
        $dataCriacaoMillis = $dadosAcesso[4];
        $banimento = $dadosAcesso[5];
        $suspensaoDias = $dadosAcesso[6];
        $suspensaoMotivo = $dadosAcesso[7];
        
        $consultaPerfil = mysqli_query($DB_Registros, "SELECT IdIcone FROM Perfis WHERE ID=$id");
        $dadosPerfil = mysqli_fetch_array($consultaPerfil);
        $idIcone = $dadosPerfil[0];
        
        $consultaStaff = mysqli_query($DB_Metadados, "SELECT Cargo, Autoridade FROM Staff WHERE Nick='$nick'");
        $dadosStaff = mysqli_fetch_array($consultaStaff);
        if(mysqli_num_rows($consultaStaff) == 0){
            $staff = "false";
            $cargo = "Membro";
            $autoridade = 0;
        }
        if(mysqli_num_rows($consultaStaff) == 1){
            $staff = "true";
            $cargo = $dadosStaff[0];
            $autoridade = $dadosStaff[1];
        }
    
echo("".
'gravarDadosDesteUsuario('.$id.',"'.$email.'",'.$ativada.','.$concordouContrato.','.$dataCriacaoMillis.',"'.$banimento.'",'.$suspensaoDias.',"'.$suspensaoMotivo.'",'.$idIcone.','.$staff.',"'.$cargo.'",'.$autoridade.');'
.'exibirPainelDeEdicao();'
."");
    }
    //Caso não encontre o usuário
    if(mysqli_num_rows($consultaAcesso) == 0){
echo("".
'parent.mostrarNotificacao("Nenhum usuário com este Nickname foi encontrado.", "#750000", 2500);'
."");
    }
}

?><file_sep>/browser/microsite/painel/ajax-query/cadastrar-novo-jogo.php
<?php
/*
 * script que insere o novo jogo no banco de dados
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nome = mysqli_real_escape_string($DB_Metadados, $_POST["nome"]);
$ultimaVersao = mysqli_real_escape_string($DB_Metadados, $_POST["ultimaVersao"]);
$nomeDoPacote = mysqli_real_escape_string($DB_Metadados, $_POST["nomeDoPacote"]);
$plataforma = mysqli_real_escape_string($DB_Metadados, $_POST["plataforma"]);
$linkLoja = mysqli_real_escape_string($DB_Metadados, $_POST["linkLoja"]);
$exibirNoSite = mysqli_real_escape_string($DB_Metadados, $_POST["exibirNoSite"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Deixa o nome da plataforma em minusculo
    $plataformaMinusculo = strtolower($plataforma);
    
    //Insere o novo jogo no banco de dados
    $consultaCadastrarJogo = mysqli_query($DB_Metadados, "INSERT INTO JogosDaWindsoft(Nome, UrlIconeJogo, UltimaVersao, PacoteOuNamespace, Plataforma, LinkNaLoja, UrlIconePlataforma, ExibirNaHomePage) VALUES('$nome', 'https://windsoft.xyz/global/repositorio/icones-de-jogos/$nomeDoPacote.png', '$ultimaVersao', '$nomeDoPacote', '$plataforma', '$linkLoja', 'https://windsoft.xyz/global/repositorio/icones-de-plataformas/$plataformaMinusculo.png', $exibirNoSite)"); 
    
echo("".
'parent.mostrarNotificacao("'.$nome.' foi cadastrado com sucesso!", "#117700", 2500);'.
'exibirMensagemJogoCadastrado();'
."");
}

?><file_sep>/browser/microsite/painel/paginas/graficos-vendas-assets.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<!-- Código PHP que processa o armazenamento de dados de vendas dos assets e carrega todos os dados dos assets -->
<?php include("includes/mt-assets-historico-de-vendas.inc"); ?>

<center>
    <h3>Gráficos de Vendas</h3>
</center>

<div style="width: 100%; max-width: 100%; margin-left: auto; margin-right: auto; display: grid; grid-template-columns: 40% 40% 20%;">
    <select id="selectAno" style="width: calc(100% - 6px);">
        <?php
        //Cria opções automaticamente, até o ano atual
        $anoInicial = 2018;
        $diferencaDeAnos = (int)(date("Y")) - $anoInicial;
        echo('<option value="'.$anoInicial.'">Ano de '.$anoInicial.'</option>');
        for($i = 0; $i < $diferencaDeAnos; $i++){
            if((int)(date("Y")) == ($anoInicial + $i + 1)){
                echo('<option value="'.($anoInicial + $i + 1).'" selected="selected">Ano de '.($anoInicial + $i + 1).'</option>');
            }
            if((int)(date("Y")) != ($anoInicial + $i + 1)){
                echo('<option value="'.($anoInicial + $i + 1).'">Ano de '.($anoInicial + $i + 1).'</option>');
            }
        }
        ?>
    </select>
    <select id="selectMes" style="width: calc(100% - 6px);">
        <?php
        //Cria opções automaticamente, de todos os meses
        for($i = 0; $i < 12; $i++){
            if($i == "0"){ $mesExtenso = ("Janeiro"); }
            if($i == "1"){ $mesExtenso = ("Fevereiro"); }
            if($i == "2"){ $mesExtenso = ("Março"); }
            if($i == "3"){ $mesExtenso = ("Abril"); }
            if($i == "4"){ $mesExtenso = ("Maio"); }
            if($i == "5"){ $mesExtenso = ("Junho"); }
            if($i == "6"){ $mesExtenso = ("Julho"); }
            if($i == "7"){ $mesExtenso = ("Agosto"); }
            if($i == "8"){ $mesExtenso = ("Setembro"); }
            if($i == "9"){ $mesExtenso = ("Outubro"); }
            if($i == "10"){ $mesExtenso = ("Novembro"); }
            if($i == "11"){ $mesExtenso = ("Dezembro"); }
            
            if(((int)(date("n")) - 1) == $i){
                echo('<option value="'.$i.'" selected="selected">'.$mesExtenso.'</option>');
            }
            if(((int)(date("n")) - 1) != $i){
                echo('<option value="'.$i.'">'.$mesExtenso.'</option>');
            }
        }
        ?>
    </select>
    <input type="button" value="Filtrar" style="width: 100%;" onclick="filtrarGraficos();" />
</div>

<center><h3 style="margin-bottom: 0px;" id="receitasDoAnoTitulo">Receitas no Ano</h3></center>
<div id="receitasDoAnoGrafico" style="width: 100%; height: 300px;"></div>
<center><small>* A receita exibida no gráfico, é de 70% do valor total, pois 30% da receita é voltada para a Unity.</small></center>

<center><h3 style="margin-bottom: 0px;" id="vendasDoMesTitulo">Vendas do Mês</h3></center>
<div id="vendasDoMesGrafico" style="width: 100%; height: 300px;"></div>

<br>
<br>
<center>
Acesso Rápido a Vendas Diárias
<br>
<br>
<?php
echo('<a href="#vendasAsset1">'.$nome[1].'</a>');
for($x = 2; $x < count($nome) + 1; $x++){
    echo(' - <a href="#vendasAsset'.$x.'">'.$nome[$x].'</a>');
}
?>
</center>
<br>
<br>

<?php
for($x = 1; $x < count($nome) + 1; $x++){
    echo('
        <center><h3 style="margin-bottom: 0px;" id="vendasAsset'.$x.'">Vendas diárias de '.$nome[$x].'</h3></center>
        <div id="vendasAsset'.$x.'Grafico" style="width: 100%; height: 300px;"></div>
        <center><small>* Estas vendas diárias são referentes ao mês atualmente selecionado no filtro.</small></center>
        <br>
        <br>
        ');
}
?>

<!-- código javascript desta página -->
<script type="text/javascript">
    google.charts.load('current', {'packages':['corechart', 'bar']});
    google.charts.setOnLoadCallback(desenharTodosGraficos);
    
    //dados de receitas do ano
    receitasDoAnoDados = [['Mês', 'US$'], ['Carregando dados', 0]];
    //dados de vendas do mês
    vendasDoMesDados = [['Asset', 'Quantia'], ['Carregando dados', 1]];
    //Dados de vendas diarias de cada asset
    <?php
        for($x = 1; $x < count($nome) + 1; $x++){
            echo('
                vendasDoAsset'.$x.'Dados = [["Dia", "Quantidade"], ["Carregando dados", 0]];
                ');
        }
    ?>
    
    //Função que desenha todos os gráficos
    function desenharTodosGraficos(){
        //Obtem o nome do mes atual
        var mesAtualNome = "";
        if(document.getElementById("selectMes").value == "0"){mesAtualNome = "Janeiro";}
        if(document.getElementById("selectMes").value == "1"){mesAtualNome = "Fevereiro";}
        if(document.getElementById("selectMes").value == "2"){mesAtualNome = "Março";}
        if(document.getElementById("selectMes").value == "3"){mesAtualNome = "Abril";}
        if(document.getElementById("selectMes").value == "4"){mesAtualNome = "Maio";}
        if(document.getElementById("selectMes").value == "5"){mesAtualNome = "Junho";}
        if(document.getElementById("selectMes").value == "6"){mesAtualNome = "Julho";}
        if(document.getElementById("selectMes").value == "7"){mesAtualNome = "Agosto";}
        if(document.getElementById("selectMes").value == "8"){mesAtualNome = "Setembro";}
        if(document.getElementById("selectMes").value == "9"){mesAtualNome = "Outubro";}
        if(document.getElementById("selectMes").value == "10"){mesAtualNome = "Novembro";}
        if(document.getElementById("selectMes").value == "11"){mesAtualNome = "Dezembro";}
        //Desenha o gráfico de receita deste ano
        var receitasDesteAno = new google.visualization.BarChart(document.getElementById('receitasDoAnoGrafico'));
        receitasDesteAno.draw(google.visualization.arrayToDataTable(receitasDoAnoDados), {legend: {position: 'none'}, 'chartArea': {'width': '65%', 'height': '300px'}});
        document.getElementById("receitasDoAnoTitulo").innerHTML = "Receitas no Ano de " + document.getElementById("selectAno").value;
        //Desenha o gráfico de vendas do mes
        var vendasDoMes = new google.visualization.PieChart(document.getElementById('vendasDoMesGrafico'));
        vendasDoMes.draw(google.visualization.arrayToDataTable(vendasDoMesDados), {pieHole: 0.4, legend: {position: 'bottom'}, 'chartArea': {'width': '100%', 'height': '300px'}});
        document.getElementById("vendasDoMesTitulo").innerHTML = "Vendas de " + mesAtualNome;
        //Desenha o gráfico de vendas diarias de cada asset
        <?php
        for($x = 1; $x < count($nome) + 1; $x++){
            echo('
                var vendasDoAsset'.$x.' = new google.visualization.ColumnChart(document.getElementById("vendasAsset'.$x.'Grafico"));
                vendasDoAsset'.$x.'.draw(google.visualization.arrayToDataTable(vendasDoAsset'.$x.'Dados), {legend: {position: "none"}, "chartArea": {"width": "100%", "height": "300px"}});
                ');
        }
        ?>
    }
    
    //Função que filtra os graficos para uma determinada data
    function filtrarGraficos(){
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/obter-graficos-desta-data.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                console.log(parent.textoDaConexao(conexao));
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao,
                                        "ano=" + document.getElementById("selectAno").value +
                                        "&mes=" + document.getElementById("selectMes").value);
    }
    
    //Função que obtem os dados do ajax e os exibe nos graficos
    function atualizarDadosDosGraficos(arrayReceitaDoAno, arrayVendasDoMes<?php
    for($x = 1; $x < count($nome) + 1; $x++){
            echo(', arrayVendasDiariasAsset'.$x);
        }
    ?>){
        receitasDoAnoDados = arrayReceitaDoAno;
        vendasDoMesDados = arrayVendasDoMes;
        <?php
        for($x = 1; $x < count($nome) + 1; $x++){
                echo("vendasDoAsset".$x."Dados = arrayVendasDiariasAsset".$x.";");
            }
        ?>
        desenharTodosGraficos();
    }
    
    //Inicia carregando os dados da data atual
    filtrarGraficos();
</script>

<?php
$conteudoQuadroDeAviso = ('
• Estes são os gráficos gerados, usando o histórico de compras. Utilize os controles de filtro, no topo desta página para visualizar e comparar gráficos.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/mt-assets/includes/rodape.inc
<?php
/*
 * Essa classe é responsável por fornecer o rodapé das páginas.
 */
?>

            <br/>            
            <br/>
            <hr/>
            <br/>
            <center>
                <small>
                    <a href="https://windsoft.xyz/mtassets">Home</a>
                     • 
                    <a href="https://www.youtube.com/channel/UCqAgiYBwAWajjFUqyJ6_xyw?view_as=subscriber">Youtube Channel</a>
                     • 
                    <a href="mailto:<EMAIL>">Contact</a>
                     • 
                    <a href="https://assetstore.unity.com/publishers/40306">Unity Asset Store</a>
                     • 
                    <a href="https://windsoft.xyz/">Meet the Windsoft Games!</a>
                </small>
            </center>
            <br/>
        </div>
    </body>
</html><file_sep>/browser/ajax-query/processar-registro.php
<?php
/*
 * Script que faz registro no banco de dados
 */

//Processa a resposta do ReCaptcha
require_once "validador-recaptcha-2.0.php";
$secret = "<KEY>";
$response = null;
$reCaptcha = new ReCaptcha($secret);

if ($_POST["tokenCaptcha"]) {
    $response = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $_POST["tokenCaptcha"]);
}

//Caso a resposta do reCaptcha tenha dado certo, processa o formulario e para o script
if ($response != null && $response->success) {
    include("../../global/mysql/registros.inc");
    
    //Obtem as variaveis
    $nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);
    $senha = MD5($_POST["senha"]);
    $email = mysqli_real_escape_string($DB_Registros, $_POST["email"]);
    $nome = mysqli_real_escape_string($DB_Registros, $_POST["nome"]);
    $genero = mysqli_real_escape_string($DB_Registros, $_POST["genero"]);
    $idade = mysqli_real_escape_string($DB_Registros, $_POST["idade"]);
    
    //Valida as variaveis. Ao encontrar qualquer problema, simplesmente interrompe tudo
    if(strlen($nick) > 12 || strlen($nick) < 2){
        exit();
    }
    if(strlen($nome) > 18){
        exit();
    }
    if(strlen($genero) > 1){
        exit();
    }
    if($idade < 13 || $idade > 999){
        exit();
    }
    
    //Processa o registro
    
    //Verifica se o nick já está sendo usado
    $consultaUsandoNick = mysqli_query($DB_Registros, "SELECT ID FROM Acesso WHERE Nick='$nick'");
    
    //Caso o nick já esteja sendo usado
    if(mysqli_num_rows($consultaUsandoNick) == 1){
        echo("exibirNickEmUso();");
        exit();
    }
    
    //Verifica se o email já está sendo usado
    $consultaUsandoEmail = mysqli_query($DB_Registros, "SELECT ID FROM Acesso WHERE Email='$email'");
    
    //Caso o email já esteja sendo usado
    if(mysqli_num_rows($consultaUsandoEmail) == 1){
        echo("exibirEmailEmUso();");
        exit();
    }
    
    //Caso esteja tudo certo
    
    //Obtem a hora atual em millis
    $dataAtual = round(microtime(true) * 1000);
    
    //Insere os dados de acesso
    $consultaInsercaoAcesso = mysqli_query($DB_Registros, "INSERT INTO Acesso (Nick, Senha, Email, Ativada, ConcordouContrato, DataCriacao_Millis) VALUES('$nick', '$senha', '$email', 0, 1, $dataAtual)");
    
    //Obtem o ID do usuário
    $consultaID = mysqli_query($DB_Registros, "SELECT ID FROM Acesso WHERE Nick='$nick'");
    $dadosId = mysqli_fetch_array($consultaID);
    
    //Obtem o ano de nascimento
    $anoNascimento = date("Y") - $idade;
    
    //Insere os dados de perfil
    $consultaInsercaoAcesso = mysqli_query($DB_Registros, "INSERT INTO Perfis (ID, Nome, IdCapa, IdIcone, Genero, AnoNascimento, UltimoLogin_Millis) VALUES($dadosId[0], '$nome', 1, 1, '$genero', $anoNascimento, $dataAtual)");
    
    //Imprime a mensagem de sucesso
    echo("".
"mostrarSpinner(true); ".
"mostrarNotificacao(\"Sua conta foi criada com sucesso! Estamos lhe redirecionando para que possa fazer login.\", \"#1F7F00\", 15000);".
"setTimeout(function () { ".
"window.location.href = \"https://windsoft.xyz/browser/login.php\"; ".
"}, 10000);".
"");
    
    exit();
}

//Caso tenha dado errado
echo("mostrarNotificacao(\"Verificação do reCaptcha está incorreta. Tente novamente.\", \"#750000\", 3500);");

?><file_sep>/browser/microsite/painel/paginas/contas-registradas.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem a contagem de contas registradas
$consulta = mysqli_query($DB_Registros, "SELECT TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_NAME = 'Acesso'");
?>

<center>
    <h3>Contas Registradas</h3>
</center>

<div style="width: 80%; max-width: 300px; margin-left: auto; margin-right: auto; border-radius: 4px; background-color: #E5E5E5; padding: 18px;">
    <center>
        <div style="font-weight: bolder; font-size: 40px;">
            <?php echo(mysqli_fetch_array($consulta)[0]); ?>
        </div>
        <small>Contas</small>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
</script>

<?php
$conteudoQuadroDeAviso = ('
• Essa é uma estimativa com 98% de precisão, da contagem de contas registradas até o momento.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/paginas/numero-logins.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem a contagem de requisições
$consultaDeHistorico = mysqli_query($DB_Metadados, "SELECT LoginsDia, LoginsSem, LoginsMes FROM LoginsStats WHERE Idade IN (".implode(',', $a=array("'Atual'", "'Historico 1'", "'Historico 2'", "'Historico 3'", "'Historico 4'", "'Historico 5'")).")");
$i = 0;
while($linha = mysqli_fetch_assoc($consultaDeHistorico)) {
    $loginsDia[$i] = $linha["LoginsDia"];
    $loginsSem[$i] = $linha["LoginsSem"];
    $loginsMes[$i] = $linha["LoginsMes"];
    $i += 1;
}
?>

<center>
    <h3>Número de Logins</h3>
</center>

<center>
    <select id="selectStats" onchange="desenharGrafico();">
        <option value="0">Estatística Diária</option>
        <option value="1">Estatística Semanal</option>
        <option value="2">Estatística Mensal</option>
    </select>
</center>
<br>
<br>

<!-- código javascript desta página -->
<script type="text/javascript">
    google.charts.load('current', {'packages':['bar']});
    google.charts.setOnLoadCallback(desenharGrafico);

    //Dados de exibição diário
    dadosPorDia = [["Período", "Logins"],<?php
    for ($ii = $i - 1; $ii >= 0; $ii--) {
        $nome = "";
        if($ii == 0){$nome = "Hoje";}
        if($ii == 1){$nome = "Há 1 Dia";}
        if($ii == 2){$nome = "Há 2 Dias";}
        if($ii == 3){$nome = "Há 3 Dias";}
        if($ii == 4){$nome = "Há 4 Dias";}
        if($ii == 5){$nome = "Há 5 Dias";}
        echo("["."'".$nome."'".",".$loginsDia[$ii]."]");
        if($ii > 0){
            echo(",");
        }
    }
    ?>];
    dadosPorDiaOptions = {legend: {position: 'none'}, vAxis: { viewWindow: {min: 0}}, bar: {groupWidth: '40%'}};
    
    //Dados de exibição semanal
    dadosPorSemana = [["Período", "Logins"],<?php
    for ($ii = $i - 1; $ii >= 0; $ii--) {
        $nome = "";
        if($ii == 0){$nome = "Esta Sem.";}
        if($ii == 1){$nome = "Há 1 Sem.";}
        if($ii == 2){$nome = "Há 2 Sem.";}
        if($ii == 3){$nome = "Há 3 Sem.";}
        if($ii == 4){$nome = "Há 4 Sem.";}
        if($ii == 5){$nome = "Há 5 Sem.";}
        echo("["."'".$nome."'".",".$loginsSem[$ii]."]");
        if($ii > 0){
            echo(",");
        }
    }
    ?>];
    dadosPorSemanaOptions = {legend: {position: 'none'}, vAxis: { viewWindow: {min: 0}}, bar: {groupWidth: '40%'}};
    
    //Dados de exibição mensal
    dadosPorMes = [["Período", "Logins"],<?php
    for ($ii = $i - 1; $ii >= 0; $ii--) {
        $nome = "";
        if($ii == 0){$nome = "Este Mês";}
        if($ii == 1){$nome = "Há 1 Mês";}
        if($ii == 2){$nome = "Há 2 Meses";}
        if($ii == 3){$nome = "Há 3 Meses";}
        if($ii == 4){$nome = "Há 4 Meses";}
        if($ii == 5){$nome = "Há 5 Meses";}
        echo("["."'".$nome."'".",".$loginsMes[$ii]."]");
        if($ii > 0){
            echo(",");
        }
    }
    ?>];
    dadosPorMesOptions = {legend: {position: 'none'}, vAxis: { viewWindow: {min: 0}}, bar: {groupWidth: '40%'}};
    
    function desenharGrafico() {
        var statsSelecionado = document.getElementById("selectStats").value;
        
        if(statsSelecionado == 0){
            var dados = google.visualization.arrayToDataTable(dadosPorDia);
            var chart = new google.charts.Bar(document.getElementById('chart'));
            chart.draw(dados, google.charts.Bar.convertOptions(dadosPorDiaOptions));
        }
        if(statsSelecionado == 1){
            var dados = google.visualization.arrayToDataTable(dadosPorSemana);
            var chart = new google.charts.Bar(document.getElementById('chart'));
            chart.draw(dados, google.charts.Bar.convertOptions(dadosPorDiaOptions));
        }
        if(statsSelecionado == 2){
            var dados = google.visualization.arrayToDataTable(dadosPorMes);
            var chart = new google.charts.Bar(document.getElementById('chart'));
            chart.draw(dados, google.charts.Bar.convertOptions(dadosPorDiaOptions));
        }
    }
</script>

<div id="chart" style="width: 100%; height: 250px;"></div>

<?php
$conteudoQuadroDeAviso = ('
• Sempre que um usuário faz login no website ou aplicação que use o Windsoft ID, a contagem de hoje, desta semana e deste mês, serão aumentados em um.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/global/mysql/feedbacks.inc
<?php 
/*
 * Essa classe é responsável por fazer a conexão ao banco de dados "feedbacks"
 */

//Este script deve ser incluído no topo dos scripts.

//Abre a conexão para o banco de dados de Feedbacks
$DB_Feedbacks = mysqli_connect("feedbacks.mysql.uhserver.com", "replie", "45032978m@rC", "feedbacks");

mysqli_query($DB_Feedbacks, "SET NAMES 'utf8'");
mysqli_query($DB_Feedbacks, 'SET character_set_connection=utf8');
mysqli_query($DB_Feedbacks, 'SET character_set_client=utf8');
mysqli_query($DB_Feedbacks, 'SET character_set_results=utf8');

?><file_sep>/browser/microsite/painel/ajax-query/publicar-noticia.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$titulo = mysqli_real_escape_string($DB_Metadados, $_POST["titulo"]);
$urlPagina = mysqli_real_escape_string($DB_Metadados, $_POST["urlPagina"]);
$urlCapa = mysqli_real_escape_string($DB_Metadados, $_POST["urlCapa"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Executa a consulta para obter as noticias dos slides velhos
    $consultaSlidesAntigo = mysqli_query($DB_Metadados, "SELECT Titulo, UrlDaPagina, UrlDaCapa FROM Noticias WHERE Noticia IN (1,2,3,4)");    
    $tituloTras = array();
    $urlNoticiaTras = array();
    $urlCapaTras = array();
    
    //Obtem as noticias antigas em variaveis
    $i = 0;
    while($linha = mysqli_fetch_assoc($consultaSlidesAntigo)) {
        $tituloTras[$i] = $linha["Titulo"];
        $urlNoticiaTras[$i] = $linha["UrlDaPagina"];
        $urlCapaTras[$i] = $linha["UrlDaCapa"];
        $i += 1;
    }
    
    //Move as notícias do slide 1 até o 4 para os slides antecessores
    $consultaSlide4ParaSlide5 = mysqli_query($DB_Metadados, "UPDATE Noticias SET Titulo='$tituloTras[3]', UrlDaPagina='$urlNoticiaTras[3]', UrlDaCapa='$urlCapaTras[3]' WHERE Noticia=5");
    $consultaSlide3ParaSlide4 = mysqli_query($DB_Metadados, "UPDATE Noticias SET Titulo='$tituloTras[2]', UrlDaPagina='$urlNoticiaTras[2]', UrlDaCapa='$urlCapaTras[2]' WHERE Noticia=4");
    $consultaSlide2ParaSlide3 = mysqli_query($DB_Metadados, "UPDATE Noticias SET Titulo='$tituloTras[1]', UrlDaPagina='$urlNoticiaTras[1]', UrlDaCapa='$urlCapaTras[1]' WHERE Noticia=3");
    $consultaSlide1ParaSlide2 = mysqli_query($DB_Metadados, "UPDATE Noticias SET Titulo='$tituloTras[0]', UrlDaPagina='$urlNoticiaTras[0]', UrlDaCapa='$urlCapaTras[0]' WHERE Noticia=2");
    
    //Aplica a nova notícia ao slide 1
    $consultaLancarNoticia = mysqli_query($DB_Metadados, "UPDATE Noticias SET Titulo='$titulo', UrlDaPagina='$urlPagina', UrlDaCapa='$urlCapa' WHERE Noticia=1");
    
    //Salva no arquivo temporário, a informação de que não existe edição salva
    $arquivo = fopen("../paginas/noticias/temp/" . $_SESSION["id"] . "_publicacao-existeEdicaoSalva.tmp", 'w');
    fwrite($arquivo, "false");
    fclose($arquivo);
    
echo("".
'parent.mostrarNotificacao("Notícia publicada com sucesso!", "#117700", 2500);'.
'exibirMensagemNoticiaPublicada();'.
"");
}

?><file_sep>/browser/microsite/painel/paginas/editar-um-usuario.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<center>
    <h3>Editar um Usuário</h3>
</center>

<div id="formulario" style="display: block;">
    <center>
        <form autocomplete="off">
            <div style="display: grid; grid-template-columns: 75% 25%; width: 80%; max-width: 300px;">
                <input id="nick" type="text" placeholder="<NAME>" autocorrect="off" autocapitalize="none" style="width: calc(100% - 6px); margin: 8px 8px 8px 0px;" />
                <input type="button" value="Editar" style="width: calc(100% - 6px); margin: 8px 0px 8px 6px;" onclick="editarUsuario();" />
            </div>
            <div id="nickStatus" class="statusCampo"></div>
        </form>
    </center>
</div>

<!-- editor de perfil -->
<div id="editorDeUsuario" style="display: none; border-width: 1px; border-style: solid; border-color: #898989; border-radius: 8px; padding: 8px;">
    <div id="iconeDePerfil" style="width: 100px; height: 100px; margin-left: auto; margin-right: auto; background-image: url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_0.png); background-size: 100px 100px;"></div>
    <div id="nomeDeUsuario" style="width: 120px; margin-left: auto; margin-right: auto; background-color: #EDEDED; border-radius: 60px; padding: 8px; text-align: center; margin-top: -16px; margin-bottom: 8px; font-weight: bolder;">
        #0 User
    </div>
    
    <!-- menu de opções da conta -->
    <div style="display: flex; flex-wrap: wrap; justify-content: center; ">
        <!-- editor de nome de usuário -->
        <div style="background-color: #EDEDED; border-radius: 8px; width: 120px; padding: 8px; margin: 4px;">
            <center><img style="width: 48px; border-radius: 48px; border-width: 1px; border-color: #727272; border-style: solid; margin-bottom: 4px;" src="../imagens/icones/nickname.png" /></center>
            <center><small>Nome de Usuário</small></center>
            <br/>
            <input id="nickNameClicker" type="text" placeholder="Novo Nickname" style="width: 100%; cursor: pointer;" readonly onclick="prepararEdicaoNick();"/>
            <input id="nickNameEditor" type="text" placeholder="Novo Nickname" style="width: 100%; display: none;" />
            <div id="nickNameEditorStatus" class="statusCampo"></div>
            <input id="nickNameSave" type="button" value="Salvar" style="width: 100%; display: none;" onclick="salvarEdicaoNick();" />
        </div>
        
        <!-- banir usuário -->
        <div style="background-color: #EDEDED; border-radius: 8px; width: 120px; padding: 8px; margin: 4px;">
            <center><img style="width: 48px; border-radius: 48px; border-width: 1px; border-color: #727272; border-style: solid; margin-bottom: 4px;" src="../imagens/icones/banimento.png" /></center>
            <center><small>Banimento</small></center>
            <br/>
            <textarea id="motivoBanimento" placeholder="Motivo" style="width: 100%; display: block;" readonly></textarea>
            <div id="motivoBanimentoStatus" class="statusCampo"></div>
            <input id="botaoDesbanir" type="button" value="Desbanir" style="background-color: #146000; width: 100%; display: none;" onclick="removerBanimento();" />
            <input id="botaoBanir" type="button" value="Banir" style="background-color: #820000; width: 100%; display: none;" onclick="banirAgora();" />
        </div>
        
        <!-- suspender usuário -->
        <div style="background-color: #EDEDED; border-radius: 8px; width: 120px; padding: 8px; margin: 4px;">
            <center><img style="width: 48px; border-radius: 48px; border-width: 1px; border-color: #727272; border-style: solid; margin-bottom: 4px;" src="../imagens/icones/suspensao.png" /></center>
            <center><small>Suspensão</small></center>
            <br/>
            <input id="diasSuspensao" type="number" placeholder="Dias" style="width: 100%; display: none;" />
            <textarea id="motivoSuspensao" placeholder="Motivo" style="width: 100%; display: none;" readonly></textarea>
            <div id="motivoSuspensaoStatus" class="statusCampo"></div>
            <input id="botaoRemoverSuspensao" type="button" value="Remover" style="background-color: #146000; width: 100%; display: none;" onclick="removerSuspensao();" />
            <input id="botaoSuspender" type="button" value="Suspender" style="background-color: #820000; width: 100%; display: none;" onclick="suspenderAgora();" />
        </div>
    </div>
    
    <center><h3>Moderação da Staff</h3></center>
    
    <!-- menu de opções de staff -->
    <div style="display: flex; flex-wrap: wrap; justify-content: center; ">
        <!-- tornar membro da staff, ou remover membro da staff -->
        <div style="background-color: #EDEDED; border-radius: 8px; width: 120px; padding: 8px; margin: 4px;">
            <center><img style="width: 48px; border-radius: 48px; border-width: 1px; border-color: #727272; border-style: solid; margin-bottom: 4px;" src="../imagens/icones/staff.png" /></center>
            <center><small>Staff</small></center>
            <br/>
            <input id="removerMembro" type="button" value="Remover" style="background-color: #660000; width: 100%; display: none;" onclick="removerStaff();" />
            <input id="tornarMembro" type="button" value="Promover" style="background-color: #006606; width: 100%; display: none;" onclick="adicionarStaff();" />
        </div>
        
        <!-- editar cargo -->
        <div id="staffCargoEditor" style="background-color: #EDEDED; border-radius: 8px; width: 120px; padding: 8px; margin: 4px;">
            <center><img style="width: 48px; border-radius: 48px; border-width: 1px; border-color: #727272; border-style: solid; margin-bottom: 4px;" src="../imagens/icones/cargo.png" /></center>
            <center><small>Cargo</small></center>
            <br/>
            <input id="cargoClicker" type="text" placeholder="Novo Cargo" style="width: 100%; cursor: pointer;" readonly onclick="prepararEdicaoCargo();"/>
            <input id="cargoEditor" type="text" placeholder="Novo Cargo" style="width: 100%; display: none;" />
            <div id="cargoEditorStatus" class="statusCampo"></div>
            <input id="cargoSave" type="button" value="Salvar" style="width: 100%; display: none;" onclick="salvarEdicaoCargo();" />
        </div>
        
        <!-- editar autoridade -->
        <div id="staffAutoridadeEditor" style="background-color: #EDEDED; border-radius: 8px; width: 120px; padding: 8px; margin: 4px;">
            <center><img style="width: 48px; border-radius: 48px; border-width: 1px; border-color: #727272; border-style: solid; margin-bottom: 4px;" src="../imagens/icones/autoridade.png" /></center>
            <center><small>Autoridade</small></center>
            <br/>
            <select id="autoridadeNivel" onchange="salvarAutoridade();" style="width: 100%;">
                <option value="0">Nenhuma</option>
                <option value="1">Baixa</option>
                <option value="2">Média</option>
                <option value="3">Alta</option>
                <option value="4">Total (CEO)</option>
            </select>
        </div>
    </div>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    //Dados da conta do usuário que está sendo editado
    id = 0;
    nick = "";
    email = "";
    ativada = false;
    concordouContrato = false;
    dataCriacaoMillis = 0;
    banida = "";
    diasDeSuspensao = 0;
    motivoDeSuspensao = "";
    idIcone = 0;
    staff = false;
    cargo = "";
    autoridade = 0;
    
    //função que grava temporariamento, os dados do usuário sendo editado
    function gravarDadosDesteUsuario(l_id, l_email, l_ativada, l_concordouContrato, l_dataCriacao, l_banida, l_diasSuspensao, l_motivoSuspensao, l_idIcone, l_staff, l_cargo, l_autoridade){
        id = l_id;
        nick = document.getElementById("nick").value;
        email = l_email;
        ativada = l_ativada;
        concordouContrato = l_concordouContrato;
        dataCriacaoMillis = l_dataCriacao;
        banida = l_banida;
        diasDeSuspensao = l_diasSuspensao;
        motivoDeSuspensao = l_motivoSuspensao;
        idIcone = l_idIcone;
        staff = l_staff;
        cargo = l_cargo;
        autoridade = l_autoridade;
    }
    
    //Função que ativa a edição de um usuário
    function editarUsuario(){
        //Inicia a validação do campo de nick
        var campoNick = document.getElementById("nick");
        var statusNick = document.getElementById("nickStatus");
        var nickValido = false;
        
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoNick.value.length, 12);
        
        //Desvalida
        campoNick.style.borderColor = "#990000";
        campoNick.style.borderWidth = "1px";
        statusNick.style.color = "#990000";
        nickValido = false;
        
        if(campoNick.value == ""){
            statusNick.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoNick.value.length > 12){
            statusNick.innerHTML = "Nick muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoNick.value) == true){
            statusNick.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoNick.style.borderColor = "";
        campoNick.style.borderWidth = "";
        statusNick.innerHTML = "";
        nickValido = true;
    
        parent.redimensionarIframe();
        
        //Caso o campo não seja valido, interrompe a conexão
        if(nickValido == false){
            return;
        }
        
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/obter-dados-do-usuario.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "nick=" + document.getElementById("nick").value);
    }
    
    //Função que exibe o painel para editar o usuário. Caso o painel já esteja sendo exibido, atualiza as informações
    function exibirPainelDeEdicao(){
        //Ativa o painel
        document.getElementById("editorDeUsuario").style.display = "block";
        
        //Atualiza as informações
        document.getElementById("iconeDePerfil").style.backgroundImage = "url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_" + idIcone + ".png)";
        document.getElementById("nomeDeUsuario").innerHTML = "#" + id + " " + nick;
        document.getElementById("nickNameClicker").value = nick;
        document.getElementById("nickNameClicker").style.display = "block";
        document.getElementById("nickNameEditor").value = nick;
        document.getElementById("nickNameEditor").style.display = "none";
        document.getElementById("nickNameSave").style.display = "none";
        if(banida == ""){
            document.getElementById("botaoBanir").style.display = "block";
            document.getElementById("botaoDesbanir").style.display = "none";
            document.getElementById("motivoBanimento").style.display = "none";
            document.getElementById("motivoBanimento").value = banida;
            document.getElementById("motivoBanimento").readOnly = true;
        }
        if(banida != ""){
            document.getElementById("botaoBanir").style.display = "none";
            document.getElementById("botaoDesbanir").style.display = "block";
            document.getElementById("motivoBanimento").style.display = "block";
            document.getElementById("motivoBanimento").value = banida;
            document.getElementById("motivoBanimento").readOnly = true;
        }
        if(diasDeSuspensao == 0){
            document.getElementById("diasSuspensao").style.display = "none";
            document.getElementById("diasSuspensao").value = diasDeSuspensao;
            document.getElementById("diasSuspensao").readOnly = true;
            document.getElementById("motivoSuspensao").style.display = "none";
            document.getElementById("motivoSuspensao").value = motivoDeSuspensao;
            document.getElementById("motivoSuspensao").readOnly = true;
            document.getElementById("botaoRemoverSuspensao").style.display = "none";
            document.getElementById("botaoSuspender").style.display = "block";
        }
        if(diasDeSuspensao > 0){
            document.getElementById("diasSuspensao").style.display = "block";
            document.getElementById("diasSuspensao").value = diasDeSuspensao;
            document.getElementById("diasSuspensao").readOnly = true;
            document.getElementById("motivoSuspensao").style.display = "block";
            document.getElementById("motivoSuspensao").value = motivoDeSuspensao;
            document.getElementById("motivoSuspensao").readOnly = true;
            document.getElementById("botaoRemoverSuspensao").style.display = "block";
            document.getElementById("botaoSuspender").style.display = "none";
        }
        if(staff == true){
            document.getElementById("staffAutoridadeEditor").style.display = "block";
            document.getElementById("staffCargoEditor").style.display = "block";
            document.getElementById("removerMembro").style.display = "block";
            document.getElementById("tornarMembro").style.display = "none";
        }
        if(staff == false){
            document.getElementById("staffAutoridadeEditor").style.display = "none";
            document.getElementById("staffCargoEditor").style.display = "none";
            document.getElementById("removerMembro").style.display = "none";
            document.getElementById("tornarMembro").style.display = "block";
        }
        document.getElementById("cargoClicker").value = cargo;
        document.getElementById("cargoClicker").style.display = "block";
        document.getElementById("cargoEditor").value = cargo;
        document.getElementById("cargoEditor").style.display = "none";
        document.getElementById("cargoSave").style.display = "none";
        var selectAutoridade = document.getElementById("autoridadeNivel");
        for(var i, j = 0; i = selectAutoridade.options[j]; j++) {
            if(i.value == autoridade) {
                selectAutoridade.selectedIndex = j;
                break;
            }
        }
        
        //Atualiza a altura do iframe
        parent.redimensionarIframe();
    }
    
    //Função que prepara o campo de edição do nick
    function prepararEdicaoNick(){
        //Troca os inputs de texto para editar
        document.getElementById("nickNameClicker").style.display = "none";
        document.getElementById("nickNameEditor").style.display = "block";
        document.getElementById("nickNameSave").style.display = "block";
        
        //Atualiza a altura do iframe
        parent.redimensionarIframe();
    }
    
    //Função que salva a edição do nickname
    function salvarEdicaoNick(){
        //Inicia a validação do campo de nick
        var campoNick = document.getElementById("nickNameEditor");
        var statusNick = document.getElementById("nickNameEditorStatus");
        var nickValido = false;
        
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoNick.value.length, 12);
        
        //Desvalida
        campoNick.style.borderColor = "#990000";
        campoNick.style.borderWidth = "1px";
        statusNick.style.color = "#990000";
        nickValido = false;
        
        if(campoNick.value == ""){
            statusNick.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoNick.value.length > 12){
            statusNick.innerHTML = "Nick muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoNick.value.length < 3){
            statusNick.innerHTML = "Nick muito curto.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoNick.value) == true){
            statusNick.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoNick.style.borderColor = "";
        campoNick.style.borderWidth = "";
        statusNick.innerHTML = "";
        nickValido = true;
    
        parent.redimensionarIframe();
        
        //Caso o campo não seja valido, interrompe a conexão
        if(nickValido == false){
            return;
        }
        
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/alterar-nome-de-um-usuario.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "id=" + id + "&novoNick=" + document.getElementById("nickNameEditor").value);
    }
    
    //Função que remove o banimento do usuário
    function removerBanimento(){
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/remover-banimento.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "id=" + id);
    }
    
    //Função que prepara o campo de banimento, e o faz, caso esteja preparado
    function banirAgora(){
        if(document.getElementById("motivoBanimento").style.display == "none"){
            //Exibe o editor de banimento
            document.getElementById("botaoBanir").style.display = "block";
            document.getElementById("botaoDesbanir").style.display = "none";
            document.getElementById("motivoBanimento").style.display = "block";
            document.getElementById("motivoBanimento").readOnly = false;
            
            //Atualiza a altura do iframe
            parent.redimensionarIframe();
            
            return;
        }
        if(document.getElementById("motivoBanimento").style.display == "block"){
            //Inicia a validação do campo de motivo do banimento
            var campoMotivo = document.getElementById("motivoBanimento");
            var statusMotivo = document.getElementById("motivoBanimentoStatus");
            var motivoValido = false;
            
            //Desvalida
            campoMotivo.style.borderColor = "#990000";
            campoMotivo.style.borderWidth = "1px";
            statusMotivo.style.color = "#990000";
            motivoValido = false;
            
            if(campoMotivo.value == ""){
                statusMotivo.innerHTML = "Por favor, preencha este campo.";
                parent.redimensionarIframe();
                return;
            }
            
            if(parent.contemHtml(campoMotivo.value) == true){
                statusMotivo.innerHTML = "Este campo não pode conter código HTML.";
                parent.redimensionarIframe();
                return;
            }
            
            //Deixa como válido caso não haja nenhum problema
            campoMotivo.style.borderColor = "";
            campoMotivo.style.borderWidth = "";
            statusMotivo.innerHTML = "";
            motivoValido = true;
        
            parent.redimensionarIframe();
            
            //Caso o campo não seja valido, interrompe a conexão
            if(motivoValido == false){
                return;
            }
            
            //Inicia a conexão
            parent.mostrarSpinner(true);
                
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/aplicar-banimento.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                    
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao, "id=" + id + "&motivoBanimento=" + document.getElementById("motivoBanimento").value);
        }
    }
    
    //Função que remove a suspensão do usuário
    function removerSuspensao(){
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/remover-suspensao.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "id=" + id);
    }
    
    //Função que prepara o campo de suspensão, e o faz, caso esteja preparado
    function suspenderAgora(){
        if(document.getElementById("motivoSuspensao").style.display == "none"){
            //Exibe o editor de banimento
            document.getElementById("diasSuspensao").style.display = "block";
            document.getElementById("diasSuspensao").value = diasDeSuspensao;
            document.getElementById("diasSuspensao").readOnly = false;
            document.getElementById("motivoSuspensao").style.display = "block";
            document.getElementById("motivoSuspensao").value = motivoDeSuspensao;
            document.getElementById("motivoSuspensao").readOnly = false;
            document.getElementById("botaoRemoverSuspensao").style.display = "none";
            document.getElementById("botaoSuspender").style.display = "block";
            
            //Atualiza a altura do iframe
            parent.redimensionarIframe();
            
            return;
        }
        if(document.getElementById("motivoSuspensao").style.display == "block"){
            //Inicia a validação do campo de motivo do banimento
            var campoMotivo = document.getElementById("motivoSuspensao");
            var statusMotivo = document.getElementById("motivoSuspensaoStatus");
            var motivoValido = false;
            
            //Desvalida
            campoMotivo.style.borderColor = "#990000";
            campoMotivo.style.borderWidth = "1px";
            statusMotivo.style.color = "#990000";
            motivoValido = false;
            
            if(campoMotivo.value == ""){
                statusMotivo.innerHTML = "Por favor, preencha este campo.";
                parent.redimensionarIframe();
                return;
            }
            
            if(parent.contemHtml(campoMotivo.value) == true){
                statusMotivo.innerHTML = "Este campo não pode conter código HTML.";
                parent.redimensionarIframe();
                return;
            }
            
            //Deixa como válido caso não haja nenhum problema
            campoMotivo.style.borderColor = "";
            campoMotivo.style.borderWidth = "";
            statusMotivo.innerHTML = "";
            motivoValido = true;
        
            parent.redimensionarIframe();
            
            //Caso o campo não seja valido, interrompe a conexão
            if(motivoValido == false){
                return;
            }
            
            //Caso a quantidade de dias seja igual a zero
            if(document.getElementById("diasSuspensao").value == "0"){
                parent.mostrarNotificacao("O tempo de suspensão deve ser superior a 0 Dias.", "#750000", 3500);
                return;
            }
            
            //Inicia a conexão
            parent.mostrarSpinner(true);
                
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/aplicar-suspensao.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                    
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao, "id=" + id +
                                      "&diasSuspensao=" + document.getElementById("diasSuspensao").value +
                                      "&motivoSuspensao=" + document.getElementById("motivoSuspensao").value);
        }
    }
    
    //Função que adiciona o usuário a staff
    function adicionarStaff(){
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/tornar-membro-da-staff.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "nick=" + nick);
    }
    
    //Função que remove o usuário da staff
    function removerStaff(){
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/remover-membro-da-staff.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "nick=" + nick);
    }
    
    //Função que prepara o campo de edição do cargo
    function prepararEdicaoCargo(){
        //Troca os inputs de texto para editar
        document.getElementById("cargoClicker").style.display = "none";
        document.getElementById("cargoEditor").style.display = "block";
        document.getElementById("cargoSave").style.display = "block";
        
        //Atualiza a altura do iframe
        parent.redimensionarIframe();
    }
    
    //Função que salva a edição do cargo
    function salvarEdicaoCargo(){
        //Inicia a validação do campo de nick
        var campoCargo = document.getElementById("cargoEditor");
        var statusCargo = document.getElementById("cargoEditorStatus");
        var cargoValido = false;
        
        //Desvalida
        campoCargo.style.borderColor = "#990000";
        campoCargo.style.borderWidth = "1px";
        statusCargo.style.color = "#990000";
        cargoValido = false;
        
        if(campoCargo.value == ""){
            statusCargo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoCargo.value) == true){
            statusCargo.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoCargo.style.borderColor = "";
        campoCargo.style.borderWidth = "";
        statusCargo.innerHTML = "";
        cargoValido = true;
    
        parent.redimensionarIframe();
        
        //Caso o campo não seja valido, interrompe a conexão
        if(cargoValido == false){
            return;
        }
        
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/editar-cargo-staff.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "nick=" + nick + "&cargo=" + document.getElementById("cargoEditor").value);
    }
    
    //Função que salva a alteração de autoridade do usuário
    function salvarAutoridade(){
        //Inicia a conexão
        parent.mostrarSpinner(true);
            
        //Cria a conexão para salvar os dados
        var conexao = parent.novaConexaoPost("ajax-query/editar-autoridade-staff.php");
        conexao.onreadystatechange = function(){
            parent.mostrarSpinner(false);
                
            //Processa o resultado (1º erro, 2º sucesso)
            parent.definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                exibirPainelDeEdicao();
            },
            function()
            {
                eval(parent.textoDaConexao(conexao));
            });
        };
        parent.iniciarConexaoPost(conexao, "nick=" + nick + "&autoridade=" + document.getElementById("autoridadeNivel").value);
    }
    
    //Redimensiona as textarea de acordo com seus conteúdos, automaticamente
    var textAreas = document.getElementsByTagName("textarea");
    for (var i = 0; i < textAreas.length; i++){
        textAreas[i].style.height = (textAreas[i].scrollHeight) + "px";
        textAreas[i].style.overflow = "hidden";
        textAreas[i].style.resize = "none";
        textAreas[i].style.minHeight = "41px";
        textAreas[i].addEventListener("input", AoDigitarNasTextArea, false);
    }
    function AoDigitarNasTextArea(){
        this.style.height = "auto";
        this.style.height = (this.scrollHeight) + "px";
        this.style.minHeight = "41px";
        parent.redimensionarIframe();
    }
</script>
    
<?php
$conteudoQuadroDeAviso = ('
• Primeiro, digite o nome de usuário que você deseja editar. Em seguida, edite as suas informações.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/ajax-query/editar-cargo-staff.php
<?php
/*
 * script que edita o cargo do staff
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);
$cargo = mysqli_real_escape_string($DB_Registros, $_POST["cargo"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Caso não tenha permissão total, cancela o script
    if($_SESSION["autoridade"] < 4){
echo("".
'parent.mostrarNotificacao("Você não tem permissão para fazer isso.", "#7F0000", 3000);'
."");
        exit();
    }
    
    //edita o cargo do staff
    $consultaEdicao = mysqli_query($DB_Metadados, "UPDATE Staff SET Cargo='$cargo' WHERE Nick='$nick'");
    
echo("".
'parent.mostrarNotificacao("O cargo do membro, foi editado com sucesso!", "#1E7200", 3000);'
."cargo = '".$cargo."';"
."exibirPainelDeEdicao();"
."");
}

?><file_sep>/browser/ajax-query/consulta-recuperacao.php
<?php
/*
 * script que faz consulta de recuperação de conta no banco de dados
 */

include("../../global/sessoes/criador-de-sessao.inc");
include("../../global/mysql/registros.inc");

//Obtem as variaveis
$email = mysqli_real_escape_string($DB_Registros, $_POST["email"]);


function RetornarCaractereAleatorio(){
    $arrayDeCaracteres = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
                               "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
                               "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
                               "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
    $numeroAleatorio = rand(0, count($arrayDeCaracteres));
    return $arrayDeCaracteres[$numeroAleatorio];
}

//Consulta de autenticacao do login
$dadosDoUsuario = mysqli_query($DB_Registros, "SELECT ID, Nick FROM Acesso WHERE Email = '$email'");

if(mysqli_num_rows($dadosDoUsuario) == 1){    
    //Obtem os dados
    $dadosDoUsarioResultado = mysqli_fetch_array($dadosDoUsuario);
    
    //Cria um token aleatório de 8 dígitos
    $stringToken = "";
    for($i = 0; $i < 8; ++$i){
        $stringToken .= RetornarCaractereAleatorio();
    }
    
    //Insere esse token no Token de recuperação do usuário
    $consultaToken = mysqli_query($DB_Registros, "UPDATE Acesso SET TokenRecuperacao = '$stringToken' WHERE ID = $dadosDoUsarioResultado[0]");
    
    //Cria e envia um e-mail para o usuário com o link de recuperação de senha
    $corpo = '
    <div style="width: 90%; max-width: 600px; border-radius: 4px; border-width: 2px; border-style: solid; border-color: #b5b5b5; padding: 10px; margin-left: auto; margin-right: auto;">
        <center>
            <font style="font-size: 18px;">Olá <b>'.$dadosDoUsarioResultado[1].'</b>! Tudo bem?</font>
        </center>
        <br>
        Parece que você esqueceu de sua senha, e solicitou a recuperação de sua senha do Windsoft ID. Por favor, use o botão
        abaixo para que você possa gerar uma nova senha! Assim que você tiver gerado a nova senha, basta fazer login a usando.
        <center>
            <a href="https://windsoft.xyz/browser/gerador-de-senha.php?id='.$dadosDoUsarioResultado[0].'&tokenRecuperacao='.$stringToken.'">
                <div style="background-color: #00406b; padding: 15px; border-radius: 6px; max-width: 150px; color: #f4f4f4; font-weight: bolder; margin-bottom: 20px; margin-top: 20px;">
                    Gerar nova senha!
                </div>
            </a>
        </center>
        <hr style="border: 0; height: 1px; background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(206, 206, 206, 0.75), rgba(0, 0, 0, 0));">
        <small>
            <center>
                Este foi um e-mail automático, você não precisa respondê-lo. Caso este e-mail tenha sido enviado a você por engano, apenas o desconsidere.
                <br>
                <br>
                <a href="https://windsoft.xyz">Windsoft Games</a>
            </center>
        </small>
    </div>
    ';
    
    require_once("../../global/mailer-php-5.2.23/PHPMailerAutoload.php");
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->Charset = "utf8_decode()";
    $mail->Host = "smtp.".substr(strstr("<EMAIL>", "@"), 1);
    $mail->Port = '587';
    $mail->Username  = "<EMAIL>";
    $mail->Password  = "<PASSWORD>@";
    $mail->From  = "<EMAIL>";
    $mail->FromName  = utf8_decode("No Reply - Windsoft Games");
    $mail->IsHTML(true);
    $mail->Subject  = utf8_decode("Recuperação de Senha do Windsoft ID");
    $mail->Body  = utf8_decode($corpo);
    $mail->AddAddress($email, utf8_decode($dadosDoUsarioResultado[1]));
    
    $codigoHtmlSucesso = "
        <img src=\"imagens/sucesso.png\" width=\"60px\" height=\"60px\" />
        <br>
        Encontramos a conta associada ao e-mail ".$email.".%MENSAGEM%
         ";
    
    if (!$mail->Send()){
        echo(str_replace(array("%MENSAGEM%"), array("Infelizmente, no momento não conseguimos lhe enviar um e-mail. Aparentemente nossos servidores estão sobrecarregados. Tente novamente daqui a algumas horas."), $codigoHtmlSucesso));
    }
    else{
        echo(str_replace(array("%MENSAGEM%"), array(" Lhe enviamos um e-mail contendo um link para gerar uma nova senha. Verifique sua Caixa de Entrada, Spam e Lixo Eletrônico!"), $codigoHtmlSucesso));
    }
}
if(mysqli_num_rows($dadosDoUsuario) == 0){
    echo("
         Digite o e-mail vinculado a sua conta. Caso a encontremos, iremos lhe enviar um e-mail com um link
        para que você possa gerar uma nova senha, ok?
        <br>
        <br>
        <br>
        <form autocomplete=\"off\" id=\"formularioLogin\">
            <input type=\"text\" id=\"email\" value=".$email." placeholder=\"E-mail\">
            <input type=\"button\" value=\"Recuperar\" onclick=\"consultarLogin();\">
        </form>
        <script type=\"text/javascript\" id=\"scriptResposta\">
            mostrarNotificacao(\"Não encontramos nenhuma conta associada a este e-mail.\", \"#750000\", 6000);
        </script>
         ");
}

?><file_sep>/browser/perfil.php
<?php
/*
 * Essa página mostra os dados de perfil do usuário, caso ele esteja logado com sua conta da Windsoft.
 */

$tituloPagina = "Meu Perfil - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
RedirecionarParaLoginCasoNaoEstejaLogado();

include("../global/mysql/registros.inc");

//Obtem os dados de perfil
$ConsultaPerfil = mysqli_query($DB_Registros, "SELECT IdCapa, IdIcone FROM Perfis WHERE ID=".$_SESSION["id"]);
$DadosPerfil = mysqli_fetch_array($ConsultaPerfil);
?>

<div style="overflow: hidden; width: 100%; height: 200px; border-radius: 6px 6px 0px 0px;">
    <div class="perfilCapa" style="background-image: url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/capas-de-perfil/capa_<?php echo($_SESSION["idCapa"]); ?>.png);" id="capaPagPerfil">
        <div class="perfilCapa" style="z-index: 10; position: absolute;">
            <div class="perfilCapa" style="z-index: 15; position: absolute; display: flex; justify-content: center; align-items: center;" onclick="exibirTrocaDeCapa();">
                Alterar Capa
            </div>
        </div>
    </div>
</div>

<div style="overflow: hidden; width: 100px; height: 100px; margin-left: auto; margin-right: auto; margin-top: -50px">
    <div class="perfilIcone" style="position: relative; background-color: rgba(0, 0, 0, 0); background-image: url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_<?php echo($_SESSION["idIcone"]); ?>.png);" id="iconePagPerfil">
        <div class="perfilIcone conteudoIcone" style="position: absolute; z-index: 25; border-radius: 50px;">
            <div class="perfilIcone conteudoIcone" style="z-index: 30; position: absolute; display: flex; justify-content: center; align-items: center; border-radius: 50px;" onclick="exibirTrocaDeIcone();">
                Alterar Ícone
            </div>
        </div>
    </div>
</div>

<div style="width: auto; border-radius: 0px 0px 6px 6px; background-color: #e5e5e5; padding-top: 60px; margin-top: -50px; padding-bottom: 10px; margin-bottom: 10px;">
    <center>
        <font color="#666666" style="margin-right: 2px;" size="4"><b>#<?php echo($_SESSION["id"]); ?></b></font>
        <font color="#232323" size="4" style="font-weight: bolder;"><?php echo($_SESSION["nick"]); ?></font>
    </center>
</div>

<!-- Estilo da janela modal -->
<style>
    .fundoModal{
        position: fixed;
        top: 0px;
        left: 0px;
        background-color: rgba(0, 0, 0, 0.6);
        width: 100%;
        height: 100%;
        z-index: 50;
        opacity: 0;
        transition: opacity 250ms;
        pointer-events: none;
    }
    
    .caixaModal{
        background-color: #f9f9f9;
        width: 80%;
        max-width: 250px;
        height: 80%;
        max-height: 70%;
        margin-left: auto;
        margin-right: auto;
        padding: 10px;
        border-radius: 6px;
    }
    
    .caixaModalRaiz{
        position: fixed;
        top: -1000px;
        left: 0px;
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 80;
        width: 100%;
        height: 100%;
        transition: top 200ms;
    }
</style>

<!-- fundo das caixas de dialogo -->
<div class="fundoModal" id="escurecimentoModal"></div>

<!-- caixa de dialogo para troca de ícone -->
<div class="caixaModalRaiz" id="modalIcone">
    <div class="caixaModal">
        <div style="height: 30px; margin-bottom: 20px;">
            <div style="float: left; line-height: 30px; font-weight: bolder;">
                Alterar Ícone
            </div>
            <img src="imagens/fechar.png" height="30px" style="float: right; cursor: pointer;" onclick="fecharJanelas();" />
        </div>
        <div style="height: calc(100% - 50px); overflow: auto;">
            <?php
                //Conta a quantidade de icones existentes
                $files = glob("../global/repositorio/arquivos-de-perfil/icones-de-perfil/*");
                $somarAltura = true;
                $altura = 0;
                $codigoIcones = "";
                for($i = 0; $i < count($files); ++$i){
                    $codigoIcones .= "
                        <center>
                            <img src=\"https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_".$i.".png\" style=\"height: 80px; cursor: pointer;\" onclick=\"trocarIconeDePerfil(".$i.");\" />
                        </center>
                        ";
                    if($somarAltura == true){
                        $altura += 40;
                    }
                    if($somarAltura == false){
                        $somarAltura = true;
                        continue;
                    }
                    if($somarAltura == true){
                        $somarAltura = false;
                        continue;
                    }
                }
                    
                //Cria o mostrador
                echo("
                    <div style=\"height: ".$altura."px; width: 100%; display: grid; grid-template-columns: 50% 50%;\">
                    ".$codigoIcones."
                    </div>
                    ");
            ?>
        </div>
    </div>
</div>

<!-- caixa de dialogo para troca de capa -->
<div class="caixaModalRaiz" id="modalCapa">
    <div class="caixaModal">
        <div style="height: 30px; margin-bottom: 20px;">
            <div style="float: left; line-height: 30px; font-weight: bolder;">
                Alterar Capa
            </div>
            <img src="imagens/fechar.png" height="30px" style="float: right; cursor: pointer;" onclick="fecharJanelas();" />
        </div>
        <div style="height: calc(100% - 50px); overflow: auto;">
            <?php
                //Conta a quantidade de capas existentes
                $files = glob("../global/repositorio/arquivos-de-perfil/capas-de-perfil/*");
                $somarAltura = true;
                $altura = 0;
                $codigoCapas = "";
                for($i = 0; $i < count($files); ++$i){
                    $codigoCapas .= "
                        <div onclick=\"trocarCapaDePerfil(".$i.");\" style=\"cursor: pointer; width: 100%; height: 60px; margin-bottom: 5px; background-image: url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/capas-de-perfil/capa_".$i.".png); background-position: center; background-size: cover; background-repeat: no-repeat;\">
                        </div>
                        ";
                    $altura += 65;
                }
                    
                //Cria o mostrador
                echo("
                    <div style=\"height: ".$altura."px; width: 100%;\">
                    ".$codigoCapas."
                    </div>
                    ");
            ?>
        </div>
    </div>
</div>
 
<!-- código para exibir os dados da conta -->
<?php
    //Consulta os dados de perfil do usuário
    $id = $_SESSION["id"];
    $consultaPerfil = mysqli_query($DB_Registros, "SELECT Nome, Genero, AnoNascimento, UltimoLogin_Millis FROM Perfis WHERE ID=$id");
    $dadosPerfil = mysqli_fetch_array($consultaPerfil);
?>
<div id="exibicao" style="width: 100%; position: relative; display: block;">
    <div style="position: absolute; top: 0px; right: 0px;">
        <div class="botoesTopbar" onclick="trocarModoEdicao();">
            Editar
        </div>
    </div>
    <div style="width: 80%; max-width: 200px; margin-left: auto; margin-right: auto;">
        <div style="width: 100%; padding: 10px 0px 10px 0; border-radius: 6px; background-color: #e5e5e5; margin-bottom: 10px;">
            <div style="margin-bottom: 10px; margin-left: 5px; color: #ADADAD; font-size: 10px;">Nome</div>
            <div id="exibicaoNome" style="text-align: center; color: #3D3D3D; font-size: 16px; font-weight: bolder;0"><?php echo($dadosPerfil[0]); ?></div>
        </div>
        <div style="width: 100%; padding: 10px 0px 10px 0; border-radius: 6px; background-color: #e5e5e5; margin-bottom: 10px;">
            <div style="margin-bottom: 10px; margin-left: 5px; color: #ADADAD; font-size: 10px;">Gênero</div>
            <div id="exibicaoGenero" style="text-align: center; color: #3D3D3D; font-size: 16px; font-weight: bolder;0">
                <?php
                    if($dadosPerfil[1] == "M"){
                        echo("Masculino");
                    }
                    if($dadosPerfil[1] == "F"){
                        echo("Feminino");
                    }
                    if($dadosPerfil[1] == "V"){
                        echo("Não Informado");
                    }
                ?>
            </div>
        </div>
        <div style="width: 100%; padding: 10px 0px 10px 0; border-radius: 6px; background-color: #e5e5e5; margin-bottom: 10px;">
            <div style="margin-bottom: 10px; margin-left: 5px; color: #ADADAD; font-size: 10px;">Idade aproximada</div>
            <div id="exibicaoIdade" style="text-align: center; color: #3D3D3D; font-size: 16px; font-weight: bolder;0">
                <?php
                    $idade = date("Y") - $dadosPerfil[2];
                    echo($idade . " Anos");
                ?>
            </div>
        </div>
        <div style="width: 100%; padding: 10px 0px 10px 0; border-radius: 6px; background-color: #e5e5e5; margin-bottom: 10px;">
            <div style="margin-bottom: 10px; margin-left: 5px; color: #ADADAD; font-size: 10px;">Último login</div>
            <div style="text-align: center; color: #3D3D3D; font-size: 16px; font-weight: bolder;0">
                <?php
                    $seconds = $dadosPerfil[3] / 1000;
                    $data = "";
                    if(date("d/m/Y", $seconds) == date("d/m/Y")){
                        $data = "Hoje";
                    }
                    if(date("d/m/Y", $seconds) != date("d/m/Y")){
                        $data = date("d/m/Y", $seconds);
                    }
                    echo($data . " às " . date("H:i", $seconds));
                ?>
            </div>
        </div>
        <div style="width: 100%; padding: 10px 0px 10px 0; border-radius: 6px; background-color: #e5e5e5; margin-bottom: 10px;">
            <div style="margin-bottom: 10px; margin-left: 5px; color: #ADADAD; font-size: 10px;">Entrou em</div>
            <div style="text-align: center; color: #3D3D3D; font-size: 16px; font-weight: bolder;0">
                <?php
                    $seconds = $_SESSION["dataCriacaoMillis"] / 1000;
                    echo(date("d/m/Y", $seconds) . " às " . date("H:i", $seconds));
                ?>
            </div>
        </div>
    </div>
</div>
 
<!-- codigo para editar o perfil -->
<div id="edicao" style="width: 100%; position: relative; display: none;">
    <div style="position: absolute; top: 0px; right: 0px;">
        <div class="botoesTopbar" onclick="salvarEdicao();">
            Salvar
        </div>
    </div>
    <div style="width: 80%; max-width: 200px; margin-left: auto; margin-right: auto;">
        <center>
            <form autocomplete="off">
                <input type="text" id="nome" placeholder="Nome" value="<?php echo($dadosPerfil[0]); ?>" onKeyUp="validarNome();">
                <div id="nomeStatus" class="statusCampo"></div>
                
                <select id="genero" onChange="validarGenero();" >
                    <option value="F" <?php if($dadosPerfil[1] == "F"){echo("selected=\"selected\"");} ?>>Feminino</option>
                    <option value="M" <?php if($dadosPerfil[1] == "M"){echo("selected=\"selected\"");} ?>>Masculino</option>
                    <option value="V" <?php if($dadosPerfil[1] == "V"){echo("selected=\"selected\"");} ?>>Não Informar</option>
                </select>
                <div id="generoStatus" class="statusCampo"></div>
                
                <input type="text" id="idade" placeholder="Sua Idade" onKeyUp="validarIdade();" value="<?php echo((date("Y") - $dadosPerfil[2])); ?>">
                <div id="idadeStatus" class="statusCampo"></div>
            </form>
        </center>
    </div>
</div>
 
<!-- Java script da página -->
<script type="text/javascript">
    function fecharJanelas(){
        //Fecha todas as janelas
        document.getElementById("escurecimentoModal").style.opacity = "0";
        document.getElementById("modalIcone").style.top = "-1000px";
        document.getElementById("modalCapa").style.top = "-1000px";
    }
    
    function exibirTrocaDeIcone(){
        //Exibe a janela de troca de icone
        document.getElementById("escurecimentoModal").style.opacity = "1";
        document.getElementById("modalIcone").style.top = "0px";
    }
    
    function exibirTrocaDeCapa(){
        //Exibe a janela de troca de capa
        document.getElementById("escurecimentoModal").style.opacity = "1";
        document.getElementById("modalCapa").style.top = "0px";
    }
    
    function trocarIconeDePerfil(iconeSelecionado){
        fecharJanelas();
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/trocar-icone.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(textoDaConexao(conexao));
            });
        };
        iniciarConexaoPost(conexao, "icone=" + iconeSelecionado);
    }
    
    function trocarCapaDePerfil(capaSelecionada){
        fecharJanelas();
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/trocar-capa.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(textoDaConexao(conexao));
            });
        };
        iniciarConexaoPost(conexao, "capa=" + capaSelecionada);
    }
    
    function trocarModoEdicao(){
        //Troca a tela de exibição do perfil para a tela de edição
        document.getElementById("exibicao").style.display = "none";
        document.getElementById("edicao").style.display = "block";
    }
    
    campoNome = document.getElementById("nome");
    statusNome = document.getElementById("nomeStatus");
    campoGenero = document.getElementById("genero");
    statusGenero = document.getElementById("generoStatus");
    campoIdade = document.getElementById("idade");
    statusIdade = document.getElementById("idadeStatus");
    
    nomeValido = true;
    generoValido = true;
    idadeValida = true;
    
    function validarNome(){
        //Desvalida
        campoNome.style.borderColor = "#990000";
        campoNome.style.borderWidth = "1px";
        statusNome.style.color = "#990000";
        nomeValido = false;
        
        if(campoNome.value == ""){
            statusNome.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoNome.value.length > 18){
            statusNome.innerHTML = "Nome muito longo.";
            return;
        }
        
        if(somenteLetras(campoNome.value) == false){
            statusNome.innerHTML = "O nome só pode conter letras.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoNome.style.borderColor = "";
        campoNome.style.borderWidth = "";
        statusNome.innerHTML = "";
        nomeValido = true;
    }
    
    function validarGenero(){
        //Desvalida
        campoGenero.style.borderColor = "#990000";
        campoGenero.style.borderWidth = "1px";
        statusGenero.style.color = "#990000";
        generoValido = false;
        
        if(campoGenero.options[campoGenero.selectedIndex].value == ""){
            statusGenero.innerHTML = "Por favor, escolha uma opção.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoGenero.style.borderColor = "";
        campoGenero.style.borderWidth = "";
        statusGenero.innerHTML = "";
        generoValido = true;
    }
    
    function validarIdade(){
        //Desvalida
        campoIdade.style.borderColor = "#990000";
        campoIdade.style.borderWidth = "1px";
        statusIdade.style.color = "#990000";
        idadeValida = false;
        
        if(campoIdade.value == ""){
            statusIdade.innerHTML = "Por favor, preencha este campo.";
            return;
        }
        
        if(campoIdade.value.lenght > 3 ){
            statusIdade.innerHTML = "Idade inválida.";
            return;
        }
        
        if(campoIdade.value < 13 ){
            statusIdade.innerHTML = "Você precisa ter 13 anos ou mais para se registrar.";
            return;
        }
        
        if(somenteNumeros(campoIdade.value) == false){
            statusIdade.innerHTML = "A idade só pode conter números.";
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoIdade.style.borderColor = "";
        campoIdade.style.borderWidth = "";
        statusIdade.innerHTML = "";
        idadeValida = true;
    }
    
    function salvarEdicao(){
        //Verifica se os campos forão preenchidos
        if(nomeValido == false || idadeValida == false){
            mostrarNotificacao("Por favor, preencha e verifique cada campo em busca de erros.", "#750000", 2000);
            return;
        }
        
        if(generoValido == false){
            mostrarNotificacao("Por favor, selecione uma opção de gênero.", "#750000", 2000);
            return;
        }
        
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/editar-perfil.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                eval(textoDaConexao(conexao));
            });
        };
        iniciarConexaoPost(conexao, "nome=" + campoNome.value + "&genero=" + campoGenero.options[campoGenero.selectedIndex].value + "&idade=" + campoIdade.value);
    }
    
    function trocarModoExibicao(){
        //Troca a tela de edição do perfil para a tela de exibição
        document.getElementById("exibicao").style.display = "block";
        document.getElementById("edicao").style.display = "none";
        
        //Atualiza a exibição e troca a tela
        document.getElementById("exibicaoNome").innerHTML = campoNome.value;
        if(campoGenero.options[campoGenero.selectedIndex].value == "M"){
            document.getElementById("exibicaoGenero").innerHTML = "Masculino";
        }
        if(campoGenero.options[campoGenero.selectedIndex].value == "F"){
            document.getElementById("exibicaoGenero").innerHTML = "Feminino";
        }
        if(campoGenero.options[campoGenero.selectedIndex].value == "V"){
            document.getElementById("exibicaoGenero").innerHTML = "Não Informado";
        }
        document.getElementById("exibicaoIdade").innerHTML = campoIdade.value + " Anos";
    }
</script>

<?php
include("includes/rodape.inc");
?><file_sep>/browser/microsite/painel/ajax-query/buscar-arquivos-expansao.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$plataforma = strtolower($_POST["plataforma"]);
$pacote = $_POST["pacote"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Obtem o diretório alvo
    $diretorioAlvoString = ("../../../../global/repositorio/arquivos-de-jogos/".$plataforma."/".$pacote);
    
    //Verifica se o diretório existe ou não
    if(is_dir($diretorioAlvoString) == false){
        echo("<br/><center>Nenhum arquivo de expansão foi encontrado para o jogo selecionado</center><br/>");
    }
    if(is_dir($diretorioAlvoString) == true){
        //Escaneia o diretório alvo
        $listaDeArquivos = scandir($diretorioAlvoString);
        
        //Conta a quantidade de arquivos no diretorio
        if(count($listaDeArquivos) <= 2){
            echo("<br/><center>A pasta referente a data de ".$dataParaPesquisar.", está vazia.</center><br/>");
        }
        if(count($listaDeArquivos) > 2){
            echo("<center>Listando arquivos de expansão para o jogo selecionado...</center><br/>");
            
            //Rastreia os arquivos do diretório
            foreach($listaDeArquivos as $arquivo){
                //Verifica se o arquivo é apenas um ponto, ou dois pontos
                if($arquivo != "." && $arquivo != ".."){
                    //Obtem a extensão do arquivo
                    $extensao = pathinfo($diretorioAlvoString . "/" . $arquivo, PATHINFO_EXTENSION);
                    
                    //Gera o código do ícone
                    if($extensao == "zip"){
                        $codigoIcone = '<img src="../imagens/zip.png" width="16px" />';
                    }
                    if($extensao == "obb"){
                        $codigoIcone = '<img src="../imagens/obb.png" width="16px" />';
                    }
                    if($extensao != "obb" && $extensao != "zip"){
                        $codigoIcone = '<img src="../imagens/bin.png" width="16px" />';
                    }
                    
                    //Imprime o código HTML para representar este arquivo
                    echo('<div class="arquivo">
                            <div class="iconeArquivo" style="justify-content: flex-start;">
                                '.$codigoIcone.'
                            </div>
                            <div>'.$arquivo.'</div>
                            <div style="display: flex; justify-content: flex-end;">'.number_format((filesize($diretorioAlvoString . "/" . $arquivo) / 1048576), 1).' MiB</div>
                          </div>');
                }
            }
        }
    }
}
?><file_sep>/client/metadados/anuncio-intersticial/intersticial-metadados.php
<?php
/*
 * Essa classe é responsável por fornecer os dados atuais do anúncio intersticial
 * da Windsoft Games
 */

include("../../../global/sessoes/verificador-de-sessao.inc");
include("../../../global/mysql/metadados.inc");

IgnorarSessaoImprimirMensagemDeConteudoCarregado();
$tempoInicio = microtime(true);
$jsonResposta = new stdClass();

//<!---------------------- Inicio do Script ----------------------------->
//Inicia a consulta do anuncio intersticial
$anuncioConsulta = mysqli_query($DB_Metadados, "SELECT AtivarAnuncio, TextoBotao, UrlImagem, UrlDaPagina FROM AdIntersticial WHERE Anuncio = 'Global'");
$dadosDoAnuncio = mysqli_fetch_array($anuncioConsulta);

//Inicia a consulta de informar exibição do anuncio
$informarEstatisticaConsulta = mysqli_query($DB_Metadados, "UPDATE AdIntersticialStats SET AdsExibidosDia = AdsExibidosDia + 1, AdsExibidosSem = AdsExibidosSem + 1, AdsExibidosMes = AdsExibidosMes + 1 WHERE Idade = 'Atual'");

//Insere as informações do anuncio no JSON resposta
$jsonResposta->anuncioAtivadoNoMomento = $dadosDoAnuncio[0];
$jsonResposta->textoDoBotao = $dadosDoAnuncio[1];
$jsonResposta->urlDaImagem = $dadosDoAnuncio[2];
$jsonResposta->urlDaPagina = $dadosDoAnuncio[3];

//Insere o tempo da duração da execução do script no JSON Resposta
$jsonResposta->tempoExecucaoDoScript = number_format(microtime(true) - $TempoInicio, 5) . "ms";
//Imprime o JSON resposta
echo("<pre>" . json_encode($jsonResposta, JSON_PRETTY_PRINT) . "</pre>");

?><file_sep>/browser/microsite/painel/ajax-query/gerar-arquivo-noticia.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);
 
//Variaveis do script
$titulo = $_POST["titulo"];
$urlCapa = $_POST["urlCapa"];
$descricao = $_POST["descricao"];
$introducao = $_POST["introducao"];
$subtitulo1 = $_POST["subtitulo1"];
$texto1 = $_POST["texto1"];
$subtitulo2 = $_POST["subtitulo2"];
$texto2 = $_POST["texto2"];
$subtitulo3 = $_POST["subtitulo3"];
$texto3 = $_POST["texto3"];
$subtitulo4 = $_POST["subtitulo4"];
$texto4 = $_POST["texto4"];
$subtitulo5 = $_POST["subtitulo5"];
$texto5 = $_POST["texto5"];
$modoPrevia = $_POST["modoPrevia"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Configura a data
    date_default_timezone_set('America/Sao_Paulo');
    $ano = date('Y');
    $mesNumero = date('m');
    $dia = date('d');
    $hora = date('H');
    $minuto = date('i');
    
    //Da um nome ao mês obtido
    if($mesNumero == "01"){ $mesExtenso = ("Jan"); }
    if($mesNumero == "02"){ $mesExtenso = ("Fev"); }
    if($mesNumero == "03"){ $mesExtenso = ("Mar"); }
    if($mesNumero == "04"){ $mesExtenso = ("Abr"); }
    if($mesNumero == "05"){ $mesExtenso = ("Mai"); }
    if($mesNumero == "06"){ $mesExtenso = ("Jun"); }
    if($mesNumero == "07"){ $mesExtenso = ("Jul"); }
    if($mesNumero == "08"){ $mesExtenso = ("Ago"); }
    if($mesNumero == "09"){ $mesExtenso = ("Set"); }
    if($mesNumero == "10"){ $mesExtenso = ("Out"); }
    if($mesNumero == "11"){ $mesExtenso = ("Nov"); }
    if($mesNumero == "12"){ $mesExtenso = ("Dez"); }
    
    //Dados para o preenchimento da notícia
    $variaveisSeremPreenchidas = array("%TITULO%", "%CAPA_URL%", "%BREVE_DESCRICAO%", "%ANO%", "%MES_NUMERO%", "%MES_EXTENSO%", "%DIA_NUMERO%", "%HORA%", "%MINUTO%", "%AUTOR_NICK%", "%CARGO%", "%INTRODUCAO%", "%SUBTITULO1%", "%TEXTO1%", "%SUBTITULO2%", "%TEXTO2%", "%SUBTITULO3%", "%TEXTO3%", "%SUBTITULO4%", "%TEXTO4%", "%SUBTITULO5%", "%TEXTO5%");
    $stringsParaPreenchimento = array(strFormatd($titulo), $urlCapa, strFormatd($breveDescricao), $ano, $mesNumero, $mesExtenso, $dia, $hora, $minuto, $_SESSION["nick"], $_SESSION["cargo"], strFormatd($introducao), strFormatd($subtitulo1), strFormatd($texto1), strFormatd($subtitulo2), strFormatd($texto2), strFormatd($subtitulo3), strFormatd($texto3), strFormatd($subtitulo4), strFormatd($texto4), strFormatd($subtitulo5), strFormatd($texto5));

    //Abre o arquivo base das notícias para obter o código PHP base, e preenche a notícia
    $codigoBaseNoticia = file_get_contents("../paginas/noticias/codigo-base-noticia.php");
    $codigoFinalNoticia = str_replace($variaveisSeremPreenchidas, $stringsParaPreenchimento, $codigoBaseNoticia);
    
    //Caso seja o modo prévia, gera uma página temporária somente para visualização
    if($modoPrevia === "true"){
        //Código de selo final
        $seloFinal = '
        <div style="background-color: #DB6D00; color: #FFFFFF; text-align: center; position: fixed; top: 5%; right: -40%; transform: rotate(45deg); width: 100%; z-index: 15; height: 25px; line-height: 25px; font-size: 90%; pointer-events: none; box-shadow: 0px 0px 9px -1px rgba(0,0,0,0.75);">
            Visualização
        </div>
        ';
        
        //Termina de preencher o documento de notícia, com os dados CASO seja uma previa
        $varParaPreencher = array("%DIRETORIO_CABECALHO%", "%DIRETORIO_RODAPE%", "%SELO_FINAL%");
        $strParaPreencher = array("../../../../../includes/cabecalho.inc", "../../../../../includes/rodape.inc", $seloFinal);
        
        //Cria o arquivo final para exibir a previa
        $codigoParaPrevia = str_replace($varParaPreencher, $strParaPreencher, $codigoFinalNoticia);
        
        //Cria o arquivo temporário da notícia, somente para visualização
        $noticiaTemp = fopen("../paginas/noticias/temp/" . $_SESSION["id"] . "_noticia-preview.php", 'w');
        fwrite($noticiaTemp, $codigoParaPrevia);
        fclose($noticiaTemp);
        
        //Abre a nova aba para visualização
        echo('window.open("https://windsoft.xyz/browser/microsite/painel/paginas/noticias/temp/' . $_SESSION["id"] . '_noticia-preview.php" + "?previa=" + (new Date()).getTime());');
    }
    //Caso não seja o modo prévia, gera uma página permanente
    if($modoPrevia === "false"){
        //Termina de preencher o documento de notícia, com os dados CASO não seja uma previa
        $varParaPreencher = array("%DIRETORIO_CABECALHO%", "%DIRETORIO_RODAPE%", "%SELO_FINAL%");
        $strParaPreencher = array("../../../../../includes/cabecalho.inc", "../../../../../includes/rodape.inc", "");
        
        //Cria o arquivo final
        $codigo = str_replace($varParaPreencher, $strParaPreencher, $codigoFinalNoticia);
        
        //Filtra o titulo da noticia para gerar o URL sem caracteres especiais, e minusculo
        $tituloRemoverEspacos = str_replace(" ", "-", $titulo);
        $tituloParaUrl = strtolower(preg_replace("/[^A-Za-z0-9\-]/", "", $tituloRemoverEspacos));
        
        //Configura o diretorio da noticia
        $diretorioDaNoticia = "../../../noticias/por-data/".$ano."/".$mesNumero."/".$dia;
        
        //Cria o diretorio da noticia de acordo com a data, caso não exista um
        if(!is_dir($diretorioDaNoticia)){
            mkdir($diretorioDaNoticia, 0777, true);
        }
        
        //Cria o arquivo permanente da notícia, para ser acessível
        $noticia = fopen($diretorioDaNoticia . "/" . $tituloParaUrl . ".php", 'w');
        fwrite($noticia, $codigo);
        fclose($noticia);
        
        //Salva no arquivo temporário, a informação de que não existe edição salva
        $arquivo = fopen("../paginas/noticias/temp/" . $_SESSION["id"] . "_noticia-existeEdicaoSalva.tmp", 'w');
        fwrite($arquivo, "false");
        fclose($arquivo);
        
        //Exibe a mensagem de sucesso
        echo("exibirMensagemArquivoCriado('https://windsoft.xyz/browser/noticias/por-data/".$ano."/".$mesNumero."/".$dia."/".$tituloParaUrl.".php'); parent.exibirIconeEmote(false);");
    }
}

//Método que formata o texto, substituindo algumas partes por outros caracteres ou tags de HTML.
function strFormatd($texto){
    $TextoFinal = str_replace(
    array("\n", '"', "'"),
    array("<br/>", "&#34;", "&#39"),
    $texto);
    return $TextoFinal;
}
 
?><file_sep>/browser/includes/rodape.inc
<?php
/*
 * Essa classe é responsável por fornecer o rodapé das páginas.
 */
?>
    <br/>
</div>

<div class="content" style="margin-top: 10px;">
    <br/>
    <center style="opacity: 0.85;">
            <a href="https://windsoft.xyz"><small>Ínicio</small></a>
             - 
            <a href="https://windsoft.xyz/gplay"><small>Play Store</small></a>
             - 
            <a href="https://windsoft.xyz/fb"><small>Facebook</small></a>
             - 
            <a href="https://windsoft.xyz/yt"><small>Youtube</small></a>
             - 
            <a href="https://windsoft.xyz/terms"><small>Termos</small></a>
             - 
            <a href="https://windsoft.xyz/privacy"><small>Privacidade</small></a>
             - 
            <a href="https://windsoft.xyz/sobre"><small>Sobre</small></a>
            <br/>
            <br/>
            <small>
                Windsoft Games (2015 - <?php echo(date("Y")); ?>)
            </small>
    </center>
    <br/>
    <script type="text/javascript">
        function myFunction() {
          document.getElementById("menuLogadoId").classList.toggle("show");
        }

        window.onclick = function(event) {
          if (!event.target.matches('.botaoMenuLogado')) {
            var dropdowns = document.getElementsByClassName("menuLogadoConteudo");
            var i;
            for (i = 0; i < dropdowns.length; i++) {
              var openDropdown = dropdowns[i];
              if (openDropdown.classList.contains('show')) {
                openDropdown.classList.remove('show');
              }
            }
          }
        };
    </script>
</div>

</body>
</html><file_sep>/browser/microsite/painel/paginas/includes/cabecalho.inc
<html>
    <head>
        <link rel="stylesheet" href="<?php echo(__DIR__); ?>/../../../../estilos/estilo-base.css" />
        <link rel="stylesheet" href="<?php echo(__DIR__); ?>/../../../../estilos/estilo-inputs.css"/>
        <link rel="stylesheet" href="<?php echo(__DIR__); ?>/../../../../estilos/estilo-divs.css"/>
        <link rel="stylesheet" href="<?php echo(__DIR__); ?>/../../../../estilos/estilo-pag-noticia.css" />
        <link rel="stylesheet" href="<?php echo(__DIR__); ?>/../../../../estilos/estilo-animations.css" />
        
        <style>
        body{
            background-color: #ffffff;
            padding: auto;
            margin: auto;
        }
        </style>
        
        <!-- script para gerar gráficos -->
        <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    </head>
    <body>
        
<?php
/*
 * Essa classe é responsável por fornecer o cabeçalho das páginas. É o conteúdo básico e verificador para cada página do painel.
 */

//Connecta aos banco de dados
include __DIR__ . ("/../../../../../global/mysql/feedbacks.inc");
include __DIR__ . ("/../../../../../global/mysql/metadados.inc");
include __DIR__ . ("/../../../../../global/mysql/registros.inc");
include __DIR__ . ("/../../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica se a sessão do usuário não está ativa. Caso não esteja, ativa o aviso
if(VerificarSessao(false, false) == false){
echo('
<div style="display: grid; background-color: #FFCECE; padding: 10px; text-left: center; border-radius: 6px; grid-template-columns: 20% 80%;">
    <div style="display: flex; align-items: center;">
        <img src="' . __DIR__ .'/../../imagens/alerta.png" style="width: 40%; margin-left: auto; margin-right: auto;" />
    </div>
    <div style="display: flex; align-items: center;">
        Não foi possível carregar o conteúdo desejado. Sua sessão encontra-se expirada, ou é incorreta, pois pode ter ocorrido uma alteração na sua rede. Por favor, re-faça login para continuar.
    </div>
</div>
');
}

//Verifica a sessão atual, e a valida, caso esteja invalida, não carrega o conteúdo
VerificarSessao(true, false);

//Obtem a permissão necessária para este script
$consultaPermissao = mysqli_query($DB_Metadados, "SELECT AutoridadeMinima FROM StaffPaginas WHERE Pagina='$estaPagina'");
$dadosPermissao = mysqli_fetch_array($consultaPermissao);

//Interrompe o script caso a autoridade do usuário não seja suficiente
if($dadosPermissao[0] > $_SESSION["autoridade"] || mysqli_num_rows($consultaPermissao) == 0){
echo('
<div style="display: grid; background-color: #FFCECE; padding: 10px; text-left: center; border-radius: 6px; grid-template-columns: 20% 80%;">
    <div style="display: flex; align-items: center;">
        <img src="' . __DIR__ .'/../../imagens/alerta.png" style="width: 40%; margin-left: auto; margin-right: auto;" />
    </div>
    <div style="display: flex; align-items: center;">
        Você não tem permissão o suficiente para acessar está página.
    </div>
</div>
<center>
    <input type="button" value="Ínicio" onclick="parent.carregarPagina(\'home.php\');" style="max-width: 100px; margin-top: 40px; margin-bottom: 40px;" />
</center>
<br>
');
    exit();
}
?><file_sep>/global/repositorio/arquivos-de-jogos/obter-url-para-arquivo.php
<?php 
/*
 * Esta classe é chamada pelo launcher windsoft, quando o mesmo precisa baixar
 * um arquivo de expansão para o jogo. Essa classe é responsável por retornar
 * a ele, a URL para o arquivo de expansão correspondente a versão e pacotes informados.
 */

include("../../sessoes/verificador-de-sessao.inc");

IgnorarSessaoImprimirMensagemDeConteudoCarregado();
$tempoInicio = microtime(true);
$jsonResposta = new stdClass();

//Variaveis da solicitação
$plataforma = $_POST["plataforma"];

//Caso seja para plataforma Android
if($plataforma == "Android"){
    //Variaveis da solicitação
    $pacote = $_POST["pacote"];
    $versao = $_POST["versao"];
    
    //Monta o diretório da OBB solicitada
    $diretorioOBB = "android/".$pacote."/expansion(".$versao.").obb";
    
    //Verifica se o arquivo OBB existe
    if(file_exists($diretorioOBB) == true){
        $tamanhoArquivoBytes = filesize($diretorioOBB);
        $tamanhoArquivoMebibytes = $tamanhoArquivoBytes / 1048576;
        $encontrou = "true";
    }
    if(file_exists($diretorioOBB) == false){
        $encontrou = "false";
    }
    
    //Carrega os resultados para a JSON resposta
    $jsonResposta->arquivoEncontrado = $encontrou;
    $jsonResposta->linkParaArquivo = "https://windsoft.xyz/global/repositorio/arquivos-de-jogos/android/".$pacote."/expansion(".$versao.").obb";
    $jsonResposta->tamanhoEmBytes = $tamanhoArquivoBytes;
    $jsonResposta->tamanhoEmMebiBytes = number_format($tamanhoArquivoMebibytes, 1);
}

//Caso seja para plataforma Fuchsia
if($plataforma == "Fuchsia"){
    
}

//Caso seja para plataforma Windows
if($plataforma == "Windows"){
    
}

//Insere o tempo da duração das contas no JSON Resposta
$jsonResposta->tempoExecucaoDoScript = number_format(microtime(true) - $tempoInicio, 5) . "ms";
//Imprime o JSON resposta
echo ("<pre>" . json_encode($jsonResposta, JSON_PRETTY_PRINT) . "</pre>");

?><file_sep>/client/mtassets-patcher/get-current-patcher-code.php
<?php
//Inicia um comentário, pois caso o php gere alguma mensagem de erro, a mensagem ficará comentada, para evitar erros de compilação
echo("/*");
//Esse código é responsável por receber a requisição do MT Assets Patcher
include("../../global/mysql/metadados.inc");

//Carrega a estatistica atual, caso não exista, cria o JSON para armazenar
$consultaEstatistica = mysqli_query($DB_Metadados, "SELECT DadosDestaEstatistica FROM AssetStoreStats WHERE TipoDeEstatistica='MTAssets-PatcherUpdater-Requisicoes'");
$jsonEstatisticaArray = mysqli_fetch_array($consultaEstatistica);
if($jsonEstatisticaArray[0] == ""){
    //Cria uma array de objetos "Dia"
    $arrayObjetosDia = array();
    for ($x = 0; $x < 31; $x++) {
        $objetoDia = new stdClass;
        $objetoDia->requisicoes = 0;
        array_push($arrayObjetosDia, $objetoDia);
    }
    
    //Cria o JSON para armazenar as estatisticas
    $objetoMes = new stdClass;
    $objetoMes->diasDoMes = $arrayObjetosDia;
    
    $jsonEstatisticaArray[0] = json_encode($objetoMes);
    $consultaCriarArmazenamento = mysqli_query($DB_Metadados, "UPDATE AssetStoreStats SET DadosDestaEstatistica='$jsonEstatisticaArray[0]' WHERE TipoDeEstatistica='MTAssets-PatcherUpdater-Requisicoes'");
}

//Incrementa a requisição atual, no dia de hoje, nas estatisticas
$armazenamentoEstatisticas = json_decode($jsonEstatisticaArray[0]);
$diasDoMesArray = $armazenamentoEstatisticas->diasDoMes;
$diaDeHoje = (int)(date("j")) - 1;
for($i = 0; $i < 31; $i++){
    //Caso o indice seja igual o dia de hoje, incrementa a estatistica
    if($i == $diaDeHoje){
        $diasDoMesArray[$i]->requisicoes += 1;
    }
    //Caso o indice seja maior que o dia de hoje, zera os dias posteriores
    if($i > $diaDeHoje){
        $diasDoMesArray[$i]->requisicoes = 0;
    }
}

//Salva as estatísticas
$jsonRequisicoesDesteMesAtualizado = json_encode($armazenamentoEstatisticas);
$consultaAtualizarEstatisticas = mysqli_query($DB_Metadados, "UPDATE AssetStoreStats SET DadosDestaEstatistica='$jsonRequisicoesDesteMesAtualizado' WHERE TipoDeEstatistica='MTAssets-PatcherUpdater-Requisicoes'");

//Lê o arquivo de script
$codigoCSharpDoPatcher = file_get_contents("Patcher.cs");

//Finaliza o comentário
echo("This is version ".date("Y")."/".date("m")."/".date("d")." of \"Patcher.cs\".*/\r\n\r\n");

//Imprime o código para que o Patcher Updater o atualize no projeto do cliente
echo($codigoCSharpDoPatcher);
?><file_sep>/browser/logout.php
<?php
/*
 * Essa página apaga a sessão do usuário e o redireciona para a página inicial
 */

//Finaliza a sessão e redireciona o usuario
session_start();
session_destroy();
header("Location:"."https://windsoft.xyz");

?><file_sep>/browser/microsite/painel/paginas/editar-anuncio-intersticial.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados do anúncio intersticial
$consultaAnuncio = mysqli_query($DB_Metadados, "SELECT AtivarAnuncio, TextoBotao, UrlImagem, UrlDaPagina FROM AdIntersticial WHERE Anuncio='Global'"); 
$dadosAnuncio = mysqli_fetch_array($consultaAnuncio);
?>

<center>
    <h3>Editar Anúncio Intersticial</h3>
</center>

<div id="formulario">
    <center>
        <form autocomplete="off">
            <input id="textoBotao" type="text" placeholder="Texto do Botão" onkeyup="validarTitulo();"
                       value="<?php echo($dadosAnuncio[1]); ?>"/>
            <div id="textoBotaoStatus" class="statusCampo"></div>
                
            <input id="urlImagem" type="text" placeholder="URL da Imagem" onkeyup="validarUrlImagem();" onblur="trocarImagemAnuncio();" 
                       value="<?php echo($dadosAnuncio[2]); ?>"/>
            <div id="urlImagemStatus" class="statusCampo"></div>
                
            <input id="urlPagina" type="text" placeholder="URL da Página" onkeyup="validarUrlPagina();"
                       value="<?php echo($dadosAnuncio[3]); ?>"/>
            <div id="urlPaginaStatus" class="statusCampo"></div>
            
            <div class="checkboxMainContainer">
                <label class="container">
                   <div>
                   Exibir Anúncio Intersticial
                   </div>
                   <input type="checkbox" id="exibir" onchange="validarCheckboxAnuncioIntersticial();" <?php if((boolean)$dadosAnuncio[0] == true){echo("checked");} ?>>
                   <span class="checkmark"></span>
                </label>
            </div>
            
            <input type="button" value="Aplicar" onclick="salvarEdicao();" />
        </form>
    </center>
</div>

<!-- pré visualização do anúncio intersticial -->
<center>
    <h3 id="tituloVisualizacao">Pré Visualização</h3>
</center>

<div id="preVisualizar" style="width: 80%; max-width: 300px; border-radius: 6px; background-color: #E0E0E0; height: 300px; margin-left: auto; margin-right: auto; background-image: url(<?php echo($dadosAnuncio[2]); ?>); background-position: center; background-size: cover; background-repeat: no-repeat; display: flex; align-items: flex-end;">
    <a id="link" href="<?php echo($dadosAnuncio[3]); ?>" target="_blank" style="width: auto; margin-top: calc(100% - 53px); margin-left: auto; margin-right: auto; position;">
        <input id="botao" type="button" value="<?php echo($dadosAnuncio[1]); ?>" style="width: auto;" />
    </a>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    campoTitulo = document.getElementById("textoBotao");
    statusTitulo = document.getElementById("textoBotaoStatus");
    tituloValido = false;
    function validarTitulo(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoTitulo.value.length, 40);
        
        //Desvalida
        campoTitulo.style.borderColor = "#990000";
        campoTitulo.style.borderWidth = "1px";
        statusTitulo.style.color = "#990000";
        tituloValido = false;
        
        if(campoTitulo.value == ""){
            statusTitulo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoTitulo.value.length > 40){
            statusTitulo.innerHTML = "Título muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoTitulo.value) == true){
            statusTitulo.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoTitulo.style.borderColor = "";
        campoTitulo.style.borderWidth = "";
        statusTitulo.innerHTML = "";
        tituloValido = true;
        
        //Caso o titulo seja válido, exibe a pré-visualização
        if(tituloValido == true){
            document.getElementById("botao").value = campoTitulo.value;
        }
    
        parent.redimensionarIframe();
    }
    
    campoUrlImagem = document.getElementById("urlImagem");
    statusUrlImage = document.getElementById("urlImagemStatus");
    urlImagemValida = false;
    function validarUrlImagem(){
        //Desvalida
        campoUrlImagem.style.borderColor = "#990000";
        campoUrlImagem.style.borderWidth = "1px";
        statusUrlImage.style.color = "#990000";
        urlImagemValida = false;
        
        if(campoUrlImagem.value == ""){
            statusUrlImage.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlImagem.value) == false){
            statusUrlImage.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlImagem.style.borderColor = "";
        campoUrlImagem.style.borderWidth = "";
        statusUrlImage.innerHTML = "";
        urlImagemValida = true;
    
        parent.redimensionarIframe();
    }
    
    function trocarImagemAnuncio(){
        //Atualiza a imagem do anúncio, quando o usuário sair do campo de texto da image
        if(urlImagemValida == true){
            document.getElementById("preVisualizar").style.backgroundImage = "url(" + campoUrlImagem.value + ")";
        }
    }
    
    campoUrlPagina = document.getElementById("urlPagina");
    statusUrlPagina = document.getElementById("urlPaginaStatus");
    urlPaginaValida = false;
    function validarUrlPagina(){
        //Desvalida
        campoUrlPagina.style.borderColor = "#990000";
        campoUrlPagina.style.borderWidth = "1px";
        statusUrlPagina.style.color = "#990000";
        urlPaginaValida = false;
        
        if(campoUrlPagina.value == ""){
            statusUrlPagina.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlPagina.value) == false){
            statusUrlPagina.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlPagina.style.borderColor = "";
        campoUrlPagina.style.borderWidth = "";
        statusUrlPagina.innerHTML = "";
        urlPaginaValida = true;
        
        //Caso o link da pagina seja válido, exibe a pré-visualização
        if(urlPaginaValida == true){
            document.getElementById("link").href = campoUrlPagina.value;
        }
    
        parent.redimensionarIframe();
    }
    
    //Ao ativar/desativar anuncio
    checkbox = document.getElementById("exibir");
    checkboxExibir = "0";
    function validarCheckboxAnuncioIntersticial(){
        if(checkbox.checked == true){
            checkboxExibir = "1";
            document.getElementById("preVisualizar").style.display = "flex";
            document.getElementById("tituloVisualizacao").innerHTML = "Pré-Visualização";
        }
        if(checkbox.checked == false){
            checkboxExibir = "0";
            document.getElementById("preVisualizar").style.display = "none";
            document.getElementById("tituloVisualizacao").innerHTML = "Anúncio Desativado";
        }
        
        parent.redimensionarIframe();
    }
    
     //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarTitulo();
        validarUrlPagina();
        validarUrlImagem();
        validarCheckboxAnuncioIntersticial();
        
        if(tituloValido == true && urlPaginaValida == true && urlImagemValida == true){
            return true;
        }
        if(tituloValido == false || urlPaginaValida == false || urlImagemValida == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que salva as alterações
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/editar-anuncio-intersticial.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "ativarAnuncio=" + checkboxExibir +
                                      "&textoBotao=" + document.getElementById("textoBotao").value +
                                      "&urlImagem=" + document.getElementById("urlImagem").value +
                                      "&urlPagina=" + document.getElementById("urlPagina").value);
        }
    }
    
    todosOsCamposEstaoValidos();
</script>

<?php
$conteudoQuadroDeAviso = ('
• Utilize uma imagem de 400x400 para o anúncio.
<br>
• O Anúncio Intersticial é exibido nos jogos da Windsoft, quando o jogador acessa o menu principal, quando o mesmo se encontra habilitado.
<br>
• O Anúncio Intersticial pode ser usado para anúnciar jogos da Windsoft Games.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/ajax-query/receber-imagem.php
<?php
/*
 * script que recebe a imagem enviada através da função de carregar imagem
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$arquivo = $_FILES["imagem"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Configura a data
    date_default_timezone_set('America/Sao_Paulo');
    $ano = date('Y');
    $mesNumero = date('m');
    $dia = date('d');
    $hora = date('H');
    $minuto = date('i');
    $segundos = date('s');
    
    //Configura o diretorio do upload
    $diretorioDoArquivo = "../../../noticias/por-data/".$ano."/".$mesNumero."/".$dia;
    
    //Cria o diretorio da noticia de acordo com a data, caso não exista um
    if(!is_dir($diretorioDoArquivo)){
        mkdir($diretorioDoArquivo, 0777, true);
    }
    
    $podeContinuarComCarregamento = true;
    
    //Verifica o tipo de arquivo
    $extensoesPermitidas = array("jpeg", "jpg");
    $extensaoDoArquivo = pathinfo($arquivo["name"], PATHINFO_EXTENSION);
    if(in_array($extensaoDoArquivo, $extensoesPermitidas) == false && $podeContinuarComCarregamento == true){
        echo("
             parent.mostrarNotificacao('O arquivo enviado, não é do formato JPG/JPEG.', \"#750000\", 5000);
             redefinirInterface();
             ");
    	$podeContinuarComCarregamento = false;
    }
	
    //Verifica o tamanho maximo do arquivo
    $tamanhoMaxEmKb = 100 * 1024;
    if($arquivo["size"] > $tamanhoMaxEmKb && $podeContinuarComCarregamento == true){
        echo("
             parent.mostrarNotificacao('O arquivo enviado excede o tamanho limite de 100Kb.', \"#750000\", 5000);
             redefinirInterface();
             ");
    	$podeContinuarComCarregamento = false;
    }
	
    //Verifica se o arquivo é uma imagem
    if(!getimagesize($arquivo["tmp_name"]) && $podeContinuarComCarregamento == true){
        echo("
             parent.mostrarNotificacao('O arquivo enviado não é uma imagem, ou está corrompido.', \"#750000\", 5000);
             redefinirInterface();
             ");
    	$podeContinuarComCarregamento = false;
    }
    
    //Inicia o upload do arquivo, caso seja possível
    if($podeContinuarComCarregamento == true){
        //Monta o nome do arquivo e diretorio
        $novoNome = $diretorioDoArquivo."/"."IMG-".$hora.$minuto.$segundos.".jpg";
        $diretorioFinal = $diretorioDoArquivo."/".$arquivo["name"];
        
        //Caso o upload ocorra bem
        if(move_uploaded_file($arquivo["tmp_name"], $diretorioFinal)){
            //Renomeia o arquivo enviado
            rename($diretorioFinal, $novoNome);
                
            //Calcula a URL da imagem
echo(""
."parent.mostrarNotificacao(\"Imagem carregada com sucesso!\", \"#467200\", 3500); "
."setTimeout(function(){ exibirInterfaceDeConclusao('"
."https://windsoft.xyz/browser/noticias/por-data/".$ano."/".$mesNumero."/".$dia."/"."IMG-".$hora.$minuto.$segundos.".jpg"
."');"
."}, 1500);");
        }
    }
}

?><file_sep>/browser/microsite/painel/paginas/recebimentos-notificacao.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem a contagem de recebimentos da atual notificação
$consulta = mysqli_query($DB_Metadados, "SELECT Recebimentos FROM NotificacaoStats WHERE Canal = 'Global'");
?>

<center>
    <h3>Recebimentos da Notificação Atual</h3>
</center>

<div style="width: 80%; max-width: 300px; margin-left: auto; margin-right: auto; border-radius: 4px; background-color: #E5E5E5; padding: 18px;">
    <center>
        <div style="font-weight: bolder; font-size: 40px;">
            <?php echo(mysqli_fetch_array($consulta)[0]); ?>
        </div>
        <small>Recebimentos</small>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
</script>

<?php
$conteudoQuadroDeAviso = ('
• Sempre que algum client solicitar uma notificação, ele irá contatar o servidor para informar que recebeu a notificação. Sempre que o servidor for informado do recebimento, esta contagem aumentará em um.
<br>
• Esse dado é uma aproximação.
<br>
• Sempre que uma nova notificação for emitida, a contagem será redefinida a zero.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/ajax-query/trocar-icone.php
<?php
/*
 * script que faz consulta de alteração do icone
 */

include("../../global/sessoes/verificador-de-sessao.inc");
include("../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Obtem as variaveis
$novoIcone = mysqli_real_escape_string($DB_Registros, $_POST["icone"]);

//obtem o id do usuário
$id = $_SESSION["id"];

//Altera o icone
$consulta = mysqli_query($DB_Registros, "UPDATE Perfis SET IdIcone=$novoIcone WHERE ID=$id");

$_SESSION["idIcone"] = $novoIcone;

echo("".
"mostrarNotificacao(\"Ícone de perfil alterado com sucesso!\", \"#117700\", 5000);".
"document.getElementById(\"iconeTopbar\").src = \"https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_".$_SESSION["idIcone"].".png\";".
"document.getElementById(\"iconePagPerfil\").style.backgroundImage = \"url(https://windsoft.xyz/global/repositorio/arquivos-de-perfil/icones-de-perfil/icone_".$novoIcone.".png)\";".
"");

?><file_sep>/browser/microsite/painel/paginas/editar-versao-de-jogo.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados de todos os jogos cadastrados
$consultaDeJogos = mysqli_query($DB_Metadados, "SELECT JogoID, Nome, UltimaVersao, Plataforma FROM JogosDaWindsoft WHERE JogoID > 0");
$i = 0;
while($linha = mysqli_fetch_assoc($consultaDeJogos)) {
    $jogoId[$i] = $linha["JogoID"];
    $nome[$i] = $linha["Nome"];
    $plataforma[$i] = $linha["Plataforma"];
    $ultimaVersao[$i] = $linha["UltimaVersao"];
    $i += 1;
}
?>

<center>
    <h3>Editar Versão de Jogo</h3>
</center>

<div id="formulario" style="display: block;">
    <center>
        <form autocomplete="off">
            <select id="selectSlide" onchange="aoTrocarJogo();">
                <?php
                    for ($ii = 0; $ii < $i; $ii++) {
                        echo('<option value="'.$jogoId[$ii].'">'.$nome[$ii].' ('.$plataforma[$ii].')</option>');
                    }
                ?>
            </select>
            
            <input id="versao" type="text" placeholder="Versão do Jogo" onkeyup="validarVersao();"/>
            <div id="versaoStatus" class="statusCampo"></div>
            
            <input type="button" value="Salvar" onclick="salvarEdicao();" />
        </form>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    //Função que preenche o campo de versão, ao trocar o jogo
    versoesDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$ultimaVersao[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    jogoSelect = document.getElementById("selectSlide");
    jogoSelecionadoId = 1;
    function aoTrocarJogo(){
        jogoSelecionadoId = jogoSelect.value;
        document.getElementById("versao").value = versoesDosJogos[parseInt(jogoSelecionadoId)];
        todosOsCamposEstaoValidos();
    }
    
    campoVersao = document.getElementById("versao");
    statusVersao = document.getElementById("versaoStatus");
    versaoValido = false;
    function validarVersao(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoVersao.value.length, 8);
        
        //Desvalida
        campoVersao.style.borderColor = "#990000";
        campoVersao.style.borderWidth = "1px";
        statusVersao.style.color = "#990000";
        versaoValido = false;
        
        if(campoVersao.value == ""){
            statusVersao.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoVersao.value.length > 8){
            statusVersao.innerHTML = "Nome de versão, muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoVersao.value) == true){
            statusVersao.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoVersao.style.borderColor = "";
        campoVersao.style.borderWidth = "";
        statusVersao.innerHTML = "";
        versaoValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarVersao();
        
        if(versaoValido == true){
            return true;
        }
        if(versaoValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que publica o jogo
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/editar-versao-jogo.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                    //Atualiza a versão, na array de versões
                    versoesDosJogos[parseInt(jogoSelecionadoId)] = document.getElementById("versao").value;
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "id=" + jogoSelecionadoId +
                                      "&ultimaVersao=" + document.getElementById("versao").value);
        }
    }
    
    aoTrocarJogo();
</script>
    
<?php
$conteudoQuadroDeAviso = ('
• O Windsoft Launcher, usará a versão informada aqui, para identificar se o jogo no dispositivo do cliente, está atualizado.
<br/>
• As versões devem ter a seguinte organização "major.minor.patch", exemplo 1.7.23 (Sendo que o "Patch" é uma correção aplicada a atualização "Minor", e "Minor" são adições ou melhorias feitas ao jogo. "Major" updates, são atualizações onde muita coisa é alterada).
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/paginas/enviar-arquivo-expansao.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados de todos os jogos cadastrados
$consultaDeJogos = mysqli_query($DB_Metadados, "SELECT JogoID, Nome, UltimaVersao, PacoteOuNamespace, Plataforma FROM JogosDaWindsoft WHERE JogoID > 0");
$i = 0;
while($linha = mysqli_fetch_assoc($consultaDeJogos)) {
    $jogoId[$i] = $linha["JogoID"];
    $nome[$i] = $linha["Nome"];
    $ultimaVersao[$i] = $linha["UltimaVersao"];
    $pacote[$i] = $linha["PacoteOuNamespace"];
    $plataforma[$i] = $linha["Plataforma"];
    
    $i += 1;
}
?>

<center>
    <h3>Enviar Arquivo de Expansão</h3>
</center>

<!-- envio do arquivo -->
<form method="post" id="formularioUpload" enctype="multipart/form-data" autocomplete="off">
    <center>
        <select id="selectSlide" onchange="aoTrocarJogo();" style="max-width: 270px;">
            <?php
                for ($ii = 0; $ii < $i; $ii++) {
                    echo('<option value="'.$jogoId[$ii].'">'.$nome[$ii].' (v'.$ultimaVersao[$ii].') ('.$plataforma[$ii].')</option>');
                }
            ?>
        </select>
    </center>
    
	<input type="file" name="imagem" id="imagemUpload" style="display: none;" onchange="selecionarArquivo();" />
    <div style="display: grid; grid-template-rows: 60% 20% 20%; height: 250px; width: 250px; margin-left: auto; margin-right: auto; background-color: #EDEDED; padding: 10px; border-radius: 4px;">
        <div id="preVisualizacao" onclick="clickNoSeletorDeArquivos();" style="background-image: url(../imagens/upload1.png); background-position: center; background-size: cover; background-repeat: no-repeat; border-radius: 100%; width: 100%; max-width: 60%; margin-left: auto; margin-right: auto; cursor: pointer;">
        </div>
        <div style="display: flex; justify-content: center; align-items: center; font-weight: bolder; text-align: center;">
            <div id="nomeDoArquivo">
                Selecione um arquivo...
            </div>
        </div>
        <div style="display: flex; justify-content: center; align-items: center;">
            <button id="botaoCarregar" style="width: 100%; height: 100%; border-radius: 4px; background-color: #356B00; color: #F4F4F4; border-style: none; cursor: pointer; display: none;">Carregar</button>
            <div id="progressoBg" style="width: 100%; height: 6px; background-color: #BFBFBF; border-radius: 4px; display: none;">
                <div id="progressoFill" style="transition: 0.25s; height: 100%; width: 1%; background-color: #00A4E0; float: left; border-radius: 4px;"></div>
            </div>
        </div>
    </div>
</form>

<div id="arquivoEnviado" style="display: none;">
    <center>
        <img src="../imagens/sucesso.png" width="128px" />
        <br>
        <br>
        O arquivo de expansão foi enviado com sucesso para o jogo selecionado!
        <br>
        <br>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    //Função que obtem os dados, ao trocar de jogo selecionado
    nomesDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$nome[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    plataformaDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$plataforma[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    pacoteDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$pacote[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    versoesDosJogos = ["", <?php
                    for ($iii = 0; $iii < $i; $iii++) {
                        echo('"'.$ultimaVersao[$iii].'"');
                        if($iii != $i){
                            echo(",");
                        }
                    }
                ?>];
    jogoSelect = document.getElementById("selectSlide");
    jogoSelecionadoId = 1;
    function aoTrocarJogo(){
        jogoSelecionadoId = jogoSelect.value;
        parent.mostrarNotificacao('Atenção: "' + nomesDosJogos[parseInt(jogoSelecionadoId)] + '" foi escolhido para receber este arquivo de expansão.', '#AA6300', 3000);
    }
    
    //Inicializa o formulario        
    document.getElementById("formularioUpload").addEventListener("submit", function(evt){
        evt.preventDefault();
    }, false);
        
    document.getElementById("botaoCarregar").addEventListener("click", function(){
        var inputFile = document.getElementById("imagemUpload");
        carregarArquivo(inputFile.files[0]);
    }, false);
    
    //Função que abre o seletor de arquivos e exibe seu nome e dados
    function selecionarArquivo(){
        var uploader = document.getElementById("imagemUpload");
        
        if(uploader.value != ""){
            document.getElementById("botaoCarregar").style.display = "block";
            document.getElementById("nomeDoArquivo").innerHTML = uploader.value.split(/\\|\//).pop() + "<br>(" + (uploader.files[0].size / 1000).toFixed(1) + " Kb)";
        }
        if(uploader.value == ""){
            redefinirInterface();
        }
    }
    
    //Função que clica no seletor de arquivos verdadeiro (que está invisivel)
    function clickNoSeletorDeArquivos(){
        document.getElementById("imagemUpload").click();
    }
    
    //Função que redefine a interface para o padrão, de inicio
    function redefinirInterface(){
        var data = new Date();
        document.getElementById("botaoCarregar").style.display = "none";
        document.getElementById("progressoBg").style.display = "none";
        document.getElementById("progressoFill").style.width = "1%";
        document.getElementById("nomeDoArquivo").innerHTML = "Selecione um arquivo...";
        document.getElementById("preVisualizacao").style.cursor = "pointer";
        document.getElementById("preVisualizacao").onclick = function(){ clickNoSeletorDeArquivos(); }; 
    }
    
    //Função que efetua o envio enquanto exibe o progresso
    function carregarArquivo(file){
        document.getElementById("botaoCarregar").style.display = "none";
        document.getElementById("progressoBg").style.display = "block";
        document.getElementById("preVisualizacao").onclick = null;
        document.getElementById("preVisualizacao").style.cursor = "not-allowed";
        document.getElementById("nomeDoArquivo").innerHTML = "Carregando arquivo...";
        var preenchimentoProgresso = document.getElementById("progressoFill");
        
        var request = new XMLHttpRequest();
        var formData = new FormData();
        
        formData.append("arquivo", file);
        formData.append("plataforma", plataformaDosJogos[parseInt(jogoSelecionadoId)]);
        formData.append("pacote", pacoteDosJogos[parseInt(jogoSelecionadoId)]);
        formData.append("versao", versoesDosJogos[parseInt(jogoSelecionadoId)]);
        request.open("POST", "../ajax-query/receber-arquivo-expansao.php");
        request.upload.addEventListener("progress", function(evt){
           if(evt.lengthComputable){
                preenchimentoProgresso.style.width = ((evt.loaded / evt.total) * 100) + "%";
           }
           else{
                redefinirInterface();
                document.getElementById("nomeDoArquivo").innerHTML = "Erro no upload";
           }
        }, false);
        
        request.send(formData);
        
        request.onreadystatechange = function(){
            if(this.readyState == 4){
                if(this.status === 200){
                    eval(this.responseText);
                }
                else{
                    parent.mostrarNotificacao('Ocorreu um erro de conexão durante o Upload.', '#750000', 5000);
                    redefinirInterface();
                }
            }
        };
    }
    
    //Função que exibe a mensagem de sucesso após criar arquivo de notícia
    function exibirMensagemArquivoEnviado(){
        document.getElementById("arquivoEnviado").style.display = "block";
        document.getElementById("formularioUpload").style.display = "none";
        document.getElementById("quadroDeAvisos").style.display = "none";
        parent.redimensionarIframe();
    }
    
    aoTrocarJogo();
</script>

<?php
$conteudoQuadroDeAviso = ('
• Selecione o jogo ao qual, vai receber este arquivo de expansão, e faça o envio.
<br/>
• O arquivo de expansão enviado aqui, será associado a Última Versão informada, no cadastro desse jogo, automaticamente.
<br/>
• Caso um jogo de um cliente esteja sem os arquivos de expansão, o Windsoft Launcher irá buscar no servidor, o arquivo de expansão correspondente a versão instalada no dispositivo do cliente.
<br/>
• Verifique se a Última Versão informada no cadastro do jogo, é a correta, antes de enviar.
<br/>
• Os arquivos de expansão devem ter o formato de OBB ou ZIP. Caso o upload dê erro, em arquivos grandes, faça o carregamento usando FTP.
<br/>
• Caso já exista um arquivo de expansão, para esta versão do jogo selecionado, o arquivo existente será sobrescrevido.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/client.php
<?php
/*
 * Essa página é responsável pela pagina inicial client do painal de administração
 */

$tituloPagina = "Admin Painel - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("../../includes/cabecalho.inc");
RedirecionarParaLoginCasoNaoEstejaLogado();

include("../../../global/mysql/feedbacks.inc");
include("../../../global/mysql/registros.inc");
include("../../../global/mysql/metadados.inc");

//Redireciona para o inicio caso não tenha permissão
if($_SESSION["autoridade"] == 0){
    header('Location: http://windsoft.xyz');
}
?>

<!-- Estilo da janela modal -->
<style>
    .fundoModal{
        position: fixed;
        top: 0px;
        left: 0px;
        background-color: rgba(0, 0, 0, 0.6);
        width: 100%;
        height: 100%;
        z-index: 50;
        opacity: 0;
        transition: opacity 250ms;
        pointer-events: none;
    }
    
    .caixaModal{
        background-color: #E8E8E8;
        width: 80%;
        max-width: 250px;
        height: 80%;
        max-height: 70%;
        margin-left: auto;
        margin-right: auto;
        padding: 10px;
        border-radius: 6px;
    }
    
    .caixaModalRaiz{
        position: fixed;
        top: -1000px;
        left: 0px;
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 80;
        width: 100%;
        height: 100%;
        transition: top 200ms;
    }
    
    .itemMenu{
        cursor: pointer;
        border-radius: 4px;
        padding: 5px;
        transition: 250ms;
    }
    
    .itemMenu:hover{
        background-color: #D8D8D8;
    }
</style>

<!-- fundo das caixas de dialogo -->
<div class="fundoModal" id="escurecimento"></div>

<!-- caixa de dialogo para o menu -->
<div class="caixaModalRaiz" id="menu">
    <div class="caixaModal">
        <div style="height: 30px; background-color: #FFFFFF; border-radius: 4px 4px 0px 0px; height: 30px; margin: -10px -10px 10px -10px; padding: 10px;">
            <div style="float: left; line-height: 30px; font-weight: bolder;">
                Menu do Painel
            </div>
            <img src="imagens/fechar.png" height="30px" style="float: right; cursor: pointer;" onclick="abrirMenu(false);" />
        </div>
        <div style="height: calc(100% - 50px); overflow: auto;">
            <?php
            $altura = 1300;
            if($_SESSION["autoridade"] >= 4){
                $altura = $altura + 200;
            }
            ?>
            <div style="height: <?php echo($altura); ?>px; width: 100%;">
                <?php include("menu-itens.inc"); ?>
                <?php if($_SESSION["autoridade"] >= 4){ include("menu-itens-mt-assets.inc"); } ?>
            </div>
        </div>
    </div>
</div>

<!-- cria topbar que exibe as informações de staff -->
<div style="background-color: #E2E2E2; border-radius: 4px; width: calc(100% - 20px); padding: 10px; margin-bottom: 10px; overflow: auto; display: grid; grid-template-columns: 33.3% 33.3% 33.3%;">
    <div align="left">
        <div style="color: #b2b2b2; font-size: 10px;">
            <?php
            echo($_SESSION["cargo"]);
            ?>
        </div>
        <div style="font-weight: bolder;">
            <?php
            $id = $_SESSION["id"];
            $consultaPerfil = mysqli_query($DB_Registros, "SELECT Nome FROM Perfis WHERE ID=$id");
            $dadosPerfil = mysqli_fetch_array($consultaPerfil);
            echo($dadosPerfil[0]);
            ?>
        </div>
    </div>
    <div align="center">
        <div style="color: #b2b2b2; font-size: 10px;">
            Autoridade
        </div>
        <div align="left" style="background-color: #BABABA; border-radius: 4px; width: 60px; height: 6px; margin-top: 6px;">
            <?php
                if($_SESSION["autoridade"] == 1){
                    echo("<div style=\"background-color: #AD913C; border-radius: 4px; width: 25%; height: 100%;\"></div>");
                }
                if($_SESSION["autoridade"] == 2){
                    echo("<div style=\"background-color: #73A013; border-radius: 4px; width: 50%; height: 100%;\"></div>");
                }
                if($_SESSION["autoridade"] == 3){
                    echo("<div style=\"background-color: #0EAD00; border-radius: 4px; width: 75%; height: 100%;\"></div>");
                }
                if($_SESSION["autoridade"] == 4){
                    echo("<div style=\"background-color: #007FCE; border-radius: 4px; width: 100%; height: 100%;\"></div>");
                }
            ?>
        </div>
    </div>
    <div align="right">
        <img src="imagens/menu.png" height="27px" style="float: right; cursor: pointer;" onclick="abrirMenu(true);" />
    </div>
</div>

<!-- iframe que exibe as páginas desejadas -->
<iframe id="iframe" onload="concluirCarregamento();" scrolling="no" style="width: 100%; border: none; background-repeat: no-repeat; background-position: center; background-image: url(imagens/load.gif); background-size: 32px 32px; overflow: hidden;">
</iframe>

<!-- código java script do client -->
<script type="text/javascript">
    function abrirMenu(abrir){
        //Abre ou fecha o menu
        if(abrir == true){
            document.getElementById("menu").style.top = "0px";
            document.getElementById("escurecimento").style.opacity = "1";
        }
        if(abrir == false){
            document.getElementById("menu").style.top = "-1000px";
            document.getElementById("escurecimento").style.opacity = "0";
        }
    }
    
    function carregarPagina(pagina){
        //esconde o ícone de emote
        exibirIconeEmote(false);
        
        //Carrega uma página desejada
        mostrarSpinner(true);
        abrirMenu(false);
        
        //Carrega a página desejada dentro do iframe após um tempo
        setTimeout(function(){
            var iframe = document.getElementById("iframe");
            iframe.src = "paginas/" + pagina;
        }, 1000);
    }
    
    function abrirNovaAba(pagina){
        //Abre a página desejada em uma nova aba
        window.open(pagina, '_blank');
    }
    
    //método que conclui o carregamento do iframe
    function concluirCarregamento() {
        //redimensiona a altura do iframe conforme o conteúdo
        redimensionarIframe();
        
        //remove o carregamento
        document.getElementById('iframe').style.backgroundImage = "";
        setTimeout(function(){
            mostrarSpinner(false);
        }, 500);
    }
    
    //método que redimensiona o iframe de conteúdo de acordo com o que possui dentro, mantendo a mesma posição da tela
    function redimensionarIframe() {
        var iframe = document.getElementById('iframe');
        var posicaoAntesDoRedimensionamento = document.documentElement.scrollTop;
        iframe.height = "";
        iframe.height = iframe.contentWindow.document.body.scrollHeight + "px";
        document.documentElement.scrollTop = posicaoAntesDoRedimensionamento;
    }
    
    //Carrega a página inicial
    setTimeout(function(){
        document.getElementById('iframe').style.backgroundImage = "url(imagens/load.gif)";
        carregarPagina("home.php");
    }, 25);
</script>

<?php
    include("../../includes/rodape.inc");
?><file_sep>/browser/microsite/mt-assets/includes/cabecalho.inc
<?php
/*
 * Essa classe é responsável por fornecer o cabeçalho das páginas.
 */
?>

<html>
    <head>
        <title><?php echo($TituloPagina); ?></title>
        <link rel="stylesheet" href="estilos/estilo-padrao.css" />
        <link rel="icon" href="favicons/favicon.ico" type="image/x-icon" />
        <link rel="shortcut/icon" href="favicons/favicon.ico" type="image/x-icon" />
    </head>
    <body>
        <div class="topBar">
            <div style="float: left; height: 45px; margin: 3px;">
                <img src="images/mtw.png" height="40px" />
            </div>
            <div style="float: left; height: 45px;">
                <div style="line-height: 33px; vertical-align: middle; margin-left: 3px; color: #ffffff; font-weight: bold; font-size: 22px;">
                    MT Assets
                </div>
                <div style="line-height: 8px; vertical-align: middle; margin-left: 3px; color: #d3d3d3; font-size: 10px;">
                    for Unity Engine
                </div>
            </div>
            <div style="float: right; height: 45px;">
                <div style="line-height: 16px; vertical-align: middle; margin-right: 10px; color: #d3d3d3; font-size: 10px; text-align: right;">
                    for support and contact
                </div>
                <div style="line-height: 25px; vertical-align: middle; margin-right: 10px; color: #ffffff; font-weight: bold; font-size: 16px;">
                    <EMAIL>
                </div>
            </div>
        </div>
        <a href="https://windsoft.xyz/mtassets">
            <div class="bannerMT" style="background-image: url(images/banner-mt.png);">
            </div>
        </a>
        <div class="subBody">
            <br/><file_sep>/global/sessoes/criador-de-sessao.inc
<?php
/*
 * Essa classe é responsável por criar sessões no servidor e fornecer o Cookie de acesso ao usuário.
 */

//Este script deve ser incluído no topo dos scripts.

function CriarNovaSessao($id, $nick){
    //Cria uma sessão nova com os dados do usuário e fornece o Cookie referente a essa sessão, para o usuário.
    session_start();
    $_SESSION["id"] = $id;
    $_SESSION["nick"] = $nick;
}

?><file_sep>/browser/microsite/painel/ajax-query/atualizar-post-it.php
<?php
/*
 * script que atualiza o conteudo do post-it
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Obtem as variaveis
$texto = mysqli_real_escape_string($DB_Metadados, $_POST["texto"]);
$corDeFundo = mysqli_real_escape_string($DB_Metadados, $_POST["corDeFundo"]);

//Realiza a atualização do post it
$consultaAtualizacao = mysqli_query($DB_Metadados, "UPDATE StaffPostIt SET Texto='$texto', CorPostIt='$corDeFundo' WHERE ID=0");

echo("".
'parent.mostrarNotificacao("O Post-It foi atualizado com sucesso.", "#117700", 2500);'
."");

?><file_sep>/browser/microsite/painel/paginas/listar-assets.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os assets cadastrados
$assetsConsulta = mysqli_query($DB_Metadados, "SELECT Nome, PrecoAtual, UrlImagem FROM AssetStore");
$i = 0;
while($linha = mysqli_fetch_assoc($assetsConsulta)) {
    $nome[$i] = $linha["Nome"];
    $precoAtual[$i] = $linha["PrecoAtual"];
    $urlImagem[$i] = $linha["UrlImagem"];
    $i += 1;
}
?>

<center>
    <h3>Listar Assets Cadastrados</h3>
</center>

<table style="width: 100%; border-collapse: collapse; font-size: 14px;">
    <tr>
        <th style="border: 1px solid #ddd; padding: 4px; text-align: left;">Asset</th>
        <th style="border: 1px solid #ddd; padding: 4px;">Preço Atual</th>
    </tr>
<?php
        for ($ii = 0; $ii < $i; $ii++) {
        //Imprime o código HTML para representar este usuário
        echo('
        <tr>
            <td style="border: 1px solid #ddd; padding: 4px;">
                <div style="display: grid; grid-template-columns: 32px auto;">
                    <img src="'.$urlImagem[$ii].'" style="width: 24px; border-radius: 24px; margin-right: 8px;"/> <div style="line-height: 24px;">'.$nome[$ii].'</div>
                </div>
            </td>
            <td style="text-align: right; border: 1px solid #ddd; padding: 4px;">
                US$ '.$precoAtual[$ii].'
            </td>
        </tr>');
        }
    ?>
</table>

<!-- código javascript desta página -->
<script type="text/javascript">
</script>

<?php
$conteudoQuadroDeAviso = ('
• Estes são todos os assets cadastrados no Banco de Dados até o momento.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/ajax-query/reportar-venda-asset.php
<?php
/*
 * script que adiciona a venda ao historico de vendas do asset
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Código PHP que processa o armazenamento de dados de vendas dos assets e carrega todos os dados dos assets
include("../paginas/includes/mt-assets-historico-de-vendas.inc");

//Variaveis do script
$id = mysqli_real_escape_string($DB_Metadados, $_POST["id"]);
$copiasVendidas = mysqli_real_escape_string($DB_Metadados, $_POST["copiasVendidas"]);
$precoVenda = mysqli_real_escape_string($DB_Metadados, $_POST["precoAsset"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Incrementa na quantidade de vendas do respectivo asset, na data de hoje
    $armazenamento = json_decode($vendasPorDataJson[$id]);
    $arrayObjetosAno = $armazenamento->anosArmazenados;
    for ($x = 0; $x < count($arrayObjetosAno); $x++) {
        if($arrayObjetosAno[$x]->numeroAno == date("Y")){
            $anoSelecionado = $arrayObjetosAno[$x];
        }
    }
    $mesSelecionado = $anoSelecionado->mesesDoAno[(int)(date("n")) - 1];
    $diaSelecionado = $mesSelecionado->diasDoMes[(int)(date("j")) - 1];
    $diaSelecionado->quantiaDeVendas += $copiasVendidas;
    $diaSelecionado->receitaDoDia += $precoVenda * $copiasVendidas;
    $codigoJson = json_encode($armazenamento);
    
    //Aplica as alterações 
    $consultaReporte = mysqli_query($DB_Metadados, "UPDATE AssetStore SET VendasPorData_Json='$codigoJson' WHERE ID=$id"); 
    
echo("".
'parent.mostrarNotificacao("A venda foi reportada com sucesso!", "#117700", 2500);'.
'AtualizarDadosNaTela('.$id.', '.$copiasVendidas.', '.($precoVenda * $copiasVendidas).')'
."");
}
?><file_sep>/browser/microsite/painel/paginas/editar-um-slide.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados de todos os slides
$slidesConsulta = mysqli_query($DB_Metadados, "SELECT Titulo, UrlDaPagina, UrlDaCapa FROM Noticias WHERE Noticia IN (".implode(',', $a=array(1, 2, 3, 4, 5)).")");
$i = 0;
while($linha = mysqli_fetch_assoc($slidesConsulta)) {
    $titulo[$i] = $linha["Titulo"];
    $urlPagina[$i] = $linha["UrlDaPagina"];
    $urlCapa[$i] = $linha["UrlDaCapa"];
    $i += 1;
}
?>

<center>
    <h3>Editar um Slide de Notícia</h3>
</center>

<div id="formulario" style="display: block;">
    <center>
        <form autocomplete="off">
            <select id="selectSlide" onchange="trocarSlide();">
                <option value="1">Slide 1</option>
                <option value="2">Slide 2</option>
                <option value="3">Slide 3</option>
                <option value="4">Slide 4</option>
                <option value="5">Slide 5</option>
            </select>
            
            <input id="titulo" type="text" placeholder="Título da Notícia" onkeyup="validarTitulo();"
                       value="<?php echo($titulo[0]); ?>"/>
            <div id="tituloStatus" class="statusCampo"></div>
                
            <input id="urlPagina" type="text" placeholder="URL da Página" onkeyup="validarUrlPagina();"
                       value="<?php echo($urlPagina[0]); ?>"/>
            <div id="urlPaginaStatus" class="statusCampo"></div>
                
            <input id="urlCapa" type="text" placeholder="URL da Capa" onkeyup="validarUrlCapa();"
                       value="<?php echo($urlCapa[0]); ?>"/>
            <div id="urlCapaStatus" class="statusCampo"></div>
            
            <input type="button" value="Salvar" onclick="salvarEdicao();" />
        </form>
    </center>
</div>

<div id="slideEditado" style="display: none;">
    <center>
        <img src="../imagens/sucesso.png" width="128px" />
        <br>
        <br>
        O Slide foi editado com sucesso!
        <br>
        Acesse a página inicial da Windsoft Games para ver a alteração.
        <br>
        <br>
        <a href="https://windsoft.xyz" target="_blank">
            <input type="button" value="Visualizar" />
        </a>
        <br>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    campoTitulo = document.getElementById("titulo");
    statusTitulo = document.getElementById("tituloStatus");
    tituloValido = false;
    function validarTitulo(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoTitulo.value.length, 40);
        
        //Desvalida
        campoTitulo.style.borderColor = "#990000";
        campoTitulo.style.borderWidth = "1px";
        statusTitulo.style.color = "#990000";
        tituloValido = false;
        
        if(campoTitulo.value == ""){
            statusTitulo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoTitulo.value.length > 40){
            statusTitulo.innerHTML = "Título muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoTitulo.value) == true){
            statusTitulo.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoTitulo.style.borderColor = "";
        campoTitulo.style.borderWidth = "";
        statusTitulo.innerHTML = "";
        tituloValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlPagina = document.getElementById("urlPagina");
    statusUrlPagina = document.getElementById("urlPaginaStatus");
    urlPaginaValida = false;
    function validarUrlPagina(){
        //Desvalida
        campoUrlPagina.style.borderColor = "#990000";
        campoUrlPagina.style.borderWidth = "1px";
        statusUrlPagina.style.color = "#990000";
        urlPaginaValida = false;
        
        if(campoUrlPagina.value == ""){
            statusUrlPagina.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlPagina.value) == false){
            statusUrlPagina.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlPagina.style.borderColor = "";
        campoUrlPagina.style.borderWidth = "";
        statusUrlPagina.innerHTML = "";
        urlPaginaValida = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlCapa = document.getElementById("urlCapa");
    statusUrlCapa = document.getElementById("urlCapaStatus");
    urlCapaValido = false;
    function validarUrlCapa(){
        //Desvalida
        campoUrlCapa.style.borderColor = "#990000";
        campoUrlCapa.style.borderWidth = "1px";
        statusUrlCapa.style.color = "#990000";
        urlCapaValido = false;
        
        if(campoUrlCapa.value == ""){
            statusUrlCapa.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlCapa.value) == false){
            statusUrlCapa.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlCapa.style.borderColor = "";
        campoUrlCapa.style.borderWidth = "";
        statusUrlCapa.innerHTML = "";
        urlCapaValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarTitulo();
        validarUrlPagina();
        validarUrlCapa();
        
        if(tituloValido == true && urlPaginaValida == true && urlCapaValido == true){
            return true;
        }
        if(tituloValido == false || urlPaginaValida == false || urlCapaValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que troca o conteudo dos campos de acordo com o slide selecionado
    tituloSlide = ["<?php echo($titulo[0]); ?>", "<?php echo($titulo[1]); ?>", "<?php echo($titulo[2]); ?>", "<?php echo($titulo[3]); ?>", "<?php echo($titulo[4]); ?>"];
    urlPaginaSlide = ["<?php echo($urlPagina[0]); ?>", "<?php echo($urlPagina[1]); ?>", "<?php echo($urlPagina[2]); ?>", "<?php echo($urlPagina[3]); ?>", "<?php echo($urlPagina[4]); ?>"];
    urlCapaSlide = ["<?php echo($urlCapa[0]); ?>", "<?php echo($urlCapa[1]); ?>", "<?php echo($urlCapa[2]); ?>", "<?php echo($urlCapa[3]); ?>", "<?php echo($urlCapa[4]); ?>"];
    function trocarSlide(){
        var slideSelecionado = parseInt(document.getElementById("selectSlide").value) - 1;
        campoTitulo.value = tituloSlide[slideSelecionado];
        campoUrlPagina.value = urlPaginaSlide[slideSelecionado];
        campoUrlCapa.value = urlCapaSlide[slideSelecionado];
        todosOsCamposEstaoValidos();
    }
    
    //Função que publica a noticia
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/editar-slide.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "id=" + document.getElementById("selectSlide").value +
                                      "&titulo=" + document.getElementById("titulo").value +
                                      "&urlPagina=" + document.getElementById("urlPagina").value +
                                      "&urlCapa=" + document.getElementById("urlCapa").value);
        }
    }
    
    //Função que exibe a mensagem de sucesso após criar arquivo de notícia
    function exibirMensagemSlideEditado(){
        document.getElementById("slideEditado").style.display = "block";
        document.getElementById("formulario").style.display = "none";
        document.getElementById("quadroDeAvisos").style.display = "none";
        parent.redimensionarIframe();
    }
    
    todosOsCamposEstaoValidos();
</script>

<?php
$conteudoQuadroDeAviso = ('
• Selecione o slide de notícia que você deseja editar, faça suas alterações e basta salvar.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/ajax-query/salvar-edicao-criar-noticia.php
<?php
/*
 * script que recebe o conteúdo da edição e o salva em arquivos temporários,
 * para persistir a edição
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$titulo = $_POST["titulo"];
$urlCapa = $_POST["urlCapa"];
$descricao = $_POST["descricao"];
$introducao = $_POST["introducao"];
$subtitulo1 = $_POST["subtitulo1"];
$texto1 = $_POST["texto1"];
$subtitulo2 = $_POST["subtitulo2"];
$texto2 = $_POST["texto2"];
$subtitulo3 = $_POST["subtitulo3"];
$texto3 = $_POST["texto3"];
$subtitulo4 = $_POST["subtitulo4"];
$texto4 = $_POST["texto4"];
$subtitulo5 = $_POST["subtitulo5"];
$texto5 = $_POST["texto5"];

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Configura a data
    date_default_timezone_set('America/Sao_Paulo');
    $ano = date('Y');
    $mesNumero = date('m');
    $dia = date('d');
    $hora = date('H');
    $minuto = date('i');
    
    //Cria os arquivos temporários de texto da noticia
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-titulo.tmp", $titulo);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-urlCapa.tmp", $urlCapa);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-descricao.tmp", $descricao);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-introducao.tmp", $introducao);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-subtitulo1.tmp", $subtitulo1);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-texto1.tmp", $texto1);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-subtitulo2.tmp", $subtitulo2);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-texto2.tmp", $texto2);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-subtitulo3.tmp", $subtitulo3);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-texto3.tmp", $texto3);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-subtitulo4.tmp", $subtitulo4);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-texto4.tmp", $texto4);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-subtitulo5.tmp", $subtitulo5);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-texto5.tmp", $texto5);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-dataSalvamento.tmp", "Alterações salvas em " . $dia . "/" . $mesNumero . "/" . $ano . " às " . $hora . ":" . $minuto);
    salvarArquivoTemporario($_SESSION["id"] . "_noticia-existeEdicaoSalva.tmp", "true");

echo("".
'parent.mostrarNotificacao("Alterações salvas com sucesso.", "#117700", 2500);'.
'document.getElementById("alteracoes").innerHTML = "' . "Alterações salvas em " . $dia . "/" . $mesNumero . "/" . $ano . " às " . $hora . ":" . $minuto . '";'.
"");
}

function salvarArquivoTemporario($nome, $conteudo){
    //Configura o diretorio para salvar os arquivos de texto da edição
    $diretorioDosArquivosTemporarios = "../paginas/noticias/temp";
    
    //Salva o arquivo, o escrevendo
    $arquivo = fopen($diretorioDosArquivosTemporarios . "/" . $nome, 'w');
    fwrite($arquivo, $conteudo);
    fclose($arquivo);
}

?><file_sep>/browser/microsite/painel/ajax-query/alterar-nome-de-um-usuario.php
<?php
/*
 * script que edita o nickname de um usuário
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");
include("../../../../global/mysql/registros.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$id = mysqli_real_escape_string($DB_Registros, $_POST["id"]);
$novoNick = mysqli_real_escape_string($DB_Registros, $_POST["novoNick"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Atualiza a versão do jogo no banco de dados
    $consultaNick = mysqli_query($DB_Registros, "SELECT ID FROM Acesso WHERE Nick='$novoNick'");
    
    //Caso esse nick já exista
    if(mysqli_num_rows($consultaNick) == 1){
echo("".
'parent.mostrarNotificacao("Este nome de usuário já está a ser utilizado.", "#750000", 2500);'
."");
    }
    //Caso esse nick não exista
    if(mysqli_num_rows($consultaNick) == 0){
        $alteracaoNick = mysqli_query($DB_Registros, "UPDATE Acesso SET Nick='$novoNick' WHERE ID=$id");
echo("".
'parent.mostrarNotificacao("O nome de usuário foi aplicado com sucesso!", "#1E7200", 3000);'
."document.getElementById('nick').value = '".$novoNick."';"
."editarUsuario();"
."");
    }
}

?><file_sep>/browser/microsite/painel/paginas/listar-staffs.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Obtem os dados de membros cadastrados como Staff
$staffConsulta = mysqli_query($DB_Metadados, "SELECT Nick, Cargo, Autoridade FROM Staff");
$i = 0;
while($linha = mysqli_fetch_assoc($staffConsulta)) {
    $nick[$i] = $linha["Nick"];
    $cargo[$i] = $linha["Cargo"];
    $autoridade[$i] = $linha["Autoridade"];
    $i += 1;
}
?>

<center>
    <h3>Listar Membros da Staff</h3>
</center>

<table style="width: 100%; border-collapse: collapse; font-size: 14px;">
    <tr>
        <th style="border: 1px solid #ddd; padding: 4px; text-align: left;">Nome de Usuário</th>
        <th style="border: 1px solid #ddd; padding: 4px;">Cargo</th>
        <th style="border: 1px solid #ddd; padding: 4px; text-align: right;">Autoridade</th>
    </tr>
<?php

    for ($ii = 0; $ii < $i; $ii++) {
        $autoridadeTexto = "";
        if($autoridade[$ii] == 0){
            $autoridadeTexto = "Nenhuma";
        }
        if($autoridade[$ii] == 1){
            $autoridadeTexto = "Baixa";
        }
        if($autoridade[$ii] == 2){
            $autoridadeTexto = "Média";
        }
        if($autoridade[$ii] == 3){
            $autoridadeTexto = "Alta";
        }
        if($autoridade[$ii] == 4){
            $autoridadeTexto = "Total (CEO)";
        }
        
        //Imprime o código HTML para representar este usuário
        echo('
        <tr>
            <td style="border: 1px solid #ddd; padding: 4px;">
            '.$nick[$ii].'
            </td>
            <td style="text-align: center; border: 1px solid #ddd; padding: 4px;">
            '.$cargo[$ii].'
            </td>
            <td style="text-align: right; border: 1px solid #ddd; padding: 4px;">
            '.$autoridadeTexto.'
            </td>
        </tr>');
        }
    ?>
</table>

<!-- código javascript desta página -->
<script type="text/javascript">
</script>

<?php
$conteudoQuadroDeAviso = ('
• Estes são todos os membros cadastrados como Staff, no banco de dados.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/paginas/cadastrar-novo-jogo.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<center>
    <h3>Cadastrar Novo Jogo</h3>
</center>

<div id="formulario">
    <center>
        <form autocomplete="off">
            <input id="titulo" type="text" placeholder="Nome do Jogo" onkeyup="validarTitulo();" />
            <div id="tituloStatus" class="statusCampo"></div>
            
            <input id="versao" type="text" placeholder="Última Versão" onkeyup="validarVersao();" />
            <div id="versaoStatus" class="statusCampo"></div>
            
            <input id="pacote" type="text" placeholder="Nome do Pacote" onkeyup="validarPacote();" />
            <div id="pacoteStatus" class="statusCampo"></div>
            
            <select id="plataforma" onchange="">
                <option value="Android">Android</option>
                <option value="Fuchsia">Fuchsia</option>
                <option value="Windows">Windows</option>
            </select>
            
            <input id="link" type="text" placeholder="Link na Loja" onkeyup="validarLinkLoja();" />
            <div id="linkStatus" class="statusCampo"></div>
            
            <div class="checkboxMainContainer">
                <label class="container">
                   <div>
                   Exibir este jogo, na página inicial do site da Windsoft.
                   </div>
                   <input type="checkbox" id="exibir" onchange="validarExibir();">
                   <span class="checkmark"></span>
                </label>
            </div>
            
            <input type="button" value="Cadastrar" onclick="salvarEdicao();" />
        </form>
    </center>
</div>

<div id="jogoCadastrado" style="display: none;">
    <center>
        <img src="../imagens/sucesso.png" width="128px" />
        <br>
        <br>
        O novo jogo foi cadastrado com sucesso, no banco de dados!
        <br>
        <br>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    campoTitulo = document.getElementById("titulo");
    statusTitulo = document.getElementById("tituloStatus");
    tituloValido = false;
    function validarTitulo(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoTitulo.value.length, 30);
        
        //Desvalida
        campoTitulo.style.borderColor = "#990000";
        campoTitulo.style.borderWidth = "1px";
        statusTitulo.style.color = "#990000";
        tituloValido = false;
        
        if(campoTitulo.value == ""){
            statusTitulo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoTitulo.value.length > 30){
            statusTitulo.innerHTML = "Nome muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoTitulo.value) == true){
            statusTitulo.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoTitulo.style.borderColor = "";
        campoTitulo.style.borderWidth = "";
        statusTitulo.innerHTML = "";
        tituloValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoVersao = document.getElementById("versao");
    statusVersao = document.getElementById("versaoStatus");
    versaoValido = false;
    function validarVersao(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoVersao.value.length, 8);
        
        //Desvalida
        campoVersao.style.borderColor = "#990000";
        campoVersao.style.borderWidth = "1px";
        statusVersao.style.color = "#990000";
        versaoValido = false;
        
        if(campoVersao.value == ""){
            statusVersao.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoVersao.value.length > 8){
            statusVersao.innerHTML = "Nome de versão, muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoVersao.value) == true){
            statusVersao.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoVersao.style.borderColor = "";
        campoVersao.style.borderWidth = "";
        statusVersao.innerHTML = "";
        versaoValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoPacote = document.getElementById("pacote");
    statusPacote = document.getElementById("pacoteStatus");
    pacoteValido = false;
    function validarPacote(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoPacote.value.length, 30);
        
        //Desvalida
        campoPacote.style.borderColor = "#990000";
        campoPacote.style.borderWidth = "1px";
        statusPacote.style.color = "#990000";
        pacoteValido = false;
        
        if(campoPacote.value == ""){
            statusPacote.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoPacote.value.length > 30){
            statusPacote.innerHTML = "Nome do pacote, muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoPacote.value) == true){
            statusPacote.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoPacote.style.borderColor = "";
        campoPacote.style.borderWidth = "";
        statusPacote.innerHTML = "";
        pacoteValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoLink = document.getElementById("link");
    statusLink = document.getElementById("linkStatus");
    linkValido = false;
    function validarLinkLoja(){
        //Desvalida
        campoLink.style.borderColor = "#990000";
        campoLink.style.borderWidth = "1px";
        statusLink.style.color = "#990000";
        linkValido = false;
        
        if(campoLink.value == ""){
            statusLink.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoLink.value) == false){
            statusLink.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoLink.style.borderColor = "";
        campoLink.style.borderWidth = "";
        statusLink.innerHTML = "";
        linkValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Ao ativar/desativar exibição do jogo na home page
    checkbox = document.getElementById("exibir");
    checkboxExibir = "0";
    function validarExibir(){
        if(checkbox.checked == true){
            checkboxExibir = "1";
        }
        if(checkbox.checked == false){
            checkboxExibir = "0";
        }
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarTitulo();
        validarPacote();
        validarExibir();
        validarVersao();
        validarLinkLoja();
        
        if(tituloValido == true && pacoteValido == true && versaoValido == true && linkValido == true){
            return true;
        }
        if(tituloValido == false || pacoteValido == false || versaoValido == false || linkValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que publica o jogo
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/cadastrar-novo-jogo.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "nome=" + document.getElementById("titulo").value +
                                      "&ultimaVersao=" + document.getElementById("versao").value +
                                      "&nomeDoPacote=" + document.getElementById("pacote").value +
                                      "&plataforma=" + document.getElementById("plataforma").value +
                                      "&linkLoja=" + document.getElementById("link").value +
                                      "&exibirNoSite=" + checkboxExibir);
        }
    }
    
    //Função que exibe a mensagem de sucesso após cadastrar jogo
    function exibirMensagemJogoCadastrado(){
        document.getElementById("jogoCadastrado").style.display = "block";
        document.getElementById("formulario").style.display = "none";
        document.getElementById("quadroDeAvisos").style.display = "none";
        parent.redimensionarIframe();
    }
</script>

<?php
$conteudoQuadroDeAviso = ('
• Caso o jogo não utilize nome de pacote, use o namespace do jogo.
<br/>
• Em "Última Versão", insira a última versão em que o jogo se encontra. O Windsoft Launcher usará este dado para se orientar sobre novas versões.
<br/>
• Caso o jogo seja multiplataforma, você deverá cadastra-lo uma vez para cada plataforma.
<br/>
• Após cadastrar o jogo nessa página, faça o upload do seu ícone.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/microsite/painel/paginas/publicar-noticia.php
<?php
//Obtem o nome da página atual e adiciona o cabeçalho
$estaPagina = basename(__FILE__, ".php") . ".php";
include("includes/cabecalho.inc");
?>

<?php
//Função que verifica se o arquivo temporário de edição, existe, caso exista, retorna o seu conteúdo, se não retorna uma string vazia
function arquivoExiste($nome){
    //Configura o diretorio
    $diretorioDoArquivo = "noticias/temp/" . $nome;
    
    //Verifica sua existência
    if(file_exists($diretorioDoArquivo) == false){
        return "";
    }
    if(file_exists($diretorioDoArquivo) == true){
        return file_get_contents($diretorioDoArquivo);
    }
}

//Função que verifica se existe uma edição salva
$existeEdicaoSalva = false;
if(arquivoExiste($_SESSION["id"] . "_publicacao-existeEdicaoSalva.tmp") == true){
    if(arquivoExiste($_SESSION["id"] . "_publicacao-existeEdicaoSalva.tmp") == "true"){
        $existeEdicaoSalva = true;
    }
}
?>

<center>
    <h3>Publicar Nova Notícia</h3>
</center>

<div id="formulario" style="display: block;">
    <center>
        <form autocomplete="false">
                <input id="titulo" type="text" placeholder="Título da Notícia" onkeyup="validarTitulo();"
                       value="<?php
                            $nome = $_SESSION["id"] . "_publicacao-titulo.tmp";
                            if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                                echo(arquivoExiste($nome));
                            }
                        ?>"/>
                <div id="tituloStatus" class="statusCampo"></div>
                
                <input id="urlPagina" type="text" placeholder="URL da Página" onkeyup="validarUrlPagina();"
                       value="<?php
                            $nome = $_SESSION["id"] . "_publicacao-urlPagina.tmp";
                            if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                                echo(arquivoExiste($nome));
                            }
                        ?>"/>
                <div id="urlPaginaStatus" class="statusCampo"></div>
                
                <input id="urlCapa" type="text" placeholder="URL da Capa" onkeyup="validarUrlCapa();"
                       value="<?php
                            $nome = $_SESSION["id"] . "_publicacao-urlCapa.tmp";
                            if(arquivoExiste($nome) == true && $existeEdicaoSalva == true){
                                echo(arquivoExiste($nome));
                            }
                        ?>"/>
                <div id="urlCapaStatus" class="statusCampo"></div>

                <br>
                <br>
            
                <div id="alteracoes" style="text-align: center;">
                    <?php
                        if($existeEdicaoSalva == false){
                            echo("Nenhuma alteração salva.");
                        }
                        if($existeEdicaoSalva == true){
                            echo(arquivoExiste($_SESSION["id"] . "_publicacao-dataSalvamento.tmp"));
                        }
                    ?>
                </div>
            
                <br>
                <br>
            
                <div style="display: grid; grid-template-columns: 50% 50%; width: 80%; max-width: 300px;">
                    <input type="button" value="Salvar" style="width: calc(100% - 8px); margin: 8px 8px 8px 0px;" onclick="salvarEdicao();" />
                    <input type="button" value="Publicar" style="width: calc(100% - 8px); margin: 8px 0px 8px 8px;" onclick="publicarNoticia();" />
                </div>
        </form>
    </center>
</div>

<div id="noticiaPublicada" style="display: none;">
    <center>
        <img src="../imagens/sucesso.png" width="128px" />
        <br>
        <br>
        A notícia foi publicada com sucesso!
        <br>
        Acesse a página inicial da Windsoft Games para ver a publicação.
        <br>
        <br>
        <a href="https://windsoft.xyz" target="_blank">
            <input type="button" value="Visualizar" />
        </a>
        <br>
    </center>
</div>

<!-- código javascript desta página -->
<script type="text/javascript">
    campoTitulo = document.getElementById("titulo");
    statusTitulo = document.getElementById("tituloStatus");
    tituloValido = false;
    function validarTitulo(){
        //Exibe a contagem
        parent.exibirContadorDeCaracteres(campoTitulo.value.length, 40);
        
        //Desvalida
        campoTitulo.style.borderColor = "#990000";
        campoTitulo.style.borderWidth = "1px";
        statusTitulo.style.color = "#990000";
        tituloValido = false;
        
        if(campoTitulo.value == ""){
            statusTitulo.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(campoTitulo.value.length > 40){
            statusTitulo.innerHTML = "Título muito grande.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.contemHtml(campoTitulo.value) == true){
            statusTitulo.innerHTML = "Este campo não pode conter código HTML.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoTitulo.style.borderColor = "";
        campoTitulo.style.borderWidth = "";
        statusTitulo.innerHTML = "";
        tituloValido = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlPagina = document.getElementById("urlPagina");
    statusUrlPagina = document.getElementById("urlPaginaStatus");
    urlPaginaValida = false;
    function validarUrlPagina(){
        //Desvalida
        campoUrlPagina.style.borderColor = "#990000";
        campoUrlPagina.style.borderWidth = "1px";
        statusUrlPagina.style.color = "#990000";
        urlPaginaValida = false;
        
        if(campoUrlPagina.value == ""){
            statusUrlPagina.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlPagina.value) == false){
            statusUrlPagina.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlPagina.style.borderColor = "";
        campoUrlPagina.style.borderWidth = "";
        statusUrlPagina.innerHTML = "";
        urlPaginaValida = true;
    
        parent.redimensionarIframe();
    }
    
    campoUrlCapa = document.getElementById("urlCapa");
    statusUrlCapa = document.getElementById("urlCapaStatus");
    urlCapaValido = false;
    function validarUrlCapa(){
        //Desvalida
        campoUrlCapa.style.borderColor = "#990000";
        campoUrlCapa.style.borderWidth = "1px";
        statusUrlCapa.style.color = "#990000";
        urlCapaValido = false;
        
        if(campoUrlCapa.value == ""){
            statusUrlCapa.innerHTML = "Por favor, preencha este campo.";
            parent.redimensionarIframe();
            return;
        }
        
        if(parent.pareceComUrl(campoUrlCapa.value) == false){
            statusUrlCapa.innerHTML = "O conteúdo digitado não é uma URL.";
            parent.redimensionarIframe();
            return;
        }
        
        //Deixa como válido caso não haja nenhum problema
        campoUrlCapa.style.borderColor = "";
        campoUrlCapa.style.borderWidth = "";
        statusUrlCapa.innerHTML = "";
        urlCapaValido = true;
    
        parent.redimensionarIframe();
    }
    
    //Função que verifica se todos os campos estão válidos
    function todosOsCamposEstaoValidos(){
        validarTitulo();
        validarUrlPagina();
        validarUrlCapa();
        
        if(tituloValido == true && urlPaginaValida == true && urlCapaValido == true){
            return true;
        }
        if(tituloValido == false || urlPaginaValida == false || urlCapaValido == false){
            parent.mostrarNotificacao("Verifique o formulário em busca de erros e tente novamente.", "#750000", 3000);
            return false;
        }
    }
    
    //Função que salva o conteúdo digitado, no servidor, através do ajax
    function salvarEdicao(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/salvar-edicao-publicar-noticia.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {                    
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "titulo=" + document.getElementById("titulo").value +
                                      "&urlPagina=" + document.getElementById("urlPagina").value +
                                      "&urlCapa=" + document.getElementById("urlCapa").value);
        }
    }
    
    //Função que publica a noticia
    function publicarNoticia(){
        if(todosOsCamposEstaoValidos() == false){
            return;   
        }
        if(todosOsCamposEstaoValidos() == true){
            parent.mostrarSpinner(true);
            
            //Cria a conexão para salvar os dados
            var conexao = parent.novaConexaoPost("ajax-query/publicar-noticia.php");
            conexao.onreadystatechange = function(){
                parent.mostrarSpinner(false);
                
                //Processa o resultado (1º erro, 2º sucesso)
                parent.definirFuncaoDeSucessoOuErro(conexao,
                function()
                {
                    parent.mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
                },
                function()
                {
                    eval(parent.textoDaConexao(conexao));
                });
            };
            parent.iniciarConexaoPost(conexao,
                                      "titulo=" + document.getElementById("titulo").value +
                                      "&urlPagina=" + document.getElementById("urlPagina").value +
                                      "&urlCapa=" + document.getElementById("urlCapa").value);
        }
    }
    
    //Função que exibe a mensagem de sucesso após criar arquivo de notícia
    function exibirMensagemNoticiaPublicada(){
        document.getElementById("noticiaPublicada").style.display = "block";
        document.getElementById("formulario").style.display = "none";
        document.getElementById("quadroDeAvisos").style.display = "none";
        parent.redimensionarIframe();
    }
</script>

<?php
$conteudoQuadroDeAviso = ('
• Ao publicar esta noticia, a mesma será colocada no primeiro slide, em primeiro lugar. A noticia que estava em primeiro irá ocupar o segundo lugar, e assim sucessivamente.
<br/>
• A imagem de capa deve ter uma resolução de 400x400 para melhor posicionamento e exibição no browser e apps.
');
?>

<!-- Código do rodapé -->
<?php include("includes/rodape.inc"); ?><file_sep>/browser/noticias/por-data/2018/08/24/Envie-sua-opinio.php
<!DOCTYPE html>
<html>
<head>
<!-- Meta tags do Facebook, Google e LinkedIn -->
<meta property="og:title" content="Windsoft Notícias: Envie sua opinião!" />
<meta property="og:type" content="article" />
<meta property="og:image" content="https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/IMG-101223.jpg" />
<meta property="og:image:width" content="400px" />
<meta property="og:image:height" content="400px" />
<meta property="og:url" content="https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/<?php echo basename($_SERVER['PHP_SELF']); ?>?b" />
<meta property="og:description" content="Utilize o app do Windsoft Club e envie sua opinião!" />
<meta property="fb:app_id" content="1100512010112474" />
    
<link media="screen and (min-width: 128px)">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#1E90FF">
<link rel="icon" href="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/favicon.ico" type="image/x-icon" />
<title>Envie sua opinião! - Windsoft Notícias</title>

<style>
    html, body {
        height: 100%;
    }
    body {
        padding: 0;
	background-color: #d6d6d6;
        margin: 0 auto !important;
	background-repeat: no-repeat;
        background-size: 100% 100%;
	font-family: gotham, arial, helvetica, sans-serif;
        font-size: 12px;
    }
    hr {
        border: 0;
        height: 1px;
        background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(206, 206, 206, 0.75), rgba(0, 0, 0, 0));
    }
    a {
        text-decoration: none;
	color: #3068c1;
    }
    a:link {
	text-decoration: none;
	color: #3068c1;
    }
    a:hover {
	color: #404144;
    }
    a:visited {
	color: #3068c1;
	text-decoration:none;
    }
    .card{
	margin-top: 10px;
	margin-bottom: 10px;
	background-color: #f9f9f9;
	max-width: 500px;
	width: 95%;
	box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
	border-radius: 6px;
        display: block;
	margin-left: auto;
	margin-right: auto;
    }
    .cardConteudo{
	padding: 8px 8px 8px 8px;
        overflow: auto;
    }
    .capaFundo{
    	width: auto;
	height: 200px;
	border-top-left-radius: 6px;
	border-top-right-radius: 6px;
	background-image: url(https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/IMG-101223.jpg);
	margin: -8px;
	background-size: cover;
	background-position: center center;
    }
    .capaEscurecimento{
	background-color: rgba(0, 0, 0, 0.7);
	width: 100%;
	height: 100%;
	border-top-left-radius: 6px;
	border-top-right-radius: 6px;
    }
    .capaConteudo{
    	color: white;
	text-align: center;
	position: relative;
	top: 50%;
	transform: translateY(-50%);
	margin-left: 10px;
	margin-right: 10px;
	font-size: 18px;
	font-weight: bolder;
    }
    .dadosPostagem{
    	display: inline-block;
    }
    .iconsRedeSocial{
    	display: inline-block;
	cursor: pointer;
    }
    .redesSociaisCaixa{
        border-color: #375584;
        border-width: 1px;
        border-style: solid;
        border-radius: 5px;
        width: 250px;
        height: 150px;
    }
    .redesSociaisCaixaShare{
        display: inline-block;
        width: 124px;
        height: 100%;
        float: left;
    }
    .redesSociaisCaixaLike{
        display: inline-block;
        width: 124px;
        height: 100%;
        float: left;
    }
    .redesSociaisSeparador{
        background-color: #375584;
        display: inline-block;
        width: 1px;
        height: 100%;
        float: left;
    }
    .botaoBaixarApp{
        background-color: #d16830;
        border-radius: 5px;
        width: 120px;
        height: 40px;
        text-align: center;
        text-weight: bolder;
        color: white;
        cursor: pointer;
        padding-left: 7px;
        padding-right: 10px;
    }
    .botaoBaixarApp:hover{
        background-color: #1a5b1e;
        background-size: 100%;
        border-radius: 5px;
        box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
    }
    .botaoDireita{
        float: right;
        display: inline-block;
        cursor: pointer;
    }
    .botaoDireita:hover{
        background-color: #9b9b9b;
        border-radius: 32px;
    }
    .conteudoExclusivoBrowsers{
	display: <?php if(isset($_GET["b"])){ echo("block"); } else{ echo("none"); } ?>;
        
    }
</style>
</head>
<body>
<!-- Toolbar e Logotipo. SÓ SÃO EXIBIDAS COM A VARIAVEL b SETADA NA URL -->
<div class="conteudoExclusivoBrowsers">
    <center>
        <img src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Logo.png" width="250" height="46" style="margin-top: 10px;"/>
    </center>
    <div class="card">
        <div class="cardConteudo">
            <div style="float: left; display: inline-block;">
                <a href="https://windsoft.xyz">
                    <div class="botaoBaixarApp">
                        <div style="position: relative; top: 50%; transform: translateY(-45%); float: left;">
                            <img src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/DownloadApp.png" width="20px" height="20px" />
                        </div>
                        <div style="position: relative; top: 50%; transform: translateY(-50%); float: right;">
                            Baixe nosso App!
                        </div>
                    </div>
                </a>
            </div>
            <div class="botaoDireita">
                <a href="https://windsoft.xyz">
                    <img src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Home.png" width="32px" height="32px" style="margin: 2px;" />
                </a>
            </div>
        </div>
    </div>
</div>
<!-- Corpo da notícia -->
<div class="card">
    <div class="cardConteudo">
    	<div class="capaFundo">
            <div class="capaEscurecimento">
		<div class="capaConteudo">
                    Envie sua opinião!
		</div>
            </div>
	</div>
	<center>
	<br/>
	<div class="dadosPostagem">
            <img src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Data.png" width="25px" height="25px" style="opacity: 0.6;" />
	</div>
	<div class="dadosPostagem">
            <div style="position: relative; top: 50%; transform: translateY(-50%);">
		24 de Ago de 2018 ás 12:53
            </div>
	</div>
	<div class="dadosPostagem">
            <img src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Autor.png" width="25px" height="25px" style="opacity: 0.6;" />
	</div>
	<div class="dadosPostagem">
            <div style="position: relative; top: 50%; transform: translateY(-50%);">
		marcos4503 (CEO)
            </div>
	</div>
	</center>
	<br/>
	<br/>
	<center>
            Utilize o app do Windsoft Club e envie sua opinião!
        </center>
	<br/>
	<br/>
	<center>
            <h2>Nós valorizamos a sua opinião</h2>
	</center>
            Sua opinião é muito importante para nós, afinal fazemos jogos para você! Se você tem uma sugestão ou opinião sobre nossos produtos, por gentileza, utilize o botão de enviar opinião que fica no canto inferiro do app do Windsoft Club!
<br/>
<br/>Enviando sua opinião, nós saberemos onde devemos melhorar e onde devemos investir para continuar agradando a todos os nossos fãs. Obrigado por estar com a gente! &#x2764
	<center>
            <h2></h2>
	</center>
            
	<center>
            <h2></h2>
	</center>
            
	<br/>
	<br/>
        <br/>
	<center>
            <div class="redesSociaisCaixa">
                <div class="redesSociaisCaixaLike">
                    <br/>
                    <b>Curta a Windsoft Games!</b>
                    <div style="position: relative; top: 50%; transform: translateY(-85%);">
                        <!-- Botão de curtir -->
                        <div id="fb-root"></div>
                        <script>(function(d, s, id) {
                          var js, fjs = d.getElementsByTagName(s)[0];
                          if (d.getElementById(id)) return;
                          js = d.createElement(s); js.id = id;
                          js.src = 'https://connect.facebook.net/pt_BR/sdk.js#xfbml=1&version=v3.1&appId=1100512010112474&autoLogAppEvents=1';
                          fjs.parentNode.insertBefore(js, fjs);
                        }(document, 'script', 'facebook-jssdk'));</script>
                        <div class="fb-like" data-href="https://www.facebook.com/windsoft.games/" data-width="100" data-layout="box_count" data-action="like" data-size="large" data-show-faces="false" data-share="false"></div>
                    </div>
                </div>
                <div class="redesSociaisSeparador"></div>
                <div class="redesSociaisCaixaShare">
                    <br/>
                    <b>Compartilhe esta Notícia!</b>
                    <div style="position: relative; top: 50%; transform: translateY(-70%); width: 100px;">
                        <!-- Botao Facebook -->
                        <img class="iconsRedeSocial" src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Facebook.png" width="40px" height="40px" style="margin-right: 5px;"
                        onclick="AbrirPopUp('https://www.facebook.com/sharer/sharer.php?u=https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/<?php echo basename($_SERVER['PHP_SELF']); ?>%3Fb')"/>
                        <!-- Botao Google+ -->
                        <img class="iconsRedeSocial" src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Google+.png" width="40px" height="40px" style="margin-right: 5px;"
                        onclick="AbrirPopUp('https://plus.google.com/share?url=https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/<?php echo basename($_SERVER['PHP_SELF']); ?>%3Fb')" />
                        <!-- Botao LinkedIn -->
                        <img class="iconsRedeSocial" src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/LinkedIn.png" width="40px" height="40px" style="margin-right: 5px; margin-top: 5px;"
                        onclick="AbrirPopUp('https://www.linkedin.com/shareArticle?mini=true&url=https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/<?php echo basename($_SERVER['PHP_SELF']); ?>%3Fb&title=Veja%20esta%20notícia%20do%20Windsoft%20Notícias!')" />
                        <!-- Botao Twitter -->
                        <img class="iconsRedeSocial" src="https://windsoft.xyz/Club/Noticias/ArquivosGlobais/Twitter.png" width="40px" height="40px"
                        onclick="AbrirPopUp('https://twitter.com/intent/tweet?text=Veja%20esta%20notícia%20do%20Windsoft%20Notícias!%20https://windsoft.xyz/Club/Noticias/PorData/2018/08/24/<?php echo basename($_SERVER['PHP_SELF']); ?>?b')" />
                    </div>
                </div>
            </div>
        <!-- Abrir popup -->
        <script>
            function AbrirPopUp(URL){
                window.open(URL, 'targetWindow', 'toolbar=no, location=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=450px, height=450px')
            }
        </script>
	</center>
	<br/>
	<br/>
        <br/>
        <br/>
        <br/>
    </div>
</div>
<!-- Rodapé da notícia. SÓ SÃO EXIBIDAS COM A VARIAVEL b SETADA NA URL -->
<div class="conteudoExclusivoBrowsers">
    <div class="card">
    	<div class="cardConteudo">
            <center>
		<a href="https://windsoft.xyz/">Nosso Site</a>
		 • 
		<a href="https://windsoft.xyz/link/termos">Termos de Uso</a>
		 • 
		<a href="https://windsoft.xyz/link/privacidade">Política de Privacidade</a>
		 • 
		<a href="https://windsoft.xyz/link/sobre">Sobre Nós</a>
		<br/>
		<br/>
		Windsoft Games - 2018
            <center>
	</div>
    </div>
</div>
<?php
//Registra a estatística de notícia aberta. Fica no fim para não influenciar a renderição do documento e suas META TAGS
include("../../../../../ConexoesMySQL/ClubMainAbrir.php");
$ConsultaDeIncrementacaoEstatistica = mysqli_query($ConexaoMain, "UPDATE ClubNoticiasEstatisticas SET NoticiasAbertas24Hrs = NoticiasAbertas24Hrs + 1, NoticiasAbertasSemana = NoticiasAbertasSemana + 1, NoticiasAbertasMes = NoticiasAbertasMes + 1 WHERE Idade='Atual'");
include("../../../../../ConexoesMySQL/ClubMainFechar.php");
?>﻿
</body>
</html><file_sep>/browser/ajax-query/efetuar-login.php
<?php
/*
 * script que faz consulta de login ao banco de dados
 */

include("../../global/sessoes/criador-de-sessao.inc");
include("../../global/mysql/registros.inc");
include("../../global/mysql/metadados.inc");

//Obtem as variaveis
$nick = mysqli_real_escape_string($DB_Registros, $_POST["nick"]);
$senha = MD5($_POST["senha"]);

//Consulta de autenticacao do login
$consultaDeAutenticacao = mysqli_query($DB_Registros, "SELECT ID, Senha, Email, Banimento, SuspensaoDias, SuspensaoMotivo, DataCriacao_Millis FROM Acesso WHERE Nick = '$nick'");
$dadosAutenticacao = mysqli_fetch_array($consultaDeAutenticacao);

$htmlMensagem = "
<div style=\"width: 80%; padding-top: 20px; padding-bottom: 20px; border-radius: 6px; margin-left: auto; margin-right: auto; max-width: 300px; background-color: #AD0000; color: #F4F4F4; animation-name: tremerDiv; animation-duration: 600ms;\">
    %MENSAGEM%
</div>
<br>
";

//Realiza a autenticação
if(mysqli_num_rows($consultaDeAutenticacao) == 0){
    echo(str_replace(array("%MENSAGEM%"), array("Usuário ou senha inválidos"), $htmlMensagem));
}
if(mysqli_num_rows($consultaDeAutenticacao) == 1){
    //Caso a senha não bata
    if($dadosAutenticacao[1] != $senha){
        echo(str_replace(array("%MENSAGEM%"), array("Usuário ou senha inválidos"), $htmlMensagem));
    }
    //Caso a senha bata
    if($dadosAutenticacao[1] == $senha){
        //Verifica se existe alguma punição na conta
        if($dadosAutenticacao[3] != ""){
            echo(str_replace(array("%MENSAGEM%"), array("Sua conta foi banida pelo motivo abaixo<br><br>" . $dadosAutenticacao[3]), $htmlMensagem));
            exit();
        }
        if($dadosAutenticacao[4] > 0){
            echo(str_replace(array("%MENSAGEM%"), array("Sua conta foi suspensa por ".$dadosAutenticacao[4]." dias pelo motivo abaixo<br><br>" . $dadosAutenticacao[5]), $htmlMensagem));
            exit();
        }
        
        //Obtem a hora atual em millis
        $dataAtual = round(microtime(true) * 1000);
        
        //Obtem os dados de perfil da conta
        $consultaPerfil = mysqli_query($DB_Registros, "SELECT IdCapa, IdIcone FROM Perfis WHERE ID=$dadosAutenticacao[0]");
        $dadosPerfil = mysqli_fetch_array($consultaPerfil);
        
        //Obtem os dados de permissão
        $consultaPermissao = mysqli_query($DB_Metadados, "SELECT Cargo, Autoridade FROM Staff WHERE Nick='$nick'");
        $dadosPermissao = mysqli_fetch_array($consultaPermissao);
        
        //Atualiza a data de ultimo login
        $atualizaUltimoLogin = mysqli_query($DB_Registros, "UPDATE Perfis SET UltimoLogin_Millis=$dataAtual WHERE ID=$dadosAutenticacao[0]");
        
        //Cria a sessão
        CriarNovaSessao($dadosAutenticacao[0], $nick);
        
        //Passa os dados para o cache
        $_SESSION["email"] = $dadosAutenticacao[2];
        $_SESSION["idIcone"] = $dadosPerfil[1];
        $_SESSION["idCapa"] = $dadosPerfil[0];
        $_SESSION["dataCriacaoMillis"] = $dadosAutenticacao[6];
        
        //Grava os dados de permissão no cache
        if(mysqli_num_rows($consultaPermissao) == 0){
            $_SESSION["cargo"] = "Usuário";
            $_SESSION["autoridade"] = 0;
        }
        if(mysqli_num_rows($consultaPermissao) == 1){
            $_SESSION["cargo"] = $dadosPermissao[0];
            $_SESSION["autoridade"] = $dadosPermissao[1];
        }
        
        //Executa a consulta para incrementar as estatisticas
        $consultaEstatistica = mysqli_query($DB_Metadados, "UPDATE LoginsStats SET LoginsDia = LoginsDia + 1, LoginsSem = LoginsSem + 1, LoginsMes = LoginsMes + 1 WHERE Idade='Atual'");
        
        echo("
             <script type=\"text/javascript\" id=\"scriptRetornado\">
                window.location.href = \"https://windsoft.xyz\";
             </script>
             ");
    }
}

?><file_sep>/browser/microsite/painel/ajax-query/lancar-nova-notificacao.php
<?php
/*
 * script que lança uma nova notificação
 */

include("../../../../global/sessoes/verificador-de-sessao.inc");
include("../../../../global/mysql/metadados.inc");

//Verifica a sessão
VerificarSessao(true, false);

//Variaveis do script
$texto = mysqli_real_escape_string($DB_Metadados, $_POST["texto"]);

//Verificar se o usuário é da staff
if($_SESSION["autoridade"] > 0){
    //Configura a data
    date_default_timezone_set('America/Sao_Paulo');
    $Date = date('Y-m-d H:i:s', time());
    $Data = date('Y-m-d', time());
    $Hora = date('H:i:s', time());
    
    //Obtem a data atual em millis
    $dataAtual = strtotime($Date) * 1000;
    
    //Publica a notificação
    $consultaLancamento = mysqli_query($DB_Metadados, "UPDATE Notificacao SET Texto='$texto', DataDeEnvio_Millis=$dataAtual WHERE Canal='Global'");
    
    //Redefine a contagem de recebimentos da atual notificação para zero
    $consultaRedefinirStats = mysqli_query($DB_Metadados, "UPDATE NotificacaoStats SET Recebimentos=0 WHERE Canal='Global'");
    
echo("".
'parent.mostrarNotificacao("A notificação foi publicada com êxito!", "#117700", 5000);'.
"");
}

?><file_sep>/browser/microsite/painel/paginas/includes/mt-assets-historico-de-vendas.inc
<?php
//Obtem os dados de todos os assets cadastrados
$consultaDeAssets = mysqli_query($DB_Metadados, "SELECT ID, Nome, PrecoAtual, VendasPorData_Json, DataPublicacao FROM AssetStore");
$i = 1;
while($linha = mysqli_fetch_assoc($consultaDeAssets)) {
    $id[$i] = $linha["ID"];
    $nome[$i] = $linha["Nome"];
    $precoAtual[$i] = $linha["PrecoAtual"];
    $vendasPorDataJson[$i] = $linha["VendasPorData_Json"];
    $dataPublicacao[$i] = $linha["DataPublicacao"];
    $i += 1;
}

//Faz uma varredura em cada asset
for ($x = 1; $x < $i; $x++) {
    //Caso esse armazenamento esteja vazio, cria o armazenamento
    if($vendasPorDataJson[$x] == ""){
        $vendasPorDataJson[$x] = json_encode(CriarArmazenamento());
        $consultaCriacao = mysqli_query($DB_Metadados, "UPDATE AssetStore SET VendasPorData_Json='$vendasPorDataJson[$x]' WHERE ID=$x");
    }
    //Caso esse armazenamento não tenha esse ano, adiciona este ano a ele
    if(ObterAnoApartirDoArmazenamento($vendasPorDataJson[$x], date("Y")) == ""){
        $vendasPorDataJson[$x] = json_encode(AdicionarAnoAoArmazenamento($vendasPorDataJson[$x]));
        $consultaAdicaoAno = mysqli_query($DB_Metadados, "UPDATE AssetStore SET VendasPorData_Json='$vendasPorDataJson[$x]' WHERE ID=$x");
    }
}

//-------- Métodos de Leitura ------------

//Método que obtem as vendas deste mes, de um determinado asset
function ObterVendasDesteMes($armazenamento){
    $arrayObjetosAno = json_decode($armazenamento)->anosArmazenados;
    for ($x = 0; $x < count($arrayObjetosAno); $x++) {
        if($arrayObjetosAno[$x]->numeroAno == date("Y")){
            $anoSelecionado = $arrayObjetosAno[$x];
        }
    }
    $mesSelecionado = $anoSelecionado->mesesDoAno[(int)(date("n")) - 1];
    $diasDesteMes = $mesSelecionado->diasDoMes;
    $vendasDesteMes = 0;
    for ($x = 0; $x < count($diasDesteMes); $x++) {
        $vendasDesteMes += $diasDesteMes[$x]->quantiaDeVendas;
    }
    return $vendasDesteMes;
}

//Método que obtem as vendas de hoje, de um determinado asset
function ObterVendasDeHoje($armazenamento){
    $arrayObjetosAno = json_decode($armazenamento)->anosArmazenados;
    for ($x = 0; $x < count($arrayObjetosAno); $x++) {
        if($arrayObjetosAno[$x]->numeroAno == date("Y")){
            $anoSelecionado = $arrayObjetosAno[$x];
        }
    }
    $mesSelecionado = $anoSelecionado->mesesDoAno[(int)(date("n")) - 1];
    $diaSelecionado = $mesSelecionado->diasDoMes[(int)(date("j")) - 1];
    return $diaSelecionado->quantiaDeVendas;
}

//Método que obtem a receita gerada hoje, de um determinado asset
function ObterReceitaDeHoje($armazenamento){
    $arrayObjetosAno = json_decode($armazenamento)->anosArmazenados;
    for ($x = 0; $x < count($arrayObjetosAno); $x++) {
        if($arrayObjetosAno[$x]->numeroAno == date("Y")){
            $anoSelecionado = $arrayObjetosAno[$x];
        }
    }
    $mesSelecionado = $anoSelecionado->mesesDoAno[(int)(date("n")) - 1];
    $diaSelecionado = $mesSelecionado->diasDoMes[(int)(date("j")) - 1];
    return $diaSelecionado->receitaDoDia;
}

//Método que obtem um objeto "Ano" a partir do armazenamento
function ObterAnoApartirDoArmazenamento($armazenamento, $anoDesejado){
    $arrayObjetosAno = json_decode($armazenamento)->anosArmazenados;
    for ($x = 0; $x < count($arrayObjetosAno); $x++) {
        if($arrayObjetosAno[$x]->numeroAno == $anoDesejado){
            return $arrayObjetosAno[$x];
        }
    }
    $vazio = "";
    return $vazio;
}

//-------- Métodos de Escrita ------------

//Metodo que adiciona mais um objeto "Ano" a um armazenamento já existente
function AdicionarAnoAoArmazenamento($armazenamentoJson){
    //Cria uma array de objetos "Dia"
    $arrayObjetosDia = array();
    for ($x = 0; $x < 31; $x++) {
        $objetoDia = new stdClass;
        $objetoDia->receitaDoDia = 0;
        $objetoDia->quantiaDeVendas = 0;
        array_push($arrayObjetosDia, $objetoDia);
    }

    //Cria uma array de objetos "Mes" para que seja armazenados 31 objetos "Dia"
    $arrayObjetosMes = array();
    for ($x = 0; $x < 12; $x++) {
        $objetoMes = new stdClass;
        $objetoMes->diasDoMes = $arrayObjetosDia;
        array_push($arrayObjetosMes, $objetoMes);
    }
    
    //Cria um objeto "Ano" para que sejam armazenados 12 objetos "Mes"
    $objetoAno = new stdClass;
    $objetoAno->numeroAno = date("Y");
    $objetoAno->mesesDoAno = $arrayObjetosMes;
    
    //Lê o objeto "Armazenamento", adiciona o ano atual e retorna o "Armazenamento" atualizado
    $armazenamento = json_decode($armazenamentoJson);
    $arrayObjetosAno = $armazenamento->anosArmazenados;
    array_push($arrayObjetosAno, $objetoAno);
    $armazenamento->anosArmazenados = $arrayObjetosAno;
    return $armazenamento;
}

//Metodo que cria o armazenamento para guardar objetos "Ano"
function CriarArmazenamento(){
    //Cria uma array de objetos "Dia"
    $arrayObjetosDia = array();
    for ($x = 0; $x < 31; $x++) {
        $objetoDia = new stdClass;
        $objetoDia->receitaDoDia = 0;
        $objetoDia->quantiaDeVendas = 0;
        array_push($arrayObjetosDia, $objetoDia);
    }

    //Cria uma array de objetos "Mes" para que seja armazenados 31 objetos "Dia"
    $arrayObjetosMes = array();
    for ($x = 0; $x < 12; $x++) {
        $objetoMes = new stdClass;
        $objetoMes->diasDoMes = $arrayObjetosDia;
        array_push($arrayObjetosMes, $objetoMes);
    }
    
    //Cria um objeto "Ano" para que sejam armazenados 12 objetos "Mes"
    $objetoAno = new stdClass;
    $objetoAno->numeroAno = date("Y");
    $objetoAno->mesesDoAno = $arrayObjetosMes;
    
    //Cria o objeto de "Armazenamento" (armazenando primeiramente, o ano atual) e o retorna
    $arrayObjetosAno = array();
    array_push($arrayObjetosAno, $objetoAno);
    $objetoArmazenamento = new stdClass;
    $objetoArmazenamento->anosArmazenados = $arrayObjetosAno;
    return $objetoArmazenamento;
}
?><file_sep>/browser/login.php
<?php
/*
 * Essa é a página de login do site da Windsoft Games
 */

$tituloPagina = "Login - Windsoft Games";
$exibirLogsDeDepuracaoDoPHP = false;
include("includes/cabecalho.inc");
RedirecionarParaHomeCasoEstejaLogado();
?>

<center>
    <br/>
    <h3>Entrar com sua conta da Windsoft</h3>
    <br/>
    <div id="respostaLogin">
    </div>
    <form autocomplete="off" id="formularioLogin">
        <input type="text" id="nick" placeholder="Nome de usuário" autocorrect="off" autocapitalize="none">
        <br/>
        <input type="password" id="senha" placeholder="<PASSWORD>">
        <br/>
        <div class="checkboxMainContainer">
           <label class="container">
              <div>
              Mantenha meu nome de usuário salvo para futuros logins.
              </div>
              <input type="checkbox" id="manterNick">
              <span class="checkmark"></span>
           </label>
        </div>
        <br/>
        <br>
        <input type="button" value="Entrar" onclick="consultarLogin();">
    </form>
    <br>
    <small>
        <a href="https://windsoft.xyz/browser/recuperar.php">Esqueceu sua senha?</a>
         - 
        <a href="https://windsoft.xyz/browser/registrar.php">Crie sua conta!</a>
    </small>
</center>

<!-- Javascript da página -->
<script type"text/javascript">
    //Inicio
    campoNick = document.getElementById("nick");
    campoSenha = document.getElementById("senha");
    respostaLogin = document.getElementById("respostaLogin");
    
    //Caso tenha um nickname salvo no navegador, o restaura
    if(localStorage.getItem("nick") != null){
        campoNick.value = localStorage.getItem("nick");
        document.getElementById("manterNick").checked = true;
    }
    
    function consultarLogin(){
        //Salva o nick caso seja desejado
        if(document.getElementById("manterNick").checked == true){
            localStorage.setItem("nick", campoNick.value);
        }
        //Remove o nick caso não seja necessário
        if(document.getElementById("manterNick").checked == false){
            localStorage.removeItem("nick");
        }
        
        //Verifica se os campos forão preenchidos
        if(campoNick.value == "" || campoSenha.value == ""){
            mostrarNotificacao("Por favor, preencha todos os campos.", "#750000", 2000);
            return;
        }
        
        respostaLogin.innerHTML = "";
        mostrarSpinner(true);
        
        //Cria a conexão e inicia
        var conexao = novaConexaoPost("ajax-query/efetuar-login.php");
        conexao.onreadystatechange = function(){
            mostrarSpinner(false);
            
            //Processa o resultado (1º erro, 2º sucesso)
            definirFuncaoDeSucessoOuErro(conexao,
            function()
            {
                mostrarNotificacao("Erro de conexão, tente novamente.", "#750000", 3500);
            },
            function()
            {
                respostaLogin.innerHTML = textoDaConexao(conexao);
                eval(document.getElementById("scriptRetornado").innerHTML);
            });
        };
        iniciarConexaoPost(conexao, "nick=" + campoNick.value + "&senha=" + campoSenha.value);
    }
</script>
 
<?php
include("includes/rodape.inc");
?>