get_var($wpdb->prepare(“SHOW TABLES LIKE %s”, $table)) === $table;
}
function cz_cols($table) {
global $wpdb;
static $cache = [];
if (isset($cache[$table])) return $cache[$table];
if (!cz_table_exists($table)) return $cache[$table] = [];
$rows = $wpdb->get_results(“SHOW COLUMNS FROM `$table`”);
$cols = [];
foreach ($rows as $r) $cols[] = $r->Field;
return $cache[$table] = $cols;
}
function cz_has_col($table, $col) {
return in_array($col, cz_cols($table), true);
}
function cz_first_col($row, $names, $default = ”) {
if (!$row) return $default;
foreach ($names as $name) {
if (isset($row->$name) && trim((string)$row->$name) !== ”) return $row->$name;
}
return $default;
}
$prefix = $wpdb->prefix;
$table_clientes = $prefix . ‘clickzap_clientes’;
$table_categorias = $prefix . ‘clickzap_categorias’;
$table_itens = $prefix . ‘clickzap_itens’;
$table_popup = $prefix . ‘clickzap_popup’;
$slug = isset($_GET[‘loja’]) ? sanitize_title($_GET[‘loja’]) : ‘bebidasfonte’;
$cliente = null;
if (cz_table_exists($table_clientes)) {
if (cz_has_col($table_clientes, ‘slug’)) {
$cliente = $wpdb->get_row($wpdb->prepare(“SELECT * FROM `$table_clientes` WHERE slug=%s LIMIT 1”, $slug));
}
if (!$cliente) {
$cliente = $wpdb->get_row(“SELECT * FROM `$table_clientes` ORDER BY id ASC LIMIT 1″);
}
}
$cliente_id = $cliente && isset($cliente->id) ? intval($cliente->id) : 1;
$nome_loja = $cliente ? cz_first_col($cliente, [‘nome_negocio’, ‘nome’, ‘loja’, ‘empresa’], ‘Bebidas da Fonte’) : ‘Bebidas da Fonte’;
$whatsapp = $cliente ? preg_replace(‘/\D+/’, ”, cz_first_col($cliente, [‘whatsapp’, ‘telefone’, ‘celular’], ‘5593991466159’)) : ‘5593991466159’;
$banner = $cliente ? cz_first_col($cliente, [‘banner’, ‘imagem_topo’, ‘topo’, ‘capa’], ”) : ”;
$logo = $cliente ? cz_first_col($cliente, [‘logo’, ‘mascote’, ‘imagem_mascote’], ”) : ”;
$cor = $cliente ? cz_first_col($cliente, [‘cor_principal’, ‘cor’, ‘primary_color’], ‘#16a34a’) : ‘#16a34a’;
if (!$banner) {
$banner = ‘https://images.unsplash.com/photo-1514362545857-3bc16c4c7d1b?auto=format&fit=crop&w=1400&q=80’;
}
if (!$logo) {
$logo = ‘https://cdn-icons-png.flaticon.com/512/3081/3081559.png’;
}
$popup = null;
if (cz_table_exists($table_popup)) {
$where = [];
if (cz_has_col($table_popup, ‘cliente_id’)) $where[] = $wpdb->prepare(‘cliente_id=%d’, $cliente_id);
if (cz_has_col($table_popup, ‘slug’)) $where[] = $wpdb->prepare(‘slug=%s’, $slug);
$sqlPopup = “SELECT * FROM `$table_popup`”;
if ($where) $sqlPopup .= ” WHERE ” . implode(‘ OR ‘, $where);
$sqlPopup .= ” ORDER BY id DESC LIMIT 1″;
$popup = $wpdb->get_row($sqlPopup);
}
$popup_ativo = true;
if ($popup && isset($popup->ativo)) $popup_ativo = intval($popup->ativo) === 1;
$popup_badge = $popup ? cz_first_col($popup, [‘badge’, ‘etiqueta’, ‘subtitulo’], ‘PROMOÇÃO DA SEMANA’) : ‘PROMOÇÃO DA SEMANA’;
$popup_titulo = $popup ? cz_first_col($popup, [‘titulo’, ‘title’, ‘nome’], ‘Combo gelado da semana’) : ‘Combo gelado da semana’;
$popup_texto = $popup ? cz_first_col($popup, [‘texto’, ‘descricao’, ‘description’], Bebidas geladas, combos e entrega rápida. Faça seu pedido agora mesmo.) : Bebidas geladas, combos e entrega rápida. Faça seu pedido agora mesmo.;
$popup_preco = $popup ? cz_first_col($popup, [‘preco’, ‘valor’, ‘price’], ”) : ”;
$popup_img = $popup ? cz_first_col($popup, [‘imagem’, ‘imagem_popup’, ‘image’, ‘foto’], ”) : ”;
if (!$popup_img) $popup_img = $logo;
$categorias = [];
if (cz_table_exists($table_categorias)) {
$cats = $wpdb->get_results($wpdb->prepare(
“SELECT * FROM `$table_categorias` WHERE cliente_id=%d AND (ativo=1 OR ativo IS NULL) ORDER BY ordem_exibicao ASC, id ASC”,
$cliente_id
));
foreach ($cats as $cat) {
$categorias[intval($cat->id)] = $cat->nome;
}
}
function cz_infer_category($name, $desc) {
$n = mb_strtolower($name . ‘ ‘ . $desc, ‘UTF-8’);
if (preg_match(‘/combo|promo|kit|oferta|balde|caixa|fardo/i’, $n)) return ‘Promoções e Combos’;
if (preg_match(‘/heineken|skol|brahma|antarctica|itaipava|budweiser|stella|corona|cerveja|long neck|lata/i’, $n)) return ‘Cervejas’;
if (preg_match(‘/whisky|vodka|gin|cachaça|cachaca|rum|licor|tequila|destilado/i’, $n)) return ‘Destilados’;
if (preg_match(‘/vinho|champagne|espumante/i’, $n)) return ‘Vinhos’;
if (preg_match(‘/coca|fanta|guaran[aá]|sprite|refrigerante|soda/i’, $n)) return ‘Refrigerantes’;
if (preg_match(‘/red bull|monster|energ[eé]tico|energetico/i’, $n)) return ‘Energéticos’;
if (preg_match(‘/água|agua|gelo|mineral/i’, $n)) return ‘Água e Gelo’;
if (preg_match(‘/salgado|amendoim|carv[aã]o|copo|descart[aá]vel|lim[aã]o|gelo/i’, $n)) return ‘Complementos’;
return ‘Bebidas’;
}
$produtos = [];
if (cz_table_exists($table_itens)) {
$sql = “SELECT i.*, c.nome AS categoria_nome, c.ordem_exibicao AS categoria_ordem
FROM `$table_itens` i
LEFT JOIN `$table_categorias` c ON c.id = i.categoria_id
WHERE (i.disponivel=1 OR i.disponivel IS NULL)
AND i.cliente_id = %d
ORDER BY COALESCE(c.ordem_exibicao, 999) ASC, COALESCE(i.ordem_exibicao, 999) ASC, i.id ASC”;
$items = $wpdb->get_results($wpdb->prepare($sql, $cliente_id));
foreach ($items as $it) {
$preco = isset($it->preco_promocional) && $it->preco_promocional !== null && $it->preco_promocional !== ” && floatval($it->preco_promocional) > 0
? floatval($it->preco_promocional)
: floatval($it->preco);
$categoria = trim((string)($it->categoria_nome ?? ”));
if (!$categoria) $categoria = cz_infer_category($it->nome ?? ”, $it->descricao ?? ”);
$produtos[] = [
‘id’ => intval($it->id),
‘categoria’ => $categoria,
‘nome’ => (string)$it->nome,
‘descricao’ => (string)($it->descricao ?? ”),
‘valor’ => $preco,
‘imagem’ => (string)($it->imagem ?? ”),
‘destaque’ => isset($it->destaque) ? intval($it->destaque) : 0,
‘categoria_ordem’ => isset($it->categoria_ordem) ? intval($it->categoria_ordem) : 999,
‘ordem_produto’ => isset($it->ordem_exibicao) ? intval($it->ordem_exibicao) : 999,
];
}
}
// Remove duplicatas simples pelo nome + categoria, mantendo a última ocorrência mais completa.
$dedup = [];
foreach ($produtos as $p) {
$key = mb_strtolower($p[‘categoria’] . ‘|’ . $p[‘nome’], ‘UTF-8’);
if (!isset($dedup[$key]) || (!$dedup[$key][‘imagem’] && $p[‘imagem’])) $dedup[$key] = $p;
}
$produtos = array_values($dedup);
$ordem_manual = [
‘promoções e combos’ => 1,
‘promocoes e combos’ => 1,
‘cervejas’ => 2,
‘destilados’ => 3,
‘vinhos’ => 4,
‘refrigerantes’ => 5,
‘energéticos’ => 6,
‘energeticos’ => 6,
‘água e gelo’ => 7,
‘agua e gelo’ => 7,
‘complementos’ => 8,
‘bebidas’ => 9,
];
usort($produtos, function($a, $b) use ($ordem_manual) {
$catA = mb_strtolower(trim((string)($a[‘categoria’] ?? ”)), ‘UTF-8’);
$catB = mb_strtolower(trim((string)($b[‘categoria’] ?? ”)), ‘UTF-8’);
$ordA = $ordem_manual[$catA] ?? (int)($a[‘categoria_ordem’] ?? 999);
$ordB = $ordem_manual[$catB] ?? (int)($b[‘categoria_ordem’] ?? 999);
if ($ordA !== $ordB) return $ordA <=> $ordB;
$prodA = (int)($a[‘ordem_produto’] ?? 999);
$prodB = (int)($b[‘ordem_produto’] ?? 999);
if ($prodA !== $prodB) return $prodA <=> $prodB;
return ((int)($a[‘id’] ?? 0)) <=> ((int)($b[‘id’] ?? 0));
});
if (!$produtos) {
$produtos = [
[‘id’=>1,’categoria’=>’Promoções e Combos’,’nome’=>’Combo Heineken + Gelo’,’descricao’=>’Caixa de Heineken + gelo 5kg.’,’valor’=>79.90,’imagem’=>’https://images.unsplash.com/photo-1618885472179-5e474019f2a9?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>2,’categoria’=>’Promoções e Combos’,’nome’=>’Combo Whisky + Energético’,’descricao’=>’Whisky + energético para sua noite.’,’valor’=>109.90,’imagem’=>’https://images.unsplash.com/photo-1527281400683-1aae777175f8?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>3,’categoria’=>’Cervejas’,’nome’=>’Heineken Long Neck’,’descricao’=>’Garrafa long neck gelada.’,’valor’=>8.00,’imagem’=>’https://images.unsplash.com/photo-1608270586620-248524c67de9?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>4,’categoria’=>’Cervejas’,’nome’=>’Skol Lata 350ml’,’descricao’=>’Cerveja lata 350ml gelada.’,’valor’=>4.50,’imagem’=>’https://images.unsplash.com/photo-1618885472179-5e474019f2a9?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>5,’categoria’=>’Cervejas’,’nome’=>’Brahma Lata 350ml’,’descricao’=>’Cerveja lata 350ml gelada.’,’valor’=>4.50,’imagem’=>’https://images.unsplash.com/photo-1629203851122-3726ecdf080e?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>6,’categoria’=>’Cervejas’,’nome’=>’Caixa de Heineken’,’descricao’=>’Caixa promocional para festas e encontros.’,’valor’=>72.00,’imagem’=>’https://images.unsplash.com/photo-1608270586620-248524c67de9?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>7,’categoria’=>’Cervejas’,’nome’=>’Caixa de Skol’,’descricao’=>’Caixa de cerveja gelada.’,’valor’=>58.00,’imagem’=>’https://images.unsplash.com/photo-1618885472179-5e474019f2a9?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>8,’categoria’=>’Destilados’,’nome’=>’Whisky Red Label’,’descricao’=>’Whisky para festas e ocasiões especiais.’,’valor’=>89.90,’imagem’=>’https://images.unsplash.com/photo-1527281400683-1aae777175f8?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>9,’categoria’=>’Destilados’,’nome’=>’Whisky Ballantines’,’descricao’=>’Whisky tradicional.’,’valor’=>99.90,’imagem’=>’https://images.unsplash.com/photo-1569529465841-dfecdab7503b?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>10,’categoria’=>’Destilados’,’nome’=>’Vodka Smirnoff’,’descricao’=>’Vodka para drinks.’,’valor’=>32.00,’imagem’=>’https://images.unsplash.com/photo-1605270012917-bf157c5a9541?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>11,’categoria’=>’Destilados’,’nome’=>’Cachaça 51′,’descricao’=>’Cachaça tradicional.’,’valor’=>14.00,’imagem’=>’https://images.unsplash.com/photo-1605270012917-bf157c5a9541?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>12,’categoria’=>’Vinhos’,’nome’=>’Vinho Tinto Suave’,’descricao’=>’Vinho tinto suave.’,’valor’=>24.90,’imagem’=>’https://images.unsplash.com/photo-1510812431401-41d2bd2722f3?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>13,’categoria’=>’Vinhos’,’nome’=>’Vinho Branco Suave’,’descricao’=>’Vinho branco suave.’,’valor’=>26.90,’imagem’=>’https://images.unsplash.com/photo-1506377247377-2a5b3b417ebb?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>14,’categoria’=>’Refrigerantes’,’nome’=>’Coca-Cola 2L’,’descricao’=>’Refrigerante 2 litros.’,’valor’=>12.00,’imagem’=>’https://images.unsplash.com/photo-1622483767028-3f66f32aef97?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>15,’categoria’=>’Refrigerantes’,’nome’=>’Guaraná 2L’,’descricao’=>’Refrigerante 2 litros.’,’valor’=>10.00,’imagem’=>’https://images.unsplash.com/photo-1622483767028-3f66f32aef97?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>16,’categoria’=>’Refrigerantes’,’nome’=>’Fanta Laranja 2L’,’descricao’=>’Refrigerante 2 litros.’,’valor’=>10.00,’imagem’=>’https://images.unsplash.com/photo-1622483767028-3f66f32aef97?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>17,’categoria’=>’Energéticos’,’nome’=>’Monster 473ml’,’descricao’=>’Energético lata 473ml.’,’valor’=>11.00,’imagem’=>’https://images.unsplash.com/photo-1622543925917-763c34d1a86e?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>18,’categoria’=>’Energéticos’,’nome’=>’Red Bull 250ml’,’descricao’=>’Energético 250ml.’,’valor’=>10.00,’imagem’=>’https://images.unsplash.com/photo-1622543925917-763c34d1a86e?auto=format&fit=crop&w=800&q=80′,’destaque’=>1],
[‘id’=>19,’categoria’=>’Água e Gelo’,’nome’=>’Água Mineral 500ml’,’descricao’=>’Água mineral gelada.’,’valor’=>3.00,’imagem’=>’https://images.unsplash.com/photo-1559839914-17aae19cec71?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>20,’categoria’=>’Água e Gelo’,’nome’=>’Gelo 5kg’,’descricao’=>’Saco de gelo 5kg.’,’valor’=>12.00,’imagem’=>’https://images.unsplash.com/photo-1578662996442-48f60103fc96?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>21,’categoria’=>’Complementos’,’nome’=>’Carvão 3kg’,’descricao’=>’Ideal para churrasco.’,’valor’=>18.00,’imagem’=>’https://images.unsplash.com/photo-1529692236671-f1f6cf9683ba?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
[‘id’=>22,’categoria’=>’Complementos’,’nome’=>’Copos descartáveis’,’descricao’=>’Pacote de copos descartáveis.’,’valor’=>7.00,’imagem’=>’https://images.unsplash.com/photo-1513558161293-cdaf765ed2fd?auto=format&fit=crop&w=800&q=80′,’destaque’=>0],
];
}
$app = [
‘appNome’ => ‘CLICK & ZAP’,
‘lojaNome’ => $nome_loja,
‘whatsapp’ => $whatsapp,
‘banner’ => $banner,
‘mascote’ => $logo,
‘cor’ => $cor,
‘popup’ => [
‘ativo’ => $popup_ativo,
‘badge’ => $popup_badge,
‘titulo’ => $popup_titulo,
‘texto’ => $popup_texto,
‘preco’ => $popup_preco,
‘imagem’ => $popup_img,
],
‘produtos’ => $produtos,
];
?>
CLICK & ZAP