Files
parceiros/sistema-parceiros.php
2025-10-01 23:56:12 -03:00

359 lines
12 KiB
PHP

<?php
/*
Plugin Name: Sistema de Parceiros
Description: Sistema para gerenciar parceiros/parcerias com filtros e shortcode
Version: 1.0
Author: Seu Nome
*/
// Evitar acesso direto
if (!defined('ABSPATH')) {
exit;
}
// Classe principal do plugin
class SistemaParceiros {
public function __construct() {
add_action('init', array($this, 'init'));
register_activation_hook(__FILE__, array($this, 'ativar_plugin'));
}
public function ativar_plugin() {
$this->criar_tabela_parceiros();
$this->inserir_dados_exemplo();
}
// Inicializar o plugin
public function init() {
add_action('wp_enqueue_scripts', array($this, 'carregar_recursos'));
add_shortcode('parceiros', array($this, 'shortcode_parceiros'));
// Para área administrativa
if (is_admin()) {
add_action('admin_menu', array($this, 'adicionar_menu_admin'));
add_action('admin_post_adicionar_parceiro', array($this, 'processar_form_adicionar'));
add_action('admin_post_editar_parceiro', array($this, 'processar_form_editar'));
add_action('admin_post_excluir_parceiro', array($this, 'processar_form_excluir'));
}
}
// Carregar CSS e JS
public function carregar_recursos() {
wp_enqueue_style('parceiros-css', plugin_dir_url(__FILE__) . 'css/parceiros.css');
wp_enqueue_script('parceiros-js', plugin_dir_url(__FILE__) . 'js/parceiros.js', array('jquery'), '1.0', true);
// Localizar script para AJAX
wp_localize_script('parceiros-js', 'parceiros_ajax', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('parceiros_nonce')
));
}
// Criar tabela no banco de dados
private function criar_tabela_parceiros() {
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $tabela_parceiros (
id mediumint(9) NOT NULL AUTO_INCREMENT,
nome varchar(255) NOT NULL,
logo varchar(255),
telefone varchar(20),
endereco text,
email varchar(100),
site varchar(255),
setor varchar(100),
categoria varchar(100),
ativo tinyint(1) DEFAULT 1,
data_criacao datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
// Inserir dados de exemplo
private function inserir_dados_exemplo() {
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$parceiros_exemplo = array(
array(
'nome' => 'Empresa Tech Solutions',
'logo' => '',
'telefone' => '(11) 1234-5678',
'endereco' => 'Av. Paulista, 1000 - São Paulo, SP',
'email' => 'contato@techsolutions.com',
'site' => 'https://techsolutions.com',
'setor' => 'Tecnologia',
'categoria' => 'Desenvolvimento'
),
array(
'nome' => 'Marketing Digital Pro',
'logo' => '',
'telefone' => '(21) 9876-5432',
'endereco' => 'Rua do Ouvidor, 50 - Rio de Janeiro, RJ',
'email' => 'contato@marketingpro.com',
'site' => 'https://marketingpro.com',
'setor' => 'Marketing',
'categoria' => 'Digital'
)
);
foreach ($parceiros_exemplo as $parceiro) {
$wpdb->insert($tabela_parceiros, $parceiro);
}
}
// Shortcode para exibir parceiros
public function shortcode_parceiros($atts) {
$atts = shortcode_atts(array(
'categoria' => '',
'setor' => '',
'limite' => -1
), $atts);
ob_start();
$this->exibir_parceiros($atts);
return ob_get_clean();
}
// Exibir parceiros no frontend
private function exibir_parceiros($filtros = array()) {
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
// Construir query com filtros
$where = "WHERE ativo = 1";
if (!empty($filtros['categoria'])) {
$where .= $wpdb->prepare(" AND categoria = %s", $filtros['categoria']);
}
if (!empty($filtros['setor'])) {
$where .= $wpdb->prepare(" AND setor = %s", $filtros['setor']);
}
$limite = '';
if ($filtros['limite'] > 0) {
$limite = "LIMIT " . intval($filtros['limite']);
}
$parceiros = $wpdb->get_results("
SELECT * FROM $tabela_parceiros
$where
ORDER BY nome
$limite
");
// Obter setores e categorias únicas para os filtros
$setores = $wpdb->get_col("SELECT DISTINCT setor FROM $tabela_parceiros WHERE ativo = 1 AND setor != '' ORDER BY setor");
$categorias = $wpdb->get_col("SELECT DISTINCT categoria FROM $tabela_parceiros WHERE ativo = 1 AND categoria != '' ORDER BY categoria");
// Incluir template
include plugin_dir_path(__FILE__) . 'templates/lista-parceiros.php';
}
// Adicionar menu administrativo
public function adicionar_menu_admin() {
add_menu_page(
'Parceiros',
'Parceiros',
'manage_options',
'parceiros',
array($this, 'pagina_admin_parceiros'),
'dashicons-groups',
30
);
add_submenu_page(
'parceiros',
'Todos os Parceiros',
'Todos os Parceiros',
'manage_options',
'parceiros',
array($this, 'pagina_admin_parceiros')
);
add_submenu_page(
'parceiros',
'Adicionar Parceiro',
'Adicionar Parceiro',
'manage_options',
'adicionar-parceiro',
array($this, 'pagina_adicionar_parceiro')
);
}
// Página administrativa principal
public function pagina_admin_parceiros() {
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$search_term = isset($_GET['s']) ? sanitize_text_field($_GET['s']) : '';
$sql = "SELECT * FROM $tabela_parceiros";
if (!empty($search_term)) {
$sql .= $wpdb->prepare(" WHERE nome LIKE '%%%s%%'", $search_term);
}
$sql .= " ORDER BY nome";
$parceiros = $wpdb->get_results($sql);
include plugin_dir_path(__FILE__) . 'admin/lista-parceiros.php';
}
// Página para adicionar parceiro
public function pagina_adicionar_parceiro() {
include plugin_dir_path(__FILE__) . 'admin/form-parceiro.php';
}
// Processar formulário de adicionar parceiro
public function processar_form_adicionar() {
if (!current_user_can('manage_options')) {
wp_die('Sem permissão');
}
check_admin_referer('adicionar_parceiro');
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$dados = array(
'nome' => sanitize_text_field($_POST['nome']),
'telefone' => sanitize_text_field($_POST['telefone']),
'endereco' => sanitize_textarea_field($_POST['endereco']),
'email' => sanitize_email($_POST['email']),
'site' => esc_url_raw($_POST['site']),
'setor' => sanitize_text_field($_POST['setor']),
'categoria' => sanitize_text_field($_POST['categoria']),
'ativo' => isset($_POST['ativo']) ? 1 : 0
);
// Processar upload de logo
if (!empty($_FILES['logo']['name'])) {
$file = $_FILES['logo'];
$allowed_types = array('jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif');
$max_size = 2 * 1024 * 1024; // 2MB
// Validate file type
$file_type = wp_check_filetype($file['name']);
if (!array_key_exists($file_type['ext'], $allowed_types)) {
wp_die("Erro: Formato de arquivo inválido. Apenas JPG, PNG e GIF são permitidos.");
}
// Validate file size
if ($file['size'] > $max_size) {
wp_die("Erro: O arquivo é muito grande. O tamanho máximo permitido é 2MB.");
}
// Handle the upload
$upload = wp_handle_upload($file, array('test_form' => false));
if ($upload && !isset($upload['error'])) {
$dados['logo'] = $upload['url'];
} else
wp_die('Erro ao fazer upload do logo: ' . $upload['error']);
}
$wpdb->insert($tabela_parceiros, $dados);
wp_redirect(admin_url('admin.php?page=parceiros&mensagem=adicionado'));
exit;
}
// Processar formulário de editar parceiro
public function processar_form_editar() {
if (!current_user_can('manage_options')) {
wp_die('Sem permissão');
}
check_admin_referer('editar_parceiro');
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$id = intval($_POST['id']);
$dados = array(
'nome' => sanitize_text_field($_POST['nome']),
'telefone' => sanitize_text_field($_POST['telefone']),
'endereco' => sanitize_textarea_field($_POST['endereco']),
'email' => sanitize_email($_POST['email']),
'site' => esc_url_raw($_POST['site']),
'setor' => sanitize_text_field($_POST['setor']),
'categoria' => sanitize_text_field($_POST['categoria']),
'ativo' => isset($_POST['ativo']) ? 1 : 0
);
// Processar upload de logo
if (!empty($_FILES['logo']['name'])) {
$file = $_FILES['logo'];
$allowed_types = array('jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif');
$max_size = 2 * 1024 * 1024; // 2MB
// Validate file type
$file_type = wp_check_filetype($file['name']);
if (!array_key_exists($file_type['ext'], $allowed_types)) {
wp_die("Erro: Formato de arquivo inválido. Apenas JPG, PNG e GIF são permitidos.");
}
// Validate file size
if ($file['size'] > $max_size) {
wp_die("Erro: O arquivo é muito grande. O tamanho máximo permitido é 2MB.");
}
// Handle the upload
$upload = wp_handle_upload($file, array('test_form' => false));
if ($upload && !isset($upload['error'])) {
$dados['logo'] = $upload['url'];
} else
wp_die('Erro ao fazer upload do logo: ' . $upload['error']);
}
$wpdb->update($tabela_parceiros, $dados, array('id' => $id));
wp_redirect(admin_url('admin.php?page=parceiros&mensagem=editado'));
exit;
}
// Processar exclusão de parceiro
public function processar_form_excluir() {
if (!current_user_can('manage_options')) {
wp_die('Sem permissão');
}
check_admin_referer('excluir_parceiro');
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$id = intval($_POST['id']);
$wpdb->delete($tabela_parceiros, array('id' => $id));
wp_redirect(admin_url('admin.php?page=parceiros&mensagem=excluido'));
exit;
}
}
// Inicializar o plugin
new SistemaParceiros();
// Funções auxiliares
function obter_parceiros($filtros = array()) {
global $wpdb;
$tabela_parceiros = $wpdb->prefix . 'parceiros';
$where = "WHERE ativo = 1";
if (!empty($filtros['categoria'])) {
$where .= $wpdb->prepare(" AND categoria = %s", $filtros['categoria']);
}
if (!empty($filtros['setor'])) {
$where .= $wpdb->prepare(" AND setor = %s", $filtros['setor']);
}
return $wpdb->get_results("SELECT * FROM $tabela_parceiros $where ORDER BY nome");
}
?>