Merge branch 'requests'

This commit is contained in:
Oliver Marks 2018-01-18 18:57:08 +00:00
commit 85dfd065e6
12 changed files with 205 additions and 31 deletions

View File

@ -44,6 +44,7 @@ CSRF_COOKIE_SECURE = True
#disabledd so csrf works with ajax
CSRF_COOKIE_HTTPONLY = False
X_FRAME_OPTIONS = 'SAMEORIGIN'
X_FRAME_OPTIONS = 'ALLOW-FROM https://riot.im'
# SITE CONFIGURATION
# ------------------------------------------------------------------------------

View File

@ -44,6 +44,7 @@ CSRF_COOKIE_SECURE = True
#disabledd so csrf works with ajax
CSRF_COOKIE_HTTPONLY = False
X_FRAME_OPTIONS = 'SAMEORIGIN'
X_FRAME_OPTIONS = 'ALLOW-FROM https://riot.im'
# SITE CONFIGURATION
# ------------------------------------------------------------------------------

View File

@ -21,7 +21,7 @@ from mhackspace.base.views import markdown_uploader
from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostList
from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap
from mhackspace.feeds.views import FeedViewSet, ArticleViewSet
from mhackspace.requests.views import RequestsForm, RequestsList
from mhackspace.requests.views import RequestsForm, RequestsList, RequestsDetail, RequestsDetailForm
from mhackspace.rfid.views import DeviceViewSet, AuthUserWithDeviceViewSet
from mhackspace.register.views import RegisterForm
@ -51,8 +51,14 @@ urlpatterns = [
url(r'^chat/$', TemplateView.as_view(template_name='pages/chat.html'), name='chat'),
url(r'^mailing-list/$', TemplateView.as_view(template_name='pages/mailing-list.html'), name='group'),
url(r'^contact/$', contact, name='contact'),
url(r'^requests/$', RequestsList.as_view(), name='requests'),
url(r'^requests/create$', RequestsForm.as_view(), name='requests_form'),
url(
r'^requests/(?P<pk>\d+)/$',
RequestsDetail.as_view(template_name='pages/requests-detail.html'),
name='requests_detail'),
url(r'^requests/(?P<pk>\d+)/submit/$', RequestsDetailForm.as_view(template_name='pages/requests-detail.html'), name='requests_detail_form'),
url(r'^discuss/', include('spirit.urls')),
url(r'^api/v1/', include(router.urls, namespace='v1')),

View File

@ -1,17 +1,14 @@
from django import forms
from mhackspace.requests.models import UserRequest
from mhackspace.requests.models import REQUEST_TYPES
from mhackspace.requests.models import UserRequest, UserRequestsComment
class UserRequestForm(forms.ModelForm):
class Meta:
model = UserRequest
exclude = ['user', 'created_date']
# description = forms.CharField(
# required=True,
# widget=forms.Textarea
# )
# request_type = forms.ChoiceField(
# required=True,
# widget=forms.Select,
# choices=REQUEST_TYPES)
exclude = ['user', 'created_date', 'acquired']
class UserRequestFormComment(forms.ModelForm):
class Meta:
model = UserRequestsComment
exclude = ['user', 'created_date', 'request']

View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2018-01-15 13:55
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('requests', '0009_userrequest_acquired'),
]
operations = [
migrations.CreateModel(
name='UserRequestComments',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('comment', models.TextField(help_text='Your comments')),
('created_date', models.DateTimeField(default=django.utils.timezone.now)),
],
),
migrations.AlterModelOptions(
name='userrequest',
options={'ordering': ('acquired', 'created_date')},
),
migrations.AddField(
model_name='userrequestcomments',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='requests.UserRequest'),
),
]

View File

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2018-01-15 14:16
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('requests', '0010_auto_20180115_1355'),
]
operations = [
migrations.AddField(
model_name='userrequestcomments',
name='request',
field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='requests.UserRequest'),
preserve_default=False,
),
migrations.AlterField(
model_name='userrequest',
name='acquired',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='userrequestcomments',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2018-01-15 14:25
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('requests', '0011_auto_20180115_1416'),
]
operations = [
migrations.RenameModel(
old_name='UserRequestComments',
new_name='UserRequestsComment',
),
]

View File

