simplesso.php

<?php
declare(strict_types=1);

// Strumento didattico pubblico: nessuna autenticazione né controllo di origine
// (deciso dall'autore). Tutta la cartella simplex/ è ad accesso libero.
//
// Il driver è ora sottile: legge $_POST, costruisce un SimplexModel (parsing +
// forma standard/canonica + due fasi + piani di taglio, tutto in
// simplex_model.php, senza I/O) e ne rende la traccia passo-passo con
// SimplexRenderer. L'algoritmo vero e proprio resta in matrice.php.

require 'template.php';
require 'matrice.php';
require 'util.php';
require 'razionale.php';
require 'immagini.php';
require 'simplex_model.php';
require 'simplex_renderer.php';

function scrivi_pagina(string $content): void /* stampa a video l''output del programma, secondo il template */
{
	$title = 'Analisi';
	$pagina = new template();
	$pagina->setta_titolo($title);
	$pagina->setta_filename(basename($_SERVER['SCRIPT_NAME']));
	$pagina->setta_contenuto($content);
	print($pagina->mostra_pagina());
}

// ── Pulizia delle immagini temporanee precedenti ─────────────────────────────
$tmpimages = glob((getenv('IMAGE_DIR') ?: 'images/tmp/') . 'tmp*') ?: [];
foreach ($tmpimages as $filename) {
	unlink($filename);
}

// ── Costruzione del modello dal payload del form ─────────────────────────────
$model = SimplexModel::fromPost($_POST);

// ── Grafico della regione (solo problemi a 2 variabili di decisione) ─────────
$image = null;
$imgName = '';
if ($model->haGrafico()) {
	$postName = (string)($_POST['name'] ?? '');
	if ($postName === '') {
		$postName = 'tmp' . time();
	}
	$dirPath = getenv('IMAGE_DIR') ?: 'images/tmp/';
	$urlPath = getenv('IMAGE_URL') ?: $dirPath;
	$imgName = $urlPath . $postName;
	$g = $model->datiGrafico();
	$image = new grafico($g['a'], $g['b'], $g['c'], $g['lge'], !$model->eraMassimo(), $dirPath . $postName, $imgName);
}

// ── Rendering ───────────────────────────────────────────────────────────────
$content = (new SimplexRenderer($model, $image, $imgName))->render();
scrivi_pagina($content);
echo "\n<!--" . memory_get_peak_usage(true) . " bytes-->" . "\n";