Example #1
0
def edit_recipe(request, id):
    recipe = get_object_or_404(Recipe, id=id)
    tag_prepop = Tag.objects.get_for_object(recipe)
    tool_prepop = recipe.tools.all()
    if recipe.user != request.user and request.user.is_superuser == False:
        return render_to_response('recipes/forbidden.html',
                                  context_instance=RequestContext(request))
    if request.method == 'POST':
        form = RecipeForm(request.POST, request.FILES, instance=recipe)
        formset = RecipeIngredientsFormset(request.POST,
                                           request.FILES,
                                           instance=recipe)
        if form.is_valid():
            recipe = form.save(commit=False)
            if formset.is_valid():
                formset.save()
                recipe.save()
                return render_to_response(
                    'recipes/view_recipe.html', {
                        'recipe': recipe,
                    },
                    context_instance=RequestContext(request))
    else:
        form = RecipeForm(instance=recipe)
        formset = RecipeIngredientsFormset(instance=recipe)
    return render_to_response('recipes/edit_recipe.html', {
        'recipe': recipe,
        'form': form,
        'formset': formset,
        'tag_prepop': tag_prepop,
        'tool_prepop': tool_prepop
    },
                              context_instance=RequestContext(request))
Example #2
0
def recipe(request,user=None, slug=None):
    '''used to create or edit a recipe'''
    IngFormSet = inlineformset_factory(Recipe, Ingredient, extra=15, formset=IngItemFormSet) #create the ingredient form with 15 empty fields

    if user and slug: #must be editing a recipe
        recipe_inst = get_object_or_404(Recipe, author__username=request.user.username, slug=slug)
    else:
        recipe_inst = Recipe()

    if request.method=='POST':
        form = RecipeForm(data = request.POST, files = request.FILES,instance=recipe_inst)
        formset = IngFormSet(request.POST, instance=recipe_inst)
        if form.is_valid() and formset.is_valid():
            new_recipe = form.save()
            instances = formset.save(commit=False)#save the ingredients seperatly
            for instance in instances:
                instance.recipe_id = new_recipe.id #set the recipe id foregin key to the this recipe id
                instance.save()
            form.save(commit=False)
            return redirect(new_recipe.get_absolute_url())
    else:
        form = RecipeForm(instance=recipe_inst)
        form.fields['related'].queryset =  Recipe.objects.filter(author__username=request.user.username).exclude(related = F('id')).filter(related__isnull=True).order_by('-pub_date')[:5]

        if recipe_inst.id:  #if we are editing an existing recipe disable the title field so it can't be changed
            form.fields['title'].widget.attrs['readonly'] = True
        
        formset = IngFormSet(instance=recipe_inst)
    return render_to_response('recipe/recipe_form.html', {'form': form, 'formset' : formset,}, context_instance=RequestContext(request))
Example #3
0
def correct_recipe(request):
	if request.method == 'POST':
		form = RecipeForm(request.POST, request.FILES)
		if form.is_valid():
			recipe = form.save(commit=False)
			recipe.user = request.user
			recipe.save()
			junk_id = request.POST['junkid']
			junk = JunkRecipe.objects.get(id = junk_id)
			formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe)
			if formset.is_valid():
				formset.save()
				recipe.save()
				junk.is_added = True
				junk.derived_recipe = recipe
				junk.save()
				return render_to_response('recipes/view_recipe.html', {'recipe': recipe,}, context_instance=RequestContext(request))
			else:
				recipe.delete()
		else:
			junk_id = request.POST['junkid']
			junk = JunkRecipe.objects.get(id = junk_id)
			formset = RecipeIngredientsFormset(request.POST, request.FILES)
	else:
		junk = random.choice(JunkRecipe.objects.filter(is_added = False))
		form = RecipeForm()
		formset = RecipeIngredientsFormset()
	return render_to_response('recipes/correct_recipe.html', {'form': form, 'formset': formset, 'junk': junk}, context_instance=RequestContext(request))
Example #4
0
def add_recipe(request):
    if request.method == 'POST':
        form = RecipeForm(request.POST, request.FILES)
        if form.is_valid():
            recipe = form.save(commit=False)
            recipe.user = request.user
            recipe.save()
            formset = RecipeIngredientsFormset(request.POST,
                                               request.FILES,
                                               instance=recipe)
            if formset.is_valid():
                formset.save()
                recipe.save()
                return render_to_response(
                    'recipes/view_recipe.html', {
                        'recipe': recipe,
                    },
                    context_instance=RequestContext(request))
            else:
                recipe.delete()
        else:
            formset = RecipeIngredientsFormset(request.POST, request.FILES)
    else:
        form = RecipeForm()
        formset = RecipeIngredientsFormset()
    return render_to_response('recipes/add_recipe.html', {
        'form': form,
        'formset': formset
    },
                              context_instance=RequestContext(request))
