"; $html .= "

" . htmlspecialchars($title) . "

WEVAL Consulting - " . date("d/m/Y") . "

"; $html .= "
" . nl2br(htmlspecialchars($content ?: "Rapport genere par WEVIA Engine")) . "
"; $html .= ""; $tmpHtml = "/tmp/wevia-pdf-{$ts}.html"; $tmpPdf = "/var/www/weval/wevia-ia/downloads/wevia-report-{$ts}.pdf"; @mkdir("/var/www/html/uploads", 0755, true); file_put_contents($tmpHtml, $html); exec("wkhtmltopdf --quiet {$tmpHtml} {$tmpPdf} 2>&1", $out, $ret); if (file_exists($tmpPdf)) { echo json_encode(["ok"=>true, "url"=>"/uploads/wevia-report-{$ts}.pdf", "size"=>filesize($tmpPdf)]); } else { echo json_encode(["error"=>"PDF generation failed"]); } break; case "excel": $script = "import openpyxl,json,sys data=json.loads(sys.argv[1]) wb=openpyxl.Workbook() ws=wb.active ws.title=data.get('title','Sheet1')[:31] for row in data.get('rows',[]): ws.append(row) f='/var/www/weval/wevia-ia/downloads/wevia-report-{$ts}.xlsx' wb.save(f) print(json.dumps({'ok':True,'url':'/wevia-ia/downloads/wevia-report-{$ts}.xlsx'}))"; $data = json_encode(["title"=>$title, "rows"=>$input["rows"] ?? [["Col1","Col2"],["data1","data2"]]]); @mkdir("/var/www/html/uploads", 0755, true); $escaped = escapeshellarg($data); exec("python3 -c " . escapeshellarg($script) . " " . $escaped . " 2>&1", $out); echo implode("", $out) ?: json_encode(["error"=>"Excel failed"]); break; case "chart": $script = "import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import json,sys d=json.loads(sys.argv[1]) plt.figure(figsize=(10,6)) plt.bar(d.get('labels',[]),d.get('values',[]),color=d.get('colors',['#1a237e','#0d47a1','#1565c0','#1976d2','#1e88e5'])) plt.title(d.get('title','')) plt.tight_layout() f='/var/www/weval/wevia-ia/downloads/wevia-chart-{$ts}.png' plt.savefig(f,dpi=150) print(json.dumps({'ok':True,'url':'/wevia-ia/downloads/wevia-chart-{$ts}.png'}))"; $data = json_encode(["title"=>$title, "labels"=>$input["labels"]??["SAP","Cloud","Cyber","Data","IA"], "values"=>$input["values"]??[95,88,92,85,97]]); @mkdir("/var/www/html/uploads", 0755, true); exec("python3 -c " . escapeshellarg($script) . " " . escapeshellarg($data) . " 2>&1", $out); echo implode("", $out) ?: json_encode(["error"=>"Chart failed"]); break; case "pptx": $script = "from pptx import Presentation from pptx.util import Inches,Pt import json,sys d=json.loads(sys.argv[1]) p=Presentation() for s in d.get('slides',[{'title':'WEVAL','content':'Consulting'}]): sl=p.slides.add_slide(p.slide_layouts[1]) sl.shapes.title.text=s.get('title','') sl.placeholders[1].text=s.get('content','') f='/var/www/weval/wevia-ia/downloads/wevia-deck-{$ts}.pptx' p.save(f) print(json.dumps({'ok':True,'url':'/wevia-ia/downloads/wevia-deck-{$ts}.pptx'}))"; $data = json_encode(["slides"=>$input["slides"]??[ ["title"=>"WEVAL Consulting","content"=>"IA Souverain - Cloud - SAP - Cyber"], ["title"=>$title,"content"=>$content ?: "Genere par WEVIA Engine"] ]]); @mkdir("/var/www/html/uploads", 0755, true); exec("python3 -c " . escapeshellarg($script) . " " . escapeshellarg($data) . " 2>&1", $out); echo implode("", $out) ?: json_encode(["error"=>"PPTX failed"]); break; default: echo json_encode(["actions"=>["pdf","excel","chart","pptx"],"usage"=>"POST with title+content or rows/labels/values/slides"]); }