PHP Classes

File: index.php

Recommend this page to a friend!
  Classes of Rodrigo Faustino   Fast Pages   index.php   Download  
File: index.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Fast Pages
Generate HTML for several types of pages
Author: By
Last change:
Date: 11 days ago
Size: 9,773 bytes
 

Contents

Class file image Download
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <title>Gerenciador de Páginas</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <link href="public/css/materialize.css" rel="stylesheet">
    <link href="public/css/style.css" type="text/css" rel="stylesheet" media="screen,projection"/>
    <style>
.step {
    display: none;
}
.step.active {
    display: block;
}
#splashScreen {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #rgba(0, 0, 25, 0.6);
    backdrop-filter: blur(20px);
    z-index: 9999;
  }
 
  #loading {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 200px;
    transform: translate(-50%, -50%);
    text-align: center;
  }
 
  #loadingBar {
    width: 80%;
    height: 20px;
    margin: 20px auto;
    border: 1px solid #ddd;
    border-radius: 10px;
    overflow: hidden;
  }
 
  #loadingPercentage {
    width: 0%;
    height: 100%;
    background-color: yellow;
    border-top: solid 8px teal;
    border-bottom: solid 8px blue;
  }
    </style>
</head>
<body>
<?php
$results
= [];
function
limit_requests($ip, $limit, $time_window) {
   
$requests = file_get_contents('requests.json');
   
$requests = json_decode($requests, true);

    if (!isset(
$requests[$ip])) {
       
$requests[$ip] = array(time());
    } else {
        foreach (
$requests[$ip] as $key => $time) {
            if (
$time < time() - $time_window) {
                unset(
$requests[$ip][$key]);
            }
        }
        if (
count($requests[$ip]) >= $limit) {
            return
false;
        }
       
$requests[$ip][] = time();
    }
   
file_put_contents('requests.json', json_encode($requests));
    return
true;
}
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
$dia=3600*24;
$details = json_decode(file_get_contents("http://ip-api.com/json/{$ip}"));
if (!
limit_requests($ip, 5, $dia)) {
   
$results = "
    <div id='menu-container'></div>
    <div id='splashScreen' >
    <div id='loading'>
        <p>Você excedeu o limite de solicitações. </p>
            <div class='progress'>
            <div class='indeterminate'></div>
        </div>
        <p>Por favor volte, amanhã</p>
    </div>
</div>
<script src='js/menuAndFooter.js'></script>
<div id='footer-container'></div>
    "
;
    echo
$results;
   exit;
}
?>
<div id="menu-container"></div>
<div class="container">
    <h3>Gerenciador de Páginas</h3>
    <form id="multi-step-form" action="gerar_paginas.php" method="post" enctype="multipart/form-data">
        <div class="step active" id="step-1" style="height:250px">
            <div class="input-field">
                <input type="number" name="num_pages" id="num_pages" required>
                <label for="num_pages">Quantas páginas?</label>
            </div>
            <button type="button" class="btn waves-effect waves-light" onclick="nextStep()">Próximo <i class="material-icons">arrow_forward</i></button>
        </div>

        <div class="step" id="step-2">
            <div id="pages-section"></div>
            <button type="button" class="btn waves-effect waves-light" onclick="prevStep()"><i class="material-icons">arrow_back</i> Voltar</button>
            <button type="button" class="btn waves-effect waves-light" onclick="nextStep()">Próximo <i class="material-icons">arrow_forward</i></button>
        </div>

        <div class="step" id="step-3">
            <div id="sections-content"></div>
            <button type="button" class="btn waves-effect waves-light" onclick="prevStep()"><i class="material-icons">arrow_back</i> Voltar</button>
            <button type="submit" class="btn waves-effect waves-light">Gerar Páginas <i class="material-icons">cloud_download</i></button>
        </div>
    </form>
</div>

<script src="public/js/materialize.min.js"></script>
<script src="js/menuAndFooter.js"></script>
        <div id="footer-container"></div>
