예제 #1
0
 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
예제 #2
0
 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()
예제 #3
0
파일: muscles.py 프로젝트: httpdss/wger
 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
예제 #4
0
 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
예제 #5
0
파일: muscles.py 프로젝트: marchiore/wger
 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
예제 #6
0
파일: exercises.py 프로젝트: helenst/wger
 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()
예제 #7
0
파일: export.py 프로젝트: Veltarn/wger
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()
예제 #8
0
파일: exercises.py 프로젝트: gelliravi/wger
 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()
예제 #9
0
 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
예제 #10
0
파일: equipment.py 프로젝트: Svn-Sp/wger
 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
예제 #11
0
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))
예제 #12
0
파일: views.py 프로젝트: jonathankamau/wger
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)
예제 #13
0
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))
예제 #14
0
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)
예제 #15
0
    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()
예제 #16
0
파일: exercises.py 프로젝트: httpdss/wger
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)
예제 #17
0
파일: exercises.py 프로젝트: qbig/wger
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')
예제 #18
0
파일: export.py 프로젝트: Veltarn/wger
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
예제 #19
0
파일: exercises.py 프로젝트: lydiaxing/wger
 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
예제 #20
0
 def items(self):
     language_list = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES)
     return Exercise.objects.accepted().filter(language__in=language_list)
예제 #21
0
파일: set.py 프로젝트: yanqian/wger
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)
예제 #22
0
파일: set.py 프로젝트: httpdss/wger
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))
예제 #23
0
    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))
예제 #24
0
파일: sitemap.py 프로젝트: qbig/wger
    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))
예제 #25
0
 def items(self):
     language_list = load_item_languages(LanguageConfig.SHOW_ITEM_EXERCISES)
     return Exercise.objects.accepted().filter(language__in=language_list)