Example #5
0
def add_recipe(request):
    if request.method == 'POST':
        recipe_form = RecipeForm(request.POST, request.FILES)
        hop_type_form = HopTypeForm(request.POST)
        hop_counter = request.POST.get('hop-counter')
        hop_counter = int(hop_counter) + 1

        if recipe_form.is_valid():
            recipe = recipe_form.save()

            for i in range(hop_counter):
                if i == 0:
                    hop_type_dict = {'hop_type': request.POST.get('hop_type')}
                else:
                    hop_type_dict = {
                        'hop_type': request.POST.get('hop_type_%d' % i)
                    }

                hop_type_form = HopTypeForm(hop_type_dict)
                if hop_type_form.is_valid():
                    hop = hop_type_form.save(commit=False)
                    hop.recipe = recipe
                    hop.save()

            return HttpResponseRedirect('/thanks/')
    else:
        recipe_form = RecipeForm()
        hop_type_form = HopTypeForm()
    return render(request, 'add-recipe.html', {
        'hop_type_form': hop_type_form,
        'recipe_form': recipe_form
    })
Example #6
0
def edit(request, rpID):
    rp = get_object_or_404(Recipe, pk=rpID, ruser=request.user)
    if not request.user.is_active:
        HttpResponseForbidden()
    if request.method == "POST":
        form = RecipeForm(request.POST, request.FILES)
        if form.is_valid():
            rp = form.save()
            create_thumb(rp)
            return HttpResponseRedirect(reverse("recipedia.views.create_edit", args=[rp.pk]))
    else:
        form = RecipeForm()
    return render_to_response("new_recipe.html", {"form": form}, context_instance=RequestContext(request))
Example #7
0
def index(request):
    if request.method == 'POST':
        form = RecipeForm(request.POST)
        if form.is_valid():
            recipes = Recipe.objects.all().order_by("name")

            for filter_method in FILTER_METHODS:
                recipes = filter_method(form, recipes)

            return render(request, 'home.html', {'form': form, 'recipe_list': recipes})
    else:
        reset = request.GET.get('reset', None) != None
        load(reset=reset)
        form = RecipeForm

    return render_to_response('home.html', {'form': form, 'recipe_list': Recipe.objects.all().order_by("name")},
                              context_instance=RequestContext(request))
Example #8
0
def create(request):
    # the 1st step of 3 phases recipe creation
    if not request.user.is_active:
        HttpResponseForbidden()
    if request.method == "POST":
        form = RecipeForm(request.POST, request.FILES)
        if form.is_valid():
            rp = form.save(commit=False)
            data = form.cleaned_data
            rp.activation_key = activation_key(request)
            rp.ruser = request.user
            rp.save()
            create_thumb(rp)
            return HttpResponseRedirect(reverse("recipedia.views.create_edit", args=[rp.pk]))
    else:
        form = RecipeForm()
    return render_to_response("new_recipe.html", {"form": form}, context_instance=RequestContext(request))
Example #9
0
def recipe(request, user=None, slug=None):
    """used to create or edit a recipe"""
    IngFormSet = inlineformset_factory(
        Recipe, Ingredient, extra=15, formset=IngItemFormSet
    )  # create the ingredient form with 15 empty fields

    if user and slug:  # must be editing a recipe
        recipe_inst = get_object_or_404(Recipe,
                                        author__username=request.user.username,
                                        slug=slug)
    else:
        recipe_inst = Recipe()

    if request.method == 'POST':
        form = RecipeForm(data=request.POST,
                          files=request.FILES,
                          instance=recipe_inst)
        formset = IngFormSet(request.POST, instance=recipe_inst)
        if form.is_valid() and formset.is_valid():
            new_recipe = form.save()
            instances = formset.save(
                commit=False)  # save the ingredients seperatly
            for instance in instances:
                instance.recipe_id = new_recipe.id  # set the recipe id foregin key to the this recipe id
                instance.save()
            form.save(commit=False)
            return redirect(new_recipe.get_absolute_url())
    else:
        form = RecipeForm(instance=recipe_inst)
        if not recipe_inst.related:  # if the related field has not been set on a recipe or it is a new recipe populate the drop down otherwise use the value that is already set
            form.fields['related'].queryset = Recipe.objects.filter(
                author__username=request.user.username).exclude(
                    related=F('id')).filter(
                        related__isnull=True).order_by('-pub_date')

        if recipe_inst.id:  # if we are editing an existing recipe disable the title field so it can't be changed
            form.fields['title'].widget.attrs['readonly'] = True

        formset = IngFormSet(instance=recipe_inst)
    return render_to_response('recipe/recipe_form.html', {
        'form': form,
        'formset': formset,
    },
                              context_instance=RequestContext(request))
