def detail(request, slug): team = Team.get(slug, request.user) languages = get_user_languages_from_request(request) languages.append('') video_ids = team.teamvideo_set.values_list('video_id', flat=True) qs = SubtitleLanguage.objects.filter(video__in=video_ids).filter(language__in=languages) \ .exclude(Q(writelock_time__gte=datetime.datetime.now()-datetime.timedelta(seconds=WRITELOCK_EXPIRATION))) \ .extra(where=['NOT ((SELECT COUNT(vs.id) FROM videos_subtitleversion AS vs INNER JOIN videos_subtitlelanguage AS vsl ON (vsl.id = vs.language_id) WHERE vsl.is_original = %s AND vsl.video_id = videos_subtitlelanguage.video_id) <= 0 AND videos_subtitlelanguage.is_original=%s)'], params=(True, False,)) \ .distinct() qs1 = qs.filter(is_forked=False, is_original=False).filter(percent_done__lt=100, percent_done__gt=0) qs2 = qs.filter(is_forked=False, is_original=False).filter(percent_done=0) qs3 = qs.filter(is_original=True).filter(subtitleversion__isnull=True) qs4 = qs.filter(is_forked=False, is_original=False).filter(percent_done=100) qs5 = qs.filter(Q(is_forked=True)|Q(is_original=True)).filter(subtitleversion__isnull=False) extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team }) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) return object_list(request, queryset=MultyQuerySet(qs1, qs2, qs3, qs4, qs5), paginate_by=VIDEOS_ON_PAGE, template_name='teams/detail.html', extra_context=extra_context, template_object_name='team_video_lang')
def detail_members(request, slug): #just other tab of detail view q = request.REQUEST.get('q') team = Team.get(slug, request.user) qs = team.members.all() if q: qs = qs.filter(Q(user__first_name__icontains=q)|Q(user__last_name__icontains=q) \ |Q(user__username__icontains=q)|Q(user__biography__icontains=q)) extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team, 'query': q }) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) return object_list(request, queryset=qs, paginate_by=MEMBERS_ON_PAGE, template_name='teams/detail_members.html', extra_context=extra_context, template_object_name='team_member')
def edit(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if not team.is_manager(request.user): return { 'team': team } if request.method == 'POST': if request.user.is_staff: form = EditTeamFormAdmin(request.POST, request.FILES, instance=team) else: form = EditTeamForm(request.POST, request.FILES, instance=team) if form.is_valid(): form.save() messages.success(request, _(u'Your changes have been saved')) return redirect(team.get_edit_url()) else: if request.user.is_staff: form = EditTeamFormAdmin(instance=team) else: form = EditTeamForm(instance=team) return { 'form': form, 'team': team }
def edit(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if not team.is_manager(request.user): return {'team': team} if request.method == 'POST': if request.user.is_staff: form = EditTeamFormAdmin(request.POST, request.FILES, instance=team) else: form = EditTeamForm(request.POST, request.FILES, instance=team) if form.is_valid(): form.save() messages.success(request, _(u'Your changes have been saved')) return redirect(team.get_edit_url()) else: if request.user.is_staff: form = EditTeamFormAdmin(instance=team) else: form = EditTeamForm(instance=team) return {'form': form, 'team': team}
def add_video(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if not team.can_add_video(request.user): messages.error(request, _(u'You can\'t add video.')) return {'team': team} initial = { 'video_url': request.GET.get('url', ''), 'title': request.GET.get('title', '') } form = AddTeamVideoForm(team, request.POST or None, request.FILES or None, initial=initial) if form.is_valid(): obj = form.save(False) obj.added_by = request.user obj.save() return redirect(obj) return {'form': form, 'team': team}
def edit_members(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 qs = team.members.select_related() ordering = request.GET.get('o') order_type = request.GET.get('ot') if ordering == 'username' and order_type in ['asc', 'desc']: pr = '-' if order_type == 'desc' else '' qs = qs.order_by(pr + 'user__first_name', pr + 'user__last_name', pr + 'user__username') elif ordering == 'role' and order_type in ['asc', 'desc']: qs = qs.order_by(('-' if order_type == 'desc' else '') + 'is_manager') extra_context = { 'team': team, 'ordering': ordering, 'order_type': order_type } return object_list(request, queryset=qs, paginate_by=MEMBERS_ON_PAGE, template_name='teams/edit_members.html', template_object_name='members', extra_context=extra_context)
def add_video(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if not team.can_add_video(request.user): messages.error(request, _(u'You can\'t add video.')) return { 'team': team } initial = { 'video_url': request.GET.get('url', ''), 'title': request.GET.get('title', '') } form = AddTeamVideoForm(team, request.POST or None, request.FILES or None, initial=initial) if form.is_valid(): obj = form.save(False) obj.added_by = request.user obj.save() return redirect(obj) return { 'form': form, 'team': team }
def edit_members(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 qs = team.members.select_related() ordering = request.GET.get('o') order_type = request.GET.get('ot') if ordering == 'username' and order_type in ['asc', 'desc']: pr = '-' if order_type == 'desc' else '' qs = qs.order_by(pr+'user__first_name', pr+'user__last_name', pr+'user__username') elif ordering == 'role' and order_type in ['asc', 'desc']: qs = qs.order_by(('-' if order_type == 'desc' else '')+'is_manager') extra_context = { 'team': team, 'ordering': ordering, 'order_type': order_type } return object_list(request, queryset=qs, paginate_by=MEMBERS_ON_PAGE, template_name='teams/edit_members.html', template_object_name='members', extra_context=extra_context)
def detail_members(request, slug): #just other tab of detail view q = request.REQUEST.get('q') team = Team.get(slug, request.user) qs = team.members.all() if q: qs = qs.filter(Q(user__first_name__icontains=q)|Q(user__last_name__icontains=q) \ |Q(user__username__icontains=q)|Q(user__biography__icontains=q)) extra_context = widget.add_onsite_js_files({}) extra_context.update({'team': team, 'query': q}) if team.video: extra_context['widget_params'] = base_widget_params( request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) return object_list(request, queryset=qs, paginate_by=MEMBERS_ON_PAGE, template_name='teams/detail_members.html', extra_context=extra_context, template_object_name='team_member')
def videos_actions(request, slug): team = Team.get(slug, request.user) videos_ids = team.teamvideo_set.values_list('video__id', flat=True) qs = Action.objects.filter(video__pk__in=videos_ids) extra_context = {'team': team} return object_list(request, queryset=qs, paginate_by=ACTIONS_ON_PAGE, template_name='teams/videos_actions.html', extra_context=extra_context, template_object_name='videos_action')
def videos_actions(request, slug): team = Team.get(slug, request.user) videos_ids = team.teamvideo_set.values_list('video__id', flat=True) qs = Action.objects.filter(video__pk__in=videos_ids) extra_context = { 'team': team } return object_list(request, queryset=qs, paginate_by=ACTIONS_ON_PAGE, template_name='teams/videos_actions.html', extra_context=extra_context, template_object_name='videos_action')
def promote_member(request, slug, user_pk): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if team.is_manager(request.user): user = get_object_or_404(User, pk=user_pk) if not user == request.user: TeamMember.objects.filter(team=team, user=user).update(is_manager=True) else: messages.error(request, _('You can\'t promote to manager')) return redirect('teams:edit_members', team.slug)
def detail(request, slug): team = Team.get(slug, request.user) languages = get_user_languages_from_request(request) languages.extend([l[:l.find('-')] for l in languages if l.find('-') > -1]) langs_pairs = [] for l1 in languages: for l0 in languages: if not l1 == l0: langs_pairs.append('%s_%s' % (l1, l0)) qs = TeamVideoLanguagePair.objects.filter(language_pair__in=langs_pairs, team=team) \ .select_related('team_video', 'team_video__video') lqs = TeamVideoLanguage.objects.filter(team=team).select_related('team_video', 'team_video__video') qs1 = qs.filter(percent_complete__gt=0,percent_complete__lt=100) qs2 = qs.filter(percent_complete=0) qs3 = lqs.filter(is_original=True, is_complete=False) qs4 = lqs.filter(is_original=False, forked=True, is_complete=True) mqs = TeamMultyQuerySet(qs1, qs2, qs3, qs4) extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team, 'can_edit_video': team.can_edit_video(request.user) }) if len(mqs) == 0: mqs = TeamMultyQuerySet(TeamVideoLanguagePair.objects.filter(team=team) \ .select_related('team_video', 'team_video__video')) general_settings = {} add_general_settings(request, general_settings) extra_context['general_settings'] = json.dumps(general_settings) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) return object_list(request, queryset=mqs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/detail.html', extra_context=extra_context, template_object_name='team_video_md')
def deny_application(request, slug, user_pk): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if team.can_approve_application(request.user): try: Application.objects.get(team=team, user=user_pk).deny() messages.success(request, _(u'Application denied.')) except Application.DoesNotExist: messages.error(request, _(u'Application does not exist.')) else: messages.error(request, _(u'You can\'t deny application.')) return redirect('teams:applications', team.pk)
def applications(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 qs = team.applications.all() extra_context = {'team': team} return object_list(request, queryset=qs, paginate_by=APLICATIONS_ON_PAGE, template_name='teams/applications.html', template_object_name='applications', extra_context=extra_context)
def members_actions(request, slug): team = Team.get(slug, request.user) user_ids = team.members.values_list('user__id', flat=True) qs = Action.objects.filter(user__pk__in=user_ids) extra_context = { 'team': team } return object_list(request, queryset=qs, paginate_by=ACTIONS_ON_PAGE, template_name='teams/members_actions.html', extra_context=extra_context, template_object_name='action')
def add_videos(request, slug): team = Team.get(slug, request.user) resp = _check_add_video_permission(request, team) if resp: return resp form = AddTeamVideosFromFeedForm(team, request.user, request.POST or None) if form.is_valid(): team_videos = form.save() messages.success(request, form.success_message() % {'count': len(team_videos)}) return redirect(team) return { 'form': form, 'team': team, }
def applications(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 qs = team.applications.all() extra_context = { 'team': team } return object_list(request, queryset=qs, paginate_by=APLICATIONS_ON_PAGE, template_name='teams/applications.html', template_object_name='applications', extra_context=extra_context)
def edit_videos(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 qs = team.teamvideo_set.all() extra_context = { 'team': team, } return object_list(request, queryset=qs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/edit_videos.html', template_object_name='videos', extra_context=extra_context)
def edit_logo(request, slug): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 output = {} form = EditLogoForm(request.POST, instance=team, files=request.FILES) if form.is_valid(): try: form.save() output['url'] = str(team.logo_thumbnail()) except S3StorageError: output['error'] = {'logo': ugettext(u'File server unavailable. Try later. You can edit some other information without any problem.')} else: output['error'] = form.get_errors() return HttpResponse('<textarea>%s</textarea>' % json.dumps(output))
def remove_member(request, slug, user_pk): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if team.is_manager(request.user): user = get_object_or_404(User, pk=user_pk) if not user == request.user: TeamMember.objects.filter(team=team, user=user).delete() return {'success': True} else: return { 'success': False, 'error': ugettext('You can\'t remove youself') } else: return {'success': False, 'error': ugettext('You can\'t remove user')}
def detail(request, slug, is_debugging=False, languages=None): team = Team.get(slug, request.user) if languages is None: languages = get_user_languages_from_request(request) if bool(is_debugging): languages = request.GET.get("langs", "").split(",") data = team.get_videos_for_languages(languages, CUTTOFF_DUPLICATES_NUM_VIDEOS_ON_TEAMS) mqs = data['videos'] extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team, 'can_edit_video': team.can_edit_video(request.user) }) general_settings = {} add_general_settings(request, general_settings) extra_context['general_settings'] = json.dumps(general_settings) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) if bool(is_debugging) and request.user.is_staff: extra_context.update(data) extra_context.update({ 'languages': languages, }) return render_to_response("teams/detail-debug.html", extra_context, RequestContext(request)) return object_list(request, queryset=mqs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/detail.html', extra_context=extra_context, template_object_name='team_video_md')
def detail_old(request, slug, is_debugging=False, languages=None): team = Team.get(slug, request.user) if languages is None: languages = get_user_languages_from_request(request) if bool(is_debugging): languages = request.GET.get("langs", "").split(",") data = team.get_videos_for_languages( languages, CUTTOFF_DUPLICATES_NUM_VIDEOS_ON_TEAMS) mqs = data['videos'] extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team, 'can_edit_video': team.can_edit_video(request.user) }) general_settings = {} add_general_settings(request, general_settings) extra_context['general_settings'] = json.dumps(general_settings) if team.video: extra_context['widget_params'] = base_widget_params( request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) if bool(is_debugging) and request.user.is_staff: extra_context.update(data) extra_context.update({ 'languages': languages, }) return render_to_response("teams/detail-debug.html", extra_context, RequestContext(request)) return object_list(request, queryset=mqs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/detail.html', extra_context=extra_context, template_object_name='team_video_md')
def promote_member(request, slug, user_pk): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 error = None msg = _("Team member role changed.") if team.is_manager(request.user): user = get_object_or_404(User, pk=user_pk) if not user == request.user: new_role = request.POST.get("role", TeamMember.ROLE_MANAGER) if new_role not in [x[0] for x in TeamMember.ROLES]: error = _('Not a valid role') else: TeamMember.objects.filter(team=team, user=user).update(role=new_role) else: error = _('You can\'t promote to manager') if request.is_ajax(): return _json_response({"success":not error, "msg": error or msg}) elif error: messages.error(request, error) return redirect('teams:edit_members', team.slug)
def completed_videos(request, slug): team = Team.get(slug, request.user) qs = SearchQuerySet().models(TeamVideo).filter(team_id=team.id) \ .filter(is_complete=True).order_by('-video_complete_date') extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team }) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) return object_list(request, queryset=qs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/completed_videos.html', extra_context=extra_context, template_object_name='team_video')
def remove_member(request, slug, user_pk): team = Team.get(slug, request.user) if not team.is_member(request.user): raise Http404 if team.is_manager(request.user): user = get_object_or_404(User, pk=user_pk) if not user == request.user: TeamMember.objects.filter(team=team, user=user).delete() return { 'success': True } else: return { 'success': False, 'error': ugettext('You can\'t remove youself') } else: return { 'success': False, 'error': ugettext('You can\'t remove user') }
def completed_videos(request, slug): team = Team.get(slug, request.user) qs = team.teamvideo_set.exclude(video__complete_date__isnull=True) \ .select_related('video').order_by('-video__complete_date') extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team }) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) qs = qs._clone(CompletedVideosQS) return object_list(request, queryset=qs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/completed_videos.html', extra_context=extra_context, template_object_name='team_video')
def add_video(request, slug): team = Team.get(slug, request.user) resp = _check_add_video_permission(request, team) if resp: return resp initial = { 'video_url': request.GET.get('url', ''), 'title': request.GET.get('title', '') } form = AddTeamVideoForm(team, request.user, request.POST or None, request.FILES or None, initial=initial) if form.is_valid(): obj = form.save(False) obj.added_by = request.user obj.save() return redirect(obj) return { 'form': form, 'team': team }
def completed_videos(request, slug): team = Team.get(slug, request.user) qs = team.teamvideo_set.exclude(video__complete_date__isnull=True) \ .select_related('video').order_by('-video__complete_date') extra_context = widget.add_onsite_js_files({}) extra_context.update({'team': team}) if team.video: extra_context['widget_params'] = base_widget_params( request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) qs = qs._clone(CompletedVideosQS) return object_list(request, queryset=qs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/completed_videos.html', extra_context=extra_context, template_object_name='team_video')
def detail(request, slug, is_debugging=False): team = Team.get(slug, request.user) languages = get_user_languages_from_request(request) if bool(is_debugging): languages = request.GET.get("langs", "").split(",") languages.extend([l[:l.find('-')] for l in languages if l.find('-') > -1]) langs_pairs = [] for l1 in languages: for l0 in languages: if not l1 == l0: langs_pairs.append('%s_%s' % (l1, l0)) qs = TeamVideoLanguagePair.objects.filter(language_pair__in=langs_pairs, team=team) \ .select_related('team_video', 'team_video__video') lqs = TeamVideoLanguage.objects.filter(team=team).select_related('team_video', 'team_video__video') qs1 = qs.filter(percent_complete__gt=0,percent_complete__lt=100) qs2 = qs.filter(percent_complete=0) qs3 = lqs.filter(is_original=True, is_complete=False, language__in=languages) qs4 = lqs.filter(is_original=False, forked=True, is_complete=False, language__in=languages) mqs = TeamMultyQuerySet(qs1, qs2, qs3, qs4) extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team, 'can_edit_video': team.can_edit_video(request.user) }) total_count = TeamVideo.objects.filter(team=team).count() additional = TeamVideoLanguagePair.objects.none() all_videos = TeamVideo.objects.filter(team=team).select_related('video') if total_count == 0: mqs = all_videos else: if total_count < CUTTOFF_DUPLICATES_NUM_VIDEOS_ON_TEAMS: additional = all_videos.exclude(pk__in=[x.id for x in mqs ]) else: additional = all_videos mqs = TeamMultyQuerySet(qs1, qs2, qs3, qs4 , additional) general_settings = {} add_general_settings(request, general_settings) extra_context['general_settings'] = json.dumps(general_settings) if team.video: extra_context['widget_params'] = base_widget_params(request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) if bool(is_debugging) and request.user.is_staff: extra_context.update({ 'languages': languages, 'qs': qs, 'lqs': lqs, 'qs1': qs1, 'qs2': qs2, 'qs3': qs3, 'qs4': qs4, 'mqs':mqs, 'mqs_count': len(mqs), 'additional_count': additional.count(), 'additional': additional[:50] }) return render_to_response("teams/detail-debug.html", extra_context, RequestContext(request)) return object_list(request, queryset=mqs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/detail.html', extra_context=extra_context, template_object_name='team_video_md')
def detail(request, slug, is_debugging=False): team = Team.get(slug, request.user) languages = get_user_languages_from_request(request) if bool(is_debugging): languages = request.GET.get("langs", "").split(",") languages.extend([l[:l.find('-')] for l in languages if l.find('-') > -1]) langs_pairs = [] for l1 in languages: for l0 in languages: if not l1 == l0: langs_pairs.append('%s_%s' % (l1, l0)) qs = TeamVideoLanguagePair.objects.filter(language_pair__in=langs_pairs, team=team) \ .select_related('team_video', 'team_video__video') lqs = TeamVideoLanguage.objects.filter(team=team).select_related( 'team_video', 'team_video__video') qs1 = qs.filter(percent_complete__gt=0, percent_complete__lt=100) qs2 = qs.filter(percent_complete=0) qs3 = lqs.filter(is_original=True, is_complete=False, language__in=languages) qs4 = lqs.filter(is_original=False, forked=True, is_complete=False, language__in=languages) mqs = TeamMultyQuerySet(qs1, qs2, qs3, qs4) extra_context = widget.add_onsite_js_files({}) extra_context.update({ 'team': team, 'can_edit_video': team.can_edit_video(request.user) }) total_count = TeamVideo.objects.filter(team=team).count() additional = TeamVideoLanguagePair.objects.none() all_videos = TeamVideo.objects.filter(team=team).select_related('video') if total_count == 0: mqs = all_videos else: if total_count < CUTTOFF_DUPLICATES_NUM_VIDEOS_ON_TEAMS: additional = all_videos.exclude(pk__in=[x.id for x in mqs]) else: additional = all_videos mqs = TeamMultyQuerySet(qs1, qs2, qs3, qs4, additional) general_settings = {} add_general_settings(request, general_settings) extra_context['general_settings'] = json.dumps(general_settings) if team.video: extra_context['widget_params'] = base_widget_params( request, { 'video_url': team.video.get_video_url(), 'base_state': {} }) if bool(is_debugging) and request.user.is_staff: extra_context.update({ 'languages': languages, 'qs': qs, 'lqs': lqs, 'qs1': qs1, 'qs2': qs2, 'qs3': qs3, 'qs4': qs4, 'mqs': mqs, 'mqs_count': len(mqs), 'additional_count': additional.count(), 'additional': additional[:50] }) return render_to_response("teams/detail-debug.html", extra_context, RequestContext(request)) return object_list(request, queryset=mqs, paginate_by=VIDEOS_ON_PAGE, template_name='teams/detail.html', extra_context=extra_context, template_object_name='team_video_md')