Example #1
0
def search(request, pagename):
    from ductus.index import get_indexing_mongo_database
    indexing_db = get_indexing_mongo_database()
    if indexing_db is None:
        raise Http404("indexing database is not available")
    collection = indexing_db.urn_index

    # figure out target language (if given).
    # fixme: this probably doesn't belong here
    target_language_tags = [tag for tag in request.GET.getlist('tag')
                            if tag.startswith('target-language:')]
    target_language_code = None
    target_language_description = None
    if target_language_tags:
        target_language_code = target_language_tags[0].partition(':')[2]
        from ductus.utils.bcp47 import language_tag_to_description
        try:
            target_language_description = language_tag_to_description(target_language_code)
        except KeyError:
            pass

    # return results to the user
    return render_to_response('special/search.html', {
        'target_language_code': target_language_code,
        'target_language_description': target_language_description,
    }, RequestContext(request))
Example #2
0
def otics_front_page(request, pagename=None):
    from ductus.index import get_indexing_mongo_database
    indexing_db = get_indexing_mongo_database()

    languages = {}
    if indexing_db is not None:
        collection = indexing_db.urn_index
        relevant_pages = collection.find(
            {
                "tags": {
                    "$regex": "^target-language:"
                },
                "current_wikipages": {
                    "$not": {
                        "$size": 0
                    }
                },
            }, {"tags": 1})
        for page in relevant_pages:
            for tag in page["tags"]:
                if tag.startswith("target-language:"):
                    lang_code = tag[len("target-language:"):]
                    languages[lang_code] = languages.get(lang_code, 0) + 1

    total_lesson_count = sum(a for a in languages.values())
    language_tag_cloud = []
    for lang_code, count in sorted(six.iteritems(languages)):
        if count < 2:
            # XXX: until the tag cloud is fixed, don't display languages with
            # only one lesson
            continue
        try:
            descr = language_tag_to_description(lang_code)
        except KeyError:
            pass
        else:
            # XXX: temporary overrides
            if lang_code == 'el':
                descr = u'Greek'
            elif lang_code == 'km':
                descr = u'Khmer'
            language_tag_cloud.append(
                TagCloudElement(
                    count,
                    label=descr,
                    href=(u"/special/search?tag=target-language:%s" %
                          lang_code),
                    data=lang_code))
    prepare_tag_cloud(language_tag_cloud, min_percent=70, max_percent=150)
    return render_to_response(
        'otics/front_page.html', {
            'language_tag_cloud': language_tag_cloud,
            'total_lesson_count': total_lesson_count,
            'total_language_count': len(languages),
        }, RequestContext(request))
Example #3
0
def get_writable_directories_for_user(user):
    """Each entry is a tuple (directory, directory_type, description)"""
    rv = []
    if user.is_authenticated():
        rv.append(('user:%s/' % user.username, 'user', user.username))
        rv.extend(('group:%s/' % group.slug, 'group', group.name)
                  for group in user.ductus_groups.all())
    languages = sorted([('%s:' % lang, 'language_namespace', language_tag_to_description(lang))
                        for lang in settings.DUCTUS_NATURAL_LANGUAGES], key=lambda tup: tup[2])
    rv.extend(languages)
    return tuple(rv)
Example #4
0
def get_target_language_from_tags(request):
    """find target language of a lesson from its tags"""
    language_code = language_name = None
    if hasattr(request.ductus.resource, 'tags'):
        for tag in request.ductus.resource.tags:
            split = tag.value.split(':')
            if split[0] == 'target-language':
                language_code = split[1]
                break
    if language_code is not None:
        try:
            language_name = language_tag_to_description(language_code)
        except KeyError:
            pass

    return {'code': language_code, 'name': language_name}
Example #5
0
def ajax_language_tag_to_description(request, pagename):
    """return a JSON object containing the language name for a code passed
    in the request, such that:
    (url)?code=en returns
    {'en': u'English'}
    or (url)?code=xx returns
    {'error': 'invalid language code'}
    """
    if request.method == 'GET':
        code = request.GET.get('code', '')
        rv = {}
        try:
            rv[code] = language_tag_to_description(code)
        except KeyError:
            rv['error'] = 'invalid language code'
        return render_json_response(rv)