Example #10
0
def add(request):
    def storeInS3(recipe_id, filename, content):
        conn = S3Connection(settings.AWS_ACCESS_KEY_ID,
                            settings.AWS_SECRET_ACCESS_KEY)
        b = conn.create_bucket(settings.S3BUCKET)
        mime = mimetypes.guess_type(filename)[0]
        k = Key(b)
        k.key = 'recipe_id_' + str(recipe_id) + '_' + filename
        k.set_metadata("Content_Type", mime)
        content.seek(0)
        k.set_contents_from_file(content)
        k.set_acl("public-read")

    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')
    if request.method == 'POST':
        form = RecipeForm(request.POST, request.FILES)
        recipeName = request.POST['name']
        if Recipe.objects.filter(name=recipeName).count() > 0:
            messages.add_message(
                request, messages.ERROR, "The recipe name " + recipeName +
                " has been taken. Please choose another name for your recipe.")
            return render(request, 'shakeapp/add.html')
        if form.is_valid():
            newRecipe = form.save(commit=False)
            pictureFile = form.cleaned_data['picture']
            newRecipe.picture.save(pictureFile.name, pictureFile)
            filename = pictureFile.name

            storeInS3(newRecipe.id, filename, pictureFile.file)
            newRecipe.url = settings.S3URL + 'recipe_id_' + str(
                newRecipe.id) + "_" + filename
            newRecipe.save()
            return HttpResponseRedirect("/shakeapp/")
        else:
            print
            print form.errors
            messages.add_message(
                request, messages.ERROR,
                "There has been an error in the form. Please make sure your inputs are correct."
            )
            return render(request, 'shakeapp/add.html')
    return render_to_response('shakeapp/add.html',
                              context_instance=RequestContext(request))
Example #11
0
def edit_recipe(request, id):
	recipe = get_object_or_404(Recipe, id=id)
	tag_prepop = Tag.objects.get_for_object(recipe)
	tool_prepop = recipe.tools.all()
	if recipe.user != request.user and request.user.is_superuser == False:
		return render_to_response('recipes/forbidden.html', context_instance=RequestContext(request))
	if request.method == 'POST':
		form = RecipeForm(request.POST, request.FILES, instance=recipe)
		formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe)
		if form.is_valid():
			recipe = form.save(commit=False)
			if formset.is_valid():
				formset.save()
				recipe.save()
				return render_to_response('recipes/view_recipe.html', {'recipe': recipe,}, context_instance=RequestContext(request))
	else:
		form = RecipeForm(instance=recipe)
		formset = RecipeIngredientsFormset(instance=recipe)
	return render_to_response('recipes/edit_recipe.html', {'recipe': recipe, 'form': form, 'formset': formset, 'tag_prepop': tag_prepop, 'tool_prepop': tool_prepop}, context_instance=RequestContext(request))
Example #12
0
def add_recipe(request):
	if request.method == 'POST':
		form = RecipeForm(request.POST, request.FILES)
		if form.is_valid():
			recipe = form.save(commit=False)
			recipe.user = request.user
			recipe.save()
			formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe)
			if formset.is_valid():
				formset.save()
				recipe.save()
				return render_to_response('recipes/view_recipe.html', {'recipe': recipe,}, context_instance=RequestContext(request))
			else:
				recipe.delete()
		else:
			formset = RecipeIngredientsFormset(request.POST, request.FILES)
	else:
		form = RecipeForm()
		formset = RecipeIngredientsFormset()
	return render_to_response('recipes/add_recipe.html', {'form': form, 'formset': formset}, context_instance=RequestContext(request))
