Skip to content
This repository has been archived by the owner on Aug 26, 2022. It is now read-only.

Commit

Permalink
Merge pull request #3003 from robhudson/1121051-absolutify-helper
Browse files Browse the repository at this point in the history
Fix bug 1121051: Add absolutify helper
  • Loading branch information
jezdez committed Jan 15, 2015
2 parents db3598d + 07de64d commit cfabedd
Show file tree
Hide file tree
Showing 12 changed files with 136 additions and 132 deletions.
24 changes: 9 additions & 15 deletions apps/contentflagging/models.py
@@ -1,18 +1,13 @@
"""Models for content moderation flagging"""
from django.db import models
from django.conf import settings

from django.core import urlresolvers
from django.core.mail import send_mail

from django.contrib.sites.models import Site
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
from django.contrib.contenttypes import generic

from django.utils.translation import ugettext_lazy as _

from django.contrib.contenttypes.models import ContentType
from django.core import urlresolvers
from django.core.mail import send_mail
from django.db import models
from django.template import Context, loader
from django.utils.translation import ugettext_lazy as _

from .utils import get_unique

Expand Down Expand Up @@ -45,6 +40,7 @@
# individual reasons to the set like so:
#FLAG_NOTIFICATIONS['inappropriate'] = True


class ContentFlagManager(models.Manager):
"""Manager for ContentFlags"""

Expand All @@ -71,9 +67,9 @@ def flag(self, request, object, flag_type, explanation, recipients=None):
subject = subject.format(object=object)
t = loader.get_template('contentflagging/email/flagged.ltxt')
url = '/admin/contentflagging/contentflag/' + str(object.pk)
host = Site.objects.get_current().domain
content = t.render(Context({'url':url,'host':host,
'object':object,'flag_type':flag_type}))
content = t.render(Context({'url': url,
'object': object,
'flag_type': flag_type}))
send_mail(subject, content, settings.DEFAULT_FROM_EMAIL, recipients)
return cf

Expand All @@ -88,8 +84,6 @@ def flags_by_type(self, status=FLAG_STATUS_FLAGGED):
flag_dict[model_name].append(flag)
return flag_dict




class ContentFlag(models.Model):
"""Moderation flag submitted against a content item"""
Expand Down
Expand Up @@ -6,4 +6,4 @@
To change the status of this flag, click the following
link, or paste it into your browser's location bar:
{% trans %}
https://{{ host }}{{ url }}
{{ url|absolutify }}
10 changes: 5 additions & 5 deletions kuma/search/templates/search/plugin.html
Expand Up @@ -5,15 +5,15 @@
<Description>{{ _('Search Mozilla Developer Network documentation') }}</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16" type="image/png">{{ MEDIA_URL }}redesign/img/favicon32.png</Image>
<Url type="text/html" method="get" template="https://{{ site }}/{{ locale }}/search">
<Url type="text/html" method="get" template="{{ url('search', locale=locale)|absolutify }}">
<Param name="q" value="{searchTerms}"/>
<Param name="w" value="3"/>
<Param name="qs" value="plugin"/>
</Url>
<Url type="application/opensearchdescription+xml"
rel="self"
template="https://{{ site }}/{{ locale }}/search/xml"/>
template="{{ url('search.plugin', locale=locale)|absolutify }}"/>
<Url type="application/x-suggestions+json"
template="https://{{ site }}/{{ locale }}/search/suggestions?q={searchTerms}"/>
<moz:SearchForm>https://{{ site }}/{{ locale }}/search</moz:SearchForm>
</OpenSearchDescription>
template="{{ url('search.suggestions', locale=locale)|absolutify }}?q={searchTerms}"/>
<moz:SearchForm>{{ url('search', locale=locale)|absolutify }}</moz:SearchForm>
</OpenSearchDescription>
16 changes: 7 additions & 9 deletions kuma/search/views.py
@@ -1,6 +1,5 @@
import json

from django.contrib.sites.models import Site
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import render
from django.views.decorators.cache import cache_page
Expand All @@ -9,13 +8,14 @@
from rest_framework.renderers import JSONRenderer
from waffle import flag_is_active

