Merge branch 'requests'
This commit is contained in:
commit
85dfd065e6
|
@ -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
|
||||
# ------------------------------------------------------------------------------
|
||||
|
|
|
@ -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
|
||||
# ------------------------------------------------------------------------------
|
||||
|
|
|
@ -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')),
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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'),
|
||||
),
|
||||
]
|
|
@ -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),
|
||||
),
|
||||
]
|
|
@ -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',
|
||||
),
|
||||
]
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 %}
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue