def test_idea_all_fields(self):
     f = IdeaForm({
         'title':'Create an automatic birthday greeting emailer.',
         'summary': 'test summary',
         'text': 'test text',
         'tags': 'test, tags',
     })
     self.assertEqual(f.is_valid(), True)
 def test_idea_tags_required(self):
     """
         The field 'text' is option when adding an idea. 
     """
     f = IdeaForm({
         'title':'Create an automatic birthday greeting emailer.',
         'summary': 'test summary',
         'text': 'test text',
     })
     self.assertEqual(f.is_valid(), False)
 def test_idea_title_required(self):
     """
         The field 'title' is required when adding an idea.
     """
     f = IdeaForm({
         'summary': 'test summary',
         'text': 'test text',
         'tags': 'test, tags',
     })
     self.assertEqual(f.is_valid(), False)
Exemple #4
0
    def get(self, request, idea_id=None):
        '''
        Return a form with the category preset in the select if the
        GET parameter category=<id: int> is set. Otherwise it will
        have the default empty value.
        '''
        if idea_id:
            idea = get_object_or_404(Idea, pk=idea_id)

            # Users can only edit their own ideas
            if idea.user.id != request.user.id:
                return HttpResponseRedirect('/ideas/idea/' + str(idea.id))

            title = 'Edit your idea'

            initial = {
                'title': idea.title,
                'description': idea.description,
                'excerpt': idea.excerpt,
                'categories': idea.category.id
            }
        else:
            title = 'Create a new idea !'

            initial = {'categories': request.GET.get('category', 1)}

        form = IdeaForm(initial=initial)

        return render(request, 'idea/form.html', {
            'form': form,
            'title': title
        })
Exemple #5
0
def add_idea(request, banner_id=None):
    
    if 'Mobile' in request.META['HTTP_USER_AGENT']:
        mobile = True
    else:
        mobile = False

    if request.method == 'POST':
        matching_ideas = Idea.objects.filter(
            creator=request.user,
            title=request.POST.get('title', ''))
        if matching_ideas.count() > 0:
            # user already submitted this idea
            return HttpResponseRedirect(reverse('idea:idea_detail',
                                                args=(matching_ideas[0].id,)))
        idea = Idea(creator=request.user, state=state_helper.get_first_state())
        if idea.state.name == 'Pending':
            form = IdeaForm(request.POST, instance=idea)
            if form.is_valid():
                new_idea = form.save()
                vote_up(new_idea, request.user)
                send_mail('New Idea Pending', 'New idea pending! http://ec2-54-88-16-5.compute-1.amazonaws.com/idea/detail/' + str(new_idea.id), '*****@*****.**', User.objects.filter(groups__name='Approvers').values_list('email',flat=True), fail_silently=True)
                devices = GCMDevice.objects.filter(user__groups__name='Approvers')
                devices.send_message("New idea pending!", extra={"id": new_idea.id})
                devices = APNSDevice.objects.filter(user__groups__name='Approvers')
                devices.send_message(None, sound="", content_available=True, extra={"id": new_idea.id, "msg": "New idea pending!"})
                if 'Mobile' in request.META['HTTP_USER_AGENT']:
                    mobile = True
                else:
                    mobile = False
                return _render(request, 'idea/add_success.html',
                               {'idea': new_idea, 'mobile':mobile, })
            else:
                if 'banner' in request.POST:
                    form.fields["banner"].queryset = get_current_banners()
                else:
                    form.fields.pop('banner')
                    form.fields.pop('challenge-checkbox')
                form.set_error_css()
                return _render(request, 'idea/add.html', {'form': form, 'mobile':mobile, })
        else:
            return HttpResponse('Idea is archived', status=403)
    else:
        idea_title = request.GET.get('idea_title', '')
        current_banners = get_current_banners()
        if current_banners.count() == 0:
            form = IdeaForm(initial={'title': idea_title})
            form.fields.pop('banner')
            form.fields.pop('challenge-checkbox')
        else:
            if banner_id and Banner.objects.get(id=banner_id) in get_current_banners():
                banner = Banner.objects.get(id=banner_id)
            else:
                banner = None
            form = IdeaForm(initial={'title': idea_title, 'banner': banner})
            form.fields["banner"].queryset = current_banners
        return _render(request, 'idea/add.html', {
            'form': form, 'mobile':mobile, #,
            #'similar': [r.object for r in more_like_text(idea_title, Idea)]
        })
Exemple #6
0
    def post(self, request, idea_id=None):
        form = IdeaForm(request.POST)

        if not form.is_valid():
            return render(request, 'idea/form.html', {'form': form})

        if idea_id:
            # Update the existing idea with data from the form
            idea = get_object_or_404(Idea, pk=idea_id)
            idea.updated_date = timezone.now()
        else:
            # Create a new idea with data from the form and default values
            idea = Idea(
                created_date=timezone.now(),
                user_id=self.request.user.id,
                votes=0
            )

        idea.title = form.cleaned_data['title']
        idea.description = form.cleaned_data['description']
        idea.category_id = form.cleaned_data['categories'].id

        # Setting the excerpt
        excerpt = form.cleaned_data['excerpt']
        if not excerpt:
            # Max is 200, we remove 3 char for '...'
            MAX = 197

            stripped_description = strip_tags(idea.description)
            stripped_description = stripped_description.replace('&nbsp;', ' ')

            length = len(stripped_description)
            if length > MAX:
                excerpt = stripped_description[:MAX] + '...'
            else:
                excerpt = stripped_description

        idea.excerpt = excerpt

        idea.save()

        return HttpResponseRedirect('/ideas/idea/' + str(idea.id))
Exemple #7
0
    def post(self, request, idea_id=None):
        form = IdeaForm(request.POST)

        if not form.is_valid():
            return render(request, 'idea/form.html', {'form': form})

        if idea_id:
            # Update the existing idea with data from the form
            idea = get_object_or_404(Idea, pk=idea_id)
            idea.updated_date = timezone.now()
        else:
            # Create a new idea with data from the form and default values
            idea = Idea(created_date=timezone.now(),
                        user_id=self.request.user.id,
                        votes=0)

        idea.title = form.cleaned_data['title']
        idea.description = form.cleaned_data['description']
        idea.category_id = form.cleaned_data['categories'].id

        # Setting the excerpt
        excerpt = form.cleaned_data['excerpt']
        if not excerpt:
            # Max is 200, we remove 3 char for '...'
            MAX = 197

            stripped_description = strip_tags(idea.description)
            stripped_description = stripped_description.replace('&nbsp;', ' ')

            length = len(stripped_description)
            if length > MAX:
                excerpt = stripped_description[:MAX] + '...'
            else:
                excerpt = stripped_description

        idea.excerpt = excerpt

        idea.save()

        return HttpResponseRedirect('/ideas/idea/' + str(idea.id))
Exemple #8
0
def add_idea(request, banner_id=None):
    if request.method == 'POST':
        matching_ideas = Idea.objects.filter(
            creator=request.user,
            title=request.POST.get('title', ''))
        if matching_ideas.count() > 0:
            # user already submitted this idea
            return HttpResponseRedirect(reverse('idea:idea_detail',
                                                args=(matching_ideas[0].id,)))
        idea = Idea(creator=request.user, state=state_helper.get_first_state())
        if idea.state.name == 'Active':
            form = IdeaForm(request.POST, instance=idea)
            if form.is_valid():
                new_idea = form.save()
                vote_up(new_idea, request.user)
                return _render(request, 'idea/add_success.html',
                               {'idea': new_idea, })
            else:
                if 'banner' in request.POST:
                    form.fields["banner"].queryset = get_current_banners()
                else:
                    form.fields.pop('banner')
                    form.fields.pop('challenge-checkbox')
                form.set_error_css()
                return _render(request, 'idea/add.html', {'form': form, })
        else:
            return HttpResponse('Idea is archived', status=403)
    else:
        idea_title = request.GET.get('idea_title', '')
        current_banners = get_current_banners()
        if current_banners.count() == 0:
            form = IdeaForm(initial={'title': idea_title})
            form.fields.pop('banner')
            form.fields.pop('challenge-checkbox')
        else:
            if banner_id and Banner.objects.get(id=banner_id) in get_current_banners():
                banner = Banner.objects.get(id=banner_id)
            else:
                banner = None
            form = IdeaForm(initial={'title': idea_title, 'banner': banner})
            form.fields["banner"].queryset = current_banners
        return _render(request, 'idea/add.html', {
            'form': form,
            'similar': [r.object for r in more_like_text(idea_title, Idea)]
        })
