Merge branch 'master' of github.com:Gluejar/regluit into fps
|
@ -187,7 +187,7 @@ class Campaign(models.Model):
|
||||||
self.save()
|
self.save()
|
||||||
active_claim = self.work.claim.filter(status="active")[0]
|
active_claim = self.work.claim.filter(status="active")[0]
|
||||||
ungluers = self.work.wished_by()
|
ungluers = self.work.wished_by()
|
||||||
notification.queue(ungluers, "active_campaign", {'campaign':self, 'active_claim':active_claim}, True)
|
notification.queue(ungluers, "wishlist_active", {'campaign':self, 'active_claim':active_claim}, True)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
@ -587,6 +587,30 @@ class Ebook(models.Model):
|
||||||
def set_provider(self):
|
def set_provider(self):
|
||||||
self.provider=Ebook.infer_provider(self.url)
|
self.provider=Ebook.infer_provider(self.url)
|
||||||
return self.provider
|
return self.provider
|
||||||
|
|
||||||
|
@property
|
||||||
|
def rights_badge(self):
|
||||||
|
my_rights=self.rights
|
||||||
|
if not my_rights:
|
||||||
|
return 'https://i.creativecommons.org/p/mark/1.0/88x31.png'
|
||||||
|
if my_rights == 'PD-US':
|
||||||
|
return 'https://i.creativecommons.org/p/mark/1.0/88x31.png'
|
||||||
|
elif my_rights == 'CC0':
|
||||||
|
return 'https://i.creativecommons.org/p/zero/1.0/88x31.png'
|
||||||
|
elif my_rights == 'CC BY':
|
||||||
|
return 'https://i.creativecommons.org/l/by/3.0/88x31.png'
|
||||||
|
elif my_rights == 'CC BY-NC-ND':
|
||||||
|
return 'https://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png'
|
||||||
|
elif my_rights == 'CC BY-NC-SA':
|
||||||
|
return 'https://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png'
|
||||||
|
elif my_rights == 'CC BY-NC':
|
||||||
|
return 'https://i.creativecommons.org/l/by-nc/3.0/88x31.png'
|
||||||
|
elif my_rights == 'CC BY-SA':
|
||||||
|
return 'https://i.creativecommons.org/l/by-sa/3.0/88x31.png'
|
||||||
|
elif my_rights == 'CC BY-ND':
|
||||||
|
return 'https://i.creativecommons.org/l/by-nd/3.0/88x31.png'
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def infer_provider(klass, url):
|
def infer_provider(klass, url):
|
||||||
|
|
|
@ -66,23 +66,40 @@ registration.signals.user_activated.connect(merge_emails)
|
||||||
# create notification types (using django-notification) -- tie to syncdb
|
# create notification types (using django-notification) -- tie to syncdb
|
||||||
|
|
||||||
def create_notice_types(app, created_models, verbosity, **kwargs):
|
def create_notice_types(app, created_models, verbosity, **kwargs):
|
||||||
notification.create_notice_type("wishlist_comment", _("Wishlist Comment"), _("a comment has been received on one of your wishlist books"), default = 1)
|
notification.create_notice_type("comment_on_commented", _("Comment on Commented Work"), _("A comment has been received on a book that you've commented on."))
|
||||||
notification.create_notice_type("comment_on_commented", _("Comment on Commented Work"), _("a comment has been received on a book that you've commented on"))
|
notification.create_notice_type("wishlist_comment", _("Wishlist Comment"), _("A comment has been received on one of your wishlist books."), default = 1)
|
||||||
notification.create_notice_type("successful_campaign", _("Successful Campaign"), _("a campaign that you have supported or followed has succeeded"))
|
notification.create_notice_type("wishlist_work_claimed", _("Rights Holder is Active"), _("A rights holder has shown up for a book that you want unglued."), default = 1)
|
||||||
notification.create_notice_type("active_campaign", _("New Campaign"), _("a book you've wishlisted has a newly launched campaign"))
|
notification.create_notice_type("wishlist_active", _("New Campaign"), _("A book you've wishlisted has a newly launched campaign."))
|
||||||
|
notification.create_notice_type("wishlist_near_target", _("Campaign Near Target"), _("A book you want is near its ungluing target."))
|
||||||
|
notification.create_notice_type("wishlist_near_deadline", _("Campaign Near Deadline"), _("A book you want is almost out of time."))
|
||||||
|
notification.create_notice_type("wishlist_premium_limited_supply", _("Only a Few Premiums Left"), _("You have a last chance for an ungluing premium you might like."))
|
||||||
|
notification.create_notice_type("wishlist_successful", _("Successful Campaign"), _("An ungluing campaign that you have supported or followed has succeeded."))
|
||||||
|
notification.create_notice_type("wishlist_unsuccessful", _("Unsuccessful Campaign"), _("An ungluing campaign that you supported didn't succeed this time."))
|
||||||
|
notification.create_notice_type("wishlist_updated", _("Campaign Updated"), _("An ungluing campaign you support has been updated."), default = 1)
|
||||||
|
notification.create_notice_type("wishlist_message", _("Campaign Communication"), _("There's a message about an ungluing campaign you're interested in."))
|
||||||
|
notification.create_notice_type("wishlist_price_drop", _("Campaign Price Drop"), _("An ungluing campign you're interested in has a reduced target."), default = 1)
|
||||||
|
notification.create_notice_type("wishlist_unglued_book_released", _("Unglued Book!"), _("Another book you wanted has been unglued!"))
|
||||||
|
notification.create_notice_type("pledge_you_have_pledged", _("Thanks For Your Pledge!"), _("Your ungluing pledge has been entered."))
|
||||||
|
notification.create_notice_type("pledge_status_change", _("Your Pledge Has Been Modified"), _("Your ungluing plegde has been modified."))
|
||||||
|
notification.create_notice_type("pledge_charged", _("Your Pledge has been Executed"), _("You have contributed to a successful ungluing campaign."))
|
||||||
|
notification.create_notice_type("rights_holder_created", _("Agreement Accepted"), _("You become a verified Ungue.it rights holder."))
|
||||||
|
notification.create_notice_type("rights_holder_claim_approved", _("Claim Accepted"), _("A claim you've entered has been accepted."))
|
||||||
|
|
||||||
signals.post_syncdb.connect(create_notice_types, sender=notification)
|
signals.post_syncdb.connect(create_notice_types, sender=notification)
|
||||||
|
|
||||||
# define the notifications and tie them to corresponding signals
|
# define the notifications and tie them to corresponding signals
|
||||||
|
|
||||||
from django.contrib.comments.signals import comment_was_posted
|
from django.contrib.comments.signals import comment_was_posted
|
||||||
|
|
||||||
|
|
||||||
def notify_comment(comment, request, **kwargs):
|
def notify_comment(comment, request, **kwargs):
|
||||||
logger.info('comment %s notifying' % comment.pk)
|
logger.info('comment %s notifying' % comment.pk)
|
||||||
other_commenters = User.objects.filter(comment_comments__content_type=comment.content_type, comment_comments__object_pk=comment.object_pk).distinct().exclude(id=comment.user.id)
|
other_commenters = User.objects.filter(comment_comments__content_type=comment.content_type, comment_comments__object_pk=comment.object_pk).distinct().exclude(id=comment.user.id)
|
||||||
other_wishers = comment.content_object.wished_by().exclude(id=comment.user.id).exclude(id__in=other_commenters)
|
other_wishers = comment.content_object.wished_by().exclude(id=comment.user.id).exclude(id__in=other_commenters)
|
||||||
notification.queue(other_commenters, "comment_on_commented", {'comment':comment}, True)
|
notification.queue(other_commenters, "comment_on_commented", {'comment':comment}, True)
|
||||||
notification.queue(other_wishers, "wishlist_comment", {'comment':comment}, True)
|
notification.queue(other_wishers, "wishlist_comment", {'comment':comment}, True)
|
||||||
|
from regluit.core.tasks import emit_notifications
|
||||||
|
emit_notifications.delay()
|
||||||
|
|
||||||
comment_was_posted.connect(notify_comment)
|
comment_was_posted.connect(notify_comment)
|
||||||
|
|
||||||
|
@ -99,7 +116,9 @@ def notify_successful_campaign(campaign, **kwargs):
|
||||||
supporters = (User.objects.get(id=k) for k in campaign.supporters())
|
supporters = (User.objects.get(id=k) for k in campaign.supporters())
|
||||||
|
|
||||||
site = Site.objects.get_current()
|
site = Site.objects.get_current()
|
||||||
notification.queue(itertools.chain(staff, supporters), "successful_campaign", {'campaign':campaign, 'site':site}, True)
|
notification.queue(itertools.chain(staff, supporters), "wishlist_successful", {'campaign':campaign, 'site':site}, True)
|
||||||
|
from regluit.core.tasks import emit_notifications
|
||||||
|
emit_notifications.delay()
|
||||||
|
|
||||||
# successful_campaign -> send notices
|
# successful_campaign -> send notices
|
||||||
successful_campaign.connect(notify_successful_campaign)
|
successful_campaign.connect(notify_successful_campaign)
|
|
@ -97,6 +97,13 @@ class ProfileForm(forms.ModelForm):
|
||||||
'tagline': forms.Textarea(attrs={'rows': 5, 'onKeyUp': "counter(this, 140)", 'onBlur': "counter(this, 140)"}),
|
'tagline': forms.Textarea(attrs={'rows': 5, 'onKeyUp': "counter(this, 140)", 'onBlur': "counter(this, 140)"}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class UserEmail(forms.Form):
|
||||||
|
email = forms.EmailField(
|
||||||
|
label=_("new email address"),
|
||||||
|
max_length=100,
|
||||||
|
error_messages={'required': 'Please enter an email address.'},
|
||||||
|
)
|
||||||
|
|
||||||
class UserData(forms.Form):
|
class UserData(forms.Form):
|
||||||
username = forms.RegexField(
|
username = forms.RegexField(
|
||||||
label=_("New Username"),
|
label=_("New Username"),
|
||||||
|
|
|
@ -91,7 +91,7 @@ Welcome to the alpha version of Unglue.It. This site is a preview of our full f
|
||||||
<span>About unglue.it</span>
|
<span>About unglue.it</span>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ abouturl }}">About</a></li>
|
<li><a href="{{ abouturl }}">About</a></li>
|
||||||
<li><a href="http://www.gluejar.com/Blog">Blog</a></li>
|
<li><a href="http://blog.unglue.it">Blog</a></li>
|
||||||
<li><a href="{{ pressurl }}">Press</a></li>
|
<li><a href="{{ pressurl }}">Press</a></li>
|
||||||
<li><a href="http://eepurl.com/fKLfI">Newsletter</a></li>
|
<li><a href="http://eepurl.com/fKLfI">Newsletter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -141,7 +141,7 @@
|
||||||
{% else %}{% if first_ebook %}
|
{% else %}{% if first_ebook %}
|
||||||
<span class="listview boolist-ebook">
|
<span class="listview boolist-ebook">
|
||||||
{% for ebook in work.ebooks|slice:":3" %}
|
{% for ebook in work.ebooks|slice:":3" %}
|
||||||
<a href="{{ebook.url}}">{{ ebook.format }}</a>
|
<a href="{{ ebook.url }}"><img src="/static/images/{{ ebook.format }}32.png" height="32" alt="{{ ebook.rights}} {{ ebook.format }} at {{ebook.provider}}" title="{{ ebook.rights}} {{ ebook.format }} at {{ebook.provider}}" /></a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
|
@ -488,7 +488,7 @@ Need more ideas? We're happy to work with rights holders personally to craft a
|
||||||
|
|
||||||
<dt>Are contributions refundable?</dt>
|
<dt>Are contributions refundable?</dt>
|
||||||
|
|
||||||
<dd>Ungluers are free to modify or cancel their pledges before a campaign ends. At that point, their credit cards will be charged nonrefundably.</dd>
|
<dd>No. Once a campaign to which you have pledged succeeds, your credit card will be charged the full amount of your pledge nonrefundably. However, you will not be charged until, and unless, the campaign succeeds. Before that time you may modify or cancel your pledge without charge.</dd>
|
||||||
|
|
||||||
<dt>What if an ungluer contests a charge?</dt>
|
<dt>What if an ungluer contests a charge?</dt>
|
||||||
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
Congratulations, you wished for it, and now there is an active Campaign for {{ campaign.work.title }} to be Unglued. If ungluers like you pledge {{ campaign.target }} by {{ campaign.deadline }}, this book will be released under a Creative Commons license for everyone to enjoy.
|
|
||||||
|
|
||||||
You can help!
|
|
||||||
|
|
||||||
<a href="{% url pledge work_id=campaign.work.id %}">Pledge</a> toward ungluing.
|
|
||||||
|
|
||||||
Tell your friends -- there are handy share options on the <a href="{% url work campaign.work.id %}">campaign page</a>. There's even a widget you can put on your blog or home page.
|
|
||||||
|
|
||||||
<a href="{% url work campaign.work.id %}?tab=2">Join the discussion</a>: share why you love {{ campaign.work.title }} and the world will too.
|
|
||||||
|
|
||||||
Thank you!
|
|
||||||
|
|
||||||
{{ active_claim.rights_holder.rights_holder_name }} (rights holder for {{ campaign.work.title }}) and the Unglue.It Team
|
|
|
@ -1,7 +1,7 @@
|
||||||
{% extends "notification/base.html" %}
|
{% extends "notification/base.html" %}
|
||||||
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
{% load truncatechars %}
|
||||||
{% block title %}{% trans "Notification Settings" %}{% endblock %}
|
{% block title %}{% trans "Notification Settings" %}{% endblock %}
|
||||||
|
|
||||||
{% block extra_css %}
|
{% block extra_css %}
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block doccontent %}
|
{% block doccontent %}
|
||||||
<h2>{% trans "Settings" %}</h2>
|
<h2>{% trans "Notification Settings" %}</h2>
|
||||||
|
|
||||||
<a href="{% url notification_notices %}">
|
<a href="{% url notification_notices %}">
|
||||||
<div class="notices_menu">
|
<div class="notices_menu">
|
||||||
|
@ -19,19 +19,20 @@
|
||||||
<div class="comments"></div>
|
<div class="comments"></div>
|
||||||
|
|
||||||
<div class="notice_settings">
|
<div class="notice_settings">
|
||||||
<p>Which notifications would you like to receive via email?</p>
|
|
||||||
<form method="POST" action="">
|
<form method="POST" action="">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<table class="notice_settings table table-striped">
|
<h3>Comment Notifications</h3>
|
||||||
|
<table class="notice_settings table table-striped" width="90%">
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% trans "Notification Type" %}</th>
|
<th>{% trans "Notify me when..." %}</th>
|
||||||
{% for header in notice_settings.column_headers %}
|
{% for header in notice_settings.column_headers %}
|
||||||
<th>{{ header }}</th>
|
<th>{{ header }}</th>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tr>
|
</tr>
|
||||||
{% for row in notice_settings.rows %}
|
{% for row in notice_settings.rows %}
|
||||||
|
{% if row.notice_type.label|truncatechars:11 == 'comment_...' %}
|
||||||
<tr class="{% cycle 'row1' 'row2' %}">
|
<tr class="{% cycle 'row1' 'row2' %}">
|
||||||
<td>{% trans row.notice_type.display %}<br/>
|
<td>
|
||||||
<span class="notice_type_description">{% trans row.notice_type.description %}</span>
|
<span class="notice_type_description">{% trans row.notice_type.description %}</span>
|
||||||
</td>
|
</td>
|
||||||
{% for cell in row.cells %}
|
{% for cell in row.cells %}
|
||||||
|
@ -40,6 +41,85 @@
|
||||||
</td>
|
</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tr>
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" id="last"><input type="submit" value="{% trans 'Change' %}"></input></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3>Wishlist Notifications</h3>
|
||||||
|
<table class="notice_settings table table-striped" width="90%">
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Notify me when..." %}</th>
|
||||||
|
{% for header in notice_settings.column_headers %}
|
||||||
|
<th>{{ header }}</th>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% for row in notice_settings.rows %}
|
||||||
|
{% if row.notice_type.label|truncatechars:12 == 'wishlist_...' %}
|
||||||
|
<tr class="{% cycle 'row1' 'row2' %}">
|
||||||
|
<td>
|
||||||
|
<span class="notice_type_description">{% trans row.notice_type.description %}</span>
|
||||||
|
</td>
|
||||||
|
{% for cell in row.cells %}
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="{{ cell.0 }}" {% if cell.1 %}checked="yes"{% endif %}/>
|
||||||
|
</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" id="last"><input type="submit" value="{% trans 'Change' %}"></input></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3>Pledge Notifications</h3>
|
||||||
|
<table class="notice_settings table table-striped" width="90%">
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Notify me when..." %}</th>
|
||||||
|
{% for header in notice_settings.column_headers %}
|
||||||
|
<th>{{ header }}</th>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% for row in notice_settings.rows %}
|
||||||
|
{% if row.notice_type.label|truncatechars:10 == 'pledge_...' %}
|
||||||
|
<tr class="{% cycle 'row1' 'row2' %}">
|
||||||
|
<td>
|
||||||
|
<span class="notice_type_description">{% trans row.notice_type.description %}</span>
|
||||||
|
</td>
|
||||||
|
{% for cell in row.cells %}
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="{{ cell.0 }}" {% if cell.1 %}checked="yes"{% endif %}/>
|
||||||
|
</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" id="last"><input type="submit" value="{% trans 'Change' %}"></input></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3>Rights Holder Notifications</h3>
|
||||||
|
<table class="notice_settings table table-striped" width="90%">
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Notify me when..." %}</th>
|
||||||
|
{% for header in notice_settings.column_headers %}
|
||||||
|
<th>{{ header }}</th>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% for row in notice_settings.rows %}
|
||||||
|
{% if row.notice_type.label|truncatechars:10 == 'rights_...' %}
|
||||||
|
<tr class="{% cycle 'row1' 'row2' %}">
|
||||||
|
<td>
|
||||||
|
<span class="notice_type_description">{% trans row.notice_type.description %}</span>
|
||||||
|
</td>
|
||||||
|
{% for cell in row.cells %}
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="{{ cell.0 }}" {% if cell.1 %}checked="yes"{% endif %}/>
|
||||||
|
</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" id="last"><input type="submit" value="{% trans 'Change' %}"></input></td>
|
<td colspan="2" id="last"><input type="submit" value="{% trans 'Change' %}"></input></td>
|
||||||
|
@ -47,20 +127,20 @@
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{% url acct_email as email_url %}
|
|
||||||
<h4>Your email</h4>
|
<h3>Your email</h3>
|
||||||
{% if user.email %}
|
{% if user.email %}
|
||||||
<p>
|
<p>
|
||||||
{{ user.email }}<br />
|
{{ user.email }}<br />
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
({% blocktrans %}You can change this under <a href="{{ email_url }}">Account</a>.{% endblocktrans %})
|
({% blocktrans %}You can change this under <a href="{{ editurl }}">Account</a>.{% endblocktrans %})
|
||||||
</p>
|
</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="errorlist">
|
<div class="errorlist">
|
||||||
{% blocktrans %}
|
{% blocktrans %}
|
||||||
You do not have a verified email address to which notices can be sent.
|
You do not have a verified email address to which notices can be sent.
|
||||||
You can add one by going to <a href="{{ email_url }}">Account</a>.
|
You can add one by going to <a href="{{ editurl }}">Account</a>.
|
||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>{% trans "No notices." %}</p>
|
<p>{% trans "You have no unseen notices." %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,13 @@
|
||||||
|
Congratulations, you wished for it, and now there is an active Campaign for {{ campaign.work.title }} to be Unglued. If ungluers like you pledge {{ campaign.target }} by {{ campaign.deadline }}, this book will be released under a Creative Commons license for everyone to enjoy.
|
||||||
|
|
||||||
|
You can help!
|
||||||
|
|
||||||
|
Pledge toward ungluing. {% url pledge work_id=campaign.work.id %}
|
||||||
|
|
||||||
|
Tell your friends -- there are handy share options on the campaign page. There's even a widget you can put on your blog or home page. {% url work campaign.work.id %}
|
||||||
|
|
||||||
|
Join the discussion: share why you love {{ campaign.work.title }} and the world will too. {% url work campaign.work.id %}?tab=2
|
||||||
|
|
||||||
|
Thank you!
|
||||||
|
|
||||||
|
{{ active_claim.rights_holder.rights_holder_name }} (rights holder for {{ campaign.work.title }}) and the Unglue.It Team
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,7 @@
|
||||||
|
Message! About {{ campaign.work.title}}
|
||||||
|
(http://{{site.domain}}{% url work campaign.work.id %}?tab=2) something.
|
||||||
|
You will something.
|
||||||
|
|
||||||
|
You will be also something.
|
||||||
|
|
||||||
|
Give ebooks to the world; give income to authors and publishers. Unglue.it.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="comments clearfix">
|
||||||
|
<div class="comments_book">
|
||||||
|
<a href="{% url work campaign.work.id %}?tab=2"><img src="{{ campaign.work.cover_image_thumbnail }}" alt="cover image for {{ campaign.work.title }}" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="comments_info">
|
||||||
|
<div class="comments_graphical">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="comments_textual">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
text comments
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="classname">Give ebooks to the world; give income to authors and publishers. Unglue.it</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1 @@
|
||||||
|
blurb for {{campaign.work.title}}
|
|
@ -0,0 +1,6 @@
|
||||||
|
The email address for your unglue.it accound has been changed from {{oldemail}} to {{request.user.email}}.
|
||||||
|
|
||||||
|
If there's any reason that this is in error, please contact us at support@gluejar.com
|
||||||
|
|
||||||
|
Sincerely,
|
||||||
|
The unglue.it Team
|
|
@ -1,16 +1,26 @@
|
||||||
{% extends "registration/registration_base.html" %}
|
{% extends "registration/registration_base.html" %}
|
||||||
{% block title %}Change User Data{% endblock %}
|
{% block title %}Change User Data{% endblock %}
|
||||||
{% block doccontent %}
|
{% block doccontent %}
|
||||||
<h1>Changing Your Username</h1>
|
<h2>Changing Your Username</h2>
|
||||||
|
|
||||||
<p> If you change your username, the web address for your profile page will change as well.</p>
|
<p> If you change your username, the web address for your profile page will change as well.</p>
|
||||||
|
<div>
|
||||||
<p> <b>Your current username:</b> {{ user.username }}</p>
|
<p> <b>Your current username:</b> {{ user.username }}</p>
|
||||||
<form method="POST" action="#">
|
<form method="POST" action="#">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p }}
|
{{ form.as_p }}
|
||||||
<input type="submit" name="submit" value="Change username" id="submit">
|
<input type="submit" name="change_username" value="Change username" id="submit_username">
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Changing Your Email</h2>
|
||||||
|
<p> <b>Your current email:</b> {{ user.email }}</p>
|
||||||
|
<form method="POST" action="#">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ emailform.as_p }}
|
||||||
|
<input type="submit" name="change_email" value="Change email" id="submit_email">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
<p>Want to <a href="/accounts/password/change/">change your password</a> instead?</p>
|
<p>Want to <a href="/accounts/password/change/">change your password</a> instead?</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -110,9 +110,20 @@ $j(document).ready(function(){
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% if work.first_ebook %}
|
||||||
|
<div class="get-book">
|
||||||
|
<label>Get it:</label>
|
||||||
|
<span class="find-link">
|
||||||
|
{% for ebook in work.ebooks %}
|
||||||
|
<a href="{{ ebook.url }}"><img src="/static/images/{{ ebook.format }}32.png" height="32" alt=" {{ ebook.format }} at {{ebook.provider}}" title=" {{ ebook.format }} at {{ebook.provider}}" /><img src="{{ebook.rights_badge}}" height="31" width="88" alt="{{ebook.rights}}" title="{{ebook.rights}}" /></a>
|
||||||
|
{% endfor %}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
<div class="find-book">
|
<div class="find-book">
|
||||||
<label>Find it:</label>
|
<label>Find it:</label>
|
||||||
<div class="find-link">
|
<div class="find-link">
|
||||||
|
|
||||||
<a id="find-google" href="{{ work.googlebooks_url }}"><img src="/static/images/supporter_icons/googlebooks_square.png" title="Find on Google Books" alt="Find on Google Books" /></a>
|
<a id="find-google" href="{{ work.googlebooks_url }}"><img src="/static/images/supporter_icons/googlebooks_square.png" title="Find on Google Books" alt="Find on Google Books" /></a>
|
||||||
<a rel="nofollow" class="find-openlibrary" href="{% url work_openlibrary work.id %}"><img src="/static/images/supporter_icons/openlibrary_square.png" title="Find on OpenLibrary" alt="Find on OpenLibrary" /></a>
|
<a rel="nofollow" class="find-openlibrary" href="{% url work_openlibrary work.id %}"><img src="/static/images/supporter_icons/openlibrary_square.png" title="Find on OpenLibrary" alt="Find on OpenLibrary" /></a>
|
||||||
{% if not request.user.is_anonymous %}
|
{% if not request.user.is_anonymous %}
|
||||||
|
@ -167,13 +178,6 @@ $j(document).ready(function(){
|
||||||
<span id="w{{ work.googlebooks_id }}">Add to Wishlist</span>
|
<span id="w{{ work.googlebooks_id }}">Add to Wishlist</span>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}{% endif %}{% endif %}
|
{% endif %}{% endif %}{% endif %}
|
||||||
{% if work.first_ebook %}
|
|
||||||
<span class="boolist-ebook">
|
|
||||||
{% for ebook in work.ebooks %}
|
|
||||||
<a href="{{ ebook.url }}">{{ ebook.format }}</a> {{ebook.rights}} at {{ebook.provider}}<br />
|
|
||||||
{% endfor %}
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,7 +12,6 @@ from re import sub
|
||||||
from itertools import islice
|
from itertools import islice
|
||||||
from decimal import Decimal as D
|
from decimal import Decimal as D
|
||||||
from xml.etree import ElementTree as ET
|
from xml.etree import ElementTree as ET
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
import oauth2 as oauth
|
import oauth2 as oauth
|
||||||
from django import forms
|
from django import forms
|
||||||
|
@ -20,7 +19,6 @@ from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.mail import send_mail
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.comments import Comment
|
from django.contrib.comments import Comment
|
||||||
|
@ -29,6 +27,7 @@ from django.forms import Select
|
||||||
from django.forms.models import modelformset_factory
|
from django.forms.models import modelformset_factory
|
||||||
from django.http import HttpResponseRedirect, Http404
|
from django.http import HttpResponseRedirect, Http404
|
||||||
from django.http import HttpResponse, HttpResponseNotFound
|
from django.http import HttpResponse, HttpResponseNotFound
|
||||||
|
from django.template.loader import render_to_string
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.views.decorators.http import require_POST
|
from django.views.decorators.http import require_POST
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
|
@ -38,11 +37,12 @@ from django.shortcuts import render, render_to_response, get_object_or_404
|
||||||
from django.utils.http import urlencode
|
from django.utils.http import urlencode
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from regluit.core import tasks
|
from regluit.core import tasks
|
||||||
|
from regluit.core.tasks import send_mail_task
|
||||||
from regluit.core import models, bookloader, librarything
|
from regluit.core import models, bookloader, librarything
|
||||||
from regluit.core import userlists
|
from regluit.core import userlists
|
||||||
from regluit.core.search import gluejar_search
|
from regluit.core.search import gluejar_search
|
||||||
from regluit.core.goodreads import GoodreadsClient
|
from regluit.core.goodreads import GoodreadsClient
|
||||||
from regluit.frontend.forms import UserData, ProfileForm, CampaignPledgeForm, GoodreadsShelfLoadingForm
|
from regluit.frontend.forms import UserData, UserEmail, ProfileForm, CampaignPledgeForm, GoodreadsShelfLoadingForm
|
||||||
from regluit.frontend.forms import RightsHolderForm, UserClaimForm, LibraryThingForm, OpenCampaignForm
|
from regluit.frontend.forms import RightsHolderForm, UserClaimForm, LibraryThingForm, OpenCampaignForm
|
||||||
from regluit.frontend.forms import ManageCampaignForm, DonateForm, CampaignAdminForm, EmailShareForm, FeedbackForm
|
from regluit.frontend.forms import ManageCampaignForm, DonateForm, CampaignAdminForm, EmailShareForm, FeedbackForm
|
||||||
from regluit.frontend.forms import EbookForm, CustomPremiumForm, EditManagersForm
|
from regluit.frontend.forms import EbookForm, CustomPremiumForm, EditManagersForm
|
||||||
|
@ -1089,20 +1089,35 @@ def supporter(request, supporter_username, template_name):
|
||||||
return render(request, template_name, context)
|
return render(request, template_name, context)
|
||||||
|
|
||||||
def edit_user(request):
|
def edit_user(request):
|
||||||
form=UserData()
|
|
||||||
if not request.user.is_authenticated():
|
if not request.user.is_authenticated():
|
||||||
return HttpResponseRedirect(reverse('auth_login'))
|
return HttpResponseRedirect(reverse('auth_login'))
|
||||||
|
form=UserData()
|
||||||
|
emailform = UserEmail({'email':request.user.email})
|
||||||
oldusername=request.user.username
|
oldusername=request.user.username
|
||||||
|
oldemail= request.user.email
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
# surely there's a better way to add data to the POST data?
|
if 'change_username' in request.POST.keys():
|
||||||
postcopy=request.POST.copy()
|
# surely there's a better way to add data to the POST data?
|
||||||
postcopy['oldusername']=oldusername
|
postcopy=request.POST.copy()
|
||||||
form = UserData(postcopy)
|
postcopy['oldusername']=oldusername
|
||||||
if form.is_valid(): # All validation rules pass, go and change the username
|
form = UserData(postcopy)
|
||||||
request.user.username=form.cleaned_data['username']
|
if form.is_valid(): # All validation rules pass, go and change the username
|
||||||
request.user.save()
|
request.user.username=form.cleaned_data['username']
|
||||||
return HttpResponseRedirect(reverse('home')) # Redirect after POST
|
request.user.save()
|
||||||
return render(request,'registration/user_change_form.html', {'form': form},)
|
return HttpResponseRedirect(reverse('home')) # Redirect after POST
|
||||||
|
elif 'change_email' in request.POST.keys():
|
||||||
|
emailform = UserEmail(request.POST)
|
||||||
|
if emailform.is_valid():
|
||||||
|
request.user.email=emailform.cleaned_data['email']
|
||||||
|
request.user.save()
|
||||||
|
send_mail_task.delay(
|
||||||
|
'unglue.it email changed',
|
||||||
|
render_to_string('registration/email_changed.txt',{'oldemail':oldemail,'request':request}),
|
||||||
|
None,
|
||||||
|
[request.user.email,oldemail]
|
||||||
|
)
|
||||||
|
return HttpResponseRedirect(reverse('home')) # Redirect after POST
|
||||||
|
return render(request,'registration/user_change_form.html', {'form': form,'emailform': emailform})
|
||||||
|
|
||||||
|
|
||||||
def search(request):
|
def search(request):
|
||||||
|
@ -1601,7 +1616,7 @@ def emailshare(request):
|
||||||
message = form.cleaned_data['message']
|
message = form.cleaned_data['message']
|
||||||
sender = form.cleaned_data['sender']
|
sender = form.cleaned_data['sender']
|
||||||
recipient = form.cleaned_data['recipient']
|
recipient = form.cleaned_data['recipient']
|
||||||
send_mail(subject, message, sender, [recipient])
|
send_mail_task.delay(subject, message, sender, [recipient])
|
||||||
try:
|
try:
|
||||||
next = form.cleaned_data['next']
|
next = form.cleaned_data['next']
|
||||||
except:
|
except:
|
||||||
|
@ -1609,41 +1624,41 @@ def emailshare(request):
|
||||||
return HttpResponseRedirect(next)
|
return HttpResponseRedirect(next)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
sender = request.user.email
|
||||||
try:
|
try:
|
||||||
next = request.GET['next']
|
next = request.GET['next']
|
||||||
if "pledge" in request.path:
|
if "pledge" in request.path:
|
||||||
work_id = next.split('=')[1]
|
work_id = next.split('=')[1]
|
||||||
book = models.Work.objects.get(pk=int(work_id))
|
book = models.Work.objects.get(pk=int(work_id))
|
||||||
title = book.title
|
title = book.title
|
||||||
message = "I just pledged to unglue one of my favorite books, "+title+", on Unglue.It: http://unglue.it/work/"+work_id+". If enough of us pledge to unglue this book, the creator will be paid and the ebook will become free to everyone on earth. Will you join me?"
|
message = "I just pledged to unglue one of my favorite books, "+title+", on Unglue.It: http://unglue.it/work/"+work_id+". If enough of us pledge to unglue this book, the creator will be paid and the ebook will become free to everyone on earth. Will you join me?"
|
||||||
subject = "Help me unglue "+title
|
subject = "Help me unglue "+title
|
||||||
else:
|
else:
|
||||||
work_id = next.split('/')[-2]
|
work_id = next.split('/')[-2]
|
||||||
work_id = int(work_id)
|
work_id = int(work_id)
|
||||||
book = models.Work.objects.get(pk=work_id)
|
book = models.Work.objects.get(pk=work_id)
|
||||||
title = book.title
|
title = book.title
|
||||||
# if title requires unicode let's ignore it for now
|
# if title requires unicode let's ignore it for now
|
||||||
try:
|
try:
|
||||||
title = ', '+str(title)+', '
|
title = ', '+str(title)+', '
|
||||||
except:
|
except:
|
||||||
title = ' '
|
title = ' '
|
||||||
try:
|
try:
|
||||||
status = book.last_campaign().status
|
status = book.last_campaign().status
|
||||||
except:
|
except:
|
||||||
status = None
|
status = None
|
||||||
|
|
||||||
# customize the call to action depending on campaign status
|
# customize the call to action depending on campaign status
|
||||||
if status == 'ACTIVE':
|
if status == 'ACTIVE':
|
||||||
message = 'Help me unglue one of my favorite books'+title+'on Unglue.It: http://unglue.it/'+next+'. If enough of us pledge to unglue this book, the creator will be paid and the ebook will become free to everyone on earth.'
|
message = 'Help me unglue one of my favorite books'+title+'on Unglue.It: http://unglue.it/'+next+'. If enough of us pledge to unglue this book, the creator will be paid and the ebook will become free to everyone on earth.'
|
||||||
else:
|
else:
|
||||||
message = 'Help me unglue one of my favorite books'+title+'on Unglue.It: http://unglue.it'+next+'. If enough of us wishlist this book, Unglue.It may start a campaign to pay the creator and make the ebook free to everyone on earth.'
|
message = 'Help me unglue one of my favorite books'+title+'on Unglue.It: http://unglue.it'+next+'. If enough of us wishlist this book, Unglue.It may start a campaign to pay the creator and make the ebook free to everyone on earth.'
|
||||||
subject = 'Come see one of my favorite books on Unglue.It'
|
subject = 'Come see one of my favorite books on Unglue.It'
|
||||||
|
|
||||||
form = EmailShareForm(initial={'next':next, 'subject': subject, 'message': message})
|
form = EmailShareForm(initial={'sender': sender, 'next':next, 'subject': subject, 'message': message})
|
||||||
except:
|
except:
|
||||||
next = ''
|
next = ''
|
||||||
sender = ''
|
form = EmailShareForm(initial={'sender': sender, 'next':next, 'subject': 'Come join me on Unglue.It', 'message':"I'm ungluing books on Unglue.It. Together we're paying creators and making ebooks free to everyone on earth. Join me! http://unglue.it"})
|
||||||
form = EmailShareForm(initial={'next':next, 'subject': 'Come join me on Unglue.It', 'message':"I'm ungluing books on Unglue.It. Together we're paying creators and making ebooks free to everyone on earth. Join me! http://unglue.it"})
|
|
||||||
|
|
||||||
return render(request, "emailshare.html", {'form':form})
|
return render(request, "emailshare.html", {'form':form})
|
||||||
|
|
||||||
|
@ -1666,7 +1681,7 @@ def feedback(request):
|
||||||
else:
|
else:
|
||||||
ungluer = request.user.username
|
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
|
message = "<<<This feedback is about "+page+". Original user message follows\nfrom "+sender+", ungluer name "+ungluer+"\nwith user agent "+useragent+"\n>>>\n"+message
|
||||||
send_mail(subject, message, sender, [recipient])
|
send_mail_task.delay(subject, message, sender, [recipient])
|
||||||
|
|
||||||
return render(request, "thanks.html", {"page":page})
|
return render(request, "thanks.html", {"page":page})
|
||||||
|
|
||||||
|
|
|
@ -287,6 +287,18 @@ ul.menu {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
.errorlist + input {
|
||||||
|
border: 2px solid #e35351 !important;
|
||||||
|
}
|
||||||
|
.errorlist + input:focus {
|
||||||
|
border: 1px solid #8dc63f !important;
|
||||||
|
}
|
||||||
|
.errorlist + textarea {
|
||||||
|
border: 2px solid #e35351 !important;
|
||||||
|
}
|
||||||
|
.errorlist + textarea:focus {
|
||||||
|
border: 2px solid #8dc63f !important;
|
||||||
|
}
|
||||||
/* add class clearfix to floats to make them self-clear */
|
/* add class clearfix to floats to make them self-clear */
|
||||||
.clearfix:after {
|
.clearfix:after {
|
||||||
content: ".";
|
content: ".";
|
||||||
|
|
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 3.9 KiB |
|
@ -188,6 +188,22 @@ ul.menu{
|
||||||
.errors;
|
.errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.errorlist + input {
|
||||||
|
border: 2px solid @alert !important;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border: 1px solid @call-to-action !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorlist + textarea {
|
||||||
|
border: 2px solid @alert !important;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border: 2px solid @call-to-action !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* add class clearfix to floats to make them self-clear */
|
/* add class clearfix to floats to make them self-clear */
|
||||||
.clearfix:after {
|
.clearfix:after {
|
||||||
content: ".";
|
content: ".";
|
||||||
|
|
|
@ -22,6 +22,19 @@ def all_zones():
|
||||||
def all_rds():
|
def all_rds():
|
||||||
return rds.get_all_dbinstances()
|
return rds.get_all_dbinstances()
|
||||||
|
|
||||||
|
def all_rds_parameter_groups():
|
||||||
|
return rds.get_all_dbparameter_groups()
|
||||||
|
|
||||||
|
def modify_please1_pg_group():
|
||||||
|
"""kinda ugly
|
||||||
|
http://stackoverflow.com/a/9085381/7782
|
||||||
|
After doing this, I changed please db to talk to this parameter group and rebooted db
|
||||||
|
"""
|
||||||
|
pg = conn.get_all_dbparameters('mygroup')
|
||||||
|
pg2 = rds.get_all_dbparameters('mygroup', marker = pg.Marker)
|
||||||
|
pg2['tx_isolation'].value = True
|
||||||
|
pg2['tx_isolation'].apply(True)
|
||||||
|
|
||||||
def all_snapshots(owner=GLUEJAR_ACCOUNT_ID):
|
def all_snapshots(owner=GLUEJAR_ACCOUNT_ID):
|
||||||
"""by default, return only snapshots owned by Gluejar -- None returns all snapshots available to us"""
|
"""by default, return only snapshots owned by Gluejar -- None returns all snapshots available to us"""
|
||||||
return ec2.get_all_snapshots(owner=owner)
|
return ec2.get_all_snapshots(owner=owner)
|
||||||
|
@ -72,7 +85,6 @@ def launch_time(instance):
|
||||||
def max_cpu(instance):
|
def max_cpu(instance):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def stats_for_instances(instances=None):
|
def stats_for_instances(instances=None):
|
||||||
"""return basic stats for input instances"""
|
"""return basic stats for input instances"""
|
||||||
if instances is None:
|
if instances is None:
|
||||||
|
|