from .filters import (LanguageFilterBackend, DatabaseFilterBackend,
SearchQueryBackend, HighlightFilterBackend,
AdvancedSearchQueryBackend, get_filters)
from .models import Filter, DocumentType
from .renderers import ExtendedTemplateHTMLRenderer
from .serializers import SearchSerializer, DocumentSerializer, FilterWithGroupSerializer
from .filters import (AdvancedSearchQueryBackend, DatabaseFilterBackend,
get_filters, HighlightFilterBackend,
LanguageFilterBackend, SearchQueryBackend)
from .models import DocumentType, Filter
from .queries import DocumentS
from .renderers import ExtendedTemplateHTMLRenderer
from .serializers import (DocumentSerializer, FilterWithGroupSerializer,
SearchSerializer)


class SearchView(ListAPIView):
Expand Down Expand Up @@ -78,8 +78,6 @@ def suggestions(request):
@cache_page(60 * 60 * 168) # 1 week.
def plugin(request):
"""Render an OpenSearch Plugin."""
site = Site.objects.get_current()
return render(request, 'search/plugin.html', {
'site': site,
'locale': request.locale
}, content_type='application/opensearchdescription+xml')
27 changes: 2 additions & 25 deletions kuma/wiki/events.py
@@ -1,16 +1,12 @@
import logging

from django.conf import settings
from django.contrib.sites.models import Site
from django.core.mail import EmailMessage
from django.template import Context, loader

from tower import ugettext as _

from devmo import email_utils
from devmo.helpers import add_utm
from tidings.events import InstanceEvent
from sumo.urlresolvers import reverse
from tidings.events import InstanceEvent

from .helpers import revisions_unified_diff
from .models import Document

Expand Down Expand Up @@ -52,32 +48,13 @@ def context_dict(revision):
context = {
'document_title': document.title,
'creator': revision.creator,
'host': Site.objects.get_current().domain,
'diff': diff
}
context.update(link_urls)

return context


def notification_mails(revision, subject, template, url, users_and_watches):
"""Return EmailMessages in standard notification mail format."""
document = revision.document
subject = subject.format(title=document.title, creator=revision.creator,
locale=document.locale)
t = loader.get_template(template)
c = {'document_title': document.title,
'creator': revision.creator,
'url': url,
'host': Site.objects.get_current().domain}
content = t.render(Context(c))
mail = EmailMessage(subject, content, settings.TIDINGS_FROM_ADDRESS)

for u, dummy in users_and_watches:
mail.to = [u.email]
yield mail


class EditDocumentEvent(InstanceEvent):
"""Event fired when a certain document is edited"""
event_type = 'wiki edit document'
Expand Down
44 changes: 37 additions & 7 deletions kuma/wiki/helpers.py
@@ -1,15 +1,16 @@
# coding=utf-8

import json
import difflib
import json
import re
import urllib
import urlparse

import jinja2
from pyquery import PyQuery as pq
from tidylib import tidy_document
from tower import ugettext as _

from django.contrib.sites.models import Site
from django.core.serializers.json import DjangoJSONEncoder
from django.utils.html import conditional_escape

Expand Down Expand Up @@ -112,12 +113,13 @@ def format_comment(rev):
prev_rev = rev.get_previous()
comment = bugize_text(rev.comment if rev.comment else "")

# If a page move, say so
# If a page move, say so
if prev_rev and prev_rev.slug != rev.slug:
comment += (jinja2.Markup('<span class="slug-change">'
'<span>%s</span>'
' <i class="icon-long-arrow-right" aria-hidden="true"></i> '
'<span>%s</span></span>') % (prev_rev.slug, rev.slug))
comment += jinja2.Markup(
'<span class="slug-change">'
'<span>%s</span>'
' <i class="icon-long-arrow-right" aria-hidden="true"></i> '
'<span>%s</span></span>') % (prev_rev.slug, rev.slug)

return comment

Expand Down Expand Up @@ -277,3 +279,31 @@ def document_zone_management_links(user, document):
args=(zone.id,))

return links


@register.filter
def absolutify(url, site=None):
"""
Joins a base ``Site`` URL with a URL path.
If no site provided it gets the current site from Site.
"""
if url.startswith('http'):
return url

if not site:
site = Site.objects.get_current()

parts = urlparse.urlsplit(url)

scheme = 'https'
netloc = site.domain
path = parts.path
query = parts.query
fragment = parts.fragment

if path == '':
path = '/'

