def update_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if obj.do_update(request, method=request.GET.get('method', None)): messages.success(request, _('All repositories were updated.')) return redirect(obj)
def push_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if obj.do_push(request): messages.success(request, _('All repositories were pushed.')) return redirect(obj)
def reset_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not can_reset_translation(request.user, obj.subproject.project): raise PermissionDenied() return perform_reset(request, obj)
def commit_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) obj.commit_pending(request) messages.info(request, _("All pending translations were committed.")) return redirect(obj)
def save_zen(request, project, subproject, lang): ''' Save handler for zen mode. ''' translation = get_translation(request, project, subproject, lang) user_locked = translation.is_user_locked(request.user) form = TranslationForm(translation, None, request.POST) if not can_translate(request.user, translation): messages.error( request, _('You don\'t have privileges to save translations!') ) elif not form.is_valid(): messages.error(request, _('Failed to save translation!')) elif not user_locked: unit = form.cleaned_data['unit'] perform_translation(unit, form, request) return render( request, 'zen-response.html', {}, )
def search_replace(request, project, subproject, lang): translation = get_translation(request, project, subproject, lang) if not can_translate(request.user, translation): raise PermissionDenied() form = ReplaceForm(request.POST) if translation.subproject.locked or not form.is_valid(): messages.error(request, _('Failed to process form!')) return redirect(translation) search_text = form.cleaned_data['search'] replacement = form.cleaned_data['replacement'] matching = translation.unit_set.filter(target__contains=search_text) updated = matching.count() for unit in matching.iterator(): unit.target = unit.target.replace(search_text, replacement) unit.save_backend(request, change_action=Change.ACTION_REPLACE) import_message( request, updated, _('Search and replace completed, no strings were updated.'), ungettext( 'Search and replace completed, %d string was updated.', 'Search and replace completed, %d strings were updated.', updated ) ) return redirect(translation)
def zen(request, project, subproject, lang): """ Generic entry point for translating, suggesting and searching. """ translation = get_translation(request, project, subproject, lang) search_result, unitdata = get_zen_unitdata(translation, request) # Handle redirects if isinstance(search_result, HttpResponse): return search_result return render( request, "zen.html", { "object": translation, "project": translation.subproject.project, "unitdata": unitdata, "search_query": search_result["query"], "filter_name": search_result["name"], "filter_count": len(search_result["ids"]), "last_section": search_result["last_section"], "search_id": search_result["search_id"], "offset": search_result["offset"], }, )
def reset_translation(request, project, component, lang): obj = get_translation(request, project, component, lang) if not request.user.has_perm('vcs.reset', obj): raise PermissionDenied() return perform_reset(request, obj)
def auto_translation(request, project, subproject, lang): translation = get_translation(request, project, subproject, lang) project = translation.subproject.project if not can_automatic_translation(request.user, project): raise PermissionDenied() autoform = AutoForm(translation, request.user, request.POST) if translation.subproject.locked or not autoform.is_valid(): messages.error(request, _('Failed to process form!')) return redirect(translation) updated = auto_translate( request.user, translation, autoform.cleaned_data['subproject'], autoform.cleaned_data['inconsistent'], autoform.cleaned_data['overwrite'] ) import_message( request, updated, _('Automatic translation completed, no strings were updated.'), ungettext( 'Automatic translation completed, %d string was updated.', 'Automatic translation completed, %d strings were updated.', updated ) ) return redirect(translation)
def update_lock(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not obj.is_user_locked(request): obj.update_lock_time() return HttpResponse('ok')
def zen(request, project, subproject, lang): """Generic entry point for translating, suggesting and searching.""" translation = get_translation(request, project, subproject, lang) search_result, unitdata = get_zen_unitdata(translation, request) # Handle redirects if isinstance(search_result, HttpResponse): return search_result return render( request, 'zen.html', { 'object': translation, 'project': translation.subproject.project, 'unitdata': unitdata, 'search_query': search_result['query'], 'filter_name': search_result['name'], 'filter_count': len(search_result['ids']), 'last_section': search_result['last_section'], 'search_url': search_result['url'], 'offset': search_result['offset'], 'search_form': search_result['form'].reset_offset(), 'update_lock': translation.lock_user == request.user, } )
def zen(request, project, subproject, lang): ''' Generic entry point for translating, suggesting and searching. ''' translation = get_translation(request, project, subproject, lang) search_result, unitdata = get_zen_unitdata(translation, request) # Handle redirects if isinstance(search_result, HttpResponse): return search_result return render( request, 'zen.html', { 'object': translation, 'project': translation.subproject.project, 'unitdata': unitdata, 'search_query': search_result['query'], 'filter_name': search_result['name'], 'filter_count': len(search_result['ids']), 'last_section': search_result['last_section'], 'search_id': search_result['search_id'], 'offset': search_result['offset'], } )
def update_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if obj.do_update(request): messages.info(request, _("All repositories were updated.")) return redirect(obj)
def reset_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if obj.do_reset(request): messages.info(request, _("All repositories have been reset.")) return redirect(obj)
def auto_translation(request, project, subproject, lang): translation = get_translation(request, project, subproject, lang) translation.commit_pending(request) autoform = AutoForm(translation, request.POST) change = None if not translation.subproject.locked and autoform.is_valid(): if autoform.cleaned_data['inconsistent']: units = translation.unit_set.filter_type( 'inconsistent', translation ) elif autoform.cleaned_data['overwrite']: units = translation.unit_set.all() else: units = translation.unit_set.filter(translated=False) sources = Unit.objects.filter( translation__language=translation.language, translated=True ) if autoform.cleaned_data['subproject'] == '': sources = sources.filter( translation__subproject__project=translation.subproject.project ).exclude( translation=translation ) else: subprj = SubProject.objects.get( project=translation.subproject.project, slug=autoform.cleaned_data['subproject'] ) sources = sources.filter(translation__subproject=subprj) for unit in units.iterator(): update = sources.filter(checksum=unit.checksum) if update.exists(): # Get first entry update = update[0] # No save if translation is same if unit.fuzzy == update.fuzzy and unit.target == update.target: continue # Copy translation unit.fuzzy = update.fuzzy unit.target = update.target # Create signle change object for whole merge if change is None: change = Change.objects.create( action=Change.ACTION_AUTO, translation=unit.translation, user=request.user, author=request.user ) # Save unit to backend unit.save_backend(request, False, False) messages.success(request, _('Automatic translation completed.')) else: messages.error(request, _('Failed to process form!')) return redirect(translation)
def upload_translation(request, project, subproject, lang): """ Handling of translation uploads. """ obj = get_translation(request, project, subproject, lang) # Check method and lock if obj.is_locked(request.user): messages.error(request, _("Access denied.")) return redirect(obj) # Get correct form handler based on permissions form = get_upload_form(request)(request.POST, request.FILES) # Check form validity if not form.is_valid(): messages.error(request, _("Please fix errors in the form.")) return redirect(obj) # Create author name author = None if ( request.user.has_perm("trans.author_translation") and form.cleaned_data["author_name"] != "" and form.cleaned_data["author_email"] != "" ): author = "%s <%s>" % (form.cleaned_data["author_name"], form.cleaned_data["author_email"]) # Check for overwriting overwrite = False if request.user.has_perm("trans.overwrite_translation"): overwrite = form.cleaned_data["overwrite"] # Do actual import try: ret, count = obj.merge_upload( request, request.FILES["file"], overwrite, author, merge_header=form.cleaned_data["merge_header"], merge_comments=form.cleaned_data["merge_comments"], method=form.cleaned_data["method"], fuzzy=form.cleaned_data["fuzzy"], ) messages.info( request, ungettext( "Processed %d string from the uploaded files.", "Processed %d strings from the uploaded files.", count ) % count, ) if not ret: messages.warning(request, _("There were no new strings in uploaded file!")) except Exception as error: messages.error(request, _("File content merge failed: %s") % unicode(error)) report_error(error, sys.exc_info(), request) return redirect(obj)
def lock_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not obj.is_user_locked(request): obj.create_lock(request.user, True) messages.success(request, _('Translation is now locked for you.')) return redirect(obj)
def unlock_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not obj.is_user_locked(request): obj.create_lock(None) messages.info(request, _("Translation is now open for translation updates.")) return redirect(obj)
def show_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) last_changes = Change.objects.prefetch().filter( translation=obj )[:10] # Check locks obj.is_locked(request.user) # Get form form = get_upload_form(request)() # Is user allowed to do automatic translation? if request.user.has_perm('trans.automatic_translation'): autoform = AutoForm(obj) else: autoform = None # Search form for everybody search_form = SearchForm() # Review form for logged in users if request.user.is_anonymous(): review_form = None else: review_form = ReviewForm( initial={ 'date': datetime.date.today() - datetime.timedelta(days=31) } ) return render( request, 'translation.html', { 'object': obj, 'project': obj.subproject.project, 'form': form, 'autoform': autoform, 'search_form': search_form, 'review_form': review_form, 'last_changes': last_changes, 'last_changes_url': urlencode(obj.get_kwargs()), 'last_changes_rss': reverse( 'rss-translation', kwargs=obj.get_kwargs(), ), 'show_only_component': True, 'other_translations': Translation.objects.filter( subproject__project=obj.subproject.project, language=obj.language, ).exclude( pk=obj.pk ), } )
def git_status_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) return render( request, 'js/git-status.html', { 'object': obj, } )
def download_language_pack(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not obj.supports_language_pack(): raise Http404('Language pack download not supported') return download_translation_file( obj, obj.subproject.file_format_cls.language_pack )
def auto_translation(request, project, subproject, lang): translation = get_translation(request, project, subproject, lang) translation.commit_pending(request) autoform = AutoForm(translation, request.POST) change = None if not translation.subproject.locked and autoform.is_valid(): if autoform.cleaned_data['inconsistent']: units = translation.unit_set.filter_type('inconsistent', translation) elif autoform.cleaned_data['overwrite']: units = translation.unit_set.all() else: units = translation.unit_set.filter(translated=False) sources = Unit.objects.filter( translation__language=translation.language, translated=True) if autoform.cleaned_data['subproject'] == '': sources = sources.filter( translation__subproject__project=translation.subproject.project ).exclude(translation=translation) else: subprj = SubProject.objects.get( project=translation.subproject.project, slug=autoform.cleaned_data['subproject']) sources = sources.filter(translation__subproject=subprj) for unit in units.iterator(): update = sources.filter(checksum=unit.checksum) if update.exists(): # Get first entry update = update[0] # No save if translation is same if unit.fuzzy == update.fuzzy and unit.target == update.target: continue # Copy translation unit.fuzzy = update.fuzzy unit.target = update.target # Create signle change object for whole merge if change is None: change = Change.objects.create( action=Change.ACTION_AUTO, translation=unit.translation, user=request.user, author=request.user) # Save unit to backend unit.save_backend(request, False, False) messages.info(request, _('Automatic translation completed.')) else: messages.error(request, _('Failed to process form!')) return redirect(translation)
def show_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) last_changes = Change.objects.for_translation(obj)[:10] # Check locks obj.is_locked(request.user) # Get form form = get_upload_form(request.user, obj) # Is user allowed to do automatic translation? if can_automatic_translation(request.user, obj.subproject.project): autoform = AutoForm(obj, request.user) else: autoform = None # Search form for everybody search_form = SearchForm() # Review form for logged in users if request.user.is_anonymous: review_form = None else: review_form = ReviewForm() replace_form = None if can_translate(request.user, obj): replace_form = ReplaceForm() return render( request, 'translation.html', { 'allow_index': True, 'object': obj, 'project': obj.subproject.project, 'form': form, 'autoform': autoform, 'search_form': search_form, 'review_form': review_form, 'replace_form': replace_form, 'last_changes': last_changes, 'last_changes_url': urlencode(obj.get_kwargs()), 'show_only_component': True, 'other_translations': Translation.objects.prefetch().filter( subproject__project=obj.subproject.project, language=obj.language, ).exclude( pk=obj.pk ), } )
def remove_translation(request, project, component, lang): obj = get_translation(request, project, component, lang) if not request.user.has_perm('translation.delete', obj): raise PermissionDenied() return execute_locked( request, obj.component, _('Translation has been removed.'), obj.remove, user=request.user, )
def download_translation_format(request, project, component, lang, fmt): obj = get_translation(request, project, component, lang) form = SearchForm(request.GET) if form.is_valid(): units = obj.unit_set.search( form.cleaned_data, translation=obj, ) else: units = obj.unit_set.all() return download_translation_file(obj, fmt, units)
def remove_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not can_remove_translation(request.user, obj.subproject.project): raise PermissionDenied() return execute_locked( request, obj.subproject, _('Translation has been removed.'), obj.remove, user=request.user, )
def unlock_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not can_lock_translation(request.user, obj.subproject.project): raise PermissionDenied() if not obj.is_user_locked(request.user): obj.create_lock(None) messages.success( request, _('Translation is now open for translation updates.') ) return redirect(obj)
def update_lock(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if obj.update_lock(request.user, False): return JsonResponse( data={'status': True} ) response = { 'status': False, 'message': _('Failed to update lock, probably session has expired.'), } return JsonResponse(data=response)
def download_translation_format(request, project, component, lang): obj = get_translation(request, project, component, lang) form = DownloadForm(request.GET) if not form.is_valid(): show_form_errors(request, form) return redirect(obj) units = obj.unit_set.search( form.cleaned_data, translation=obj, ) return download_translation_file(obj, form.cleaned_data['format'], units)
def download_language_pack(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not obj.supports_language_pack(): raise Http404("Language pack download not supported") filename, mime = obj.store.get_language_pack_meta() # Create response response = HttpResponse(obj.store.get_language_pack(), content_type=mime) # Fill in response headers response["Content-Disposition"] = "attachment; filename=%s" % filename return response
def download_language_pack(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not obj.supports_language_pack(): raise Http404('Language pack download not supported') filename, mime = obj.store.get_language_pack_meta() # Create response response = HttpResponse(obj.store.get_language_pack(), content_type=mime) # Fill in response headers response['Content-Disposition'] = 'attachment; filename=%s' % filename return response
def save_zen(request, project, subproject, lang): """ Save handler for zen mode. """ translation = get_translation(request, project, subproject, lang) form = TranslationForm(translation, None, request.POST) if not form.is_valid(): messages.error(_("Failed to save translation!")) else: unit = form.cleaned_data["unit"] perform_translation(unit, form, request) return render(request, "zen-response.html")
def show_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) last_changes = Change.objects.prefetch().filter(translation=obj)[:10] # Check locks obj.is_locked(request) # Get form form = get_upload_form(request)() # Is user allowed to do automatic translation? if request.user.has_perm('trans.automatic_translation'): autoform = AutoForm(obj) else: autoform = None # Search form for everybody search_form = SearchForm() # Review form for logged in users if request.user.is_anonymous(): review_form = None else: review_form = ReviewForm( initial={ 'date': datetime.date.today() - datetime.timedelta(days=31) }) return render( request, 'translation.html', { 'object': obj, 'form': form, 'autoform': autoform, 'search_form': search_form, 'review_form': review_form, 'last_changes': last_changes, 'last_changes_url': urlencode(obj.get_kwargs()), 'last_changes_rss': reverse( 'rss-translation', kwargs=obj.get_kwargs(), ), })
def download_translation_format(request, project, subproject, lang, fmt): obj = get_translation(request, project, subproject, lang) try: exporter = get_exporter(fmt)(obj.subproject.project, obj.language, get_site_url(obj.get_absolute_url())) except KeyError: raise Http404('File format not supported') for unit in obj.unit_set.iterator(): exporter.add_unit(unit) # Save to response return exporter.get_response( '{{project}}-{0}-{{language}}.{{extension}}'.format(subproject))
def load_zen(request, project, component, lang): """Load additional units for zen editor.""" translation = get_translation(request, project, component, lang) search_result, unitdata = get_zen_unitdata(translation, request) # Handle redirects if isinstance(search_result, HttpResponse): return search_result return render( request, 'zen-units.html', { 'object': translation, 'unitdata': unitdata, 'search_query': search_result['query'], 'search_url': search_result['url'], 'last_section': search_result['last_section'], })
def save_zen(request, project, subproject, lang): ''' Save handler for zen mode. ''' translation = get_translation(request, project, subproject, lang) form = TranslationForm(translation, None, request.POST) if not form.is_valid(): messages.error(request, _('Failed to save translation!')) else: unit = form.cleaned_data['unit'] perform_translation(unit, form, request) return render( request, 'zen-response.html', )
def download_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) srcfilename = obj.get_filename() # Construct file name (do not use real filename as it is usually not # that useful) filename = '%s-%s-%s.%s' % (project, subproject, lang, obj.store.extension) # Create response with open(srcfilename) as handle: response = HttpResponse(handle.read(), content_type=obj.store.mimetype) # Fill in response headers response['Content-Disposition'] = 'attachment; filename=%s' % filename return response
def save_zen(request, project, component, lang): """Save handler for zen mode.""" def render_mesage(message): return render_to_string( 'message.html', {'tags': message.tags, 'message': message.message} ) translation = get_translation(request, project, component, lang) form = TranslationForm( request.user, translation, None, request.POST ) translationsum = '' if not form.is_valid(): show_form_errors(request, form) elif not request.user.has_perm('unit.edit', form.cleaned_data['unit']): messages.error( request, _('Insufficient privileges for saving translations.') ) else: unit = form.cleaned_data['unit'] perform_translation(unit, form, request) translationsum = hash_to_checksum(unit.get_target_hash()) response = { 'messages': '', 'state': 'success', 'translationsum': translationsum, } storage = get_messages(request) if storage: response['messages'] = '\n'.join([render_mesage(m) for m in storage]) tags = set([m.tags for m in storage]) if 'error' in tags: response['state'] = 'danger' elif 'warning' in tags: response['state'] = 'warning' elif 'info' in tags: response['state'] = 'info' return JsonResponse(data=response)
def download_translation(request, project, component, lang): obj = get_translation(request, project, component, lang) kwargs = {} if 'format' in request.GET or 'type' in request.GET: form = DownloadForm(request.GET) if not form.is_valid(): show_form_errors(request, form) return redirect(obj) kwargs['units'] = obj.unit_set.search( form.cleaned_data, translation=obj, ) kwargs['fmt'] = form.cleaned_data['format'] return download_translation_file(obj, **kwargs)
def search_replace(request, project, subproject=None, lang=None): if subproject is None: obj = get_project(request, project) perms = {'project': obj} unit_set = Unit.objects.filter(translation__subproject__project=obj) elif lang is None: obj = get_subproject(request, project, subproject) perms = {'project': obj.project} unit_set = Unit.objects.filter(translation__subproject=obj) else: obj = get_translation(request, project, subproject, lang) perms = {'translation': obj} unit_set = obj.unit_set if not can_translate(request.user, **perms): raise PermissionDenied() form = ReplaceForm(request.POST) if not form.is_valid(): messages.error(request, _('Failed to process form!')) return redirect(obj) search_text = form.cleaned_data['search'] replacement = form.cleaned_data['replacement'] matching = unit_set.filter(target__contains=search_text) updated = matching.count() for unit in matching.iterator(): unit.target = unit.target.replace(search_text, replacement) unit.save_backend(request, change_action=Change.ACTION_REPLACE) import_message( request, updated, _('Search and replace completed, no strings were updated.'), ungettext( 'Search and replace completed, %d string was updated.', 'Search and replace completed, %d strings were updated.', updated ) ) return redirect(obj)
def git_status_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) if not can_see_repository_status(request.user, obj.subproject.project): raise PermissionDenied() return render( request, 'js/git-status.html', { 'object': obj, 'project': obj.subproject.project, 'changes': Change.objects.filter( action__in=Change.ACTIONS_REPOSITORY, subproject=obj.subproject, )[:10], 'statuses': [(None, obj.subproject.repository.status)], })
def load_zen(request, project, subproject, lang): ''' Loads additional units for zen editor. ''' translation = get_translation(request, project, subproject, lang) search_result, unitdata = get_zen_unitdata(translation, request) return render_to_response( 'zen-units.html', RequestContext( request, { 'object': translation, 'unitdata': unitdata, 'search_query': search_result['query'], 'last_section': search_result['last_section'], } ) )
def save_zen(request, project, subproject, lang): """Save handler for zen mode.""" translation = get_translation(request, project, subproject, lang) form = TranslationForm(request.user, translation, None, request.POST) if not form.is_valid(): messages.error(request, _('Failed to save translation!')) elif not can_translate(request.user, form.cleaned_data['unit']): messages.error(request, _('Insufficient privileges for saving translations.')) else: unit = form.cleaned_data['unit'] perform_translation(unit, form, request) return render( request, 'zen-response.html', {}, )
def new_unit(request, project, component, lang): translation = get_translation(request, project, component, lang) if not request.user.has_perm('unit.add', translation): raise PermissionDenied() form = NewUnitForm(request.user, request.POST) if not form.is_valid(): show_form_errors(request, form) else: key = form.cleaned_data['key'] value = form.cleaned_data['value'][0] if translation.unit_set.filter(context=key).exists(): messages.error( request, _('Translation with this key seem to already exist!')) else: translation.new_unit(request, key, value) messages.success(request, _('New string has been added.')) return redirect(translation)
def auto_translation(request, project, component, lang): translation = get_translation(request, project, component, lang) project = translation.component.project if not request.user.has_perm('translation.auto', project): raise PermissionDenied() autoform = AutoForm(translation, request.user, request.POST) if translation.component.locked or not autoform.is_valid(): messages.error(request, _('Failed to process form!')) show_form_errors(request, autoform) return redirect(translation) auto = AutoTranslate( request.user, translation, autoform.cleaned_data['type'], request=request ) if autoform.cleaned_data['auto_source'] == 'mt': auto.process_mt( autoform.cleaned_data['engines'], autoform.cleaned_data['threshold'], ) else: auto.process_others( autoform.cleaned_data['component'], ) import_message( request, auto.updated, _('Automatic translation completed, no strings were updated.'), ungettext( 'Automatic translation completed, %d string was updated.', 'Automatic translation completed, %d strings were updated.', auto.updated ) ) return redirect(translation)
def zen(request, project, subproject, lang): ''' Generic entry point for translating, suggesting and searching. ''' translation = get_translation(request, project, subproject, lang) search_result, unitdata = get_zen_unitdata(translation, request) # Handle redirects if isinstance(search_result, HttpResponse): return search_result return render( request, 'zen.html', { 'object': translation, 'unitdata': unitdata, 'search_query': search_result['query'], 'filter_name': search_result['name'], 'filter_count': len(search_result['ids']), 'last_section': search_result['last_section'], 'search_id': search_result['search_id'], })
def zen(request, project, subproject, lang): ''' Generic entry point for translating, suggesting and searching. ''' translation = get_translation(request, project, subproject, lang) search_result, unitdata = get_zen_unitdata(translation, request) return render_to_response( 'zen.html', RequestContext( request, { 'object': translation, 'unitdata': unitdata, 'search_query': search_result['query'], 'filter_name': search_result['name'], 'filter_count': len(search_result['ids']), 'last_section': search_result['last_section'], } ) )
def parse_url(request, project, component=None, lang=None): context = {} if component is None: obj = get_project(request, project) unit_set = Unit.objects.filter(translation__component__project=obj) context['project'] = obj elif lang is None: obj = get_component(request, project, component) unit_set = Unit.objects.filter(translation__component=obj) context['component'] = obj context['project'] = obj.project else: obj = get_translation(request, project, component, lang) unit_set = obj.unit_set context['translation'] = obj context['component'] = obj.component context['project'] = obj.component.project if not request.user.has_perm('unit.edit', obj): raise PermissionDenied() return obj, unit_set, context
def save_zen(request, project, subproject, lang): """Save handler for zen mode.""" translation = get_translation(request, project, subproject, lang) user_locked = translation.is_user_locked(request.user) form = TranslationForm(request.user.profile, translation, None, request.POST) if not can_translate(request.user, translation): messages.error(request, _('You don\'t have privileges to save translations!')) elif not form.is_valid(): messages.error(request, _('Failed to save translation!')) elif not user_locked: unit = form.cleaned_data['unit'] perform_translation(unit, form, request) return render( request, 'zen-response.html', {}, )
def zen(request, project, component, lang): """Generic entry point for translating, suggesting and searching.""" translation = get_translation(request, project, component, lang) search_result, unitdata = get_zen_unitdata(translation, request) # Handle redirects if isinstance(search_result, HttpResponse): return search_result return render( request, 'zen.html', { 'object': translation, 'project': translation.component.project, 'unitdata': unitdata, 'search_query': search_result['query'], 'filter_name': search_result['name'], 'filter_count': len(search_result['ids']), 'last_section': search_result['last_section'], 'search_url': search_result['url'], 'offset': search_result['offset'], 'search_form': search_result['form'].reset_offset(), })
def git_status_translation(request, project, component, lang): obj = get_translation(request, project, component, lang) if not request.user.has_perm('meta:vcs.status', obj): raise PermissionDenied() target = obj.component if target.is_repo_link: target = target.linked_component return render( request, 'js/git-status.html', { 'object': obj, 'translation': obj, 'project': obj.component.project, 'changes': Change.objects.filter( action__in=Change.ACTIONS_REPOSITORY, component=target, )[:10], 'statuses': [(None, obj.component.repository.status)], } )
def get_object(self, request, project, subproject, lang): return get_translation(request, project, subproject, lang)
def reset_translation(request, project, subproject, lang): obj = get_translation(request, project, subproject, lang) return perform_reset(request, obj)