* Removed check_mobile include which was crashing pages like the admin section (it was previously added to functions.inc.php) * Fixed ABV display in lists * Fixed bitterness calculations. * Removed call-time pass-by-reference in BeerXML parser, since it is no longer supported by PHP
		
			
				
	
	
		
			290 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| //-----------------------//
 | |
| // Bitterness Calculator //
 | |
| //-----------------------//
 | |
| 
 | |
| require_once (ADMIN_LIBRARY.'bitterness.lib.php');
 | |
| require_once (ADMIN_INCLUDES.'constants.inc.php');
 | |
| 
 | |
| // This is the maximum number of hop entries we can 
 | |
| // process in this calculator.
 | |
| #$MAX_HOPS = 20;
 | |
| 
 | |
| // Initial number of hop entries to display.
 | |
| $INIT_HOP_ENTRIES = 3;
 | |
| 
 | |
| // Default hop form ('whole' or 'pellet')
 | |
| $DEFAULT_FORM = 'pellet';
 | |
| 
 | |
| // Default batch size
 | |
| if ($row_user['defaultBatchSize'] > 0) {
 | |
|   $DEFAULT_BATCH_SZ = $row_user['defaultBatchSize'];
 | |
|  } else {
 | |
|   if ($row_pref['measFluid2'] == "gallons")
 | |
|     $DEFAULT_BATCH_SZ = 5;
 | |
|   else
 | |
|     $DEFAULT_BATCH_SZ = 19;
 | |
|  }
 | |
| 
 | |
| $gravity = (isset($_POST['gravity']))?$_POST['gravity']:'';
 | |
| 
 | |
| if (($action == "calculate") || ($action == "entry")) {
 | |
| // The $form variable and 'form' $_POST key are in reference to
 | |
| // the format of the hops, i.e. whole/plug or pellet.
 | |
| // It's easy to confuse this with fact that it's being 
 | |
| // submitted via an HTML form.
 | |
| 
 | |
|   // @TODO: Format this form as $_POST['hops'][$i]['weight|aa|utilization|form'] so we can foreach over it
 | |
|   $submittedHops = 0;
 | |
|   for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|     if (isset($_POST['hopWeight'][$i])) {
 | |
|       $submittedHops = $i + 1;
 | |
|     }
 | |
|     $hopWeight[$i]   = isset($_POST['hopWeight'][$i])?$_POST['hopWeight'][$i]:NULL;
 | |
|     $hopAA[$i]       = isset($_POST['hopAA'][$i])?$_POST['hopAA'][$i]:NULL;
 | |
|     $utilization[$i] = isset($_POST['utilization'][$i])?$_POST['utilization'][$i]:NULL;
 | |
|     $form[$i]        = isset($_POST['form'][$i])?$_POST['form'][$i]:NULL;
 | |
|   }
 | |
| 
 | |
|   $preBoilVol  = $_POST['preBoilVol'];
 | |
|   $finalVol    = $_POST['finalVol'];
 | |
|   $desiredIBUs = $_POST['desiredIBUs'];
 | |
|   $elevation   = $_POST['elevation'];
 | |
|   $units       = $_POST['units'];
 | |
| 
 | |
|   // Tinseth method
 | |
|   $ibuT = 0;
 | |
|   $ibu_T = array_fill(0, MAX_HOPS, NULL);
 | |
|   for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|     if (!isset($hopWeight[$i])) {
 | |
|       continue;
 | |
|     }
 | |
|     $ibu_T[$i] = calc_bitter_tinseth($utilization[$i], $gravity, $hopAA[$i], $hopWeight[$i], $finalVol, $form[$i], $units);
 | |
|     $ibuT     += $ibu_T[$i];
 | |
|   }
 | |
| 
 | |
|   // Rager Method
 | |
|   $ibuR = 0;
 | |
|   $ibu_R = array_fill(0, MAX_HOPS, NULL);
 | |
|   for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|     if (!isset($hopWeight[$i])) {
 | |
|       continue;
 | |
|     }
 | |
|     $ibu_R[$i] = calc_bitter_rager($utilization[$i], $gravity, $hopAA[$i], $hopWeight[$i], $finalVol, $form[$i], $units);
 | |
|     $ibuR     += $ibu_R[$i];
 | |
|   }
 | |
| 
 | |
|   // Daniels Method
 | |
|   $ibuD = 0;
 | |
|   $ibu_D = array_fill(0, MAX_HOPS, NULL);
 | |
|   for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|     if (!isset($hopWeight[$i])) {
 | |
|       continue;
 | |
|     }
 | |