Exemple #9
0
def edit_idea(request, idea_id):
    idea = get_object_or_404(Idea, pk=int(idea_id))
    original_banner = idea.banner
    if idea.creator != request.user:
        return HttpResponseRedirect(reverse('idea:idea_detail',
                                            args=(idea_id,)))
    
    if request.method == 'POST':
        form = IdeaForm(request.POST, instance=idea)
        form.fields.pop('tags')
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('idea:idea_detail',
                                                args=(idea_id,)))
        else:
            if 'banner' in request.POST:
                if original_banner:
                    current_banners = get_current_banners([original_banner.id])
                else:
                    current_banners = get_current_banners()
                form.fields["banner"].queryset = current_banners
            else:
                form.fields.pop('banner')
                form.fields.pop('challenge-checkbox')
            form.set_error_css()
            return _render(request, 'idea/edit.html', {'form': form, 'idea': idea })
    else:
        form_initial = {}
        if original_banner:
            current_banners = get_current_banners([original_banner.id])
            form_initial["challenge-checkbox"] = "on"
        else:
            current_banners = get_current_banners()
        form = IdeaForm(instance=idea, initial=form_initial)
        form.fields.pop('tags')
        if len(current_banners) == 0:
            form.fields.pop('banner')
            form.fields.pop('challenge-checkbox')
        else:
            form.fields["banner"].queryset = current_banners
        return _render(request, 'idea/edit.html',
                       {'form': form, 'idea': idea })
Exemple #10
0
def add_idea(request):
    banner = get_banner()
    if request.method == 'POST':
        idea = Idea(creator=request.user, state=state_helper.get_first_state())
        if idea.state.name == 'Active':
            form = IdeaForm(request.POST, instance=idea)
            if form.is_valid():
                new_idea = form.save()
                vote_up(new_idea, request.user)
                #   Make sure the search index included the tags
                site.get_index(Idea).update_object(new_idea)
                return HttpResponseRedirect(reverse('idea_detail', args=(idea.id,)))
        else:
            return HttpResponse('Idea is archived', status=403)
    else:
        idea_title = request.GET.get('idea_title', '')
        form = IdeaForm(initial={'title':idea_title})
        return _render(request, 'idea/add.html', {
            'form':form,
            'banner':banner,
            'similar': [r.object for r in more_like_text(idea_title,
                Idea)]
            })
Exemple #11
0
 def test_idea_title_required(self):
     """
         The field 'title' is required when adding an idea.
     """
     f = IdeaForm({'text':'Every employee should get 4 weeks of vacation.'})
     self.assertEqual(f.is_valid(), False)
Exemple #12
0
 def test_idea_text_optional(self):
     """
         The field 'text' is option when adding an idea. 
     """
     f = IdeaForm({'title':'Create an automatic birthday greeting emailer.'})
     self.assertEqual(f.is_valid(), True)
