Implement publisher and feedback email in campaign management
(feedback view made more flexible)pull/1/head
parent
2b28add6a8
commit
3a81db3804
|
@ -847,6 +847,10 @@ class Work(models.Model):
|
|||
def get_absolute_url(self):
|
||||
return reverse('work', args=[str(self.id)])
|
||||
|
||||
def publishers(self):
|
||||
# returns a set of publishers associated with this Work
|
||||
return Publisher.objects.filter(name__editions__work=self).distinct()
|
||||
|
||||
class Author(models.Model):
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
name = models.CharField(max_length=500)
|
||||
|
@ -970,9 +974,9 @@ class Edition(models.Model):
|
|||
class Publisher(models.Model):
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
name = models.ForeignKey('PublisherName', related_name='key_publisher')
|
||||
url = models.URLField(max_length=1024, null=True)
|
||||
logo_url = models.URLField(max_length=1024, null=True)
|
||||
description = models.TextField(default='', null=True)
|
||||
url = models.URLField(max_length=1024, null=True, blank=True)
|
||||
logo_url = models.URLField(max_length=1024, null=True, blank=True)
|
||||
description = models.TextField(default='', null=True, blank=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name.name
|
||||
|
|
|
@ -303,10 +303,11 @@ def getManageCampaignForm ( instance, data=None, *args, **kwargs ):
|
|||
edition = forms.ModelChoiceField(get_queryset(), widget=RadioSelect(),empty_label='no edition selected',required = False,)
|
||||
minimum_target = settings.UNGLUEIT_MINIMUM_TARGET
|
||||
latest_ending = (timedelta(days=int(settings.UNGLUEIT_LONGEST_DEADLINE)) + now()).date
|
||||
publisher = forms.ModelChoiceField(instance.work.publishers(), empty_label='no publisher selected', required = False,)
|
||||
|
||||
class Meta:
|
||||
model = Campaign
|
||||
fields = 'description', 'details', 'license', 'target', 'deadline', 'paypal_receiver', 'edition'
|
||||
fields = 'description', 'details', 'license', 'target', 'deadline', 'paypal_receiver', 'edition', 'email', 'publisher'
|
||||
widgets = {
|
||||
'deadline': SelectDateWidget,
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
{% extends "basedocumentation.html" %}
|
||||
|
||||
{% block title %}Campaign questions{% endblock %}
|
||||
|
||||
{% block doccontent %}
|
||||
{% if campaign.email %}
|
||||
<p>Questions about {{campaign}}? Ask away!</p>
|
||||
|
||||
To: {{campaign}}<br /><br />
|
||||
<form method="POST" action="#">
|
||||
{% csrf_token %}
|
||||
{{ form.sender.errors }}
|
||||
{{ form.sender.label_tag }}<br />
|
||||
{{ form.sender }}<br /><br />
|
||||
{{ form.subject.errors }}
|
||||
{{ form.subject.label_tag }}<br />
|
||||
{{ form.subject }}<br /><br />
|
||||
{{ form.message.errors }}
|
||||
{{ form.message.label_tag }}<br />
|
||||
{{ form.message }}<br /><br />
|
||||
{{ form.notarobot.errors }}
|
||||
{{ form.non_field_errors }}
|
||||
Please prove you're not a robot. {{num1}} + {{num2}} =
|
||||
{{ form.notarobot }}</br /><br />
|
||||
{{ form.answer }}
|
||||
{{ form.num1 }}
|
||||
{{ form.num2 }}
|
||||
{{ form.page }}
|
||||
<input type="submit" value="Submit" />
|
||||
</form>
|
||||
{% else %}
|
||||
<p>Sorry, this campaign isn't set up to answer emails at this time.</p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -0,0 +1,4 @@
|
|||
{{ sender }} has a question about {{campaign}}
|
||||
_____________________________________
|
||||
|
||||
{{ message }}
|
|
@ -0,0 +1,5 @@
|
|||
This feedback is about {{ page }}
|
||||
From {{ sender }}, ungluer name {{ request.user.username }}
|
||||
user agent {{ request.META.HTTP_USER_AGENT }}
|
||||
_____________________________________
|
||||
{{ message }}
|
|
@ -246,12 +246,17 @@ Please fix the following before launching your campaign:
|
|||
{{ form.deadline.errors }}<span style="display: none">{{ form.deadline }}</span>
|
||||
{% endifnotequal %}
|
||||
|
||||
<h3>e-mail contact address</h3>
|
||||
<p>Enter the email address where notifications about this campaign should be sent. If your campaign succeeds, this email needs to work if you want to get paid!</p>
|
||||
|
||||
|
||||
<h3>e-mail contact addresses</h3>
|
||||
<p>Enter the email address where notifications about this campaign should be sent. If your campaign succeeds, this email needs to work if you want to get paid! This address will not be exposed on the website.</p>
|
||||
<p>{{ form.paypal_receiver.errors }}{{ form.paypal_receiver }}</p>
|
||||
|
||||
<p>(Optional, but highly recommended). Enter an email address where ungluers with questions about the book or the campaign can contact you or someone involved. This address will not be exposed on the website.</p>
|
||||
<p>{{ form.email.errors }}{{ form.email }}</p>
|
||||
|
||||
{% if work.publishers %}
|
||||
<h3>Publisher</h3>
|
||||
<p>If you are set up as an unglue.it publisher (send us a url, logo, description and list of ways your name might appear) you can link your campaign by selecting the publisher here:
|
||||
<p>{{ form.publisher.errors }}{{ form.publisher }}</p>
|
||||
{% endif %}
|
||||
{% ifequal campaign_status 'ACTIVE' %}
|
||||
<div class="yikes">When you click this button, your changes will be visible to supporters immediately. Make sure to proofread!</div><br />
|
||||
<input type="submit" name="save" value="Modify Campaign" />
|
||||
|
|
|
@ -73,7 +73,12 @@
|
|||
<div>
|
||||
<div class="pubinfo">
|
||||
<h3 class="book-author" itemprop="author">{{ work.author }}</h3>
|
||||
<h3 class="book-year" itemprop="datePublished">{{ work.publication_date_year }}</h3>
|
||||
<h3 class="book-year">
|
||||
{% if work.last_campaign.publisher %}
|
||||
<span itemprop="publisher"><a href="{% url bypubname_list work.last_campaign.publisher.name.id %}">{{ work.last_campaign.publisher }}</a></span>
|
||||
{% endif %}
|
||||
<span itemprop="datePublished">{{ work.publication_date_year }}</span>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -412,6 +417,16 @@
|
|||
</div>
|
||||
<br />
|
||||
<div class="js-rightcol-pad rounded">
|
||||
{% ifequal status 'ACTIVE' %}{% if work.last_campaign.email %}
|
||||
<div class="jsmodule">
|
||||
<h3 class="jsmod-title"><span>Ask Questions</span></h3>
|
||||
<div class="jsmod-content">
|
||||
<ul class="social menu">
|
||||
<a href="{% url ask_rh work.last_campaign.id %}"><li class="email"><span>Email the Rights Holder</span></li></a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}{% endifequal %}
|
||||
<div class="jsmodule">
|
||||
<h3 class="jsmod-title"><span>Share</span></h3>
|
||||
<div class="jsmod-content">
|
||||
|
|
|
@ -81,6 +81,7 @@ urlpatterns = patterns(
|
|||
url('^500testing/$', direct_to_template, {'template': '500.html'}),
|
||||
url('^robots.txt$', direct_to_template, {'template': 'robots.txt', 'mimetype': 'text/plain'}),
|
||||
url(r"^emailshare/(?P<action>\w*)/?$", "emailshare", name="emailshare"),
|
||||
url(r"^feedback/campaign/(?P<campaign_id>\d+)/?$", "ask_rh", name="ask_rh"),
|
||||
url(r"^feedback/$", "feedback", name="feedback"),
|
||||
url(r"^feedback/thanks/$", TemplateView.as_view(template_name="thanks.html")),
|
||||
url(r"^press/$", TemplateView.as_view(template_name="press.html"),
|
||||
|
|
|
@ -533,7 +533,7 @@ class ByPubView(WorkListView):
|
|||
self.set_publisher()
|
||||
|
||||
def set_publisher(self):
|
||||
if self.publisher_name.key_publisher:
|
||||
if self.publisher_name.key_publisher.count():
|
||||
self.publisher = self.publisher_name.key_publisher.all()[0]
|
||||
elif self.publisher_name.publisher:
|
||||
self.publisher = self.publisher_name.publisher
|
||||
|
@ -2131,45 +2131,49 @@ def emailshare(request, action):
|
|||
|
||||
return render(request, "emailshare.html", {'form':form})
|
||||
|
||||
def feedback(request):
|
||||
num1 = randint(0,10)
|
||||
num2 = randint(0,10)
|
||||
sum = num1 + num2
|
||||
def ask_rh(request, campaign_id):
|
||||
campaign = get_object_or_404(models.Campaign, id=campaign_id)
|
||||
return feedback(request, recipient=campaign.email, template="ask_rh.html",
|
||||
message_template="ask_rh.txt",
|
||||
redirect_url = reverse('work', args=[campaign.work.id]),
|
||||
extra_context={'campaign':campaign, 'subject':campaign })
|
||||
|
||||
def feedback(request, recipient='support@gluejar.com', template='feedback.html', message_template='feedback.txt', extra_context=None, redirect_url=None):
|
||||
context = extra_context or {}
|
||||
context['num1'] = randint(0,10)
|
||||
context['num2'] = randint(0,10)
|
||||
context['answer'] = context['num1'] + context['num2']
|
||||
|
||||
if request.method == 'POST':
|
||||
form=FeedbackForm(request.POST)
|
||||
if form.is_valid():
|
||||
subject = form.cleaned_data['subject']
|
||||
message = form.cleaned_data['message']
|
||||
sender = form.cleaned_data['sender']
|
||||
recipient = 'support@gluejar.com'
|
||||
page = form.cleaned_data['page']
|
||||
useragent = request.META['HTTP_USER_AGENT']
|
||||
if request.user.is_anonymous():
|
||||
ungluer = "(not logged in)"
|
||||
context.update(form.cleaned_data)
|
||||
context['request']=request
|
||||
if extra_context:
|
||||
context.update(extra_context)
|
||||
message = render_to_string(message_template,context)
|
||||
send_mail_task.delay(context['subject'], message, context['sender'], [recipient])
|
||||
if redirect_url:
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
else:
|
||||
ungluer = request.user.username
|
||||
message = "<<<This feedback is about "+page+". Original user message follows\nfrom "+sender+", ungluer name "+ungluer+"\nwith user agent "+useragent+"\n>>>\n"+message
|
||||
send_mail_task.delay(subject, message, sender, [recipient])
|
||||
|
||||
return render(request, "thanks.html", {"page":page})
|
||||
return render(request, "thanks.html", context)
|
||||
|
||||
else:
|
||||
num1 = request.POST['num1']
|
||||
num2 = request.POST['num2']
|
||||
context['num1'] = request.POST['num1']
|
||||
context['num2'] = request.POST['num2']
|
||||
|
||||
else:
|
||||
if request.user.is_authenticated():
|
||||
sender=request.user.email;
|
||||
else:
|
||||
sender=''
|
||||
context['sender']=request.user.email;
|
||||
try:
|
||||
page = request.GET['page']
|
||||
context['page'] = request.GET['page']
|
||||
except:
|
||||
page='/'
|
||||
form = FeedbackForm(initial={"sender":sender, "subject": "Feedback on page "+page, "page":page, "num1":num1, "num2":num2, "answer":sum})
|
||||
|
||||
return render(request, "feedback.html", {'form':form, 'num1':num1, 'num2':num2})
|
||||
context['page'] = '/'
|
||||
if not context.has_key('subject'):
|
||||
context['subject'] = "Feedback on page "+context['page']
|
||||
form = FeedbackForm(initial=context)
|
||||
context['form'] = form
|
||||
return render(request, template, context)
|
||||
|
||||
def comment(request):
|
||||
latest_comments = Comment.objects.all().order_by('-submit_date')[:20]
|
||||
|
|
Loading…
Reference in New Issue