Example #6
0
def get_target_language_from_tags(request):
    """find target language of a lesson from its tags"""
    language_code = language_name = None
    if hasattr(request.ductus.resource, 'tags'):
        for tag in request.ductus.resource.tags:
            split = tag.value.split(':')
            if split[0] == 'target-language':
                language_code = split[1]
                break
    if language_code is not None:
        try:
            language_name = language_tag_to_description(language_code)
        except KeyError:
            pass

    return {'code': language_code, 'name': language_name}
Example #7
0
def ajax_language_tag_to_description(request, pagename):
    """return a JSON object containing the language name for a code passed
    in the request, such that:
    (url)?code=en returns
    {'en': u'English'}
    or (url)?code=xx returns
    {'error': 'invalid language code'}
    """
    if request.method == 'GET':
        code = request.GET.get('code', '')
        rv = {}
        try:
            rv[code] = language_tag_to_description(code)
        except KeyError:
            rv['error'] = 'invalid language code'
        return render_json_response(rv)
Example #8
0
def list_target_languages(request, pagename):
    """display a page listing all languages found in the target-language tags of all lessons"""
    codes = get_list_of_target_lang_codes()

    langs = []
    for code in codes:
        try:
            name = language_tag_to_description(code)
        except KeyError:
            pass    # silently ignore broken tags
        else:
            langs.append({'code': code, 'name': name})
    langs = sorted(langs, key=lambda l: l['name'])

    return render_to_response('special/list_target_languages.html', {
        'languages': langs,
    }, RequestContext(request))
Example #9
0
def otics_front_page(request, pagename=None):
    from ductus.index import get_indexing_mongo_database
    indexing_db = get_indexing_mongo_database()

    languages = {}
    if indexing_db is not None:
        collection = indexing_db.urn_index
        relevant_pages = collection.find({
            "tags": {"$regex": "^target-language:"},
            "current_wikipages": {"$not": {"$size": 0}},
        }, {"tags": 1})
        for page in relevant_pages:
            for tag in page["tags"]:
                if tag.startswith("target-language:"):
                    lang_code = tag[len("target-language:"):]
                    languages[lang_code] = languages.get(lang_code, 0) + 1

    total_lesson_count = sum(a for a in languages.values())
    language_tag_cloud = []
    for lang_code, count in sorted(six.iteritems(languages)):
        if count < 2:
            # XXX: until the tag cloud is fixed, don't display languages with
            # only one lesson
            continue
        try:
            descr = language_tag_to_description(lang_code)
        except KeyError:
            pass
        else:
            # XXX: temporary overrides
            if lang_code == 'el':
                descr = u'Greek'
            elif lang_code == 'km':
                descr = u'Khmer'
            language_tag_cloud.append(TagCloudElement(count, label=descr, href=(u"/special/search?tag=target-language:%s" % lang_code), data=lang_code))
    prepare_tag_cloud(language_tag_cloud, min_percent=70, max_percent=150)
    return render_to_response('otics/front_page.html', {
        'language_tag_cloud': language_tag_cloud,
        'total_lesson_count': total_lesson_count,
        'total_language_count': len(languages),
    }, RequestContext(request))
Example #10
0
recaptcha = None
if hasattr(settings, "RECAPTCHA_PRIVATE_KEY"):
    from recaptcha.client import captcha as recaptcha

# fixme: in this default view, lower the cache time for when links change from
# broken to unbroken and back
@register_view(Wikitext)
def view_textwiki(request):
    return render_to_response('textwiki/display_wiki.html', {
        'text': request.ductus.resource.text,
        'natural_language': request.ductus.resource.blob.natural_language or None,
        'markup_language': request.ductus.resource.blob.markup_language,
    }, context_instance=RequestContext(request))

_natural_language_choices = [('', ugettext_lazy('Unspecified'))]
_natural_language_choices.extend((code, ugettext_lazy(language_tag_to_description(code)))
                                 for code in settings.DUCTUS_NATURAL_LANGUAGES)

LogMessageField = partial(forms.CharField, max_length=400, required=False)

class WikiEditForm(forms.Form):
    textarea_attrs = {'cols': '80', 'rows': '30'}
    text = forms.CharField(widget=forms.Textarea(attrs=textarea_attrs))
    natural_language = forms.ChoiceField(required=False, choices=_natural_language_choices)
    log_message = LogMessageField()

def add_author_and_log_message(request, resource):
    if request.user.is_authenticated():
        resource.common.author.text = request.user.username
        if getattr(settings, "DUCTUS_SITE_DOMAIN", None):
            resource.common.author.href = 'http://%s%s' % (settings.DUCTUS_SITE_DOMAIN, request.user.get_absolute_url())