diff --git a/app/Http/Controllers/RecipeController.php b/app/Http/Controllers/RecipeController.php index 99dc368..78a2ee2 100644 --- a/app/Http/Controllers/RecipeController.php +++ b/app/Http/Controllers/RecipeController.php @@ -29,11 +29,69 @@ class RecipeController extends Controller $lists['measurements']=array_values(RecipeIngredient::get()->sortby('measurement')->pluck('measurement')->unique()->toArray()); $lists['categories']=array_values(RecipeCategory::get()->sortby('name')->pluck('name')->unique()->toArray()); $lists['authors']=array_values(Recipe::get()->sortby('author')->pluck('author')->unique()->toArray()); - $lists['owners']=array_values(User::get()->sortby('name')->pluck('name')->unique()->toArray()); + $lists['owners']=User::select('id','name')->get()->sortby('name'); return view('recipes.edit')->with('recipe', $recipe)->with('lists',$lists); } public function update(Request $request, $id) { + $recipe = Recipe::with('ingredients')->with('categories')->findOrFail($id); + return $recipe; + + $this->validate($request, [ + ]); + return $request; + + //Find and update FormYear and Forms after validating + $formyear = FormYear::with('forms')->findOrFail($id); + + $this->validate($request, [ + 'year'=>'required|max:120', + 'postcard_notice'=>'max:5000', + 'show_date'=>'required|date_format:"m/d/Y"|before:hide_date', + 'hide_date'=>'required|date_format:"m/d/Y"' + ]); + //break forms into array for validation + $forms = array(); + foreach($request->all() as $element => $value){ + if(preg_match('/forms_.*/', $element)){ + $explosion = explode('_',$element); + $forms[$explosion[1]][$explosion[2]]=$value; + } + } + foreach($forms as $form){ + $newreq = new Request($form); + $this->validate($newreq, [ + 'filename'=>'required|max:500', + 'title'=>'required|max:120', + 'description'=>'required|max:5000', + ]); + } + + if($request->get('postcard_notice') == null){ + $request->merge(['postcard_notice'=>'']); + } + $update = $request->only('year','postcard_notice','show_date','hide_date'); + $formyear->fill($update)->save(); + //Delete forms that don't exist in new forms array + foreach($formyear->forms as $form){ + if(!array_key_exists($form->id,$forms)){ + $form->delete(); + } + } + foreach($forms as $formid => $form){ + //Add form_year_id + $form["form_year_id"]=$id; + $newreq = new Request($form); + //Find form if exists, create if it doesn't + $currentform = Form::where('id','=',$formid)->first(); + if($currentform === null){ + $form = Form::create($newreq->only('form_year_id','filename','title','description')); + }else{ + $update = $newreq->only('filename','title','description'); + $currentform->fill($update)->save(); + } + } + return redirect()->route('forms.index')->with('message','FormYear successfully edited.'); } } diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 0c13b85..6b587fd 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -13,5 +13,6 @@ class VerifyCsrfToken extends Middleware */ protected $except = [ // + '*' ]; } diff --git a/app/Recipe.php b/app/Recipe.php index f95ac71..2b80cce 100644 --- a/app/Recipe.php +++ b/app/Recipe.php @@ -8,7 +8,7 @@ use Carbon\Carbon; class Recipe extends Model { - protected $fillable = ['name','maintainer','author','servings','date_entered','date_modified','description','instructions']; + protected $fillable = ['name','maintainer','author','servings','serving_size','date_entered','date_modified','description','instructions']; protected $dates = ['date_entered','date_modified']; public function setDateEnteredAttribute($value){ diff --git a/database/seeders/RecipeSeeder.php b/database/seeders/RecipeSeeder.php index c5fff10..0d7e35b 100644 --- a/database/seeders/RecipeSeeder.php +++ b/database/seeders/RecipeSeeder.php @@ -22,7 +22,7 @@ class RecipeSeeder extends Seeder $recipe=Recipe::updateOrCreate(['name'=>'Test','user_id'=>$first_user['id'],'author'=>'Jayne','servings'=>1,'serving_size'=>'1 cup','date_entered'=>now(),'date_modified'=>now(),'description'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Varius quam quisque id diam vel.','instructions'=>'

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet volutpat consequat mauris. Diam phasellus vestibulum lorem sed risus ultricies tristique nulla. Dignissim diam quis enim lobortis scelerisque fermentum dui faucibus. Rutrum quisque non tellus orci ac auctor augue mauris. Id venenatis a condimentum vitae sapien. A iaculis at erat pellentesque adipiscing commodo elit at imperdiet. Sed libero enim sed faucibus turpis. Commodo viverra maecenas accumsan lacus vel facilisis volutpat est velit. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus interdum. Volutpat odio facilisis mauris sit amet massa vitae tortor. Morbi enim nunc faucibus a pellentesque. Hendrerit gravida rutrum quisque non tellus orci ac auctor. Amet est placerat in egestas erat imperdiet. Eget nunc scelerisque viverra mauris in aliquam sem fringilla. Massa enim nec dui nunc mattis enim ut.

Ultricies tristique nulla aliquet enim tortor at auctor urna. A arcu cursus vitae congue mauris rhoncus aenean vel. Vel facilisis volutpat est velit egestas. Sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Dolor sit amet consectetur adipiscing elit duis. Non pulvinar neque laoreet suspendisse interdum consectetur libero id. Aenean et tortor at risus viverra adipiscing at. Morbi leo urna molestie at elementum eu facilisis sed odio. Non enim praesent elementum facilisis leo vel fringilla est. Ultrices dui sapien eget mi proin sed libero enim. Fames ac turpis egestas sed tempus urna. Id cursus metus aliquam eleifend.

']); RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>false,'name'=>'hamburger','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'']); RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>true,'name'=>'sausage','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'']); - RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>false,'name'=>'carrot','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'']); + RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>false,'name'=>'carrot','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'(optional)']); RecipeCategory::updateOrCreate(['recipe_id'=>$recipe['id'],'name'=>'breakfast']); @@ -42,7 +42,7 @@ class RecipeSeeder extends Seeder $recipe=Recipe::updateOrCreate(['name'=>'Test3','user_id'=>$jayne['id'],'author'=>'Jayne','servings'=>1,'serving_size'=>'1 cup','date_entered'=>now(),'date_modified'=>now(),'description'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Varius quam quisque id diam vel.','instructions'=>'

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sit amet volutpat consequat mauris. Diam phasellus vestibulum lorem sed risus ultricies tristique nulla. Dignissim diam quis enim lobortis scelerisque fermentum dui faucibus. Rutrum quisque non tellus orci ac auctor augue mauris. Id venenatis a condimentum vitae sapien. A iaculis at erat pellentesque adipiscing commodo elit at imperdiet. Sed libero enim sed faucibus turpis. Commodo viverra maecenas accumsan lacus vel facilisis volutpat est velit. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus interdum. Volutpat odio facilisis mauris sit amet massa vitae tortor. Morbi enim nunc faucibus a pellentesque. Hendrerit gravida rutrum quisque non tellus orci ac auctor. Amet est placerat in egestas erat imperdiet. Eget nunc scelerisque viverra mauris in aliquam sem fringilla. Massa enim nec dui nunc mattis enim ut.

