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))
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))
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)
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}
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)
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))
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))
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())