return urlparse.urlunparse([scheme, netloc, path, None, query, fragment])
18 changes: 3 additions & 15 deletions kuma/wiki/management/commands/refresh_wiki_caches.py
Expand Up @@ -4,24 +4,18 @@
Run this periodically, it's useful for preventing redundant traffic between
Kuma and other services like Kumascript.
"""
import datetime
import hashlib
import logging
from optparse import make_option
import sys
import time
import urlparse
from optparse import make_option

import requests

from django.conf import settings
from django.core.cache import cache
from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from django.core.management.base import (BaseCommand, NoArgsCommand,
CommandError)
from django.core.management.base import BaseCommand

from kuma.wiki.models import (Document, Revision)
from kuma.wiki.models import Document


PAGE_EXISTS_KEY_TMPL = getattr(settings, 'wiki_page_exists_key_tmpl',
Expand All @@ -40,12 +34,6 @@ class Command(BaseCommand):
)

def handle(self, *args, **options):

base_url = options['baseurl']
if not base_url:
from django.contrib.sites.models import Site
site = Site.objects.get_current()
base_url = 'http://%s' % site.domain

to_prefetch = []
logging.info("Querying all Documents...")
Expand Down
8 changes: 2 additions & 6 deletions kuma/wiki/management/commands/render_document.py
Expand Up @@ -8,6 +8,7 @@

from django.core.management.base import BaseCommand, CommandError

from kuma.wiki.helpers import absolutify
from kuma.wiki.models import Document, DocumentRenderingInProgress
from kuma.wiki.tasks import render_document

Expand Down Expand Up @@ -39,12 +40,7 @@ class Command(BaseCommand):

def handle(self, *args, **options):
self.options = options

self.base_url = options['baseurl']
if not self.base_url:
from django.contrib.sites.models import Site
site = Site.objects.get_current()
self.base_url = 'http://%s' % site.domain
self.base_url = options['baseurl'] or absolutify('')

if options['all']:
logging.info(u"Querying ALL %s documents..." %
Expand Down
13 changes: 5 additions & 8 deletions kuma/wiki/tasks.py
@@ -1,12 +1,10 @@
from __future__ import with_statement
import os
import time
import logging
from datetime import datetime

from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from django.contrib.sitemaps import GenericSitemap
from django.core.cache import get_cache
from django.core.mail import EmailMessage, send_mail
Expand All @@ -21,8 +19,9 @@

from devmo.utils import MemcacheLock
from .events import context_dict
from .exceptions import StaleDocumentsRenderingInProgress, PageMoveError
from .models import Document, RevisionIP, Revision
from .exceptions import PageMoveError, StaleDocumentsRenderingInProgress
from .helpers import absolutify
from .models import Document, Revision, RevisionIP
from .signals import render_done


Expand Down Expand Up @@ -218,8 +217,7 @@ def send_first_edit_email(revision_pk):
{'user': user.username, 'doc': doc.title})
message = render_to_string('wiki/email/edited.ltxt',
context_dict(revision))
current_site = Site.objects.get_current()
doc_url = "https://%s%s" % (current_site.domain, doc.get_absolute_url())
doc_url = absolutify(doc.get_absolute_url())
email = EmailMessage(subject, message, settings.DEFAULT_FROM_EMAIL,
to=[config.EMAIL_LIST_FOR_FIRST_EDITS],
headers={'X-Kuma-Document-Url': doc_url,
Expand Down Expand Up @@ -258,8 +256,7 @@ def build_sitemaps():
with open(os.path.join(directory, 'sitemap.xml'), 'w') as f:
f.write(xml)

sitemap_url = ("https://%s/sitemaps/%s/sitemap.xml" %
(Site.objects.get_current().domain, locale))
sitemap_url = absolutify('/sitemaps/%s/sitemap.xml' % locale)
sitemap_index = (sitemap_index + sitemap_element %
(sitemap_url, timestamp))

Expand Down
10 changes: 5 additions & 5 deletions kuma/wiki/templates/wiki/email/edited.ltxt
Expand Up @@ -13,23 +13,23 @@
{% trans %}
View User Profile:
{% endtrans %}
https://{{ host }}{{ profile_url }}
{{ profile_url|absolutify }}
{% if compare_url %}
{% trans %}
Compare on MDN:
{% endtrans %}
https://{{ host }}{{ compare_url }}
{{ compare_url|absolutify }}
{% endif %}
{% trans %}
View Article:
{% endtrans %}
https://{{ host }}{{ view_url }}
{{ view_url|absolutify }}
{% trans %}
Edit Article:
{% endtrans %}
https://{{ host }}{{ edit_url }}
{{ edit_url|absolutify }}
{% trans %}
Article History:
{% endtrans %}
https://{{ host }}{{ history_url }}
{{ history_url|absolutify }}
{% if watch %}{{ unsubscribe_text(watch) }}{% endif %}{% endautoescape %}

0 comments on commit cfabedd

Please sign in to comment.