Exemple #13
0
def edit_idea(request, idea_id):
    idea = get_object_or_404(Idea, pk=int(idea_id))
    original_banner = idea.banner
    if idea.creator != request.user:
        return HttpResponseRedirect(reverse('idea:idea_detail',
                                            args=(idea_id,)))

    if request.method == 'POST':
        form_initial = {'banner': None,}
        if original_banner:
            form_initial['banner'] = original_banner.id

        if original_banner and original_banner.is_private:
            form = PrivateIdeaForm(request.POST, instance=idea, initial=form_initial)
        else:
            form = IdeaForm(request.POST, instance=idea)
        form.fields.pop('tags')
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('idea:idea_detail',
                                                args=(idea_id,)))
        else:
            if 'banner' in request.POST:
                if original_banner:
                    if original_banner.is_private:
                        current_banners = Banner.objects.filter(id=original_banner.id)
                    else:
                        current_banners = get_current_banners([original_banner.id])
                else:
                    current_banners = get_current_banners()
                form.fields["banner"].queryset = current_banners
            else:
                form.fields.pop('banner')
                form.fields.pop('challenge-checkbox')
            form.set_error_css()
            return _render(request, 'idea/edit.html', {'form': form, 'idea': idea })
    else:
        form_initial = {'banner': None,}
        if original_banner:
            form_initial['banner'] = original_banner.id

        # private room
        if original_banner and original_banner.is_private:
            form = PrivateIdeaForm(instance=idea, initial=form_initial)
            form.fields["banner"].queryset = Banner.objects.filter(id=original_banner.id)
        # challenge
        else:
            if original_banner:
                current_banners = get_current_banners([original_banner.id])
                form_initial["challenge-checkbox"] = "on"
            else:
                current_banners = get_current_banners()
            form = IdeaForm(instance=idea, initial=form_initial)
            if len(current_banners) == 0:
                form.fields.pop('banner')
                form.fields.pop('challenge-checkbox')
            else:
                form.fields["banner"].queryset = current_banners
        form.fields.pop('tags')
        return _render(request, 'idea/edit.html',
                       {'form': form, 'idea': idea })
Exemple #14
0
def add_idea(request, banner_id=None):
    if request.method == 'POST':
        matching_ideas = Idea.objects.filter(
            creator=request.user,
            title=request.POST.get('title', ''))
        if matching_ideas.count() > 0:
            # user already submitted this idea
            return HttpResponseRedirect(reverse('idea:idea_detail',
                                                args=(matching_ideas[0].id,)))
        idea = Idea(creator=request.user, state=state_helper.get_first_state())
        banner = None
        if banner_id:
            banner = get_object_or_404(Banner, pk=int(banner_id))

        if idea.state.name == 'Active':
            if banner and banner.is_private:
                form = PrivateIdeaForm(request.POST, instance=idea, initial={'banner':banner_id})
            else:
                form = IdeaForm(request.POST, instance=idea, initial={'banner':banner_id})

            if form.is_valid():
                new_idea = form.save()
                vote_up(new_idea, request.user)
                return _render(request, 'idea/add_success.html',
                               {'idea': new_idea, 'banner': banner})
            else:
                if 'banner' in request.POST:
                    if banner and banner.is_private:
                        form.fields["banner"].queryset = Banner.objects.filter(id=banner.id)
                    else:
                        form.fields["banner"].queryset = get_current_banners()
                else:
                    form.fields.pop('banner')
                    form.fields.pop('challenge-checkbox')
                form.set_error_css()
                return _render(request, 'idea/add.html', {'form': form, 'banner': banner})
        else:
            return HttpResponse('Idea is archived', status=403)
    else:
        idea_title = request.GET.get('idea_title', '')
        current_banners = get_current_banners()
        form_initial = {'title': idea_title, 'banner': None}
        banner = None
        if banner_id:
            banner = get_object_or_404(Banner, pk=int(banner_id))
        if banner and banner.is_private:
            form_initial['banner'] = banner.id
            form = PrivateIdeaForm(initial=form_initial)
            form.fields["banner"].queryset = Banner.objects.filter(id=banner_id)
        elif current_banners.count() == 0:
            form = IdeaForm(initial=form_initial)
            form.fields.pop('banner')
            form.fields.pop('challenge-checkbox')
        else:
            if banner:
                if banner not in current_banners:
                    banner = None
                else:
                    form_initial['banner'] = banner.id
                    form_initial['challenge-checkbox'] = "on"

            form = IdeaForm(initial=form_initial)
            form.fields["banner"].queryset = current_banners
        return _render(request, 'idea/add.html', {
            'form': form, 'banner': banner,
        })