Example #13
0
def recipe_edit(request, recipe_slug):
    if request.method == 'POST':
        if recipe_slug:
            recipe = Recipe.objects.get(slug=recipe_slug)
            if not request.user.can_modify(recipe):
                raise Exception(u'User %s cannot modify recipe %s' % \
                        (request.user, recipe))
            form = RecipeForm(request.POST, instance=recipe)
        else:
            form = RecipeForm(
                request.POST)  # todo load instance, add to the form
        if form.is_valid():
            #save the user if he's logged in and the recipe is new
            if request.user.is_authenticated() and not form.instance.id:
                logging.debug('saving new recipe: %s',
                              form.cleaned_data['name'])
                form.instance.inserted_by = request.user
            form.save()
            return HttpResponseRedirect(reverse('recipe_detail', \
                    args=[form.instance.slug]))
        else:
            pass  #TODO handle validation ???
    elif recipe_slug:
        recipe = Recipe.objects.get(slug=recipe_slug)
        if not request.user.can_modify(recipe):
            raise Exception(u'User %s cannot modify recipe %s' % \
                    (request.user, recipe))
        form = RecipeForm(instance=recipe)
    else:
        form = RecipeForm()

    #TODO if there's GET parameter tag, check that tag in 'category selection'
    if 'tag' in request.GET:
        #http://www.mail-archive.com/[email protected]/msg67842.html
        try:
            tag = Tag.objects.get(slug=request.GET['tag'])
            if tag:
                form.fields['tags'].initial = [tag.id]
        except Tag.DoesNotExist, e:
            logging.warn('Error loading tag [%s]: %s', request.GET['tag'], e)
Example #14
0
def correct_recipe(request):
    if request.method == 'POST':
        form = RecipeForm(request.POST, request.FILES)
        if form.is_valid():
            recipe = form.save(commit=False)
            recipe.user = request.user
            recipe.save()
            junk_id = request.POST['junkid']
            junk = JunkRecipe.objects.get(id=junk_id)
            formset = RecipeIngredientsFormset(request.POST,
                                               request.FILES,
                                               instance=recipe)
            if formset.is_valid():
                formset.save()
                recipe.save()
                junk.is_added = True
                junk.derived_recipe = recipe
                junk.save()
                return render_to_response(
                    'recipes/view_recipe.html', {
                        'recipe': recipe,
                    },
                    context_instance=RequestContext(request))
            else:
                recipe.delete()
        else:
            junk_id = request.POST['junkid']
            junk = JunkRecipe.objects.get(id=junk_id)
            formset = RecipeIngredientsFormset(request.POST, request.FILES)
    else:
        junk = random.choice(JunkRecipe.objects.filter(is_added=False))
        form = RecipeForm()
        formset = RecipeIngredientsFormset()
    return render_to_response('recipes/correct_recipe.html', {
        'form': form,
        'formset': formset,
        'junk': junk
    },
                              context_instance=RequestContext(request))
Example #15
0
def add(request):
    def storeInS3(recipe_id, filename, content):
        conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
        b = conn.create_bucket(settings.S3BUCKET)
        mime = mimetypes.guess_type(filename)[0]
        k = Key(b)
        k.key = 'recipe_id_'+str(recipe_id) +'_'+filename 
        k.set_metadata("Content_Type", mime)
        content.seek(0)
        k.set_contents_from_file(content)
        k.set_acl("public-read")
        
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')
    if request.method == 'POST':
        form = RecipeForm(request.POST, request.FILES )
        recipeName = request.POST['name']
        if Recipe.objects.filter(name=recipeName).count() > 0:
            messages.add_message(request, messages.ERROR,"The recipe name "+recipeName+" has been taken. Please choose another name for your recipe.")
            return render(request, 'shakeapp/add.html')
        if form.is_valid():
            newRecipe = form.save(commit=False)
            pictureFile = form.cleaned_data['picture']
            newRecipe.picture.save(pictureFile.name, pictureFile)
            filename = pictureFile.name 
            
            storeInS3(newRecipe.id, filename, pictureFile.file)
            newRecipe.url = settings.S3URL+'recipe_id_'+str(newRecipe.id)+"_"+filename
            newRecipe.save()
            return HttpResponseRedirect("/shakeapp/")
        else:
            print
            print form.errors
            messages.add_message(request, messages.ERROR,"There has been an error in the form. Please make sure your inputs are correct.")
            return render(request, 'shakeapp/add.html')
    return render_to_response('shakeapp/add.html',context_instance = RequestContext(request) )