def _get_volunteer_sqs(self, request, user): ''' Return the search query set for videos which would be relevant to volunteer for writing subtitles. ''' user_langs = get_user_languages_from_request(request) rest_langs = dict(settings.ALL_LANGUAGES).keys() for lang in user_langs: rest_langs.remove(lang) relevant = SearchQuerySet().result_class(VideoSearchResult) \ .models(Video).filter(video_language_exact__in=user_langs) \ .filter_or(languages_exact__in=user_langs) \ .order_by('-requests_count') # Rest of the videos, which most probably would not be much useful # for the volunteer rest = SearchQuerySet().result_class(VideoSearchResult) \ .exclude(languages_exact__in=user_langs) \ .exclude(video_language_exact__in=user_langs) \ .order_by('-requests_count') return relevant, rest
def volunteer_page(request): # Get the user comfort languages list user_langs = get_user_languages_from_request(request) relevant = SearchQuerySet().result_class(VideoSearchResult) \ .models(Video).filter(video_language_exact__in=user_langs) \ .filter_or(languages_exact__in=user_langs) \ .order_by('-requests_count') featured_videos = relevant.filter( featured__gt=datetime.datetime(datetime.MINYEAR, 1, 1)) \ .order_by('-featured')[:5] popular_videos = relevant.order_by('-week_views')[:5] latest_videos = relevant.order_by('-edited')[:15] requested_videos = relevant.filter(requests_exact__in=user_langs)[:5] context = { 'featured_videos': featured_videos, 'popular_videos': popular_videos, 'latest_videos': latest_videos, 'requested_videos': requested_videos, 'user_langs':user_langs, } return render_to_response('videos/volunteer.html', context, context_instance=RequestContext(request))
def index(request): accept = request.META.get('HTTP_ACCEPT_LANGUAGE', '') user_langs = get_user_languages_from_request(request) if 'q' in request.REQUEST: form = SearchForm(request.user, user_langs, request.REQUEST) else: form = SearchForm(request.user, user_langs) qs = SearchQuerySet().none() display_mode = 'all' if form.is_valid(): qs = form.search_qs(SearchQuerySet().models(Video)) display_mode = form.cleaned_data.get('display', 'all') if settings.HAYSTACK_SEARCH_ENGINE == 'dummy' and settings.DEBUG: q = request.REQUEST.get('q', '') qs = Video.objects.filter(title__icontains=q) context = { 'query': request.REQUEST.get('q', ''), 'form': form, 'display_mode': display_mode } return object_list(request, queryset=qs, paginate_by=30, template_name='search/index.html', template_object_name='result', extra_context=context)
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 fetch_start_dialog_contents(self, request, video_id): my_languages = get_user_languages_from_request(request) my_languages.extend([l[:l.find('-')] for l in my_languages if l.find('-') > -1]) video_languages = NullRpc.STUB_VIDEO_LANG original_language = "en" video_languages = [] return { 'my_languages': my_languages, 'video_languages': video_languages, 'original_language': original_language }
def fetch_start_dialog_contents(self, request, video_id): my_languages = get_user_languages_from_request(request) my_languages.extend([l[:l.find('-')] for l in my_languages if l.find('-') > -1]) video = models.Video.objects.get(video_id=video_id) video_languages = [self._language_summary(l) for l in video.subtitlelanguage_set.all()] original_language = None if video.subtitle_language(): original_language = video.subtitle_language().language return { 'my_languages': my_languages, 'video_languages': video_languages, 'original_language': original_language }
def load_requested_page_volunteer(self, page, request, user): user_langs = get_user_languages_from_request(request) rel, rest = self._get_volunteer_sqs(request, user) rel = rel.filter(requests_exact__in=user_langs) rest = rest.filter(requests_exact__in=user_langs) count = rel.count() + rest.count() mqs = MultiQuerySet(rel, rest) mqs.set_count(count) return render_page(page, mqs, request=request)
def fetch_start_dialog_contents(self, request, video_id): my_languages = get_user_languages_from_request(request) my_languages.extend( [l[:l.find('-')] for l in my_languages if l.find('-') > -1]) video_languages = NullRpc.STUB_VIDEO_LANG original_language = "en" video_languages = [] return { 'my_languages': my_languages, 'video_languages': video_languages, 'original_language': original_language }
def select_language_dialog(context, option=None): user_langs = get_user_languages_from_request(context['request']) initial_data = {} for i, l in enumerate(user_langs): initial_data['language%s' % (i + 1)] = l form = SelectLanguageForm(initial=initial_data) return { 'form': form, 'force_ask': (option == 'force') and _user_needs_languages(context) }
def select_language_dialog(context, option=None): user_langs = get_user_languages_from_request(context['request']) initial_data = {} for i, l in enumerate(user_langs): initial_data['language%s' % (i+1)] = l form = SelectLanguageForm(initial=initial_data) return { 'form': form, 'force_ask': (option == 'force') and _user_needs_languages(context) }
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 fetch_request_dialog_contents(self, request, video_id): """ Fetch the contents for creating a dialog to create request subtitles form. """ my_languages = get_user_languages_from_request(request) my_languages.extend([l[: l.find("-")] for l in my_languages if l.find("-") > -1]) # List of language-code tuples all_languages = sorted(LANGUAGES_MAP.items()) ##TODO: Filter all_languages according to already submitted requests # after creation of SubtitleRequest Model return {"my_languages": my_languages, "all_languages": all_languages}
def setup_subtitle_language_code(self): if self.user.is_authenticated(): user_langs = [l.language for l in self.user.get_languages()] else: user_langs = get_user_languages_from_request(self.request) if not user_langs: user_langs = ['en'] def sort_key(choice): code, label = choice if code in user_langs: return user_langs.index(code) else: return len(user_langs) field = self.fields['subtitle_language_code'] field.choices = sorted(get_language_choices(), key=sort_key)
def guess_best_lang(self, request=None): if self.preferred_language: return self.preferred_language user_languages = self.get_languages() if user_languages: return user_languages[0] if request: languages = translation.get_user_languages_from_request(request) if languages: return languages[0] return 'en'
def guess_best_lang(self, request=None): if self.preferred_language: return self.preferred_language user_languages = list(self.userlanguage_set.all()) if user_languages: return user_languages[0].language if request: languages = translation.get_user_languages_from_request(request) if languages: return languages[0] return 'en'
def show_widget(self, request, video_url, is_remote, base_state=None, additional_video_urls=None): try: video_id = video_cache.get_video_id(video_url) except Exception as e: # for example, private youtube video or private widgets return {"error_msg": unicode(e)} if video_id is None: return None error = self._check_visibility_policy_for_widget(request, video_id) if error: return error video_urls, video_id, error = self._get_video_urls_for_widget( video_url, video_id) if error: return error resp = { 'video_id': video_id, 'subtitles': None, 'video_urls': video_urls, 'is_moderated': video_cache.get_is_moderated(video_id), 'filename': video_cache.get_download_filename(video_id), } if additional_video_urls is not None: for url in additional_video_urls: video_cache.associate_extra_url(url, video_id) add_general_settings(request, resp) if request.user.is_authenticated(): resp['username'] = request.user.username resp['drop_down_contents'] = video_cache.get_video_languages(video_id) resp['my_languages'] = get_user_languages_from_request(request) resp['subtitles'] = self._get_subtitles_for_widget( request, base_state, video_id, is_remote) return resp
def fetch_request_dialog_contents(self, request, video_id): ''' Fetch the contents for creating a dialog to create request subtitles form. ''' my_languages = get_user_languages_from_request(request) my_languages.extend( [l[:l.find('-')] for l in my_languages if l.find('-') > -1]) # List of language-code tuples all_languages = sorted(LANGUAGES_MAP.items()) ##TODO: Filter all_languages according to already submitted requests # after creation of SubtitleRequest Model return {'my_languages': my_languages, 'all_languages': all_languages}
def fetch_start_dialog_contents(self, request, video_id): my_languages = get_user_languages_from_request(request) my_languages.extend( [l[:l.find('-')] for l in my_languages if l.find('-') > -1]) video = models.Video.objects.get(video_id=video_id) video_languages = [ language_summary(l) for l in video.subtitlelanguage_set.all() ] original_language = None if video.subtitle_language(): original_language = video.subtitle_language().language return { 'my_languages': my_languages, 'video_languages': video_languages, 'original_language': original_language }
def select_language_dialog(context, option=None, hide_link=False, redirect=None, display_only=False, show_current=False): user_langs = get_user_languages_from_request(context['request'], readable=True, guess=False) current = {} for i, l in enumerate(user_langs): current['language%s' % (i+1)] = l return { 'current': current, 'force_ask': (option == 'force') and _user_needs_languages(context), 'hide_link': hide_link, 'redirect': redirect, 'show_current': show_current, 'request':context['request'] }
def _get_volunteer_sqs(self, request, user): ''' Return the search query set for videos which would be relevent to volunteer for writing subtitles. ''' user_langs = get_user_languages_from_request(request) relevent = SearchQuerySet().result_class(VideoSearchResult) \ .models(Video).filter(video_language__in=user_langs) \ .filter_or(languages__in=user_langs) ## The rest of videos which are NOT relevent #rest = SearchQuerySet().result_class(VideoSearchResult) \ #.models(Video).filter(video_language__in=user_langs) \ #.filter_or(languages__in=user_langs) return relevent
def show_widget(self, request, video_url, is_remote, base_state=None, additional_video_urls=None): video_id = video_cache.get_video_id(video_url) if video_id is None: # for example, private youtube video. return None try: video_urls = video_cache.get_video_urls(video_id) except models.Video.DoesNotExist: video_cache.invalidate_video_id(video_url) video_id = video_cache.get_video_id(video_url) video_urls = video_cache.get_video_urls(video_id) return_value = {"video_id": video_id, "subtitles": None} return_value["video_urls"] = video_urls return_value["is_moderated"] = video_cache.get_is_moderated(video_id) if additional_video_urls is not None: for url in additional_video_urls: video_cache.associate_extra_url(url, video_id) add_general_settings(request, return_value) if request.user.is_authenticated(): return_value["username"] = request.user.username return_value["drop_down_contents"] = video_cache.get_video_languages(video_id) return_value["my_languages"] = get_user_languages_from_request(request) # keeping both forms valid as backwards compatibility layer lang_code = base_state and base_state.get("language_code", base_state.get("language", None)) if base_state is not None and lang_code is not None: lang_pk = base_state.get("language_pk", None) if lang_pk is None: lang_pk = video_cache.pk_for_default_language(video_id, lang_code) subtitles = self._autoplay_subtitles(request.user, video_id, lang_pk, base_state.get("revision", None)) return_value["subtitles"] = subtitles else: if is_remote: autoplay_language = self._find_remote_autoplay_language(request) language_pk = video_cache.pk_for_default_language(video_id, autoplay_language) if autoplay_language is not None: subtitles = self._autoplay_subtitles(request.user, video_id, language_pk, None) return_value["subtitles"] = subtitles return return_value
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 volunteer_page(request): user = request.user # Get the user comfort languages list user_langs = get_user_languages_from_request(request) relevevent = SearchQuerySet().result_class(VideoSearchResult) \ .models(Video).filter(video_language__in=user_langs) \ .filter_or(languages__in=user_langs) featured_videos = relevevent.order_by('-featured')[:5] popular_videos = relevevent.order_by('-week_views')[:5] latest_videos = relevevent.order_by('-edited')[:15] context = { 'featured_videos': featured_videos, 'popular_videos': popular_videos, 'latest_videos': latest_videos, 'user_langs':user_langs, } return render_to_response('videos/volunteer.html', context, context_instance=RequestContext(request))
def user_languages(request): return { 'USER_LANGUAGES': get_user_languages_from_request(request) }
def show_widget(self, request, video_url, is_remote, base_state=None, additional_video_urls=None): video_id = video_cache.get_video_id(video_url) if video_id is None: # for example, private youtube video. return None try: video_urls = video_cache.get_video_urls(video_id) except models.Video.DoesNotExist: video_cache.invalidate_video_id(video_url) video_id = video_cache.get_video_id(video_url) video_urls = video_cache.get_video_urls(video_id) return_value = { 'video_id': video_id, 'subtitles': None, } return_value['video_urls'] = video_urls return_value['is_moderated'] = video_cache.get_is_moderated(video_id) if additional_video_urls is not None: for url in additional_video_urls: video_cache.associate_extra_url(url, video_id) add_general_settings(request, return_value) if request.user.is_authenticated(): return_value['username'] = request.user.username return_value['drop_down_contents'] = \ video_cache.get_video_languages(video_id) return_value['my_languages'] = \ get_user_languages_from_request(request) # keeping both forms valid as backwards compatibility layer lang_code = base_state and base_state.get( "language_code", base_state.get("language", None)) if base_state is not None and lang_code is not None: lang_pk = base_state.get('language_pk', None) if lang_pk is None: lang_pk = video_cache.pk_for_default_language( video_id, lang_code) subtitles = self._autoplay_subtitles( request.user, video_id, lang_pk, base_state.get('revision', None)) return_value['subtitles'] = subtitles else: if is_remote: autoplay_language = self._find_remote_autoplay_language( request) language_pk = video_cache.pk_for_default_language( video_id, autoplay_language) if autoplay_language is not None: subtitles = self._autoplay_subtitles( request.user, video_id, language_pk, None) return_value['subtitles'] = subtitles return return_value
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 get_user_languages(self, user, request): return languages_with_labels(get_user_languages_from_request(request))
def __init__(self, request, *args, **kwargs): super(ModerationListSearchForm, self).__init__(request.GET, *args, **kwargs) self.user_langs = get_user_languages_from_request(request)
def __init__(self,request, *args, **kwargs): super(ModerationListSearchForm, self).__init__(request.GET, *args, **kwargs) self.user_langs = get_user_languages_from_request(request)
def load_video_languages(self, video_id, user, request): """ Load langs for search pages. Will take into consideration the languages the user speaks. Ordering is user language, then completness , then percentage then name of the language. We're sorting all in memory since those sets should be pretty small """ LANGS_COUNT = 7 try: video = Video.objects.get(pk=video_id) except Video.DoesNotExist: video = None user_langs = get_user_languages_from_request(request) langs = list(video.subtitlelanguage_set.filter(subtitle_count__gt=0).order_by('-subtitle_count')) first_languages = [] #user languages and original other_languages = [] #other languages already ordered by subtitle_count for l in langs: if l.language in user_langs or l.is_original: first_languages.append(l) else: other_languages.append(l) def _cmp_first_langs(lang1, lang2): """ languages should original in user_langs """ in_user_language_cmp = cmp(lang1.language in user_langs, lang2.language in user_langs) #one is not in user language if in_user_language_cmp != 0: return in_user_language_cmp if lang1.language in user_langs: #both in user's language, sort alphabetically return cmp(lang2.get_language_display(), lang1.get_language_display()) #one should be original return cmp(lang1.is_original, lang2.is_original) first_languages.sort(cmp=_cmp_first_langs, reverse=True) #fill first languages to LANGS_COUNT if len(first_languages) < LANGS_COUNT: other_languages = other_languages[:(LANGS_COUNT-len(first_languages))] other_languages.sort(lambda l1, l2: cmp(l1.get_language_display(), l2.get_language_display())) langs = first_languages + other_languages else: langs = first_languages[:LANGS_COUNT] context = { 'video': video, 'languages': langs } return { 'content': render_to_string('videos/_video_languages.html', context) }
def get_user_languages(self, user, request): return get_user_languages_from_request(request, with_names=True)
def load_video_languages(self, video_id, user, request): """ Load langs for search pages. Will take into consideration the languages the user speaks. Ordering is user language, then completness , then percentage then name of the language. We're sorting all in memory since those sets should be pretty small """ LANGS_COUNT = 7 try: video = Video.objects.get(pk=video_id) except Video.DoesNotExist: video = None user_langs = get_user_languages_from_request(request) langs = list(video.newsubtitlelanguage_set.having_nonempty_tip()) first_languages = [] #user languages and original other_languages = [ ] #other languages already ordered by subtitle_count for language in langs: if language.language_code in user_langs or language.is_primary_audio_language( ): first_languages.append(language) else: other_languages.append(language) def _cmp_first_langs(lang1, lang2): """ languages should original in user_langs """ in_user_language_cmp = cmp(lang1.language_code in user_langs, lang2.language_code in user_langs) #one is not in user language if in_user_language_cmp != 0: return in_user_language_cmp if lang1.language_code in user_langs: #both in user's language, sort alphabetically return cmp(lang2.get_language_code_display(), lang1.get_language_code_display()) #one should be original return cmp(lang1.is_original, lang2.is_original) first_languages.sort(cmp=_cmp_first_langs, reverse=True) #fill first languages to LANGS_COUNT if len(first_languages) < LANGS_COUNT: other_languages = other_languages[:(LANGS_COUNT - len(first_languages))] other_languages.sort( lambda l1, l2: cmp(l1.get_language_code_display(), l2.get_language_code_display())) langs = first_languages + other_languages else: langs = first_languages[:LANGS_COUNT] context = {'video': video, 'languages': langs} return { 'content': render_to_string('videos/_video_languages.html', context) }
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')