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
Total Creatives
Active
Disabled
Winners
Avg Score
Offers Linked
Total Uses
All Creatives
Active
By Offer
=70?'var(--gn)':($scr>=40?'var(--am)':'var(--rd)');?>
#CreativeSubject LineFromOfferScoreOpensClicksConvStatus
★ WINNER':''?>
#CreativeSubject LineScoreUsesStatus
Active

Creatives by Offer

OfferTotalActiveAvg Score