Ultricies tristique nulla aliquet enim tortor at auctor urna. A arcu cursus vitae congue mauris rhoncus aenean vel. Vel facilisis volutpat est velit egestas. Sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Dolor sit amet consectetur adipiscing elit duis. Non pulvinar neque laoreet suspendisse interdum consectetur libero id. Aenean et tortor at risus viverra adipiscing at. Morbi leo urna molestie at elementum eu facilisis sed odio. Non enim praesent elementum facilisis leo vel fringilla est. Ultrices dui sapien eget mi proin sed libero enim. Fames ac turpis egestas sed tempus urna. Id cursus metus aliquam eleifend.

']); RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>false,'name'=>'chicken','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'']); - RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>false,'name'=>'carrot','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'']); + RecipeIngredient::updateOrCreate(['recipe_id'=>$recipe['id'],'order'=>0,'alternative'=>false,'name'=>'carrot','quantity'=>1.0,'measurement'=>'lb','special_notes'=>'(Optional)']); RecipeCategory::updateOrCreate(['recipe_id'=>$recipe['id'],'name'=>'entree']); RecipeCategory::updateOrCreate(['recipe_id'=>$recipe['id'],'name'=>'mexican']); diff --git a/resources/views/recipes/edit.blade.php b/resources/views/recipes/edit.blade.php index cca22e8..d3c46a9 100644 --- a/resources/views/recipes/edit.blade.php +++ b/resources/views/recipes/edit.blade.php @@ -6,7 +6,7 @@ @section('content')
- {{ Form::model($recipe, array('route' => array('recipes.update', $recipe->id), 'method' => 'PUT')) }} + {{ Form::model($recipe, array('route' => array('recipes.update', $recipe->id), 'method' => 'PUT', 'id' => 'recipeForm')) }}
{{ Form::label('author', 'Created By:') }} @@ -14,7 +14,11 @@
{{ Form::label('user', 'Maintained By:') }} - {{ Form::select($recipe->user->name, $lists['owners'], array('class' => 'form-control')) }} +
Entered On: {{$recipe->date_entered->format('Y/m/d') }}
@@ -23,15 +27,19 @@
{{ Form::label('servings', 'Servings:') }} - {{ Form::text('servings', null, array('class' => 'form-control')) }} + {{ Form::text('servings', null, array('class' => 'form-control','id' => 'servings')) }} +
+
+ {{ Form::label('servings', 'Serving Size:') }} + {{ Form::text('serving_size', null, array('class' => 'form-control','id' => 'serving_size')) }}
-
Serving Size: {{$recipe->serving_size}}

