Example #1
0
def _current_languages(request):
    """
    Get a list of current languages for a group and page. This list is meant to be returned to the client in the
    "session" model.
    :param request: the current request
    :return: a list of languages
    """
    url = util.get_url_from_request(request)

    languages = []
    user_id = request.authenticated_userid

    page = annotran.pages.models.Page.get_by_uri(util.strip_logout(url))

    if page is not None:

        public_translations = tran_models.get_public_translations(page)
        # public_languages = models.Language.get_public(page)

        for language in public_translations:
            languages.append({
                'groupubid': '__world__',
                'name': language.name,
                'id': language.pubid,
                'url': request.route_url('translation_read', public_language_id=language.pubid,
                                         public_group_id='__world__')
            })

        if user_id is None:
            return languages

        user = request.authenticated_user
        if user is None:
            return languages

        # return languages for all groups for that particular user
        translations_for_page = tran_models.get_page_translations(page)
        for group in user.groups:
            # list of languages for a group
            # this needs to also filter by the public group ID
            for language in translations_for_page:
                if group.id == language.group_id:
                    languages.append({
                        'groupubid': group.pubid,
                        'name': language.name,
                        'id': language.pubid,
                        'url': request.route_url('translation_read',
                                                 public_language_id=language.pubid,
                                                 public_group_id=group.pubid)
                    })
    return languages
Example #2
0
def _current_votes(request):
    """
    Get votes for all users (authors) who wrote translations on a given page in a specified language. This list is meant
    to be returned to the client in the "session" model
    :param request: the current request
    :return: a list of votes
    """
    votes = []

    url = util.get_url_from_request(request)

    page = annotran.pages.models.Page.get_by_uri(util.strip_logout(url))

    user = request.authenticated_user

    if page is not None:
        public_translations = tran_models.get_public_translations(page)
        # public_languages = models.Language.get_public(page)

        for language in public_translations:
            l_votes = annotran.votes.models.Vote.get_author_scores(page, language)
            if l_votes:
                for auth_score in l_votes:
                    votes.append({
                        'author_id': auth_score.username,
                        'avg_score': str(round(decimal.Decimal(auth_score.average), 2)),
                        'language_id': language.pubid,
                        'group_id': "__world__",
                    })

        if user is None:
            return votes

        translations_for_page = tran_models.get_page_translations(page)
        # languages_for_page = models.Language.get_by_page(page)

        for group in user.groups:
            for language in translations_for_page:
                for auth_score in annotran.votes.models.Vote.get_author_scores(page, language, group):
                    votes.append({
                        'author_id': auth_score.username,
                        'avg_score': str(round(decimal.Decimal(auth_score.average), 2)),
                        'language_id': language.pubid,
                        'group_id': group.pubid,
                    })
    return votes