|     $ibu_D[$i] = calc_bitter_daniels($utilization[$i], $gravity, $hopAA[$i], $hopWeight[$i], $finalVol, $form[$i], $units);
 | |
|     $ibuD     += $ibu_D[$i];
 | |
|   }
 | |
| 
 | |
|   // Garetz Method
 | |
|   $ibuG = 0;
 | |
|   $ibu_G = array_fill(0, MAX_HOPS, NULL);
 | |
|   if (($preBoilVol > 0) && ($desiredIBUs > 0) && ($elevation >= 0)) {
 | |
|     for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|       if (!isset($hopWeight[$i])) {
 | |
|         continue;
 | |
|       }
 | |
|       $ibu_G[$i] = calc_bitter_garetz($utilization[$i], $gravity, $hopAA[$i], $hopWeight[$i], $finalVol, $form[$i], $units,
 | |
|                                       $preBoilVol, $desiredIBUs, $elevation);
 | |
|       $ibuG     += $ibu_G[$i];
 | |
|     }
 | |
|   }
 | |
| 
 | |
|  } // End if calculate
 | |
| 
 | |
| if (($action == "default") || ($action == "entry")) { 
 | |
|   ?>
 | |
|   <script type="text/javascript" language="JavaScript" src="<?php if (file_exists("bitterness.js")) echo "bitterness.js"; else echo "admin/tools/bitterness.js"; ?>"></script>
 | |
|   <form name="form1" method="post" action="?page=<?php echo $page; ?>§ion=<?php echo $section; ?>&action=calculate" onSubmit="return CheckRequiredFields()">
 | |
|   <div id="wideWrapper<?php if ($page == "tools") echo "Reference"; ?>">
 | |
|   <div id="referenceHeader">International Bitterness Unit (IBU) Calculator</div>
 | |
|   <table id="hop_entries">
 | |
|   
 | |
|   <?php
 | |
|   function create_hop_entries($start, $end) {
 | |
|     global $action, $hopWeight, $hopAA, $utilization, $form, $DEFAULT_FORM;
 | |
|     for ($i = $start; $i <= $end; $i++) {
 | |
|       echo '<tr>';
 | |
|       echo '<td class="dataLabelLeft">Hop ' . ($i + 1) . ' Weight:';
 | |
|       if ($i == 0) echo '*';
 | |
|       echo '</td>'."\n";
 | |
|       echo '<td class="data"><input name="hopWeight['.$i.']" type="text" size="5" value="';
 | |
|       if ($action == "entry") echo $hopWeight[$i];
 | |
|       echo '" /></td>'."\n";
 | |
|       echo '<td class="dataLabel">Hop ' . ($i + 1) . ' AA%:';
 | |
|       if ($i == 0) echo '*';
 | |
|       echo '</td>'."\n";
 | |
|       echo '<td class="data"><input name="hopAA['.$i.']" type="text" size="5" value="';
 | |
|       if ($action == "entry") echo $hopAA[$i];
 | |
|       echo '" /></td>'."\n";
 | |
|       echo '<td class="dataLabel">Hop ' . ($i + 1) . ' Time (min):';
 | |
|       if ($i == 0) echo '*';
 | |
|       echo '</td>'."\n";
 | |
|       echo '<td class="data"><input name="utilization['.$i.']" type="text" size="5" value="';
 | |
|       if ($action == "entry") echo $utilization[$i];
 | |
|       echo '" /></td>'."\n";
 | |
|       echo '<td class="dataLabel">Form:</td>'."\n";
 | |
|       echo '<td class="data" nowrap="nowrap">';
 | |
|       echo '<input type="radio" name="form['.$i.']" value="pellet"';
 | |
|       if ((($action == "entry") && ($form[$i] == "pellet")) || ($DEFAULT_FORM == "pellet")) echo ' CHECKED';
 | |
|       echo ' />Pellet ';
 | |
|       echo '<input type="radio" name="form['.$i.']" value="whole"';
 | |
|       if ((($action == "entry") && ($form[$i] == "whole")) || ($DEFAULT_FORM == "whole")) echo ' CHECKED';
 | |
|       echo ' />Whole/Plug</td>'."\n";
 | |
|       echo '</tr>'."\n";
 | |
|     }
 | |
|   }
 | |
|     
 | |
|   create_hop_entries(0, $INIT_HOP_ENTRIES - 1);
 | |
| 
 | |
|   // Add any extra hop entries if the user previously gave values for them.
 | |
|   if ($action == "entry") {
 | |
|     $endHopEntries = 0;
 | |
|     for ($i = $INIT_HOP_ENTRIES; $i < MAX_HOPS; $i++) {
 | |
|       if ($hopWeight[$i] > 0) $endHopEntries = $i;
 | |
|     }
 | |
|     if ($endHopEntries > 0) create_hop_entries($INIT_HOP_ENTRIES, $endHopEntries);
 | |
|   }
 | |
|   ?>
 | |
|   
 | |
|   <tr id="addHopButtonRow">
 | |
|   <td><input id="addHopButton" type="button" value="Add Hop Entry" onClick="addHop('hop_entries', <?php echo MAX_HOPS . ', \'' . $DEFAULT_FORM . '\', '; if (($action == "entry") && ($endHopEntries > 0)) echo $endHopEntries + 1; else echo $INIT_HOP_ENTRIES; ?>);" class="add-button"></td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|      <td class="dataLabelLeft">Final Volume:*</td>
 | |
|      <td class="data"><input name="finalVol" type="text" id="finalVol" size="5" value="<?php if ($action == "default") echo $DEFAULT_BATCH_SZ; else echo $finalVol; ?>" /></td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|      <td class="dataLabelLeft">Original Gravity:*</td>
 | |
|      <td class="data"><input type="text" name="gravity" id="gravity" size="5" value="<?php if ($action == "entry") echo $gravity; ?>" /></td>
 | |
|      <td colspan="6">e.g., 1.045</td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|      <td class="dataLabelLeft">Target IBUs:</td>
 | |
|      <td class="data"><input type="text" name="desiredIBUs" id="desiredIBUs" size="5" value="<?php if ($action == "entry") echo $desiredIBUs; ?>" /></td>
 | |
|      <td colspan="6">(only required for Garetz)</td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|      <td class="dataLabelLeft">Elevation:</td>
 | |
|      <td class="data"><input type="text" name="elevation" id="elevation" size="5" value="<?php if ($action == "entry") echo $elevation; ?>" /></td>
 | |
|      <td colspan="6">feet or meters (only required for Garetz)</td>
 | |
|   <tr>
 | |
|      <td class="dataLabelLeft">Pre-Boil Volume:</td>
 | |
|      <td class="data"><input name="preBoilVol" type="text" id="preBoilVol" size="5" value="<?php if ($action == "entry") echo $preBoilVol; ?>" /></td>
 | |
|      <td colspan="6">(only required for Garetz)</td>
 | |
|   </tr>
 | |
|   <tr>
 | |
|      <td class="dataLabelLeft">Units</td>
 | |
|      <td class="data" colspan="3">
 | |
|      <select class="text_area"  name="units">
 | |
|      <?php
 | |
|      if (($action == "default") && (($row_pref['measWeight1'] == "grams") || ($row_pref['measWeight2'] == "ounces")))
 | |
|        $units = "metric";
 | |
|      elseif ($action == "default")
 | |
|        $units = "us";
 | |
|      ?>
 | |
|      <option value="us" <?php if ($units == "us") echo "SELECTED" ?>>U.S.</option>
 | |
|      <option value="metric" <?php if ($units == "metric") echo "SELECTED" ?>>Metric </option>
 | |
|      </select></td>
 | |
|      <td class ="dataLabelWide data" colspan="4">* indicates required field</td>
 | |
|   </tr>
 | |
| </table>
 | |
| </div>
 | |
| 
 | |
| <?php if (!checkmobile ()) { ?><input type="image" src="<?php echo $imageSrc."Brilliant"; ?>/button_calculate_Brilliant.png" alt="Calculate" class="calcButton" value="Calculate" /><?php } else { ?><input type="submit" class="calcButton" value="Calculate" /><?php } ?>
 | |
| <?php if ($action == "entry") { ?><a class="calcButton" href="?page=<?php echo $page; ?>&section=<?php echo $section; ?>"><?php if (!checkmobile()) { ?><img src="<?php echo $imageSrc."Brilliant" ?>/button_clear_Brilliant.png" border="0" title="Clear" alt="Clear"/><?php } else echo "Clear"; ?></a><?php } ?>
 | |
| </form>
 | |
|     <?php } // end if "default" || "entry"
 | |