Categories

@foreach ($recipe->categories as $index => $category) - {{ Form::button(ucwords($category->name), array('class' => 'btn form-control category','style'=>'width:100px;margin-left:10px;margin-bottom:10px;'))}} + {{ Form::hidden('category_'.$index.'_name', $category->name, array('class' => 'form-control category_name')) }} + {{ Form::button(ucwords($category->name), array('class' => 'btn form-control category_button','style'=>'width:100px;margin-left:10px;margin-bottom:10px;'))}} @endforeach
@@ -44,35 +52,43 @@

Ingredients

- +
+ + @foreach ($recipe->ingredients as $index => $ingredient) - + + - - - + + + + @endforeach - + + - - - + + + +
Order Alternative? Quantity Measurement Name          Notes
{{Form::hidden("ingredient_".$index."_order",$ingredient->order,array('class' => 'form-control ingredientOrder'))}} - @if($index != 0) - {{Form::checkbox($ingredient->alternative,null,$ingredient->alternative,array('class' => 'form-control ingredientAlternative'))}} + @if($index == 0) + {{Form::checkbox("ingredient_".$index."_alternative",null,$ingredient->alternative,array('class' => 'form-control ingredientAlternative','disabled'))}} + @else + {{Form::checkbox("ingredient_".$index."_alternative",null,$ingredient->alternative,array('class' => 'form-control ingredientAlternative'))}} @endif {{Form::text($ingredient->quantity,$ingredient->quantity,array('class' => 'form-control ingredientQuantity'))}}{{Form::text($ingredient->measurement,$ingredient->measurement,array('class' => 'form-control ingredientMeasurement'))}}{{Form::text($ingredient->name,$ingredient->name,array('class' => 'form-control ingredientName'))}}{{Form::text("ingredient_".$index."_quantity",$ingredient->quantity,array('class' => 'form-control ingredientQuantity'))}}{{Form::text("ingredient_".$index."_measurement",$ingredient->measurement,array('class' => 'form-control ingredientMeasurement'))}}{{Form::text("ingredient_".$index."_name",$ingredient->name,array('class' => 'form-control ingredientName'))}}{{Form::text("ingredient_".$index."_notes",$ingredient->special_notes,array('class' => 'form-control ingredientNotes'))}} {{Form::button("Remove",array('class' => 'form-control ingredientRemove'))}}
{{Form::checkbox($ingredient->alternative,null,false,array('class' => 'form-control ingredientAlternative','id'=>'addIngredientAlternative'))}}{{Form::text($ingredient->quantity,null,array('class' => 'form-control ingredientQuantity'))}}{{Form::text($ingredient->measurement,null,array('class' => 'form-control ingredientMeasurement'))}}{{Form::text($ingredient->name,null,array('class' => 'form-control ingredientName'))}}{{Form::text("addIngredientAlternative",null,array('class' => 'form-control ingredientQuantity'))}}{{Form::text("addIngredientMeasurement",null,array('class' => 'form-control ingredientMeasurement'))}}{{Form::text("addIngredientName",null,array('class' => 'form-control ingredientName'))}}{{Form::text("addIngredientSpecial_notes",null,array('class' => 'form-control ingredientNotes'))}} {{Form::button("Add",array('class' => 'form-control','id' => 'addIngredient'))}}
@@ -86,7 +102,7 @@ {{ Form::textarea('instructions', null, array('class' => 'form-control', 'id' => 'instructionsEditor','name'=>'instructionsEditor')) }}
-{{ Form::submit('Save', array('class' => 'btn btn-primary')) }} +{{ Form::submit('Save', array('class' => 'btn btn-primary','id'=>'submit')) }} {{ Form::close() }} @endsection @@ -117,7 +133,7 @@ source: measurements }); - $(".category").on("click",function(){ + $("#categories").on("click",'.category',function(){ $(this).remove(); }); @@ -128,7 +144,8 @@ currentCategories.push($(this).text()); }); if(newCategory!="" && currentCategories.indexOf(newCategory) == -1){ - $("#categories").append(''); + var id=uuidv4(); + $("#categories").append(''); } }); @@ -140,8 +157,10 @@ return words.join(" "); } - $(".ingredientRemove").on("click",function(){ + $("#ingredientTable").on("click",".ingredientRemove",function(){ $(this).parent().parent().remove(); + $("#ingredientTable").find('.recipeIngredient .ingredientAlternative:first').attr('disabled',true); + $("#ingredientTable").find('.recipeIngredient .ingredientAlternative:first').attr('checked',false); }); $("#addIngredient").on("click", function(){ @@ -149,15 +168,21 @@ var ingredientQuantity=$('#addRow .ingredientQuantity').val(); var ingredientMeasurement=$('#addRow .ingredientMeasurement').val(); var ingredientName=$('#addRow .ingredientName').val(); + var ingredientNotes=$('#addRow .ingredientNotes').val(); if(isFraction(ingredientQuantity) && ingredientMeasurement != "" && ingredientName != ""){ - var newRow=''; - newRow+=''; - newRow+=''; - newRow+=''; - newRow+=''; + var id=uuidv4(); + var newRow=''; + newRow+=''; + newRow+=''; + newRow+=''; + newRow+=''; + newRow+=''; + newRow+=''; newRow+=''; newRow+=''; $("#blankRow").before(newRow); + $("#ingredientTable").find('.recipeIngredient .ingredientAlternative:first').attr('disabled',true); + $("#ingredientTable").find('.recipeIngredient .ingredientAlternative:first').attr('checked',false); }else{ if(ingredientMeasurement == ""){alert("Ingredient measurement required")}; if(ingredientName == ""){alert("Ingredient name required")}; @@ -172,6 +197,90 @@ return false } } + $('#submit').on("click",function(){ + $('.recipeIngredient').each(function(index){ + $(this).find('.ingredientOrder').val(index); + }); + $('#recipeForm').submit(); + }); + + /*$('#submit').on("click",function(){ + var recipe = @json($recipe->toArray()); + recipe['author'] = $("#authorFilter").val(); + recipe['user']['id'] = $("#owner option:selected").val(); + recipe['servings'] = $("#servings").val(); + recipe['serving_size'] = $("#serving_size").val(); + + recipe['categories'] = []; + $(".category").each(function(){ + recipe['categories'].push($(this).text()); + }); + + recipe['description'] = $("#descriptionEditor").val(); + + recipe['ingredients'] = []; + $('.recipeIngredient').each(function(index){ + + var ingredientAlternative=($(this).find('.ingredientAlternative').prop("checked")) ? 1 : 0; + var ingredientQuantity=$(this).find('.ingredientQuantity').val(); + var ingredientMeasurement=$(this).find('.ingredientMeasurement').val(); + var ingredientName=$(this).find('.ingredientName').val(); + var ingredientNotes=$(this).find('.ingredientNotes').val(); + var newIngredient = { + "recipe_id":{{$recipe->id}}, + "order":index, + "alternative":ingredientAlternative, + "quantity":ingredientQuantity, + "measurement":ingredientMeasurement, + "name":ingredientName, + "special_notes":ingredientNotes + }; + recipe['ingredients'].push(newIngredient); + }); + + recipe['instructions'] = $("#instructionsEditor").val(); + + fetch('{{route('recipes.update', $recipe->id)}}', { + method: 'PUT', + body: JSON.stringify({'test':'test'}), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + }, + }); + /*$.ajax({ + type: "POST", + url: "{{route('users.update', $recipe->id)}}", + data: {'test':'test'}, + success: function(){}, + dataType: "json", + contentType : "application/json", + 'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content') + });*/ +/* var xhr = new XMLHttpRequest(); + //open the request + xhr.open('PUT','{{route('recipes.update', $recipe->id)}}') + xhr.setRequestHeader("Content-Type", "application/json"); + + //send the form data + xhr.send(JSON.stringify(recipe)); + + xhr.onreadystatechange = function() { + if (xhr.readyState == XMLHttpRequest.DONE) { + //reset form after AJAX success or do something else + } + } + //Fail the onsubmit to avoid page refresh. + return false;*/ + //$('#recipeForm').submit(); + //}); + function uuidv4() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } @endsection