PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]);
$_db->exec("SET search_path TO admin,public");
$_total=(int)$_db->query("SELECT COUNT(*) FROM offer_creatives")->fetchColumn();
$_active=(int)$_db->query("SELECT COUNT(*) FROM offer_creatives WHERE status='active'")->fetchColumn();
$_disabled=$_total-$_active;
$_winners=(int)$_db->query("SELECT COUNT(*) FROM offer_creatives WHERE is_winner=true")->fetchColumn();
$_avg_score=(float)$_db->query("SELECT COALESCE(AVG(score),0) FROM offer_creatives WHERE status='active'")->fetchColumn();
$_top=$_db->query("SELECT c.id,c.creative_name,c.subject_line,c.from_name,c.score,c.is_winner,c.status,c.opens,c.clicks,c.conversions,c.open_rate,c.click_rate,c.times_used,o.name as offer_name FROM offer_creatives c LEFT JOIN offers o ON c.offer_id=o.id ORDER BY c.score DESC NULLS LAST, c.id DESC LIMIT 50")->fetchAll();
$_by_offer=$_db->query("SELECT o.name,COUNT(c.id) as cnt,SUM(CASE WHEN c.status='active' THEN 1 ELSE 0 END) as act,AVG(c.score) as avg_score FROM offer_creatives c LEFT JOIN offers o ON c.offer_id=o.id GROUP BY o.name ORDER BY cnt DESC LIMIT 20")->fetchAll();
// Toggle
if(($_SERVER['REQUEST_METHOD']??'')=='POST'&&isset($_POST['toggle_id'])){
$id=(int)$_POST['toggle_id'];$cur=$_db->query("SELECT status FROM offer_creatives WHERE id=$id")->fetchColumn();
$new=$cur==='active'?'disabled':'active';$_db->exec("UPDATE offer_creatives SET status='$new' WHERE id=$id");
header('Location:creative-factory.html');exit;
}
?>
WEVADS - Creative Factory
🎨 Creative Factory
Email creatives management — Subject lines, From names, HTML templates, A/B scoring