| 
 | |
| if  ($action == "calculate") { ?>
 | |
| <form name="form1" method="post" action="?page=<?php echo $page; ?>§ion=<?php echo $section; ?>&action=entry">
 | |
| <div id="hide">
 | |
| 
 | |
| <?php
 | |
| for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|   echo '<input name="hopWeight['.$i.']" type="hidden" value="'.$hopWeight[$i].'" />';
 | |
|   echo '<input name="hopAA['.$i.']" type="hidden" value="'.$hopAA[$i].'" />';
 | |
|   echo '<input name="utilization['.$i.']" type="hidden" value="'.$utilization[$i].'" />';
 | |
|   echo '<input name="form['.$i.']" type="hidden" value="'.$form[$i].'" />';
 | |
| }
 | |
| ?>
 | |
| <input name="finalVol" type="hidden" value="<?php echo $finalVol; ?>" />
 | |
| <input name="gravity" type="hidden" value="<?php echo $gravity; ?>" />
 | |
| <input name="desiredIBUs" type="hidden" value="<?php echo $desiredIBUs; ?>" />
 | |
| <input name="elevation" type="hidden" value="<?php echo $elevation; ?>" />
 | |
| <input name="preBoilVol" type="hidden" value="<?php echo $preBoilVol; ?>" />
 | |
| <input name="units" type="hidden" value="<?php echo $units; ?>" />
 | |
| </div>
 | |
| 
 | |
| <div id="wideWrapper<?php if ($page == "tools") echo "Reference"; ?>">
 | |
| <div id="referenceHeader">International Bitterness Unit Calculator</div>
 | |
| <table>
 | |
|    <tr>
 | |
|      <td class="dataHeading"> </td>
 | |
|      <td class="data dataHeading" width="10%">Daniels</td>
 | |
|      <td class="data dataHeading" width="10%">Garetz</td>
 | |
|      <td class="data dataHeading" width="10%">Rager</td>
 | |
|      <td class="data dataHeading">Tinseth</td>
 | |
|    </tr>
 | |
| 
 | |
| <?php
 | |
|   $endHopEntries = 0;
 | |
|   for ($i = 0; $i < MAX_HOPS; $i++) {
 | |
|     if (isset($ibu_T[$i]) && $ibu_T[$i] > 0) $endHopEntries = $i;
 | |
|   }
 | |
| 
 | |
|   for ($i = 0; $i <= $endHopEntries; $i++) {
 | |
|     echo '<tr>';
 | |
|     echo '<td class="dataLabelLeft">Hop ' . ($i + 1) . ' IBU: </td>';
 | |
|     echo '<td class="data">' . round($ibu_D[$i], 1) . '</td>';
 | |
|     echo '<td class="data">' . round($ibu_G[$i], 1) . '</td>';
 | |
|     echo '<td class="data">' . round($ibu_R[$i], 1) . '</td>';
 | |
|     echo '<td class="data">' . round($ibu_T[$i], 1) . '</td>';
 | |
|     echo '</tr>';
 | |
|   }
 | |
| ?>
 | |
| 
 | |
|    <tr>
 | |
|      <td class="dataLabelLeft bdr1T_dark">Total IBUs:</td>
 | |
|      <td class="data bdr1T_dark"><?php echo round ($ibuD, 1); ?></td>
 | |
|      <td class="data bdr1T_dark"><?php echo round ($ibuG, 1); ?></td>
 | |
|      <td class="data bdr1T_dark"><?php echo round ($ibuR, 1); ?></td>
 | |
|      <td class="data bdr1T_dark"><?php echo round ($ibuT, 1); ?></td>
 | |
|    </tr>
 | |
|    <tr>
 | |
|      <td class="dataLabelLeft">Average IBUs:</td>
 | |
|      <?php
 | |
|        if ($ibuG > 0) { 
 | |
|    echo '<td class="data" colspan="4">'; 
 | |
|    $ibuAverage = ($ibuG + $ibuR + $ibuT + $ibuD) / 4;
 | |
|    echo round ($ibuAverage, 1) . '</td>';
 | |
|        } else { 
 | |
|    echo '<td class="data">'; 
 | |
|    $ibuAverage = ($ibuR + $ibuT + $ibuD) / 3; 
 | |
|    echo round ($ibuAverage, 1);
 | |
|    echo '<td class="data" colspan="3">(Garetz formula excluded from avg.)</td>';
 | |
|        }
 | |
|      ?>
 | |
|    </tr>
 | |
|       <?php
 | |
|        if ($desiredIBUs > 0) {
 | |
|    echo '<tr>';
 | |
|    echo '<td class="dataLabelLeft">Target IBUs:</td>';
 | |
|    echo '<td class="data" colspan="4">' . $desiredIBUs . '</td>';
 | |
|    echo '</tr>';
 | |
|        }
 | |
|       ?>
 | |
|    </table>
 | |
|    </div>
 | |
|                            
 | |
| <?php if (!checkmobile()) { ?><input type="image" src="<?php echo $imageSrc."Brilliant"; ?>/button_back_Brilliant.png" alt="Re-Enter Values" class="calcButton" value="Re-Enter Values" /><? } else { ?><input type="submit" class="calcButton" value="Go Back" /><?php } ?></div>
 | |
| <?php } ?>
 |