Files
parceiros/admin/form-parceiro.php
2025-10-01 23:56:12 -03:00

346 lines
11 KiB
PHP

<?php
// Verificar se é edição ou adição
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$parceiro = null;
$titulo_pagina = 'Adicionar Parceiro';
$acao = 'adicionar_parceiro';
$nonce_action = 'adicionar_parceiro';
// Verificar se é edição
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$id = intval($_GET['id']);
$parceiro = $wpdb->get_row($wpdb->prepare("SELECT * FROM $tabela_parceiros WHERE id = %d", $id));
if ($parceiro) {
$titulo_pagina = 'Editar Parceiro';
$acao = 'editar_parceiro';
$nonce_action = 'editar_parceiro';
}
}
// Obter setores e categorias existentes para sugestões
$setores_existentes = $wpdb->get_col("SELECT DISTINCT setor FROM $tabela_parceiros WHERE setor != '' ORDER BY setor");
$categorias_existentes = $wpdb->get_col("SELECT DISTINCT categoria FROM $tabela_parceiros WHERE categoria != '' ORDER BY categoria");
?>
<div class="wrap">
<h1><?php echo $titulo_pagina; ?></h1>
<div class="form-parceiro">
<form method="post" action="<?php echo admin_url('admin-post.php'); ?>" enctype="multipart/form-data">
<input type="hidden" name="action" value="<?php echo $acao; ?>">
<?php if ($parceiro): ?>
<input type="hidden" name="id" value="<?php echo $parceiro->id; ?>">
<?php endif; ?>
<?php wp_nonce_field($nonce_action); ?>
<div class="form-grupo">
<label for="nome">Nome do Parceiro *</label>
<input type="text" id="nome" name="nome" value="<?php echo $parceiro ? esc_attr($parceiro->nome) : ''; ?>" required>
</div>
<div class="form-grupo">
<label for="logo">Logo do Parceiro</label>
<?php if ($parceiro && !empty($parceiro->logo)): ?>
<div style="margin-bottom: 10px;">
<img src="<?php echo esc_url($parceiro->logo); ?>" alt="Logo atual" style="max-width: 150px; max-height: 100px; border: 1px solid #ddd; padding: 5px;">
<br>
<small>Logo atual</small>
</div>
<?php endif; ?>
<input type="file" id="logo" name="logo" accept="image/*">
<small>Formatos: JPG, PNG, GIF. Tamanho máximo: 2MB</small>
</div>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
<div class="form-grupo">
<label for="telefone">Telefone</label>
<input type="text" id="telefone" name="telefone" value="<?php echo $parceiro ? esc_attr($parceiro->telefone) : ''; ?>" placeholder="(11) 99999-9999">
</div>
<div class="form-grupo">
<label for="email">E-mail</label>
<input type="email" id="email" name="email" value="<?php echo $parceiro ? esc_attr($parceiro->email) : ''; ?>" placeholder="contato@empresa.com">
</div>
</div>
<div class="form-grupo">
<label for="site">Website</label>
<input type="url" id="site" name="site" value="<?php echo $parceiro ? esc_url($parceiro->site) : ''; ?>" placeholder="https://empresa.com">
</div>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
<div class="form-grupo">
<label for="setor">Setor</label>
<input type="text" id="setor" name="setor" value="<?php echo $parceiro ? esc_attr($parceiro->setor) : ''; ?>" list="setores-sugeridos" placeholder="Ex: Tecnologia, Marketing, Saúde">
<datalist id="setores-sugeridos">
<?php foreach ($setores_existentes as $setor): ?>
<option value="<?php echo esc_attr($setor); ?>">
<?php endforeach; ?>
</datalist>
</div>
<div class="form-grupo">
<label for="categoria">Categoria/Tipo</label>
<input type="text" id="categoria" name="categoria" value="<?php echo $parceiro ? esc_attr($parceiro->categoria) : ''; ?>" list="categorias-sugeridas" placeholder="Ex: Desenvolvimento, Consultoria, Varejo">
<datalist id="categorias-sugeridas">
<?php foreach ($categorias_existentes as $categoria): ?>
<option value="<?php echo esc_attr($categoria); ?>">
<?php endforeach; ?>
</datalist>
</div>
</div>
<div class="form-grupo">
<label for="endereco">Endereço</label>
<textarea id="endereco" name="endereco" rows="3" placeholder="Endereço completo"><?php echo $parceiro ? esc_textarea($parceiro->endereco) : ''; ?></textarea>
</div>
<div class="form-grupo">
<label>
<input type="checkbox" name="ativo" value="1" <?php echo ($parceiro && $parceiro->ativo) || !$parceiro ? 'checked' : ''; ?>>
Parceiro ativo
</label>
<small>Desmarque para desativar este parceiro (não será exibido no site)</small>
</div>
<div class="form-acoes">
<button type="submit" class="botao-submit">
<?php echo $parceiro ? 'Atualizar Parceiro' : 'Adicionar Parceiro'; ?>
</button>
<a href="<?php echo admin_url('admin.php?page=parceiros'); ?>" class="botao-cancelar">
Cancelar
</a>
</div>
</form>
</div>
</div>
<style>
.form-parceiro {
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
max-width: 700px;
}
.form-grupo {
margin-bottom: 25px;
}
.form-grupo label {
display: block;
margin-bottom: 8px;
font-weight: 600;
color: #23282d;
font-size: 14px;
}
.form-grupo input[type="text"],
.form-grupo input[type="email"],
.form-grupo input[type="url"],
.form-grupo input[type="file"],
.form-grupo select,
.form-grupo textarea {
width: 100%;
padding: 10px 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.3s;
box-sizing: border-box;
}
.form-grupo input:focus,
.form-grupo select:focus,
.form-grupo textarea:focus {
border-color: #007cba;
outline: none;
box-shadow: 0 0 0 1px #007cba;
}
.form-grupo textarea {
height: 80px;
resize: vertical;
}
.form-grupo small {
display: block;
margin-top: 5px;
color: #666;
font-style: italic;
}
.form-grupo input[type="checkbox"] {
margin-right: 8px;
}
.form-grupo label input[type="checkbox"] {
display: inline-block;
width: auto;
}
.form-acoes {
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #eee;
display: flex;
gap: 15px;
align-items: center;
}
.botao-submit {
background: #007cba;
color: white;
padding: 12px 25px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
font-weight: 600;
transition: background 0.3s;
}
.botao-submit:hover {
background: #005a87;
}
.botao-cancelar {
color: #666;
text-decoration: none;
padding: 10px 20px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: all 0.3s;
}
.botao-cancelar:hover {
background: #f8f9fa;
color: #333;
}
/* Estilos para datalist */
datalist {
position: absolute;
background: white;
border: 1px solid #ddd;
border-radius: 4px;
max-height: 200px;
overflow-y: auto;
}
/* Responsividade */
@media (max-width: 768px) {
.form-parceiro {
padding: 20px;
margin: 0 10px;
}
.form-acoes {
flex-direction: column;
align-items: stretch;
}
.botao-submit,
.botao-cancelar {
text-align: center;
}
}
</style>
<script>
jQuery(document).ready(function($) {
// Máscara para telefone
$('#telefone').on('input', function() {
var valor = $(this).val().replace(/\D/g, '');
if (valor.length <= 10) {
valor = valor.replace(/(\d{2})(\d{4})(\d{0,4})/, '($1) $2-$3');
} else {
valor = valor.replace(/(\d{2})(\d{5})(\d{0,4})/, '($1) $2-$3');
}
$(this).val(valor);
});
// Validação do formulário
$('form').on('submit', function(e) {
var nome = $('#nome').val().trim();
if (nome === '') {
e.preventDefault();
alert('Por favor, preencha o nome do parceiro.');
$('#nome').focus();
return false;
}
// Validação do tamanho do arquivo
var logo = $('#logo')[0].files[0];
if (logo && logo.size > 2 * 1024 * 1024) {
e.preventDefault();
alert('O arquivo do logo é muito grande. O tamanho máximo permitido é 2MB.');
return false;
}
// Validação de e-mail se preenchido
var email = $('#email').val().trim();
if (email !== '' && !isValidEmail(email)) {
e.preventDefault();
alert('Por favor, insira um e-mail válido.');
$('#email').focus();
return false;
}
// Validação de URL se preenchido
var site = $('#site').val().trim();
if (site !== '' && !isValidURL(site)) {
e.preventDefault();
alert('Por favor, insira uma URL válida.');
$('#site').focus();
return false;
}
});
function isValidEmail(email) {
var regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return regex.test(email);
}
function isValidURL(url) {
try {
new URL(url);
return true;
} catch (_) {
return false;
}
}
// Preview de imagem antes do upload
$('#logo').on('change', function(e) {
var input = this;
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
// Remove preview anterior se existir
$('.logo-preview').remove();
// Cria novo preview
var preview = $('<div class="logo-preview" style="margin-bottom: 10px;">' +
'<img src="' + e.target.result + '" alt="Preview" style="max-width: 150px; max-height: 100px; border: 1px solid #ddd; padding: 5px;">' +
'<br><small>Preview da nova logo</small>' +
'</div>');
$(input).before(preview);
};
reader.readAsDataURL(input.files[0]);
}
});
});
</script>