Merge pull request #143 from Gluejar/seo
sitemap, schema.org and fix bad urls in wishlist feedspull/1/head
commit
494457ae73
|
@ -15,7 +15,7 @@ class SupporterWishlistFeed(Feed):
|
|||
return "Latest wishbooks for %s on unglue.it" % obj.username
|
||||
|
||||
def link(self, obj):
|
||||
return "/%s/feed/" % obj.username
|
||||
return "/supporter/%s/feed/" % obj.username
|
||||
|
||||
def item_title(self, item):
|
||||
return "%s" % item.title
|
||||
|
@ -24,4 +24,4 @@ class SupporterWishlistFeed(Feed):
|
|||
return "/work/%s" % item.id
|
||||
|
||||
def items(self, obj):
|
||||
return obj.wishlist.works.all().order_by('-id')[:5]
|
||||
return obj.wishlist.works.all().order_by('-id')[:100]
|
|
@ -13,9 +13,11 @@ from django.db import models
|
|||
from django.db.models import Q, get_model
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.sites.models import Site
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
import regluit
|
||||
import regluit.core.isbn
|
||||
from regluit.core.signals import successful_campaign, unsuccessful_campaign, wishlist_added
|
||||
|
@ -816,6 +818,9 @@ class Work(models.Model):
|
|||
except:
|
||||
return False
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('work', args=[str(self.id)])
|
||||
|
||||
class Author(models.Model):
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
name = models.CharField(max_length=500)
|
||||
|
|
|
@ -249,7 +249,7 @@ def handle_wishlist_added(supporter, work, **kwargs):
|
|||
notification.send([claim[0].user], "new_wisher", {
|
||||
'supporter': supporter,
|
||||
'work': work,
|
||||
'base_url': settings.BASE_URL,
|
||||
'base_url': settings.BASE_URL_SECURE,
|
||||
}, True)
|
||||
|
||||
from regluit.core.tasks import emit_notifications
|
||||
|
@ -269,13 +269,13 @@ def handle_wishlist_near_deadline(campaign, **kwargs):
|
|||
|
||||
notification.send(pledgers, "wishlist_near_deadline", {
|
||||
'campaign': campaign,
|
||||
'domain': settings.BASE_URL,
|
||||
'domain': settings.BASE_URL_SECURE,
|
||||
'pledged': True,
|
||||
}, True)
|
||||
|
||||
notification.send(nonpledgers, "wishlist_near_deadline", {
|
||||
'campaign': campaign,
|
||||
'domain': settings.BASE_URL,
|
||||
'domain': settings.BASE_URL_SECURE,
|
||||
'pledged': False,
|
||||
}, True)
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
from django.contrib.sitemaps import Sitemap
|
||||
from django.core.urlresolvers import reverse
|
||||
from regluit.core.models import Work, Edition
|
||||
|
||||
class WorkSitemap(Sitemap):
|
||||
protocol = 'https'
|
||||
limit = 10000
|
||||
|
||||
def items(self):
|
||||
return Work.objects.all()
|
||||
|
||||
def priority(self,work):
|
||||
if work.last_campaign():
|
||||
return '1.0'
|
||||
if work.num_wishes>1000:
|
||||
return '0.8'
|
||||
if work.num_wishes>100:
|
||||
return '0.6'
|
||||
if work.num_wishes>10:
|
||||
return '0.4'
|
||||
if work.num_wishes>1:
|
||||
return '0.3'
|
||||
if work.num_wishes==1:
|
||||
return '0.2'
|
||||
if work.num_wishes==0:
|
||||
return '0.1'
|
||||
return '0.1'
|
||||
|
||||
class PublisherSitemap(Sitemap):
|
||||
priority = 0.2
|
||||
protocol = 'https'
|
||||
|
||||
def items(self):
|
||||
return Edition.objects.exclude(publisher__isnull=True).exclude(publisher="").order_by('publisher').values('publisher').distinct()
|
||||
|
||||
def location(self, pub):
|
||||
return reverse("bypub_list",args=[pub['publisher']])
|
|
@ -2,7 +2,7 @@
|
|||
{% block title %} Everything You Always Wanted to Know {% endblock %}
|
||||
{% block doccontent %}
|
||||
<h2>About</h2>
|
||||
<p><a href="http://unglue.it">Unglue.it</a> is a service provided by <a href="http://gluejar.com">Gluejar, Inc.</a> It's a place for individuals and institutions to join together to liberate specific ebooks and other types of digital content by paying rights holders to relicense their works under <a href="http://creativecommons.org">Creative Commons</a> licenses.</p>
|
||||
<p><a href="https://unglue.it">Unglue.it</a> is a service provided by <a href="http://gluejar.com">Gluejar, Inc.</a> It's a place for individuals and institutions to join together to liberate specific ebooks and other types of digital content by paying rights holders to relicense their works under <a href="http://creativecommons.org">Creative Commons</a> licenses.</p>
|
||||
|
||||
<p>What does this mean?</p>
|
||||
<ul>
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
<div id="comments">
|
||||
{% for comment in comment_list reversed %}
|
||||
|
||||
<div class="work_supporter {% if comment.content_object.last_campaign and comment.user in comment.content_object.last_campaign.managers.all %}official{% endif %}">
|
||||
<a href="{% url supporter supporter_username=comment.user.username %}">
|
||||
<div class="work_supporter_avatar">
|
||||
{% if comment.user.profile.pic_url %}
|
||||
<img class="user-avatar" src="{{ comment.user.profile.pic_url }}" height="50" width="50" alt="Picture of {{ comment.user }}" title="{{ comment.user }}" />
|
||||
{% else %}
|
||||
<img class="user-avatar" src="/static/images/header/avatar.png" height="50" width="50" alt="Generic Ungluer Avatar" title="Ungluer" />
|
||||
<div itemprop="comment" itemscope itemtype="http://schema.org/UserComments" class="work_supporter {% if comment.content_object.last_campaign and comment.user in comment.content_object.last_campaign.managers.all %}official{% endif %}">
|
||||
<span itemprop="creator" itemscope itemtype="http://schema.org/Person">
|
||||
<a itemprop="url" href="{% url supporter supporter_username=comment.user.username %}">
|
||||
<div class="work_supporter_avatar">
|
||||
{% if comment.user.profile.pic_url %}
|
||||
<img class="user-avatar" src="{{ comment.user.profile.pic_url }}" height="50" width="50" alt="Picture of {{ comment.user }}" title="{{ comment.user }}" />
|
||||
{% else %}
|
||||
<img class="user-avatar" src="/static/images/header/avatar.png" height="50" width="50" alt="Generic Ungluer Avatar" title="Ungluer" />
|
||||
{% endif %}
|
||||
</div>
|
||||
<span class="comment_username">{{comment.user.username }}</span></a> <span>({{ comment.submit_date }})</span> <br /><span class="comment">{{ comment.comment|linebreaksbr }}<br /></span>
|
||||
</div>
|
||||
<span class="comment_username">{{comment.user.username }}</span>
|
||||
</a>
|
||||
</span>
|
||||
<span itemprop="commentTime">({{ comment.submit_date }})</span> <br /><span class="comment" itemProp="commentText">{{ comment.comment|linebreaksbr }}<br /></span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
|
|
@ -96,7 +96,7 @@ there's no tab for seeing ALL my books, only the filters! huh.
|
|||
<div class="js-topnews1">
|
||||
<div class="js-topnews2">
|
||||
<div class="js-topnews3">
|
||||
<div class="user-block">
|
||||
<div class="user-block" itemscope itemtype="http://schema.org/Person">
|
||||
<div id="user-block1">
|
||||
<div class="block-inner">
|
||||
{% if supporter.profile.pic_url %}
|
||||
|
@ -105,7 +105,7 @@ there's no tab for seeing ALL my books, only the filters! huh.
|
|||
<img class="user-avatar" src="/static/images/header/avatar.png" height="50" width="50" alt="Generic Ungluer Avatar" title="Ungluer" />
|
||||
{% endif %}
|
||||
<span class="user-name">
|
||||
<a href="#">{{ supporter.username }}</a>
|
||||
<a href="#"><span itemprop="name">{{ supporter.username }}</span></a>
|
||||
</span>
|
||||
</div>
|
||||
<span class="user-badges">
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
</div>
|
||||
<div id="js-maincol">
|
||||
<div class="js-maincol-inner">
|
||||
<div id="content-block">
|
||||
<div id="content-block" itemscope itemtype="http://schema.org/Book">
|
||||
<div class="book-detail">
|
||||
{% if work.googlebooks_id %}
|
||||
<div id="book-detail-img"><a href="{{ work.googlebooks_url }}">
|
||||
|
@ -125,16 +125,16 @@
|
|||
</div>
|
||||
{% else %}
|
||||
<div id="book-detail-img">
|
||||
<img src="{% if work.cover_image_thumbnail %}{{ work.cover_image_thumbnail }}{% else %}/static/images/generic_cover_larger.png{% endif %}" alt="{{ work.title }}" title="{{ work.title }}" width="131" height="192" />
|
||||
<img itemprop="image" src="{% if work.cover_image_thumbnail %}{{ work.cover_image_thumbnail }}{% else %}/static/images/generic_cover_larger.png{% endif %}" alt="{{ work.title }}" title="{{ work.title }}" width="131" height="192" />
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="book-detail-info">
|
||||
<div class="layout">
|
||||
<h2 class="book-name">{{ work.title }}</h2>
|
||||
<h2 class="book-name" itemprop="name">{{ work.title }}</h2>
|
||||
<div>
|
||||
<div class="pubinfo">
|
||||
<h3 class="book-author">{{ work.author }}</h3>
|
||||
<h3 class="book-year">{{ work.publication_date_year }}</h3>
|
||||
<h3 class="book-author" itemprop="author">{{ work.author }}</h3>
|
||||
<h3 class="book-year" itemprop="datePublished">{{ work.publication_date_year }}</h3>
|
||||
</div>
|
||||
{% if status == 'ACTIVE' %}
|
||||
{% if pledged %}
|
||||
|
@ -227,10 +227,10 @@
|
|||
<div id="tabs-1" class="tabs {% if activetab == '1' %}active{% endif %}">
|
||||
<div class="tabs-content">
|
||||
{% if status == 'ACTIVE' or status == 'SUCCESSFUL' %}
|
||||
{{ work.last_campaign.description|safe }}
|
||||
<span itemprop="description">{{ work.last_campaign.description|safe }}</span>
|
||||
{% else %}
|
||||
<h3 class="tabcontent-title">{{work.title}}</h3>
|
||||
<p>{{ work.description|safe }}
|
||||
<p itemprop="description">{{ work.description|safe }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
@ -282,8 +282,8 @@
|
|||
{% else %}
|
||||
{% for wish in work.wishes.all reversed %}
|
||||
{% with wish.wishlist.user as supporter %}
|
||||
<div class="work_supporter_nocomment">
|
||||
<a href="{% url supporter supporter_username=supporter.username %}">
|
||||
<div class="work_supporter_nocomment" itemscope itemtype="http://schema.org/Person">
|
||||
<a itemprop="url" href="{% url supporter supporter_username=supporter.username %}">
|
||||
<div class="work_supporter_avatar">
|
||||
{% if supporter.profile.pic_url %}
|
||||
<img class="user-avatar" src="{{ supporter.profile.pic_url }}" height="50" width="50" alt="Picture of {{ supporter }}" title="{{ supporter }}" />
|
||||
|
@ -362,7 +362,7 @@
|
|||
<h4>Subjects</h4>
|
||||
<ul>
|
||||
{% for subject in work.subjects.all %}
|
||||
<li>{{ subject.name }}</li>
|
||||
<li itemprop="keywords">{{ subject.name }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
@ -384,7 +384,7 @@
|
|||
<div class="metadata" id="edition_{{edition.id}}">{% if edition.publisher %}Publisher: <a href="{% url bypub_list edition.publisher %}">{{edition.publisher}}</a><br />{% endif %}
|
||||
{% if edition.publication_date %}Published: {{edition.publication_date}}<br />{% endif %}
|
||||
{% if edition.isbn_13 %}
|
||||
ISBN: {{ edition.isbn_13 }}<br />
|
||||
ISBN: <spam itemprop="isbn">{{ edition.isbn_13 }}</span><br />
|
||||
{% endif %}
|
||||
{% if edition.oclc %}
|
||||
OCLC: <a href="http://www.worldcat.org/oclc/{{ edition.oclc }}">{{ edition.oclc }}</a><br />
|
||||
|
|
|
@ -912,7 +912,7 @@ class NonprofitCampaign(FormView):
|
|||
forward['amount']= int(amount)
|
||||
forward['sent']= Sent.objects.create(user=username,amount=form.cleaned_data['preapproval_amount']).pk
|
||||
token=signing.dumps(forward)
|
||||
return HttpResponseRedirect(settings.BASE_URL + reverse('donation_credit',kwargs={'token':token}))
|
||||
return HttpResponseRedirect(settings.BASE_URL_SECURE + reverse('donation_credit',kwargs={'token':token}))
|
||||
|
||||
class DonationCredit(TemplateView):
|
||||
template_name="donation_credit.html"
|
||||
|
@ -2040,7 +2040,7 @@ def emailshare(request, action):
|
|||
next = form.cleaned_data['next']
|
||||
except:
|
||||
# if we totally failed to have a next value, we should still redirect somewhere useful
|
||||
next = 'http://unglue.it'
|
||||
next = 'https://unglue.it'
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
else:
|
||||
|
@ -2195,7 +2195,7 @@ def download(request, work_id):
|
|||
'unglued_ebooks': unglued_ebooks,
|
||||
'other_ebooks': other_ebooks,
|
||||
'readmill_epub_url': readmill_epub_url,
|
||||
'base_url': settings.BASE_URL
|
||||
'base_url': settings.BASE_URL_SECURE
|
||||
})
|
||||
|
||||
return render(request, "download.html", context)
|
||||
|
|
|
@ -565,7 +565,7 @@ class PaymentManager( object ):
|
|||
if return_url is None:
|
||||
return_path = "{0}?{1}".format(reverse('pledge_complete'),
|
||||
urllib.urlencode({'tid':transaction.id}))
|
||||
return_url = urlparse.urljoin(settings.BASE_URL, return_path)
|
||||
return_url = urlparse.urljoin(settings.BASE_URL_SECURE, return_path)
|
||||
|
||||
p = transaction.get_payment_class().Preapproval(transaction, transaction.max_amount, expiry, return_url=return_url, paymentReason=paymentReason)
|
||||
|
||||
|
@ -657,7 +657,7 @@ class PaymentManager( object ):
|
|||
credit.pledge_transaction(t,user,amount)
|
||||
return_path = "{0}?{1}".format(reverse('pledge_complete'),
|
||||
urllib.urlencode({'tid':t.id}))
|
||||
return_url = urlparse.urljoin(settings.BASE_URL, return_path)
|
||||
return_url = urlparse.urljoin(settings.BASE_URL_SECURE, return_path)
|
||||
pledge_created.send(sender=self, transaction=t)
|
||||
return t, return_url
|
||||
else:
|
||||
|
@ -762,7 +762,7 @@ class PaymentManager( object ):
|
|||
credit.pledge_transaction(transaction,transaction.user,amount)
|
||||
return_path = "{0}?{1}".format(reverse('pledge_complete'),
|
||||
urllib.urlencode({'tid':transaction.id}))
|
||||
return_url = urlparse.urljoin(settings.BASE_URL, return_path)
|
||||
return_url = urlparse.urljoin(settings.BASE_URL_SECURE, return_path)
|
||||
|
||||
logger.info("Updated amount of transaction to %f" % amount)
|
||||
pledge_modified.send(sender=self, transaction=transaction,up_or_down=up_or_down)
|
||||
|
|
|
@ -119,6 +119,7 @@ INSTALLED_APPS = (
|
|||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.sitemaps',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.comments',
|
||||
|
@ -216,7 +217,7 @@ LOGIN_URL = "/accounts/login/"
|
|||
LOGIN_REDIRECT_URL = "/"
|
||||
LOGOUT_URL = "/accounts/logout/"
|
||||
|
||||
USER_AGENT = "unglue.it.bot v0.0.1 <http://unglue.it>"
|
||||
USER_AGENT = "unglue.it.bot v0.0.1 <https://unglue.it>"
|
||||
|
||||
SOUTH_TESTS_MIGRATE = True
|
||||
|
||||
|
|
11
urls.py
11
urls.py
|
@ -3,6 +3,12 @@ from frontend.forms import ProfileForm
|
|||
from django.views.generic.simple import direct_to_template
|
||||
from regluit.admin import admin_site
|
||||
import notification.urls
|
||||
from regluit.core.sitemaps import WorkSitemap, PublisherSitemap
|
||||
|
||||
sitemaps = {
|
||||
'works': WorkSitemap,
|
||||
'publishers': PublisherSitemap,
|
||||
}
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^accounts/activate/complete/$','django.contrib.auth.views.login',
|
||||
|
@ -23,3 +29,8 @@ urlpatterns = patterns('',
|
|||
(r'^notification/', include(notification.urls)),
|
||||
(r'^ckeditor/', include('ckeditor.urls')),
|
||||
)
|
||||
|
||||
urlpatterns += patterns('django.contrib.sitemaps.views',
|
||||
(r'^sitemap\.xml$', 'index', {'sitemaps': sitemaps}),
|
||||
(r'^sitemap-(?P<section>.+)\.xml$', 'sitemap', {'sitemaps': sitemaps}),
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue