2018-07-14 18:23:41 +02:00
< ? php
namespace Grocy\Controllers ;
use \Grocy\Services\RecipesService ;
class RecipesController extends BaseController
{
2020-02-11 17:42:03 +01:00
public function __construct ( \DI\Container $container )
2018-07-14 18:23:41 +02:00
{
parent :: __construct ( $container );
}
2020-02-11 17:42:03 +01:00
public function Overview ( \Psr\Http\Message\ServerRequestInterface $request , \Psr\Http\Message\ResponseInterface $response , array $args )
2018-07-14 18:23:41 +02:00
{
2020-03-01 23:47:47 +07:00
$recipes = $this -> getDatabase () -> recipes () -> where ( 'type' , RecipesService :: RECIPE_TYPE_NORMAL ) -> orderBy ( 'name' );
$recipesResolved = $this -> getRecipesService () -> GetRecipesResolved ();
2018-07-15 10:16:36 +02:00
2018-07-15 09:56:10 +02:00
$selectedRecipe = null ;
2019-03-05 23:45:04 +01:00
$selectedRecipePositionsResolved = null ;
2018-07-15 09:56:10 +02:00
if ( isset ( $request -> getQueryParams ()[ 'recipe' ]))
{
2020-03-01 23:47:47 +07:00
$selectedRecipe = $this -> getDatabase () -> recipes ( $request -> getQueryParams ()[ 'recipe' ]);
$selectedRecipePositionsResolved = $this -> getDatabase () -> recipes_pos_resolved () -> where ( 'recipe_id = :1 AND is_nested_recipe_pos = 0' , $request -> getQueryParams ()[ 'recipe' ]) -> orderBy ( 'ingredient_group' , 'ASC' , 'product_group' , 'ASC' );
2018-07-15 09:56:10 +02:00
}
2018-07-15 10:16:36 +02:00
else
{
foreach ( $recipes as $recipe )
{
$selectedRecipe = $recipe ;
2020-03-01 23:47:47 +07:00
$selectedRecipePositionsResolved = $this -> getDatabase () -> recipes_pos_resolved () -> where ( 'recipe_id = :1 AND is_nested_recipe_pos = 0' , $recipe -> id ) -> orderBy ( 'ingredient_group' , 'ASC' , 'product_group' , 'ASC' );
2018-07-15 13:33:59 +02:00
break ;
2018-07-15 10:16:36 +02:00
}
}
2018-07-15 09:56:10 +02:00
2020-03-22 09:27:49 +01:00
if ( $selectedRecipe )
{
2020-03-22 09:24:49 +01:00
$selectedRecipeSubRecipes = $this -> getDatabase () -> recipes () -> where ( 'id IN (SELECT includes_recipe_id FROM recipes_nestings_resolved WHERE recipe_id = :1 AND includes_recipe_id != :1)' , $selectedRecipe -> id ) -> orderBy ( 'name' ) -> fetchAll ();
$selectedRecipeSubRecipesPositions = $this -> getDatabase () -> recipes_pos_resolved () -> where ( 'recipe_id = :1' , $selectedRecipe -> id ) -> orderBy ( 'ingredient_group' , 'ASC' , 'product_group' , 'ASC' ) -> fetchAll ();
$includedRecipeIdsAbsolute = array ();
$includedRecipeIdsAbsolute [] = $selectedRecipe -> id ;
foreach ( $selectedRecipeSubRecipes as $subRecipe )
{
$includedRecipeIdsAbsolute [] = $subRecipe -> id ;
}
2020-03-22 09:27:49 +01:00
2020-03-22 09:24:49 +01:00
$renderArray = [
'recipes' => $recipes ,
'recipesResolved' => $recipesResolved ,
'recipePositionsResolved' => $this -> getDatabase () -> recipes_pos_resolved () -> where ( 'recipe_type' , RecipesService :: RECIPE_TYPE_NORMAL ),
'selectedRecipe' => $selectedRecipe ,
'selectedRecipePositionsResolved' => $selectedRecipePositionsResolved ,
'products' => $this -> getDatabase () -> products (),
'quantityUnits' => $this -> getDatabase () -> quantity_units (),
'selectedRecipeSubRecipes' => $selectedRecipeSubRecipes ,
'selectedRecipeSubRecipesPositions' => $selectedRecipeSubRecipesPositions ,
'includedRecipeIdsAbsolute' => $includedRecipeIdsAbsolute ,
'selectedRecipeTotalCosts' => FindObjectInArrayByPropertyValue ( $recipesResolved , 'recipe_id' , $selectedRecipe -> id ) -> costs ,
'selectedRecipeTotalCalories' => FindObjectInArrayByPropertyValue ( $recipesResolved , 'recipe_id' , $selectedRecipe -> id ) -> calories ,
'userfields' => $this -> getUserfieldsService () -> GetFields ( 'recipes' ),
'userfieldValues' => $this -> getUserfieldsService () -> GetAllValues ( 'recipes' ),
'quantityUnitConversionsResolved' => $this -> getDatabase () -> quantity_unit_conversions_resolved ()
];
}
2020-03-22 09:27:49 +01:00
else
{
$renderArray = [
'recipes' => $recipes ,
'recipesResolved' => $recipesResolved ,
'recipePositionsResolved' => $this -> getDatabase () -> recipes_pos_resolved () -> where ( 'recipe_type' , RecipesService :: RECIPE_TYPE_NORMAL ),
'selectedRecipe' => $selectedRecipe ,
'selectedRecipePositionsResolved' => $selectedRecipePositionsResolved ,
'products' => $this -> getDatabase () -> products (),
'quantityUnits' => $this -> getDatabase () -> quantity_units (),
'userfields' => $this -> getUserfieldsService () -> GetFields ( 'recipes' ),
'userfieldValues' => $this -> getUserfieldsService () -> GetAllValues ( 'recipes' ),
'quantityUnitConversionsResolved' => $this -> getDatabase () -> quantity_unit_conversions_resolved ()
];
}
2020-03-22 09:24:49 +01:00
return $this -> renderPage ( $response , 'recipes' , $renderArray );
2018-07-14 18:23:41 +02:00
}
2020-02-11 17:42:03 +01:00
public function RecipeEditForm ( \Psr\Http\Message\ServerRequestInterface $request , \Psr\Http\Message\ResponseInterface $response , array $args )
2018-07-14 18:23:41 +02:00
{
$recipeId = $args [ 'recipeId' ];
if ( $recipeId == 'new' )
{
2020-03-01 23:47:47 +07:00
$newRecipe = $this -> getDatabase () -> recipes () -> where ( 'type' , RecipesService :: RECIPE_TYPE_NORMAL ) -> createRow ( array (
'name' => $this -> getLocalizationService () -> __t ( 'New recipe' )
2018-07-14 18:23:41 +02:00
));
$newRecipe -> save ();
2020-03-01 23:47:47 +07:00
$recipeId = $this -> getDatabase () -> lastInsertId ();
2018-07-14 18:23:41 +02:00
}
2020-03-01 23:47:47 +07:00
return $this -> renderPage ( $response , 'recipeform' , [
'recipe' => $this -> getDatabase () -> recipes ( $recipeId ),
'recipePositions' => $this -> getDatabase () -> recipes_pos () -> where ( 'recipe_id' , $recipeId ),
2018-07-14 18:23:41 +02:00
'mode' => 'edit' ,
2020-03-01 23:47:47 +07:00
'products' => $this -> getDatabase () -> products () -> orderBy ( 'name' ),
'quantityunits' => $this -> getDatabase () -> quantity_units (),
'recipePositionsResolved' => $this -> getRecipesService () -> GetRecipesPosResolved (),
'recipesResolved' => $this -> getRecipesService () -> GetRecipesResolved (),
'recipes' => $this -> getDatabase () -> recipes () -> where ( 'type' , RecipesService :: RECIPE_TYPE_NORMAL ) -> orderBy ( 'name' ),
'recipeNestings' => $this -> getDatabase () -> recipes_nestings () -> where ( 'recipe_id' , $recipeId ),
'userfields' => $this -> getUserfieldsService () -> GetFields ( 'recipes' ),
'quantityUnitConversionsResolved' => $this -> getDatabase () -> quantity_unit_conversions_resolved ()
2018-07-14 18:23:41 +02:00
]);
}
2020-02-11 17:42:03 +01:00
public function RecipePosEditForm ( \Psr\Http\Message\ServerRequestInterface $request , \Psr\Http\Message\ResponseInterface $response , array $args )
2018-07-14 18:23:41 +02:00
{
if ( $args [ 'recipePosId' ] == 'new' )
{
2020-03-01 23:47:47 +07:00
return $this -> renderPage ( $response , 'recipeposform' , [
2018-07-14 18:23:41 +02:00
'mode' => 'create' ,
2020-03-01 23:47:47 +07:00
'recipe' => $this -> getDatabase () -> recipes ( $args [ 'recipeId' ]),
2019-09-21 13:08:42 +02:00
'recipePos' => new \stdClass (),
2020-03-01 23:47:47 +07:00
'products' => $this -> getDatabase () -> products () -> orderBy ( 'name' ),
'quantityUnits' => $this -> getDatabase () -> quantity_units () -> orderBy ( 'name' ),
'quantityUnitConversionsResolved' => $this -> getDatabase () -> quantity_unit_conversions_resolved ()
2018-07-14 18:23:41 +02:00
]);
}
else
{
2020-03-01 23:47:47 +07:00
return $this -> renderPage ( $response , 'recipeposform' , [
2018-07-14 18:23:41 +02:00
'mode' => 'edit' ,
2020-03-01 23:47:47 +07:00
'recipe' => $this -> getDatabase () -> recipes ( $args [ 'recipeId' ]),
'recipePos' => $this -> getDatabase () -> recipes_pos ( $args [ 'recipePosId' ]),
'products' => $this -> getDatabase () -> products () -> orderBy ( 'name' ),
'quantityUnits' => $this -> getDatabase () -> quantity_units () -> orderBy ( 'name' ),
'quantityUnitConversionsResolved' => $this -> getDatabase () -> quantity_unit_conversions_resolved ()
2018-07-14 18:23:41 +02:00
]);
}
}
2019-05-06 19:38:47 +02:00
2020-02-11 17:42:03 +01:00
public function RecipesSettings ( \Psr\Http\Message\ServerRequestInterface $request , \Psr\Http\Message\ResponseInterface $response , array $args )
2020-02-10 11:04:57 -06:00
{
2020-03-01 23:47:47 +07:00
return $this -> renderPage ( $response , 'recipessettings' );
2020-02-10 11:04:57 -06:00
}
2020-02-11 17:42:03 +01:00
public function MealPlan ( \Psr\Http\Message\ServerRequestInterface $request , \Psr\Http\Message\ResponseInterface $response , array $args )
2019-05-06 19:38:47 +02:00
{
2020-03-01 23:47:47 +07:00
$recipes = $this -> getDatabase () -> recipes () -> where ( 'type' , RecipesService :: RECIPE_TYPE_NORMAL ) -> fetchAll ();
2020-03-22 09:24:49 +01:00
2019-05-06 19:38:47 +02:00
$events = array ();
2020-03-01 23:47:47 +07:00
foreach ( $this -> getDatabase () -> meal_plan () as $mealPlanEntry )
2019-05-06 19:38:47 +02:00
{
2019-09-21 09:18:40 +02:00
$recipe = FindObjectInArrayByPropertyValue ( $recipes , 'id' , $mealPlanEntry [ 'recipe_id' ]);
$title = '' ;
if ( $recipe !== null )
{
$title = $recipe -> name ;
}
2020-01-25 11:51:00 +01:00
$productDetails = null ;
if ( $mealPlanEntry [ 'product_id' ] !== null )
{
2020-03-01 23:47:47 +07:00
$productDetails = $this -> getStockService () -> GetProductDetails ( $mealPlanEntry [ 'product_id' ]);
2020-01-25 11:51:00 +01:00
}
2019-05-06 19:38:47 +02:00
$events [] = array (
'id' => $mealPlanEntry [ 'id' ],
2019-09-21 09:18:40 +02:00
'title' => $title ,
2019-05-06 19:38:47 +02:00
'start' => $mealPlanEntry [ 'day' ],
'date_format' => 'date' ,
2019-09-21 09:18:40 +02:00
'recipe' => json_encode ( $recipe ),
2020-01-23 20:59:19 +01:00
'mealPlanEntry' => json_encode ( $mealPlanEntry ),
2020-01-25 11:51:00 +01:00
'type' => $mealPlanEntry [ 'type' ],
'productDetails' => json_encode ( $productDetails )
2019-05-06 19:38:47 +02:00
);
}
2020-03-01 23:47:47 +07:00
return $this -> renderPage ( $response , 'mealplan' , [
2019-05-06 19:38:47 +02:00
'fullcalendarEventSources' => $events ,
2019-05-07 19:48:14 +02:00
'recipes' => $recipes ,
2020-03-01 23:47:47 +07:00
'internalRecipes' => $this -> getDatabase () -> recipes () -> whereNot ( 'type' , RecipesService :: RECIPE_TYPE_NORMAL ) -> fetchAll (),
'recipesResolved' => $this -> getRecipesService () -> GetRecipesResolved (),
'products' => $this -> getDatabase () -> products () -> orderBy ( 'name' ),
'quantityUnits' => $this -> getDatabase () -> quantity_units () -> orderBy ( 'name' ),
'quantityUnitConversionsResolved' => $this -> getDatabase () -> quantity_unit_conversions_resolved ()
2019-05-06 19:38:47 +02:00
]);
}
2018-07-14 18:23:41 +02:00
}