@ -2,8 +2,10 @@
from django.conf import settings
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.db.models.signals import post_save
from martor.models import MartorField
from mhackspace.base.tasks import matrix_message
@ -20,33 +22,38 @@ class UserRequest(models.Model):
)
title = models.CharField(max_length=255, help_text='Whats being requested ?')
request_type = models.IntegerField(choices=REQUEST_TYPES, null=False)
acquired = models.BooleanField()
acquired = models.BooleanField(default=False)
cost = models.DecimalField(
max_digits=6,
decimal_places=2,
help_text='Leave blank, if no associated cost, or add estimated cost if not sure.'
)
description = models.TextField(help_text="detail of what's being requested and where it can be purchased")
description = MartorField(help_text="detail of what's being requested and where it can be purchased")
created_date = models.DateTimeField(default=timezone.now)
class Meta:
ordering = ('cost',)
def request_type_string(self):
return REQUEST_TYPES[self.request_type][1]
# class UserRequestComments(models.Model):
# user = models.OneToOneField(
# settings.AUTH_USER_MODEL, related_name='+')
# comment = models.TextField()
# created_date = models.DateTimeField(default=timezone.now)
def get_absolute_url(self):
return reverse(
'requests_detail',
kwargs={'pk': self.pk})
class Meta:
ordering = ('acquired', 'created_date',)
class UserRequestsComment(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
request = models.ForeignKey(UserRequest, on_delete=models.CASCADE)
comment = MartorField(help_text='Your comments')
created_date = models.DateTimeField(default=timezone.now)
def send_topic_update_email(sender, instance, **kwargs):
matrix_message.delay(prefix=' - REQUEST', message=instance.title)
matrix_message.delay(
prefix=' - REQUEST',
message='%s - %s' % (instance.title, instance.get_absolute_url()))
post_save.connect(send_topic_update_email, sender=UserRequest)

View File

@ -1,16 +1,16 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.mail import EmailMessage
from django.contrib import messages
from mhackspace.requests.forms import UserRequestForm
from mhackspace.requests.models import UserRequest
from django.views.generic import ListView
from mhackspace.requests.forms import UserRequestForm, UserRequestFormComment
from mhackspace.requests.models import UserRequest, UserRequestsComment
from django.views.generic import DetailView, ListView
from django.views.generic.edit import FormView
from django.urls import reverse
class RequestsForm(LoginRequiredMixin, FormView):
template_name = 'pages/requests.html'
form_class = UserRequestForm
success_url = '/requests'
success_url = '/requests/'
def form_valid(self, form):
if form.is_valid():
@ -21,6 +21,36 @@ class RequestsForm(LoginRequiredMixin, FormView):
return super(FormView, self).form_valid(form)
class RequestsDetailForm(LoginRequiredMixin, FormView):
template_name = 'pages/requests-detail.html'
form_class = UserRequestFormComment
def get_success_url(self):
return reverse(
'requests_detail',
kwargs={'pk': self.kwargs.get('pk')})
def form_valid(self, form):
if form.is_valid():
obj = form.save(commit=False)
obj.user = self.request.user
obj.request_id = self.kwargs.get('pk')
obj.save()
messages.add_message(self.request, messages.INFO, 'Request comment added.')
return super(FormView, self).form_valid(form)
class RequestsDetail(LoginRequiredMixin, DetailView):
model = UserRequest
context_object_name = 'request_detail'
def get_context_data(self, *args, **kwargs):
context = super(RequestsDetail, self).get_context_data(*args, **kwargs)
context['requests_comments'] = UserRequestsComment.objects.all()
context['requests_form'] = UserRequestFormComment
return context
class RequestsList(LoginRequiredMixin, ListView):
template_name = 'pages/requests.html'
model = UserRequest

View File

@ -0,0 +1,44 @@
{% extends "base.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% load recapture %}
{% block head-open-graph %}
<meta property="og:title" content="New request made" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{ request.build_absolute_uri }}" />
<meta property="og:image" content="https://maidstone-hackspace.org.uk/static/images/android-chrome-192x192.png" />
{% endblock head-open-graph %}
{% block content %}
<h2>{{requests.title}}</h2>
<div class="row">
<div class="col">
{{requests.description}}
</div>
</div>
{% for comment in requests_comments %}
<b>{{ comment.user }}</b>
<p>{{ comment.comment }}</p>
{% endfor %}
{% if requests_form %}
<form method="POST" action="{% url 'requests_detail_form' request_detail.id %}" class="requests_detail_form">
{% csrf_token %}
{{ requests_form|crispy }}
{{ google_capture }}
<button class="btn btn-primary " type="submit" name="action">
<span class="fa fa-submit" ></span>
{% trans "Add Comment" %}</button>
</form>
{% endif %}
{% endblock content %}
{% block javascript %}
{{ block.super }}
<script src='https://www.google.com/recaptcha/api.js'></script>
{% endblock %}

View File

@ -60,7 +60,7 @@
{{ request.created_date }}
</td>
<td>
{{ request.title }}
<a href="{% url 'requests_detail' request.id %}">{{ request.title }}</a>
</td>
<td>
<button data-toggle="collapse" data-target="#expand{{forloop.counter}}" class="fa fa-expand ml-auto" ></button>

View File

@ -67,8 +67,10 @@ django-filter==1.0.2
coreapi
# api libraries end
#martor==1.1.8
martor==1.2.5
#martor==1.2.5
git+git://github.com/olymk2/django-markdown-editor.git
# django-spirit
django-djconfig
django-haystack