The trunk folder is for all new features that are not yet ready for release. This folder will be for stabilizing work as it is built and creating new features. The releases folder is used for release builds. The earliest available build is 2.3.x, and thus it will have the 2.3 folder. All maintenance and bug fixes go in this folder. No new features whatsoever are to be added in here, keeping those completely in the trunk. When the trunk is ready for the next version, it will have a new folder created for it (releases/2.4 for instance) to stabilizing for final release. The tags folder is used for individual releases. When a release build is ready to go out for download, that release folder will be cloned into an appropriate tag folder. For example, the releases/2.3 folder will be cloned into tags/2.3.1 for that release, and after more work on bug fixes, it will be cloned to tags/2.3.2. Thus, these tag folders should never be modified for any reason. The tag exists purely as a snapshot of a certain point on the release path, and to modify a snapshot defeats the purpose. Any bug in a tagged release should be fixed in the appropriate release folder (such as releases/2.3 for a bug found in 2.3.1).
363 lines
16 KiB
PHP
363 lines
16 KiB
PHP
<?php
|
|
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
|
|
//{{{ License
|
|
// +------------------------------------------------------------------------+
|
|
// | Input Beer XML - takes recipes objects from BeerXMLParser |
|
|
// | and inserts recipes into database |
|
|
// | |
|
|
// | NOTES - measurements in METRIC |
|
|
// +------------------------------------------------------------------------+
|
|
// | This program is free software; you can redistribute it and/or |
|
|
// | modify it under the terms of the GNU General Public License |
|
|
// | as published by the Free Software Foundation; either version 2 |
|
|
// | of the License, or (at your option) 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 General Public License for more details. |
|
|
// | |
|
|
// | You should have received a copy of the GNU General Public License |
|
|
// | along with this program; if not, write to the Free Software |
|
|
// | Foundation, Inc., 59 Temple Place - Suite 330, |
|
|
// | Boston, MA 02111-1307, USA. |
|
|
// +------------------------------------------------------------------------+
|
|
// | Author: Oskar Stephens <oskar.stephens@gmail.com> |
|
|
// +------------------------------------------------------------------------+
|
|
//}}}
|
|
|
|
require ('../../Connections/config.php');
|
|
include ('parse_beer_xml.inc.php');
|
|
|
|
//{{{ InputBeerXML
|
|
class InputBeerXML {
|
|
public $recipes;
|
|
public $insertedRecipes;
|
|
public $brewer;
|
|
//{{{InputBeerXML
|
|
function InputBeerXML($filename) {
|
|
$this->brewer = $GLOBALS['loginUsername'];
|
|
$this->recipes = new BeerXMLParser($filename);
|
|
}
|
|
//}}}
|
|
|
|
//{{{ insertRecipes
|
|
function insertRecipes(){
|
|
foreach($this->recipes->recipes as $recipe){
|
|
$this->insertRecipe($recipe);
|
|
}
|
|
return $this->insertedRecipes;
|
|
}
|
|
//}}}
|
|
|
|
//{{{ insertRecipe
|
|
function insertRecipe($recipe){
|
|
$brewing = mysql_connect($GLOBALS['hostname_brewblog'], $GLOBALS['username_brewblog'], $GLOBALS['password_brewblog']) or trigger_error(mysql_error());
|
|
$sqlQuery = "INSERT INTO recipes ";
|
|
$fields = "(brewName";
|
|
$values = " VALUES('" . $recipe->name . "'";
|
|
$vf = array();
|
|
$counter = array();
|
|
|
|
//$vf["brewName"] = $recipe->name;
|
|
$vf["brewStyle"] = $recipe->style->name;
|
|
$vf["brewSource"] = "BeerXML Parser";
|
|
$vf["brewYield"] = round(($recipe->batchSize * 0.26418), 3);
|
|
$vf["brewNotes"] = $recipe->notes;
|
|
$vf["brewMethod"] = $recipe->type;
|
|
$counter["grain"] = 0;
|
|
$counter["extract"] = 0;
|
|
$counter["adjunct"] = 0;
|
|
foreach($recipe->fermentables->fermentables as $fermentable){
|
|
switch($fermentable->type){
|
|
case "Grain":
|
|
$counter["grain"]++;
|
|
if($counter["grain"] <= 9){
|
|
$vf["brewGrain" . $counter["grain"]] = $fermentable->name;
|
|
$vf["brewGrain" . $counter["grain"] . "Weight"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Extract":
|
|
$counter["extract"]++;
|
|
if($counter["extract"] <= 5){
|
|
$vf["brewExtract" . $counter["extract"]] = $fermentable->name;
|
|
$vf["brewExtract" . $counter["extract"] . "Weight"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Dry Extract":
|
|
$counter["extract"]++;
|
|
if($counter["extract"] <= 5){
|
|
$vf["brewExtract" . $counter["extract"]] = $fermentable->name;
|
|
$vf["brewExtract" . $counter["extract"] . "Weight"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Adjunct":
|
|
$counter["adjunct"]++;
|
|
if($counter["adjunct"] <= 9){
|
|
$vf["brewAddition" . $counter["adjunct"]] = $fermentable->name;
|
|
$vf["brewAddition" . $counter["adjunct"] . "Amt"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Sugar":
|
|
$counter["adjunct"]++;
|
|
if($counter["adjunct"] <= 9){
|
|
$vf["brewAddition" . $counter["adjunct"]] = $fermentable->name;
|
|
$vf["brewAddition" . $counter["adjunct"] . "Amt"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
$counter["misc"] = 0;
|
|
foreach($recipe->miscs->miscs as $misc){
|
|
$counter["misc"]++;
|
|
if($counter["misc"] <= 4){
|
|
$vf["brewMisc" . $counter["misc"] . "Name"] = $misc->name;
|
|
$vf["brewMisc" . $counter["misc"] . "Type"] = $misc->type;
|
|
$vf["brewMisc" . $counter["misc"] . "Use"] = $misc->useFor;
|
|
$vf["brewMisc" . $counter["misc"] . "Time"] = $misc->time;
|
|
$vf["brewMisc" . $counter["misc"] . "Amount"] = $misc->amount;
|
|
}
|
|
}
|
|
|
|
$counter["hops"] = 0;
|
|
foreach($recipe->hops->hops as $hop){
|
|
$counter["hops"]++;
|
|
if($counter["hops"] <= 9){
|
|
$vf["brewHops" . $counter["hops"]] = $hop->name;
|
|
$vf["brewHops" . $counter["hops"] . "Weight"] = round(($hop->amount * 35.2739619),3);
|
|
$vf["brewHops" . $counter["hops"] . "IBU"] = $hop->alpha;
|
|
$vf["brewHops" . $counter["hops"] . "Time"] = $hop->time;
|
|
$vf["brewHops" . $counter["hops"] . "Use"] = $hop->use;
|
|
$vf["brewHops" . $counter["hops"] . "Type"] = $hop->type;
|
|
$vf["brewHops" . $counter["hops"] . "Form"] = $hop->form;
|
|
}
|
|
}
|
|
|
|
$counter["yeast"] = 0;
|
|
foreach($recipe->yeasts->yeasts as $yeast){
|
|
$vf["brewYeast"] = $yeast->name;
|
|
$vf["brewYeast" . "Man"] = $yeast->labratory;
|
|
$vf["brewYeast" . "Form"] = $yeast->form;
|
|
$vf["brewYeast" . "Type"] = $yeast->type;
|
|
$vf["brewYeast" . "Amount"] = $yeast->amount;
|
|
}
|
|
|
|
$vf["brewOG"] = 1 . substr($recipe->estimatedOriginalGravity,1,4);
|
|
$vf["brewFG"] = 1 . substr($recipe->estimatedFinalGravity,1,4);
|
|
$vf["brewProcedure"] = $recipe->notes;
|
|
$vf["brewPrimary"] = $recipe->primaryAge;
|
|
$vf["brewPrimaryTemp"] = $recipe->primaryTemp * (9/5) + 32;
|
|
$vf["brewSecondary"] = $recipe->secondaryAge;
|
|
$vf["brewSecondaryTemp"] = $recipe->secondaryTemp * (9/5) + 32;
|
|
$vf["brewTertiary"] = $recipe->tertiaryAge;
|
|
$vf["brewTertiaryTemp"] = $recipe->secondaryTemp * (9/5) + 32;
|
|
$vf["brewAge"] = $recipe->age;
|
|
$vf["brewAgeTemp"] = $recipe->ageTemp * (9/5) + 32;
|
|
$vf["brewBitterness"] = $recipe->ibu;
|
|
$vf["brewLovibond"] = $recipe->estimatedColor;
|
|
$vf["brewBrewerID"] = $this->brewer;
|
|
|
|
|
|
foreach($vf as $field=>$value){
|
|
$fields .= "," . $field;
|
|
$values .= ",'" . $value . "'";
|
|
}
|
|
|
|
$fields .= ")";
|
|
$values .= ")";
|
|
$sqlQuery .= $fields . $values;
|
|
//echo $sqlQuery . "<br />";
|
|
mysql_select_db($GLOBALS['database_brewing'], $brewing) or die(mysql_error());
|
|
$Result1 = mysql_query($sqlQuery, $brewing) or die(mysql_error());
|
|
|
|
$this->insertedRecipes[mysql_insert_id()] = $recipe->name;
|
|
}
|
|
//}}}
|
|
|
|
//{{{ insertBlogs
|
|
function insertBlogs(){
|
|
foreach($this->recipes->recipes as $recipe){
|
|
$this->insertBlog($recipe);
|
|
}
|
|
return $this->insertedRecipes;
|
|
}
|
|
//}}}
|
|
|
|
//{{{ insertBlog
|
|
function insertBlog($recipe){
|
|
$brewing = mysql_connect($GLOBALS['hostname_brewblog'], $GLOBALS['username_brewblog'], $GLOBALS['password_brewblog']) or trigger_error(mysql_error());
|
|
mysql_select_db($GLOBALS['database_brewing'], $brewing) or die(mysql_error());
|
|
|
|
$sqlQuery = "INSERT INTO brewing ";
|
|
$fields = "(brewName";
|
|
$values = " VALUES('" . $recipe->name . "'";
|
|
$vf = array();
|
|
$counter = array();
|
|
$batchNumber = " SELECT brewBatchNum FROM `brewing` ORDER BY brewBatchNum DESC LIMIT 1 ";
|
|
|
|
$vf["brewStyle"] = $recipe->style->name;
|
|
//$vf["brewSource"] = "BeerXML Parser";
|
|
//$vf["brewBatchNum"] = ((int)mysql_query($batchNumber,$brewing))++;
|
|
$vf["brewYield"] = round(($recipe->batchSize * 0.26418), 3);
|
|
$vf["brewInfo"] = $recipe->notes;
|
|
$vf["brewMethod"] = $recipe->type;
|
|
$vf["brewDate"] = date("Y-m-d", strtotime($recipe->date));
|
|
|
|
$counter["grain"] = 0;
|
|
$totalGrainWeight = 0;
|
|
$counter["extract"] = 0;
|
|
$counter["adjunct"] = 0;
|
|
foreach($recipe->fermentables->fermentables as $fermentable){
|
|
switch($fermentable->type){
|
|
case "Grain":
|
|
$counter["grain"]++;
|
|
if($counter["grain"] <= 9){
|
|
$vf["brewGrain" . $counter["grain"]] = $fermentable->name;
|
|
$vf["brewGrain" . $counter["grain"] . "Weight"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Extract":
|
|
$counter["extract"]++;
|
|
if($counter["extract"] <= 5){
|
|
$vf["brewExtract" . $counter["extract"]] = $fermentable->name;
|
|
$vf["brewExtract" . $counter["extract"] . "Weight"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Dry Extract":
|
|
$counter["extract"]++;
|
|
if($counter["extract"] <= 5){
|
|
$vf["brewExtract" . $counter["extract"]] = $fermentable->name;
|
|
$vf["brewExtract" . $counter["extract"] . "Weight"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Adjunct":
|
|
$counter["adjunct"]++;
|
|
if($counter["adjunct"] <= 9){
|
|
$vf["brewAddition" . $counter["adjunct"]] = $fermentable->name;
|
|
$vf["brewAddition" . $counter["adjunct"] . "Amt"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
case "Sugar":
|
|
$counter["adjunct"]++;
|
|
if($counter["adjunct"] <= 9){
|
|
$vf["brewAddition" . $counter["adjunct"]] = $fermentable->name;
|
|
$vf["brewAddition" . $counter["adjunct"] . "Amt"] = round(($fermentable->amount * 2.20462262),3);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
$counter["misc"] = 0;
|
|
foreach($recipe->miscs->miscs as $misc){
|
|
$counter["misc"]++;
|
|
if($counter["misc"] <= 4){
|
|
$vf["brewMisc" . $counter["misc"] . "Name"] = $misc->name;
|
|
$vf["brewMisc" . $counter["misc"] . "Type"] = $misc->type;
|
|
$vf["brewMisc" . $counter["misc"] . "Use"] = $misc->useFor;
|
|
$vf["brewMisc" . $counter["misc"] . "Time"] = $misc->time;
|
|
$vf["brewMisc" . $counter["misc"] . "Amount"] = $misc->amount;
|
|
}
|
|
}
|
|
|
|
$counter["hops"] = 0;
|
|
foreach($recipe->hops->hops as $hop){
|
|
$counter["hops"]++;
|
|
if($counter["hops"] <= 9){
|
|
$vf["brewHops" . $counter["hops"]] = $hop->name;
|
|
$vf["brewHops" . $counter["hops"] . "Weight"] = round(($hop->amount * 35.2739619),3);
|
|
$vf["brewHops" . $counter["hops"] . "IBU"] = $hop->alpha;
|
|
$vf["brewHops" . $counter["hops"] . "Time"] = $hop->time;
|
|
$vf["brewHops" . $counter["hops"] . "Use"] = $hop->use;
|
|
$vf["brewHops" . $counter["hops"] . "Type"] = $hop->type;
|
|
$vf["brewHops" . $counter["hops"] . "Form"] = $hop->form;
|
|
}
|
|
}
|
|
|
|
$counter["yeast"] = 0;
|
|
foreach($recipe->yeasts->yeasts as $yeast){
|
|
$vf["brewYeast"] = $yeast->name;
|
|
$vf["brewYeast" . "Man"] = $yeast->labratory;
|
|
$vf["brewYeast" . "Form"] = $yeast->form;
|
|
$vf["brewYeast" . "Type"] = $yeast->type;
|
|
$vf["brewYeast" . "Amount"] = $yeast->amount;
|
|
}
|
|
|
|
$counter["mash"] = 0;
|
|
//$vf["brewMashGrainWeight"] = $recipe->mash->
|
|
$vf["brewMashGrainTemp"] = $recipe->mash->grainTemp * (9/5) + 32;
|
|
$vf["brewMashTunTemp"] = $recipe->mash->tunTemp * (9/5) + 32;
|
|
$vf["brewMashPH"] = $recipe->mash->ph;
|
|
$vf["brewMashGrainWeight"] = $totalGrainWeight;
|
|
$vf["brewMashType"] = "Infusion"; // this is hard coded because it is the most common and the beerXML spec does not mention it
|
|
$vf["brewMashEquipAdjust"] = $recipe->mash->equipAdjust; // FIELDS TO COMPLETE: spargeAmt
|
|
$vf["brewMashSpargeTemp"] = $recipe->mash->spargeTemp * (9/5) + 32;
|
|
$totalSpargeAmount = 0;
|
|
foreach($recipe->mash->mashSteps as $mashStep){
|
|
$counter["mash"]++;
|
|
if($counter["mash"] <= 5){
|
|
$vf["brewMashStep" . $counter["mash"] . "Name"] = $mashStep->name;
|
|
$vf["brewMashStep" . $counter["mash"] . "Temp"] = $mashStep->stepTemp * (9/5) + 32;
|
|
$vf["brewMashStep" . $counter["mash"] . "Time"] = $mashStep->stepTime;
|
|
$vf["brewMashStep" . $counter["mash"] . "Desc"] = $mashStep->type;
|
|
$totalSpargeAmount += $mashStep->infuseAmount;
|
|
}
|
|
}
|
|
$vf["brewMashSpargAmt"] = round($totalSpargeAmount * 0.26418,3);
|
|
|
|
foreach($recipe->waters->waters as $water){
|
|
$vf["brewWaterName"] = $water->name;
|
|
$vf["brewWaterAmount"] = $water->amount;
|
|
$vf["brewWaterCalcium"] = $water->calcium;
|
|
$vf["brewWaterBicarb"] = $water->bicarbonate;
|
|
$vf["brewWaterSulfate"] = $water->sulfate;
|
|
$vf["brewWaterChloride"] = $water->chloride;
|
|
$vf["brewWaterMagnesium"] = $water->magnesium;
|
|
$vf["brewWaterPH"] = $water->ph;
|
|
$vf["brewWaterNotes"] = $water->notes;
|
|
$vf["brewWaterSodium"] = $water->sodium;
|
|
}
|
|
|
|
$vf["brewOG"] = 1 . substr($recipe->estimatedOriginalGravity,1,4);
|
|
$vf["brewFG"] = 1 . substr($recipe->estimatedFinalGravity,1,4);
|
|
$vf["brewProcedure"] = $recipe->notes;
|
|
$vf["brewPrimary"] = $recipe->primaryAge;
|
|
$vf["brewPrimaryTemp"] = $recipe->primaryTemp * (9/5) + 32;
|
|
$vf["brewSecondary"] = $recipe->secondaryAge;
|
|
$vf["brewSecondaryTemp"] = $recipe->secondaryTemp * (9/5) + 32;
|
|
$vf["brewTertiary"] = $recipe->tertiaryAge;
|
|
//$vf["brewTertiaryTemp"] = $recipe->secondaryTemp * (9/5) + 32;
|
|
$vf["brewAge"] = $recipe->age;
|
|
$vf["brewAgeTemp"] = $recipe->ageTemp * (9/5) + 32;
|
|
$vf["brewBitterness"] = $recipe->ibu;
|
|
$vf["brewLovibond"] = $recipe->estimatedColor;
|
|
$vf["brewEfficiency"] = $recipe->efficiency;
|
|
$vf["brewPreBoilAmt"] = round($recipe->boilSize * 0.26418,3);
|
|
$vf["brewBrewerID"] = $this->brewer;
|
|
|
|
|
|
foreach($vf as $field=>$value){
|
|
$fields .= "," . $field;
|
|
$values .= ",'" . $value . "'";
|
|
}
|
|
|
|
$fields .= ")";
|
|
$values .= ")";
|
|
$sqlQuery .= $fields . $values;
|
|
//echo $sqlQuery . "<br />";
|
|
$Result1 = mysql_query($sqlQuery, $brewing) or die(mysql_error());
|
|
|
|
$this->insertedRecipes[mysql_insert_id()] = $recipe->name;
|
|
}
|
|
|
|
}
|
|
//}}}
|
|
|
|
//}}}
|
|
|
|
?>
|