def show_component(request, project, component): obj = get_component(request, project, component) user = request.user last_changes = Change.objects.prefetch().filter(component=obj)[:10] return render( request, 'component.html', { 'allow_index': True, 'object': obj, 'project': obj.project, 'translations': sort_objects(prefetch_stats(obj.translation_set.all())), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode({ 'component': obj.slug, 'project': obj.project.slug }), 'language_count': Language.objects.filter( translation__component=obj).distinct().count(), 'replace_form': optional_form(ReplaceForm, user, 'unit.edit', obj), 'bulk_state_form': optional_form(BulkStateForm, user, 'translation.auto', obj, user=user, obj=obj), 'whiteboard_form': optional_form(WhiteboardForm, user, 'component.edit', obj), 'delete_form': optional_form(DeleteForm, user, 'component.edit', obj, obj=obj), 'rename_form': optional_form(ComponentRenameForm, user, 'component.edit', obj, request=request, instance=obj), 'move_form': optional_form(ComponentMoveForm, user, 'component.edit', obj, request=request, instance=obj), 'search_form': SearchForm(), })
def show_subproject(request, project, subproject): obj = get_subproject(request, project, subproject) last_changes = Change.objects.prefetch().filter( translation__subproject=obj )[:10] new_lang_form = get_new_language_form(request, obj)(obj) return render( request, 'subproject.html', { 'object': obj, 'project': obj.project, 'translations': sort_objects(obj.translation_set.enabled()), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode( {'subproject': obj.slug, 'project': obj.project.slug} ), 'new_lang_form': new_lang_form, } )
def dashboard_user(request): """Home page of Weblate for authenticated user.""" user = request.user user_has_languages = user.is_authenticated and user.profile.languages.exists( ) user_translations = get_user_translations(request, user, user_has_languages) suggestions = get_suggestions(request, user, user_has_languages, user_translations) usersubscriptions = None componentlists = fetch_componentlists(request.user, user_translations) active_tab_id = user.profile.dashboard_view active_tab_slug = Profile.DASHBOARD_SLUGS.get(active_tab_id) if (active_tab_id == Profile.DASHBOARD_COMPONENT_LIST and user.profile.dashboard_component_list): active_tab_slug = user.profile.dashboard_component_list.tab_slug() if user.is_authenticated: usersubscriptions = user_translations.filter_access(user).filter( component__project__in=user.watched_projects) if user.profile.hide_completed: usersubscriptions = get_untranslated(usersubscriptions) for componentlist in componentlists: componentlist.translations = get_untranslated( componentlist.translations) usersubscriptions = translation_prefetch_tasks( prefetch_stats(usersubscriptions)) return render( request, "dashboard/user.html", { "allow_index": True, "suggestions": suggestions, "search_form": SearchForm(request.user), "usersubscriptions": usersubscriptions, "componentlists": componentlists, "all_componentlists": prefetch_stats( ComponentList.objects.filter( components__project_id__in=request.user.allowed_project_ids ).distinct().order()), "active_tab_slug": active_tab_slug, "reports_form": ReportsForm(), }, )
def get_counts(request, project, subproject): """View for work counts""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): return redirect(obj) data = generate_counts( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return HttpResponse(json.dumps(data), content_type='application/json') if form.cleaned_data['style'] == 'html': start = ('<table>\n<tr><th>Email</th><th>Name</th>' '<th>Words</th><th>Count</th></tr>') row_start = '<tr>' cell_format = u'<td>{0}</td>\n' row_end = '</tr>' mime = 'text/html' end = '</table>' else: heading = ' '.join(['=' * 25] * 4) start = '{0}\n{1:25} {2:25} {3:25} {4:25}\n{0}'.format( heading, 'Email', 'Name', 'Words', 'Count') row_start = '' cell_format = u'{0:25} ' row_end = '' mime = 'text/plain' end = heading result = [] result.append(start) for item in data: result.append(row_start) result.append(u'{0}{1}{2}{3}'.format( cell_format.format(item['name']), cell_format.format(item['email']), cell_format.format(item['words']), cell_format.format(item['count']), )) result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def show_project(request, project): obj = get_project(request, project) user = request.user last_changes = Change.objects.prefetch().order().filter(project=obj)[:10] language_stats = sort_unicode(obj.stats.get_language_stats(), lambda x: force_text(x.language)) # Paginate components of project. all_components = obj.component_set.prefetch().order() components = prefetch_stats(get_paginator(request, all_components)) return render( request, 'project.html', { 'allow_index': True, 'object': obj, 'project': obj, 'last_changes': last_changes, 'reports_form': ReportsForm(), 'last_changes_url': urlencode({'project': obj.slug}), 'language_stats': language_stats, 'search_form': SearchForm(), 'whiteboard_form': optional_form(WhiteboardForm, user, 'project.edit', obj), 'delete_form': optional_form(DeleteForm, user, 'project.edit', obj, obj=obj), 'rename_form': optional_form(ProjectRenameForm, user, 'project.edit', obj, request=request, instance=obj), 'replace_form': optional_form(ReplaceForm, user, 'unit.edit', obj), 'bulk_state_form': optional_form(BulkStateForm, user, 'translation.auto', obj, user=user, obj=obj), 'components': components, 'licenses': ', '.join(sorted(obj.get_licenses())), })
def show_subproject(request, project, subproject): obj = get_subproject(request, project, subproject) last_changes = Change.objects.for_component(obj)[:10] try: sample = obj.translation_set.all()[0] source_words = sample.total_words total_strings = sample.total except IndexError: source_words = 0 total_strings = 0 if can_translate(request.user, project=obj.project): replace_form = ReplaceForm() else: replace_form = None return render( request, 'subproject.html', { 'allow_index': True, 'object': obj, 'project': obj.project, 'translations': sort_objects(obj.translation_set.all()), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode({ 'subproject': obj.slug, 'project': obj.project.slug }), 'unit_count': Unit.objects.filter(translation__subproject=obj).count(), 'words_count': obj.get_total_words(), 'language_count': Language.objects.filter( translation__subproject=obj).distinct().count(), 'strings_count': total_strings, 'source_words_count': source_words, 'replace_form': replace_form, 'search_form': SearchForm(), })
def show_subproject(request, project, subproject): obj = get_subproject(request, project, subproject) last_changes = Change.objects.for_component(obj)[:10] if can_translate(request.user, project=obj.project): replace_form = ReplaceForm() mass_state_form = MassStateForm(request.user, obj) else: replace_form = None mass_state_form = None return render( request, 'subproject.html', { 'allow_index': True, 'object': obj, 'project': obj.project, 'translations': sort_objects(prefetch_stats(obj.translation_set.all())), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode({ 'subproject': obj.slug, 'project': obj.project.slug }), 'unit_count': Unit.objects.filter(translation__subproject=obj).count(), 'words_count': obj.stats.all_words, 'language_count': Language.objects.filter( translation__subproject=obj).distinct().count(), 'strings_count': obj.stats.source_strings, 'source_words_count': obj.stats.source_words, 'replace_form': replace_form, 'mass_state_form': mass_state_form, 'search_form': SearchForm(), })
def show_component(request, project, component): obj = get_component(request, project, component) last_changes = Change.objects.prefetch().filter(component=obj)[:10] # Is user allowed to do automatic translation? if request.user.has_perm('translation.auto', obj): mass_state_form = MassStateForm(request.user, obj) else: mass_state_form = None if request.user.has_perm('unit.edit', obj): replace_form = ReplaceForm() else: replace_form = None return render( request, 'component.html', { 'allow_index': True, 'object': obj, 'project': obj.project, 'translations': sort_objects(prefetch_stats(obj.translation_set.all())), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode({ 'component': obj.slug, 'project': obj.project.slug }), 'language_count': Language.objects.filter( translation__component=obj).distinct().count(), 'replace_form': replace_form, 'mass_state_form': mass_state_form, 'search_form': SearchForm(), })
def show_subproject(request, project, subproject): obj = get_subproject(request, project, subproject) last_changes = Change.objects.prefetch().filter( translation__subproject=obj)[:10] new_lang_form = get_new_language_form(request, obj)(obj) if (request.method == 'POST' and can_edit_subproject(request.user, obj.project)): settings_form = SubprojectSettingsForm(request.POST, instance=obj) if settings_form.is_valid(): settings_form.save() messages.success(request, _('Settings saved')) return redirect(obj) else: messages.error( request, _('Invalid settings, please check the form for errors!')) else: settings_form = SubprojectSettingsForm(instance=obj) return render( request, 'subproject.html', { 'object': obj, 'project': obj.project, 'translations': sort_objects(obj.translation_set.enabled()), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode({ 'subproject': obj.slug, 'project': obj.project.slug }), 'new_lang_form': new_lang_form, 'settings_form': settings_form, })
def show_component(request, project, component): obj = get_component(request, project, component) obj.stats.ensure_basic() user = request.user last_changes = Change.objects.prefetch().order().filter(component=obj)[:10] translations = prefetch_stats(list(obj.translation_set.prefetch())) # Show ghost translations for user languages add_ghost_translations(obj, user, translations, GhostTranslation) translations = sort_unicode( translations, lambda x: "{}-{}".format(user.profile.get_language_order(x.language), x .language), ) return render( request, "component.html", { "allow_index": True, "object": obj, "project": obj.project, "translations": translations, "reports_form": ReportsForm(), "last_changes": last_changes, "last_changes_url": urlencode({ "component": obj.slug, "project": obj.project.slug }), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj.project, auto_id="id_bulk_%s", ), "announcement_form": optional_form(AnnouncementForm, user, "component.edit", obj), "delete_form": optional_form( ComponentDeleteForm, user, "component.edit", obj, obj=obj), "rename_form": optional_form( ComponentRenameForm, user, "component.edit", obj, request=request, instance=obj, ), "move_form": optional_form( ComponentMoveForm, user, "component.edit", obj, request=request, instance=obj, ), "search_form": SearchForm(request.user), "alerts": obj.all_alerts, }, )
def show_project(request, project): obj = get_project(request, project) obj.stats.ensure_basic() user = request.user last_changes = Change.objects.prefetch().order().filter(project=obj)[:10] last_announcements = (Change.objects.prefetch().order().filter( project=obj, action=Change.ACTION_ANNOUNCEMENT)[:10]) language_stats = obj.stats.get_language_stats() # Show ghost translations for user languages component = None for component in obj.component_set.filter_access(user).all(): if component.can_add_new_language(user): break if component: add_ghost_translations(component, user, language_stats, GhostProjectLanguageStats) language_stats = sort_unicode( language_stats, lambda x: "{}-{}".format(user.profile.get_language_order(x.language), x .language), ) all_components = obj.component_set.filter_access(user).prefetch().order() components = prefetch_tasks(prefetch_stats(all_components)) return render( request, "project.html", { "allow_index": True, "object": obj, "project": obj, "last_changes": last_changes, "last_announcements": last_announcements, "reports_form": ReportsForm(), "last_changes_url": urlencode({"project": obj.slug}), "language_stats": [stat.obj or stat for stat in language_stats], "search_form": SearchForm(request.user), "announcement_form": optional_form(AnnouncementForm, user, "project.edit", obj), "delete_form": optional_form( ProjectDeleteForm, user, "project.edit", obj, obj=obj), "rename_form": optional_form( ProjectRenameForm, user, "project.edit", obj, request=request, instance=obj, ), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj, auto_id="id_bulk_%s", ), "components": components, "licenses": obj.component_set.exclude(license="").order_by("license"), }, )
def dashboard_user(request): """Home page of Weblate showing list of projects, stats and user links if logged in. """ user = request.user user_translations = get_user_translations(request, user) suggestions = get_suggestions(request, user, user_translations) usersubscriptions = None componentlists = list( ComponentList.objects.filter(show_dashboard=True, components__project__in=request.user. allowed_projects).distinct().order()) for componentlist in componentlists: componentlist.translations = prefetch_stats( user_translations.filter( component__in=componentlist.components.all())) # Filter out component lists with translations # This will remove the ones where user doesn't have access to anything componentlists = [c for c in componentlists if c.translations] active_tab_id = user.profile.dashboard_view active_tab_slug = Profile.DASHBOARD_SLUGS.get(active_tab_id) if (active_tab_id == Profile.DASHBOARD_COMPONENT_LIST and user.profile.dashboard_component_list): active_tab_slug = user.profile.dashboard_component_list.tab_slug() if user.is_authenticated: # Ensure ACL filtering applies (user could have been removed # from the project meanwhile) watched_projects = user.allowed_projects.filter(profile=user.profile) usersubscriptions = user_translations.filter( component__project__in=watched_projects) if user.profile.hide_completed: usersubscriptions = get_untranslated(usersubscriptions) for componentlist in componentlists: componentlist.translations = get_untranslated( componentlist.translations) usersubscriptions = prefetch_stats(usersubscriptions) return render( request, 'dashboard/user.html', { 'allow_index': True, 'suggestions': suggestions, 'search_form': SearchForm(request.user), 'usersubscriptions': get_paginator(request, usersubscriptions), 'componentlists': componentlists, 'all_componentlists': prefetch_stats( ComponentList.objects.filter( components__project__in=request.user.allowed_projects). distinct().order()), 'active_tab_slug': active_tab_slug, 'reports_form': ReportsForm(), })
def show_project(request, project): obj = get_project(request, project) user = request.user last_changes = Change.objects.prefetch().order().filter(project=obj)[:10] language_stats = sort_unicode(obj.stats.get_language_stats(), lambda x: force_str(x.language)) # Paginate components of project. all_components = obj.component_set.prefetch().order() components = prefetch_stats(get_paginator(request, all_components)) return render( request, "project.html", { "allow_index": True, "object": obj, "project": obj, "last_changes": last_changes, "reports_form": ReportsForm(), "last_changes_url": urlencode({"project": obj.slug}), "language_stats": language_stats, "search_form": SearchForm(request.user), "announcement_form": optional_form(AnnouncementForm, user, "project.edit", obj), "delete_form": optional_form(DeleteForm, user, "project.edit", obj, obj=obj), "rename_form": optional_form( ProjectRenameForm, user, "project.edit", obj, request=request, instance=obj, ), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj, auto_id="id_bulk_%s", ), "components": components, "licenses": obj.component_set.exclude(license="").order_by("license"), }, )
def show_component(request, project, component): obj = get_component(request, project, component) user = request.user last_changes = Change.objects.prefetch().order().filter(component=obj)[:10] translations = prefetch_stats(list(obj.translation_set.prefetch())) # Show ghost translations for user languages if obj.can_add_new_language(request.user): existing = {translation.language.code for translation in translations} for language in user.profile.languages.all(): if language.code in existing: continue translations.append(GhostTranslation(obj, language)) return render( request, "component.html", { "allow_index": True, "object": obj, "project": obj.project, "translations": sort_objects(translations), "reports_form": ReportsForm(), "last_changes": last_changes, "last_changes_url": urlencode({ "component": obj.slug, "project": obj.project.slug }), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj.project, auto_id="id_bulk_%s", ), "announcement_form": optional_form(AnnouncementForm, user, "component.edit", obj), "delete_form": optional_form( ComponentDeleteForm, user, "component.edit", obj, obj=obj), "rename_form": optional_form( ComponentRenameForm, user, "component.edit", obj, request=request, instance=obj, ), "move_form": optional_form( ComponentMoveForm, user, "component.edit", obj, request=request, instance=obj, ), "search_form": SearchForm(request.user), "alerts": obj.all_alerts, }, )
def get_credits(request, project=None, component=None): """View for credits""" if project is None: obj = None kwargs = {'translation__pk__gt': 0} elif component is None: obj = get_project(request, project) kwargs = {'translation__component__project': obj} else: obj = get_component(request, project, component) kwargs = {'translation__component': obj} form = ReportsForm(request.POST) if not form.is_valid(): show_form_errors(request, form) return redirect_param(obj or 'home', '#reports') data = generate_credits( None if request.user.has_perm('reports.view', obj) else request.user, form.cleaned_data['start_date'], form.cleaned_data['end_date'], **kwargs) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) if form.cleaned_data['style'] == 'html': start = '<table>' row_start = '<tr>' language_format = '<th>{0}</th>' translator_start = '<td><ul>' translator_format = '<li><a href="mailto:{0}">{1}</a></li>' translator_end = '</ul></td>' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '' row_start = '' language_format = '* {0}\n' translator_start = '' translator_format = ' * {1} <{0}>' translator_end = '' row_end = '' mime = 'text/plain' end = '' result = [] result.append(start) for language in data: name, translators = language.popitem() result.append(row_start) result.append(language_format.format(name)) result.append(''.join(( translator_start, '\n'.join([translator_format.format(*t) for t in translators]), translator_end, ))) result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_credits(request, project=None, component=None): """View for credits.""" if project is None: obj = None kwargs = {"translation__pk__gt": 0} elif component is None: obj = get_project(request, project) kwargs = {"translation__component__project": obj} else: obj = get_component(request, project, component) kwargs = {"translation__component": obj} form = ReportsForm(request.POST) if not form.is_valid(): show_form_errors(request, form) return redirect_param(obj or "home", "#reports") data = generate_credits( None if request.user.has_perm("reports.view", obj) else request.user, form.cleaned_data["start_date"], form.cleaned_data["end_date"], **kwargs) if form.cleaned_data["style"] == "json": return JsonResponse(data=data, safe=False) if form.cleaned_data["style"] == "html": start = "<table>" row_start = "<tr>" language_format = "<th>{0}</th>" translator_start = "<td><ul>" translator_format = '<li><a href="mailto:{0}">{1}</a></li>' translator_end = "</ul></td>" row_end = "</tr>" mime = "text/html" end = "</table>" else: start = "" row_start = "" language_format = "* {0}\n" translator_start = "" translator_format = " * {1} <{0}>" translator_end = "" row_end = "" mime = "text/plain" end = "" result = [] result.append(start) for language in data: name, translators = language.popitem() result.append(row_start) result.append(language_format.format(name)) result.append(translator_start + "\n".join( translator_format.format(*t) for t in translators) + translator_end) result.append(row_end) result.append(end) return HttpResponse("\n".join(result), content_type="{0}; charset=utf-8".format(mime))
def show_component(request, project, component): obj = get_component(request, project, component) user = request.user last_changes = Change.objects.prefetch().order().filter(component=obj)[:10] return render( request, "component.html", { "allow_index": True, "object": obj, "project": obj.project, "translations": sort_objects(prefetch_stats(obj.translation_set.prefetch())), "reports_form": ReportsForm(), "last_changes": last_changes, "last_changes_url": urlencode({ "component": obj.slug, "project": obj.project.slug }), "language_count": Language.objects.filter( translation__component=obj).distinct().count(), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj.project, auto_id="id_bulk_%s", ), "announcement_form": optional_form(AnnouncementForm, user, "component.edit", obj), "delete_form": optional_form(DeleteForm, user, "component.edit", obj, obj=obj), "rename_form": optional_form( ComponentRenameForm, user, "component.edit", obj, request=request, instance=obj, ), "move_form": optional_form( ComponentMoveForm, user, "component.edit", obj, request=request, instance=obj, ), "search_form": SearchForm(request.user), "alerts": obj.all_alerts, }, )
def dashboard_user(request): """Home page of Weblate for authenticated user.""" user = request.user user_has_languages = user.is_authenticated and user.profile.languages.exists( ) user_translations = get_user_translations(request, user, user_has_languages) suggestions = get_suggestions(request, user, user_has_languages, user_translations) usersubscriptions = None componentlists = list( ComponentList.objects.filter( show_dashboard=True, components__project_id__in=request.user.allowed_project_ids, ).distinct().order()) for componentlist in componentlists: componentlist.translations = prefetch_stats( user_translations.filter( component__in=componentlist.components.all())) # Filter out component lists with translations # This will remove the ones where user doesn't have access to anything componentlists = [c for c in componentlists if c.translations] active_tab_id = user.profile.dashboard_view active_tab_slug = Profile.DASHBOARD_SLUGS.get(active_tab_id) if (active_tab_id == Profile.DASHBOARD_COMPONENT_LIST and user.profile.dashboard_component_list): active_tab_slug = user.profile.dashboard_component_list.tab_slug() if user.is_authenticated: usersubscriptions = user_translations.filter( component__project__in=user.watched_projects) if user.profile.hide_completed: usersubscriptions = get_untranslated(usersubscriptions) for componentlist in componentlists: componentlist.translations = get_untranslated( componentlist.translations) usersubscriptions = prefetch_stats(usersubscriptions) return render( request, "dashboard/user.html", { "allow_index": True, "suggestions": suggestions, "search_form": SearchForm(request.user), "usersubscriptions": get_paginator(request, usersubscriptions), "componentlists": componentlists, "all_componentlists": prefetch_stats( ComponentList.objects.filter( components__project_id__in=request.user.allowed_project_ids ).distinct().order()), "active_tab_slug": active_tab_slug, "reports_form": ReportsForm(), }, )
def show_project(request, project): obj = get_project(request, project) obj.stats.ensure_basic() user = request.user last_changes = obj.change_set.prefetch().order()[:10] last_announcements = (obj.change_set.prefetch().order().filter( action=Change.ACTION_ANNOUNCEMENT)[:10]) all_components = prefetch_stats( obj.child_components.filter_access(user).prefetch().order()) all_components = get_paginator(request, all_components) for component in all_components: component.is_shared = None if component.project == obj else component.project language_stats = obj.stats.get_language_stats() # Show ghost translations for user languages component = None for component in all_components: if component.can_add_new_language(user, fast=True): break if component: add_ghost_translations( component, user, language_stats, GhostProjectLanguageStats, is_shared=component.is_shared, ) language_stats = sort_unicode( language_stats, lambda x: f"{user.profile.get_translation_order(x)}-{x.language}", ) components = prefetch_tasks(all_components) return render( request, "project.html", { "allow_index": True, "object": obj, "project": obj, "last_changes": last_changes, "last_announcements": last_announcements, "reports_form": ReportsForm(), "last_changes_url": urlencode({"project": obj.slug}), "language_stats": [stat.obj or stat for stat in language_stats], "search_form": SearchForm(request.user), "announcement_form": optional_form(AnnouncementForm, user, "project.edit", obj), "delete_form": optional_form( ProjectDeleteForm, user, "project.edit", obj, obj=obj), "rename_form": optional_form( ProjectRenameForm, user, "project.edit", obj, request=request, instance=obj, ), "replace_form": optional_form(ReplaceForm, user, "unit.edit", obj), "bulk_state_form": optional_form( BulkEditForm, user, "translation.auto", obj, user=user, obj=obj, project=obj, auto_id="id_bulk_%s", ), "components": components, "licenses": sorted( (component for component in all_components if component.license), key=lambda component: component.license, ), }, )
def show_subproject(request, project, subproject): obj = get_subproject(request, project, subproject) last_changes = Change.objects.for_component(obj)[:10] if (request.method == 'POST' and can_edit_subproject(request.user, obj.project)): settings_form = SubprojectSettingsForm(request.POST, instance=obj) if settings_form.is_valid(): settings_form.save() messages.success(request, _('Settings saved')) return redirect(obj) else: messages.error( request, _('Invalid settings, please check the form for errors!')) else: settings_form = SubprojectSettingsForm(instance=obj) try: sample = obj.translation_set.all()[0] source_words = sample.total_words total_strings = sample.total except IndexError: source_words = 0 total_strings = 0 if can_translate(request.user, project=obj.project): replace_form = ReplaceForm() else: replace_form = None return render( request, 'subproject.html', { 'object': obj, 'project': obj.project, 'translations': sort_objects(obj.translation_set.enabled()), 'show_language': 1, 'reports_form': ReportsForm(), 'last_changes': last_changes, 'last_changes_url': urlencode({ 'subproject': obj.slug, 'project': obj.project.slug }), 'settings_form': settings_form, 'unit_count': Unit.objects.filter(translation__subproject=obj).count(), 'words_count': obj.get_total_words(), 'language_count': Language.objects.filter( translation__subproject=obj).distinct().count(), 'strings_count': total_strings, 'source_words_count': source_words, 'replace_form': replace_form, 'search_form': SearchForm(), })
def get_counts(request, project=None, component=None): """View for work counts.""" if project is None: obj = None kwargs = {} elif component is None: obj = get_project(request, project) kwargs = {"project": obj} else: obj = get_component(request, project, component) kwargs = {"component": obj} form = ReportsForm(request.POST) if not form.is_valid(): show_form_errors(request, form) return redirect_param(obj or "home", "#reports") data = generate_counts( None if request.user.has_perm("reports.view", obj) else request.user, form.cleaned_data["start_date"], form.cleaned_data["end_date"], **kwargs) if form.cleaned_data["style"] == "json": return JsonResponse(data=data, safe=False) headers = ( "Name", "Email", "Count total", "Source words total", "Source chars total", "Target words total", "Target chars total", "Count new", "Source words new", "Source chars new", "Target words new", "Target chars new", "Count approved", "Source words approved", "Source chars approved", "Target words approved", "Target chars approved", "Count edited", "Source words edited", "Source chars edited", "Target words edited", "Target chars edited", ) if form.cleaned_data["style"] == "html": start = HTML_HEADING.format("".join("<th>{0}</th>".format(h) for h in headers)) row_start = "<tr>" cell_name = cell_count = "<td>{0}</td>\n" row_end = "</tr>" mime = "text/html" end = "</table>" else: start = "{0}\n{1} {2}\n{0}".format( RST_HEADING, " ".join("{0:40}".format(h) for h in headers[:2]), " ".join("{0:24}".format(h) for h in headers[2:]), ) row_start = "" cell_name = "{0:40} " cell_count = "{0:24} " row_end = "" mime = "text/plain" end = RST_HEADING result = [] result.append(start) for item in data: if row_start: result.append(row_start) result.append( cell_name.format(item["name"] or "Anonymous") + cell_name.format(item["email"] or "") + cell_count.format(item["count"]) + cell_count.format(item["words"]) + cell_count.format(item["chars"]) + cell_count.format(item["t_words"]) + cell_count.format(item["t_chars"]) + cell_count.format(item["count_new"]) + cell_count.format(item["words_new"]) + cell_count.format(item["chars_new"]) + cell_count.format(item["t_words_new"]) + cell_count.format(item["t_chars_new"]) + cell_count.format(item["count_approve"]) + cell_count.format(item["words_approve"]) + cell_count.format(item["chars_approve"]) + cell_count.format(item["t_words_approve"]) + cell_count.format(item["t_chars_approve"]) + cell_count.format(item["count_edit"]) + cell_count.format(item["words_edit"]) + cell_count.format(item["chars_edit"]) + cell_count.format(item["t_words_edit"]) + cell_count.format(item["t_chars_edit"])) if row_end: result.append(row_end) result.append(end) return HttpResponse("\n".join(result), content_type="{0}; charset=utf-8".format(mime))
def get_counts(request, project, component): """View for work counts""" obj = get_component(request, project, component) if not request.user.has_perm('reports.view', obj): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): show_form_errors(request, form) return redirect_param(obj, '#reports') data = generate_counts( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) headers = ( 'Name', 'Email', 'Words total', 'Count total', 'Words edited', 'Count edited', 'Words new', 'Count new', ) if form.cleaned_data['style'] == 'html': start = HTML_HEADING.format(''.join( ['<th>{0}</th>'.format(h) for h in headers])) row_start = '<tr>' cell_name = cell_count = '<td>{0}</td>\n' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '{0}\n{1} {2}\n{0}'.format( RST_HEADING, ' '.join(['{0:40}'.format(h) for h in headers[:2]]), ' '.join(['{0:12}'.format(h) for h in headers[2:]]), ) row_start = '' cell_name = '{0:40} ' cell_count = '{0:12} ' row_end = '' mime = 'text/plain' end = RST_HEADING result = [] result.append(start) for item in data: if row_start: result.append(row_start) result.append(''.join(( cell_name.format(item['name']), cell_name.format(item['email']), cell_count.format(item['words']), cell_count.format(item['count']), cell_count.format(item['words_new']), cell_count.format(item['count_new']), cell_count.format(item['words_edit']), cell_count.format(item['count_edit']), ))) if row_end: result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_credits(request, project, subproject): """View for credits""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): return redirect(obj) data = generate_credits( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) if form.cleaned_data['style'] == 'html': start = '<table>' row_start = '<tr>' language_format = '<th>{0}</th>' translator_start = '<td><ul>' translator_format = '<li><a href="mailto:{0}">{1}</a></li>' translator_end = '</ul></td>' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '' row_start = '' language_format = '* {0}\n' translator_start = '' translator_format = ' * {1} <{0}>' translator_end = '' row_end = '' mime = 'text/plain' end = '' result = [] result.append(start) for language in data: name, translators = language.popitem() result.append(row_start) result.append(language_format.format(name)) result.append(''.join(( translator_start, '\n'.join([translator_format.format(*t) for t in translators]), translator_end, ))) result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_counts(request, project=None, component=None): """View for work counts""" if project is None: obj = None kwargs = {} elif component is None: obj = get_project(request, project) kwargs = {'project': obj} else: obj = get_component(request, project, component) kwargs = {'component': obj} form = ReportsForm(request.POST) if not form.is_valid(): show_form_errors(request, form) return redirect_param(obj or 'home', '#reports') data = generate_counts( None if request.user.has_perm('reports.view', obj) else request.user, form.cleaned_data['start_date'], form.cleaned_data['end_date'], **kwargs) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) headers = ( 'Name', 'Email', 'Count total', 'Source words total', 'Source chars total', 'Target words total', 'Target chars total', 'Count new', 'Source words new', 'Source chars new', 'Target words new', 'Target chars new', 'Count approved', 'Source words approved', 'Source chars approved', 'Target words approved', 'Target chars approved', 'Count edited', 'Source words edited', 'Source chars edited', 'Target words edited', 'Target chars edited', ) if form.cleaned_data['style'] == 'html': start = HTML_HEADING.format(''.join( ['<th>{0}</th>'.format(h) for h in headers])) row_start = '<tr>' cell_name = cell_count = '<td>{0}</td>\n' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '{0}\n{1} {2}\n{0}'.format( RST_HEADING, ' '.join(['{0:40}'.format(h) for h in headers[:2]]), ' '.join(['{0:24}'.format(h) for h in headers[2:]]), ) row_start = '' cell_name = '{0:40} ' cell_count = '{0:24} ' row_end = '' mime = 'text/plain' end = RST_HEADING result = [] result.append(start) for item in data: if row_start: result.append(row_start) result.append(''.join(( cell_name.format(item['name']), cell_name.format(item['email']), cell_count.format(item['count']), cell_count.format(item['words']), cell_count.format(item['chars']), cell_count.format(item['t_words']), cell_count.format(item['t_chars']), cell_count.format(item['count_new']), cell_count.format(item['words_new']), cell_count.format(item['chars_new']), cell_count.format(item['t_words_new']), cell_count.format(item['t_chars_new']), cell_count.format(item['count_approve']), cell_count.format(item['words_approve']), cell_count.format(item['chars_approve']), cell_count.format(item['t_words_approve']), cell_count.format(item['t_chars_approve']), cell_count.format(item['count_edit']), cell_count.format(item['words_edit']), cell_count.format(item['chars_edit']), cell_count.format(item['t_words_edit']), cell_count.format(item['t_chars_edit']), ))) if row_end: result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )