<?php
/**
 * Recetas de cocina - recetas2.php
 * 
 * @author    Bartolomé Sintes Marco <bartolome.sintes+mclibre@gmail.com>
 * @copyright 2010 Bartolomé Sintes Marco
 * @license   http://www.gnu.org/licenses/agpl.txt AGPL 3 or later
 * @version   2010-05-27
 * @link      http://www.mclibre.org
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('MAX_COMENSALES',    10); // Número máximo de comensales
define('MAX_CANTIDAD',    9999); // Peso máximo de un ingrediente
define('MAX_INGREDIENTES',   7); // Número máximo de ingredientes en la receta

function recoge($var)
{ 
    $tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : '';
    if (get_magic_quotes_gpc()) {
        $tmp = stripslashes($tmp);
    }
    $tmp = str_replace('&', '&amp;',  $tmp);
    $tmp = str_replace('"', '&quot;', $tmp);
    return $tmp;
}

function recogeMatriz($var) 
{
    $tmpMatriz = array();
    if (isset($_REQUEST[$var]) && is_array($_REQUEST[$var])) {
        foreach ($_REQUEST[$var] as $indice => $valor) {
            $tmp = trim(strip_tags($indice));
            if (get_magic_quotes_gpc()) {
                $tmp = stripslashes($tmp);
            }
            $tmp = str_replace('&', '&amp;',  $tmp);
            $tmp = str_replace('"', '&quot;', $tmp);
            $indiceLimpio = $tmp;

            $tmp = trim(strip_tags($valor));
            if (get_magic_quotes_gpc()) {
                $tmp = stripslashes($tmp);
            }
            $tmp = str_replace('&', '&amp;',  $tmp);
            $tmp = str_replace('"', '&quot;', $tmp);
            $valorLimpio  = $tmp;

            $tmpMatriz[$indiceLimpio] = $valorLimpio;
        }
    }
    return $tmpMatriz;
}

print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
       \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />
  <title>www.mclibre.org - Recetas - Añadir receta 2</title>
  <link href=\"mclibre_php_soluciones.css\" rel=\"stylesheet\" type=\"text/css\" />
</head>\n\n
<body onload=\"document.getElementById('cursor').focus()\">
<h1>Recetas - Añadir receta 2</h1>\n";

$receta      = recoge('receta');
$comensales  = recoge('comensales');
$ingrediente = recogeMatriz('ingrediente');
$cantidad    = recogeMatriz('cantidad');

$recetaOk       = FALSE;
$comensalesOk   = FALSE;
$ingredientesOk = TRUE;
$cantidadesOk   = TRUE;

if ($receta=='') {
    print "<p style=\"color: red\">No ha escrito el nombre de la receta.</p>\n";
} else {
    $recetaOk = TRUE;
}

if ($comensales=='') {
    print "<p style=\"color: red\">No ha escrito el número de comensales.</p>\n";
} elseif (!is_numeric($comensales)) { 
    print "<p style=\"color: red\">No ha escrito el número de comensales como número.</p>\n";
} elseif ($comensales<1 || $comensales>=MAX_COMENSALES) {
    print "<p style=\"color: red\">El número de comensales no está entre 1 y "
        .MAX_COMENSALES.".</p>\n";
} else {
    $comensalesOk = TRUE;
}

$numeroIngredientes = 0;

for ($i = 1; $i<=MAX_INGREDIENTES; $i++) {
        if (!isset($ingrediente[$i]) || !isset($cantidad[$i])) {
        print "<p style=\"color: red\">Error en los datos recibidos. Faltan datos.</p>\n";
        $ingredientesOk = $cantidadesOk = FALSE;
    } elseif (($ingrediente[$i]=='') && ($cantidad[$i]!='')) {
        print "<p style=\"color: red\">Falta ingrediente en la cantidad $cantidad[$i].</p>\n";
        $ingredientesOk = $cantidadesOk = FALSE;
    } elseif ($ingrediente[$i]!='') {
        for ($j=1; $j<$i; $j++) {
            if ($ingrediente[$i]==$ingrediente[$j]) {
                print "<p style=\"color: red\">El ingrediente $ingrediente[$i] está repetido.</p>\n";
                $ingredientesOk = $cantidadesOk = FALSE;
                $j = $i;
            }
        }        
        if ($cantidad[$i]=='') {
            print "<p style=\"color: red\">Falta cantidad en el ingrediente $ingrediente[$i].</p>\n";
            $ingredientesOk = $cantidadesOk = FALSE;
        } elseif (!is_numeric($cantidad[$i])) { 
            print "<p style=\"color: red\">No ha escrito la cantidad del ingrediente "
                ."$ingrediente[$i] como número.</p>\n";
            $cantidadesOk = FALSE;
        } elseif ($cantidad[$i]<0 || $cantidad[$i]>=MAX_CANTIDAD) {
            print "<p style=\"color: red\">La cantidad del ingrediente $ingrediente[$i] "
                ."no está entre 0 y ".MAX_CANTIDAD.".</p>\n";
            $cantidadesOk = FALSE;
        } else {
            $numeroIngredientes++;            
            if ($comensalesOk) {   
                $cantidad[$i] = round($cantidad[$i]/$comensales);
            }
        } 
    }
}

if ($numeroIngredientes==0) {
    print "<p style=\"color: red\">No se han escrito ingredientes con su cantidad.</p>\n";
    $ingredientesOk = $cantidadesOk = FALSE;
}

if ($recetaOk && $comensalesOk && $ingredientesOk && $cantidadesOk) {
    print "<p>Los datos son correctos</p>\n";
    print "<p>Receta de <strong>$receta</strong> para una persona:</p>\n";
    print "<ul>\n";
    for ($i = 1; $i<=MAX_INGREDIENTES; $i++) {
        if ($ingrediente[$i]!="") {
                print "  <li>$ingrediente[$i]: $cantidad[$i] gr (sólidos) o ml (líquidos)</li>\n";
        }
    }
    print "</ul>\n\n";
}

print '<p><a href="recetas1.php">Volver al formulario</a>

<div id="pie">
<address>
  Este programa forma parte del curso "Páginas web con PHP" disponible en <a
  href="http://www.mclibre.org/">http://www.mclibre.org</a><br />
  Autor: Bartolomé Sintes Marco<br />
  Última modificación de este programa: 27 de mayo de 2010 
</address>
<p class="licencia">El programa PHP que genera esta página está bajo 
<a rel="license" href="http://www.gnu.org/licenses/agpl.txt">licencia AGPL 3 o
posterior</a>.</p>
</div>
</body>
</html>';
?>
