def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), project.directory) if not check_permission('view', request): raise PermissionDenied translation_projects = project.translationproject_set.all() items = [make_language_item(request, translation_project) for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) totals = add_percentages(project.getquickstats()) average = totals['translatedpercentage'] topstats = gentopstats_project(project) templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'stats': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, {"languages": languagecount, "average": average}), }, 'description': project.description, 'adminlink': _('Admin'), 'languages': items, 'instancetitle': pagelayout.get_title(), 'topstats': topstats, 'statsheadings': get_stats_headings(), 'translationlegend': {'translated': _('Translations are complete'), 'fuzzy': _('Translations need to be checked (they are marked fuzzy)'), 'untranslated': _('Untranslated')}, } return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() filters, tags_filter_form = handle_tags_filter_form( request, translation_projects) if filters is not None: for tag in filters: # This looks pretty scary, but couldn't manage to get it working # using Q objects in a single filter. translation_projects = translation_projects.filter(tags__in=[tag]) translation_projects = translation_projects.distinct() items = [make_language_item(request, translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) summary_dict = { "languages": languagecount, "average": project_stats['translated']['percentage'], } summary = ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, summary_dict) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'activity', 'tags' ] template_vars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, 'tags_filter_form': tags_filter_form, } return template_vars
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions( get_profile(request.user), project.directory ) if not check_permission('view', request): raise PermissionDenied can_edit = check_permission('administrate', request) translation_projects = project.translationproject_set.all() items = [make_language_item(request, translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) average = project_stats['translated']['percentage'] topstats = gentopstats_project(project) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity'] table = { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, } templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, {"languages": languagecount, "average": average}), }, 'topstats': topstats, 'can_edit': can_edit, 'table': table, } if can_edit: from pootle_project.forms import DescriptionForm templatevars['form'] = DescriptionForm(instance=project) return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() filters, tags_filter_form = handle_tags_filter_form(request, translation_projects) if filters is not None: for tag in filters: # This looks pretty scary, but couldn't manage to get it working # using Q objects in a single filter. translation_projects = translation_projects.filter(tags__in=[tag]) translation_projects = translation_projects.distinct() items = [make_language_item(translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) summary_dict = { "languages": languagecount, "average": project_stats['translated']['percentage'], } summary = ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, summary_dict) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity', 'tags'] template_vars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, 'tags_filter_form': tags_filter_form, } return template_vars
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), project.directory) if not check_permission('view', request): raise PermissionDenied can_edit = check_permission('administrate', request) translation_projects = project.translationproject_set.all() items = [make_language_item(request, translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) average = project_stats['translated']['percentage'] topstats = gentopstats_project(project) templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'description_html': project.description_html, 'summary': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, { "languages": languagecount, "average": average }), }, 'languages': items, 'topstats': topstats, 'statsheadings': get_stats_headings(), 'can_edit': can_edit, } if can_edit: from pootle_project.forms import DescriptionForm templatevars['form'] = DescriptionForm(instance=project) return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), project.directory) if not check_permission('view', request): raise PermissionDenied translation_projects = project.translationproject_set.all() items = [ make_language_item(request, translation_project) for translation_project in translation_projects.iterator() ] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) totals = add_percentages(project.getquickstats()) average = totals['translatedpercentage'] topstats = gentopstats_project(project) templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'stats': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, { "languages": languagecount, "average": average }), }, 'description': project.description, 'adminlink': _('Admin'), 'languages': items, 'instancetitle': pagelayout.get_title(), 'topstats': topstats, 'statsheadings': get_stats_headings(), 'translationlegend': { 'translated': _('Translations are complete'), 'fuzzy': _('Translations need to be checked (they are marked fuzzy)'), 'untranslated': _('Untranslated') }, } return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), project.directory) if not check_permission('view', request): raise PermissionDenied # Check for form post (MT request) if request.method == "POST": # TODO: This is not the correct way to handle one of many forms. How do I do it better? # TODO: This is not save against injection attacks. # translation_request_form = TranslationRequestForm(None, request.POST) # Get the project translator = MachineTranslator.objects.get(pk = request.POST['translator']) translation_project = TranslationProject.objects.get( pk = request.POST['translation_project']) translator.create_translation_request(translation_project) return HttpResponseRedirect("?translator=%s&project=%s" % (translator, translation_project)) translation_projects = project.translationproject_set.all() items = [make_language_item(request, project.source_language, translation_project) for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) totals = add_percentages(project.getquickstats()) average = totals['translatedpercentage'] topstats = gentopstats_project(project) templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'stats': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, {"languages": languagecount, "average": average}), }, 'description': project.description, 'adminlink': _('Admin'), 'languages': items, 'templates_code': Language.objects.get_by_natural_key('templates').code, 'instancetitle': pagelayout.get_title(), 'topstats': topstats, 'statsheadings': get_stats_headings(), 'translationlegend': {'translated': _('Translations are complete'), 'fuzzy': _('Translations need to be checked (they are marked fuzzy)'), 'untranslated': _('Untranslated')}, } return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() items = [make_language_item(translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) project_stats = get_raw_stats(project) summary_dict = { "languages": languagecount, "average": project_stats['translated']['percentage'], } summary = ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, summary_dict) table_fields = ['name', 'progress', 'total', 'need-translation', 'activity', 'tags'] template_vars = { 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, } return template_vars
def get_project_base_template_vars(request, project, can_edit): """Get the base template vars for project overview view.""" translation_projects = project.translationproject_set.all() items = [make_language_item(translation_project) \ for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) summary = ungettext('%(languages)d language', '%(languages)d languages', languagecount, {"languages": languagecount}) table_fields = [ 'name', 'progress', 'total', 'need-translation', 'activity', 'tags' ] template_vars = { 'resource_obj': request.resource_obj, 'project': { 'code': project.code, 'name': project.fullname, 'description': project.description, 'summary': summary, }, 'topstats': gentopstats_project(project), 'can_edit': can_edit, 'table': { 'id': 'project', 'proportional': False, 'fields': table_fields, 'headings': get_table_headings(table_fields), 'items': items, }, } return template_vars
def overview(request, project): """Page listing all languages added to project.""" from locale import strcoll from pootle.i18n.gettext import tr_lang def _make_lang_item(tp): href = tp.get_absolute_url() href_all = tp.get_translate_url() href_todo = tp.get_translate_url(state="incomplete") info = { "project": tp.project.code, "code": tp.code, "href": href, "href_all": href_all, "href_todo": href_todo, "title": tr_lang(tp.language.fullname), "lastactivity": get_last_action(tp), "tags": tp.tag_like_objects, "pk": tp.pk, } return info translation_projects = project.translationproject_set.all() items = [_make_lang_item(tp) for tp in translation_projects.iterator()] items.sort(lambda x, y: strcoll(x["title"], y["title"])) langs = translation_projects.count() summary = ungettext("%(langs)d language", "%(langs)d languages", langs, {"langs": langs}) fields = ["name", "progress", "total", "need-translation", "activity", "tags"] ctx = { "resource_obj": request.resource_obj, "project": { "code": project.code, "name": project.fullname, "description": project.description, "summary": summary, }, "topstats": gentopstats_project(project), "can_edit": check_permission("administrate", request), "table": { "id": "project", "proportional": False, "fields": fields, "headings": get_table_headings(fields), "items": items, }, } if ctx["can_edit"]: from pootle_project.forms import DescriptionForm tag_action_url = reverse("pootle-xhr-tag-tp-in-project", kwargs={"project_code": project.code}) ctx.update( { "form": DescriptionForm(instance=project), "form_action": reverse("pootle-project-admin-settings", args=[project.code]), "add_tag_form": TranslationProjectTagForm(project=project), "add_tag_action_url": tag_action_url, } ) return render(request, "projects/overview.html", ctx)
def project_language_index(request, project_code): """page listing all languages added to project with the possibility to add new ones""" import logging current_project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), current_project.directory) #TODO: maybe find a clever way to check permission if not check_permission('view', request): raise PermissionDenied #load the current project class TranslationProjectForm(forms.ModelForm): #since the user has already selected the project he wants to add the languages to #we hide the field of the project reference project = forms.ModelChoiceField(queryset=Project.objects.filter(pk=current_project.pk), initial=current_project.pk, widget=forms.HiddenInput) #form will be based on/extend the TranslationProject object class Meta: model = TranslationProject if request.method == 'POST': # If the form has been submitted... form = TranslationProjectForm(request.POST) # A form bound to the POST data if form.is_valid(): # All validation rules pass #proceed with filling in the form values exactly as in the model logging.debug("Saving form") translation_project = form.save() #generate the empty .po translation file for the new language #based on the template translation_project.update_from_templates() translation_project.getcompletestats() translation_project.getquickstats() openproject = translation_project.project current_project = translation_project.project return HttpResponseRedirect( openproject._get_pootle_path() ) # Redirect after POST else: form = TranslationProjectForm() # An unbound form logging.debug("Unbound form") logging.debug("%s, %s, ", current_project.code, current_project.fullname ) translation_projects = current_project.translationproject_set.all() items = [make_language_item(request, translation_project) for translation_project in translation_projects.iterator()] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) totals = add_percentages(current_project.getquickstats()) average = totals['translatedpercentage'] topstats = gentopstats_project(current_project) templatevars = { 'form' : form, 'project': { 'code': current_project.code, 'name': current_project.fullname, 'stats': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, {"languages": languagecount, "average": average}) }, 'description': current_project.description, 'adminlink': _('Admin'), 'languages': items, 'instancetitle': pagelayout.get_title(), 'topstats': topstats, 'statsheadings': get_stats_headings(), 'translationlegend': {'translated': _('Translations are complete'), 'fuzzy': _('Translations need to be checked (they are marked fuzzy)' ), 'untranslated': _('Untranslated')}, } return render_to_response( 'project/project_edit.html', templatevars, context_instance=RequestContext(request) )
def project_language_index(request, project_code): """page listing all languages added to project""" project = get_object_or_404(Project, code=project_code) request.permissions = get_matching_permissions(get_profile(request.user), project.directory) if not check_permission('view', request): raise PermissionDenied # Check for form post (MT request) if request.method == "POST": # TODO: This is not the correct way to handle one of many forms. How do I do it better? # TODO: This is not save against injection attacks. # translation_request_form = TranslationRequestForm(None, request.POST) # Get the project translator = MachineTranslator.objects.get( pk=request.POST['translator']) translation_project = TranslationProject.objects.get( pk=request.POST['translation_project']) translator.create_translation_request(translation_project) return HttpResponseRedirect("?translator=%s&project=%s" % (translator, translation_project)) translation_projects = project.translationproject_set.all() items = [ make_language_item(request, project.source_language, translation_project) for translation_project in translation_projects.iterator() ] items.sort(lambda x, y: locale.strcoll(x['title'], y['title'])) languagecount = len(translation_projects) totals = add_percentages(project.getquickstats()) average = totals['translatedpercentage'] topstats = gentopstats_project(project) templatevars = { 'project': { 'code': project.code, 'name': project.fullname, 'stats': ungettext('%(languages)d language, %(average)d%% translated', '%(languages)d languages, %(average)d%% translated', languagecount, { "languages": languagecount, "average": average }), }, 'description': project.description, 'adminlink': _('Admin'), 'languages': items, 'templates_code': Language.objects.get_by_natural_key('templates').code, 'instancetitle': pagelayout.get_title(), 'topstats': topstats, 'statsheadings': get_stats_headings(), 'translationlegend': { 'translated': _('Translations are complete'), 'fuzzy': _('Translations need to be checked (they are marked fuzzy)'), 'untranslated': _('Untranslated') }, } return render_to_response('project/project.html', templatevars, context_instance=RequestContext(request))