<script>
    let currentStep = 1;
    const form = document.getElementById('multi-step-form');

    function nextStep() {
        if (validateStep(currentStep)) {
            currentStep++;
            showStep(currentStep);
        }
    }

    function prevStep() {
        currentStep--;
        showStep(currentStep);
    }

    function showStep(step) {
        const steps = document.querySelectorAll('.step');
        steps.forEach(step => step.classList.remove('active'));
        document.getElementById('step-' + step).classList.add('active');
        if (step === 2) {
            createPagesForm();
        }
        if (step === 3) {
            createSectionsForm();
        }
    }

    function validateStep(step) {
        if (step === 1) {
            const numPages = document.getElementById('num_pages').value;
            return numPages > 0;
        } else if (step === 2) {
            const pagesSection = document.getElementById('pages-section');
            const inputs = pagesSection.querySelectorAll('input');
            for (let input of inputs) {
                if (!input.checkValidity()) {
                    input.reportValidity();
                    return false;
                }
            }
        } else if (step === 3) {
            const sectionsContent = document.getElementById('sections-content');
            const inputs = sectionsContent.querySelectorAll('input, textarea, select');
            for (let input of inputs) {
                if (!input.checkValidity()) {
                    input.reportValidity();
                    return false;
                }
            }
        }
        return true;
    }

    function createPagesForm() {
        const numPages = document.getElementById('num_pages').value;
        const pagesSection = document.getElementById('pages-section');
        pagesSection.innerHTML = '';
        for (let i = 1; i <= numPages; i++) {
            pagesSection.innerHTML += `
                <div class="input-field">
                    <input type="text" name="pagina[${i}][name]" required>
                    <label for="page_name_${i}">Nome da Página ${i}</label>
                </div>
                <div class="input-field">
                    <input type="number" name="pagina[${i}][num_sections]" required>
                    <label for="num_sections_${i}">Quantas Seções na Página ${i}?</label>
                </div>
            `;
        }
        M.updateTextFields();
    }

    function createSectionsForm() {
        const formData = new FormData(form);
        const numPages = formData.get('num_pages');
        const sectionsContent = document.getElementById('sections-content');
        sectionsContent.innerHTML = '';
        for (let i = 1; i <= numPages; i++) {
            const pageName = formData.get(`pagina[${i}][name]`);
            const numSections = formData.get(`pagina[${i}][num_sections]`);
            sectionsContent.innerHTML += `<h4>${pageName}</h4>`;
            for (let j = 1; j <= numSections; j++) {
                sectionsContent.innerHTML += `
                    <div class="input-field">
                        <select name="pagina[${pageName}][sections][${j}][type]" onchange="showSectionContentFields(this, '${pageName}', ${j})" required>
                            <option value="" disabled selected>Escolha o tipo de conteúdo</option>
                            <option value="text">Texto</option>
                            <option value="image">Imagem</option>
                            <option value="form">Formulário de Contato</option>
                        </select>
                        <label for="section_${pageName}_${j}_type">Tipo de Conteúdo para Seção ${j}</label>
                    </div>
                    <div id="section_${pageName}_${j}_content"></div>
                `;
            }
        }
        M.updateTextFields();
        M.FormSelect.init(document.querySelectorAll('select'));
    }

    function showSectionContentFields(select, pageName, sectionNumber) {
        const sectionContentDiv = document.getElementById(`section_${pageName}_${sectionNumber}_content`);
        sectionContentDiv.innerHTML = '';
        if (select.value === 'text') {
            sectionContentDiv.innerHTML = `
                <div class="input-field">
                    <textarea name="pagina[${pageName}][sections][${sectionNumber}][content]" class="materialize-textarea" required></textarea>
                    <label for="section_${pageName}_${sectionNumber}_content">Conteúdo da Seção ${sectionNumber}</label>
                </div>
            `;
            M.updateTextFields();
        } else if (select.value === 'image') {
            sectionContentDiv.innerHTML = `
                <div class="file-field input-field">
                    <div class="btn">
                        <span>Upload</span>
                        <input type="file" name="pagina[${pageName}][sections][${sectionNumber}][content]" accept="image/*" required>
                    </div>
                    <div class="file-path-wrapper">
                        <input class="file-path validate" type="text" placeholder="Envie uma imagem">
                    </div>
                </div>
            `;
        } else if (select.value === 'form') {
            sectionContentDiv.innerHTML = `
                <p>Formulário de Contato Padrão será gerado.</p>
            `;
        }
    }
</script>
</body>
</html>