def get_context_data(self, **kwargs): ''' Send some additional data to the template ''' context = super(MuscleListView, self).get_context_data(**kwargs) context['active_languages'] = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return context
def get_queryset(self): ''' Filter to only active exercises in the configured languages ''' # Get the language from the URL language_code = self.request.GET.get('lang', None) if language_code: cache.clear() lang = Language.objects.filter(short_name=language_code).first() # Check if the language exists in our server trans service if lang: language = lang.id return Exercise.objects.accepted() \ .filter(language_id=language) \ .order_by('category__id') \ .select_related() else: # Handle the error print("Language Doesn't exist----") else: # Load all languages if none is specified languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return Exercise.objects.accepted() \ .filter(language__in=languages) \ .order_by('category__id') \ .select_related()
def get_context_data(self, **kwargs): """ Send some additional data to the template """ context = super(MuscleListView, self).get_context_data(**kwargs) context["active_languages"] = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return context
def get_context_data(self, **kwargs): ''' Send some additional data to the template ''' context = super(EquipmentOverviewView, self).get_context_data(**kwargs) context['exercise_languages'] = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return context
def get_context_data(self, **kwargs): ''' Send some additional data to the template ''' context = super(MuscleListView, self).get_context_data(**kwargs) context['active_languages'] = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) context['show_shariff'] = True return context
def get_queryset(self): ''' Filter to only active exercises in the configured languages ''' languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return Exercise.objects.accepted() \ .filter(language__in=languages) \ .order_by('category__id') \ .select_related()
def _get_exercises_count_by_current_language(): ''' Filter to only active exercises in the configured languages ''' languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return Exercise.objects.accepted() \ .filter(language__in=languages) \ .order_by('category__id') \ .select_related().count()
def get_queryset(self): ''' Filter to only active exercises in the configured languages ''' languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return Exercise.objects.filter(status__in=Exercise.EXERCISE_STATUS_OK) \ .filter(language__in=languages) \ .order_by('category__id') \ .select_related()
def get_context_data(self, **kwargs): ''' Send some additional data to the template ''' context = super(EquipmentOverviewView, self).get_context_data(**kwargs) context['exercise_languages'] = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) for equipment in context['equipment_list']: equipment.name = _(equipment.name) context['equipment_list'] = sorted(context['equipment_list'], key=lambda e: e.name) return context
def get_context_data(self, **kwargs): """ Send some additional data to the template """ context = super(EquipmentOverviewView, self).get_context_data(**kwargs) context['exercise_languages'] = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) for equipment in context['equipment_list']: equipment.name = _(equipment.name) context['equipment_list'] = sorted(context['equipment_list'], key=lambda e: e.name) context['show_shariff'] = True return context
def overview(request): ''' Overview with all exercises ''' languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) template_data = {} template_data.update(csrf(request)) #logger.debug(languages) categories = ExerciseCategory.objects.all() template_data['categories'] = categories template_data['active_languages'] = languages return render_to_response('overview.html', template_data, context_instance=RequestContext(request))
def search(request): """ Searches for exercises. This format is currently used by the exercise search autocompleter """ q = request.GET.get('term', None) results = [] json_response = {} if q: languages = load_item_languages( LanguageConfig.SHOW_ITEM_EXERCISES, language_code=request.GET.get('language', None) ) exercises = ( Exercise.objects.filter(name__icontains=q).filter(language__in=languages).filter( status=Exercise.STATUS_ACCEPTED ).order_by('exercise_base__category__name', 'name').distinct() ) for exercise in exercises: if exercise.main_image: image_obj = exercise.main_image image = image_obj.image.url t = get_thumbnailer(image_obj.image) thumbnail = t.get_thumbnail(aliases.get('micro_cropped')).url else: image = None thumbnail = None exercise_json = { 'value': exercise.name, 'data': { 'id': exercise.id, 'name': exercise.name, 'category': _(exercise.category.name), 'image': image, 'image_thumbnail': thumbnail } } results.append(exercise_json) json_response['suggestions'] = results return Response(json_response)
def search(request): ''' Search an exercise, return the result as a JSON list ''' # Perform the search q = request.GET.get('term', '') #user_language = load_language() languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) exercises = (Exercise.objects.filter(name__icontains=q) .filter(language__in=languages) .filter(status__in=Exercise.EXERCISE_STATUS_OK) .order_by('category__name', 'name') .distinct()) # AJAX-request, this comes from the autocompleter. Create a list and send # it back as JSON if request.is_ajax(): results = [] for exercise in exercises: exercise_json = {} exercise_json['id'] = exercise.id exercise_json['name'] = exercise.name exercise_json['value'] = exercise.name exercise_json['category'] = exercise.category.name results.append(exercise_json) data = json.dumps(results) # Return the results to the server mimetype = 'application/json' return HttpResponse(data, mimetype) # Usual search (perhaps JS disabled), present the results as normal HTML page else: template_data = {} template_data.update(csrf(request)) template_data['exercises'] = exercises template_data['search_term'] = q return render_to_response('exercise_search.html', template_data, context_instance=RequestContext(request))
def search(request): ''' Searches for exercises. This format is currently used by the exercise search autocompleter ''' q = request.GET.get('term', None) results = [] json_response = {} if q: languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES, language_code=request.GET.get('language', None)) exercises = (Exercise.objects.filter(name__icontains=q) .filter(language__in=languages) .filter(status=Exercise.STATUS_ACCEPTED) .order_by('category__name', 'name') .distinct()) for exercise in exercises: if exercise.main_image: image_obj = exercise.main_image image = image_obj.image.url t = get_thumbnailer(image_obj.image) thumbnail = t.get_thumbnail(aliases.get('micro_cropped')).url else: image = None thumbnail = None exercise_json = { 'value': exercise.name, 'data': { 'id': exercise.id, 'name': exercise.name, 'category': _(exercise.category.name), 'image': image, 'image_thumbnail': thumbnail } } results.append(exercise_json) json_response['suggestions'] = results return Response(json_response)
def get_queryset(self): ''' Filter to only active exercises in the configured languages ''' languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) language_code = self.request.GET.get('language', None) language = None if language_code: language = Language.objects.filter( short_name=language_code).first().id return Exercise.objects.accepted() \ .filter(language=language) \ .order_by('category__id') \ .select_related() return Exercise.objects.accepted() \ .filter(language__in=languages) \ .order_by('category__id') \ .select_related()
def search(request): ''' Search an exercise, return the result as a JSON list ''' # Perform the search q = request.GET.get('term', '') languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) exercises = (Exercise.objects.filter(name__icontains=q) .filter(language__in=languages) .filter(status__in=Exercise.EXERCISE_STATUS_OK) .order_by('category__name', 'name') .distinct()) results = [] for exercise in exercises: if exercise.exerciseimage_set.exists(): image_obj = exercise.exerciseimage_set.filter(is_main=True)[0] image = image_obj.image.url t = get_thumbnailer(image_obj.image) thumbnail = t.get_thumbnail(aliases.get('micro_cropped')).url else: image = None thumbnail = None exercise_json = {} exercise_json['id'] = exercise.id exercise_json['name'] = exercise.name exercise_json['value'] = exercise.name exercise_json['category'] = _(exercise.category.name) exercise_json['image'] = image exercise_json['image_thumbnail'] = thumbnail results.append(exercise_json) data = json.dumps(results) # Return the results to the server mimetype = 'application/json' return HttpResponse(data, mimetype)
def search(request): ''' Search an exercise, return the result as a JSON list ''' # Perform the search q = request.GET.get('term', '') languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) exercises = (Exercise.objects.filter(name__icontains=q).filter( language__in=languages).filter( status__in=Exercise.EXERCISE_STATUS_OK).order_by( 'category__name', 'name').distinct()) results = [] for exercise in exercises: if exercise.exerciseimage_set.exists(): image_obj = exercise.exerciseimage_set.filter(is_main=True)[0] image = image_obj.image.url t = get_thumbnailer(image_obj.image) thumbnail = t.get_thumbnail(aliases.get('micro_cropped')).url else: image = None thumbnail = None exercise_json = {} exercise_json['id'] = exercise.id exercise_json['name'] = exercise.name exercise_json['value'] = exercise.name exercise_json['category'] = _(exercise.category.name) exercise_json['image'] = image exercise_json['image_thumbnail'] = thumbnail results.append(exercise_json) data = json.dumps(results) # Return the results to the client return HttpResponse(data, content_type='application/json')
def export_exercises(request, languages): exporter = helpers.ExcercisesExporter() filename = "wger_exercises.xml" print(languages) if languages == "all": exercises_list = Exercise.objects.all() elif languages == "user": languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) filename = "wger_" + languages[0].short_name + "_exercises.xml" exercise = Exercise() exercises_list = exercise.get_exercises_by_current_language() else: return HttpResponseBadRequest() xml_export = exporter.export_exercises(exercises_list) response = HttpResponse(xml_export, content_type="application/xml") response["Content-Disposition"] = "attachment; filename=" + filename return response
def clean_name_original(self): """ Throws a validation error if the submitted name is too similar to an existing exercise's name """ name_original = self.cleaned_data['name_original'] languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) exercises = Exercise.objects.accepted() \ .filter(language__in=languages) for exercise in exercises: exercise_name = str(exercise) min_edit_dist = levenshtein(exercise_name.casefold(), name_original.casefold()) if min_edit_dist < MIN_EDIT_DISTANCE_THRESHOLD: raise ValidationError( _('%(name_original)s is too similar to existing exercise "%(exercise_name)s"' ), params={ 'name_original': name_original, 'exercise_name': exercise_name }, ) return name_original
def items(self): language_list = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return Exercise.objects.accepted().filter(language__in=language_list)
def create(request, day_pk): ''' Creates a new set. This view handles both the set form and the corresponding settings formsets ''' day = get_object_or_404(Day, pk=day_pk) if day.get_owner_object().user != request.user: return HttpResponseForbidden() # Select the correct form depending on the flavour of the request if request.flavour == 'mobile': form_class = SetFormMobile else: form_class = SetForm context = {} formsets = [] form = form_class(initial={'sets': Set.DEFAULT_SETS}) # For the mobile dropdown list we need to manually filter the exercises # by language and status if request.flavour == 'mobile': languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) form.fields['exercise_list'].queryset = Exercise.objects.accepted() \ .filter(language__in=languages) # If the form and all formsets validate, save them if request.method == "POST": form = form_class(request.POST) if form.is_valid(): for exercise in form.cleaned_data['exercises']: formset = SettingFormset(request.POST, queryset=Setting.objects.none(), prefix='exercise{0}'.format( exercise.id)) formsets.append({'exercise': exercise, 'formset': formset}) all_valid = True for formset in formsets: if not formset['formset'].is_valid(): all_valid = False if form.is_valid() and all_valid: # Manually take care of the order, TODO: better move this to the model max_order = day.set_set.select_related().aggregate( models.Max('order')) form.instance.order = (max_order['order__max'] or 0) + 1 form.instance.exerciseday = day set_obj = form.save() for formset in formsets: instances = formset['formset'].save(commit=False) for instance in instances: instance.set = set_obj instance.order = 1 instance.exercise = formset['exercise'] instance.save() return HttpResponseRedirect( reverse('manager:workout:view', kwargs={'pk': day.get_owner_object().id})) else: logger.debug(form.errors) # Other context we need context['form'] = form context['day'] = day context['max_sets'] = Set.MAX_SETS context['formsets'] = formsets context['form_action'] = reverse('manager:set:add', kwargs={'day_pk': day_pk}) context['extend_template'] = 'base_empty.html' if request.is_ajax( ) else 'base.html' return render(request, 'set/add.html', context)
def create(request, day_pk): ''' Creates a new set. This view handles both the set form and the corresponding settings formsets ''' day = get_object_or_404(Day, pk=day_pk) if day.get_owner_object().user != request.user: return HttpResponseForbidden() # Select the correct form depending on the flavour of the request if request.flavour == 'mobile': form_class = SetFormMobile else: form_class = SetForm context = {} formsets = [] form = form_class(initial={'sets': Set.DEFAULT_SETS}) # For the mobile dropdown list we need to manually filter the exercises # by language and status if request.flavour == 'mobile': languages = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) form.fields['exercise_list'].queryset = Exercise.objects.filter(language__in=languages) \ .filter(status__in=Exercise.EXERCISE_STATUS_OK) # If the form and all formsets validate, save them if request.method == "POST": form = form_class(request.POST) if form.is_valid(): for exercise in form.cleaned_data['exercises']: formset = SettingFormset(request.POST, queryset=Setting.objects.none(), prefix='exercise{0}'.format(exercise.id)) formsets.append({'exercise': exercise, 'formset': formset}) all_valid = True for formset in formsets: if not formset['formset'].is_valid(): all_valid = False if form.is_valid() and all_valid: # Manually take care of the order, TODO: better move this to the model max_order = day.set_set.select_related().aggregate(models.Max('order')) form.instance.order = (max_order['order__max'] or 0) + 1 form.instance.exerciseday = day set_obj = form.save() for formset in formsets: instances = formset['formset'].save(commit=False) for instance in instances: instance.set = set_obj instance.order = 1 instance.exercise = formset['exercise'] instance.save() return HttpResponseRedirect(reverse('workout-view', kwargs={'id': day.get_owner_object().id})) else: logger.debug(form.errors) # Other context we need context['form'] = form context['day'] = day context['max_sets'] = Set.MAX_SETS context['formsets'] = formsets context['form_action'] = reverse('set-add', kwargs={'day_pk': day_pk}) return render_to_response('set/add.html', context, context_instance=RequestContext(request))
def items(self): language_list = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return (Exercise.objects.filter(language__in=language_list) .filter(status__in=Exercise.EXERCISE_STATUS_OK))
def items(self): language_list = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES) return (Exercise.objects.filter(language__in=language_list).filter( status__in=Exercise.EXERCISE_STATUS_OK))